TTS WebUI Piper TTS
The no-nonsense, runs-on-anything TTS
- audio
- wav_path
- metadata_json
Piper is the TTS you install when you don't want to think about TTS. It comes out of the Rhasspy / open-source voice-assistant ecosystem, it's a small VITS-based model that runs happily on CPU, and it's been the go-to "fast, boring, reliable" speech engine for years. This node is the pack's thin client for it. There are no cloning tricks and no fancy style transfer - you pick a voice, type your text, and get clean, consistent speech back almost instantly.
How it works
Standard pack shape: the node POSTs an OpenAI-style body to http://127.0.0.1:7778/v1/audio/speech with model: "piper", and the TTS WebUI server does the synthesis. Piper's voices are fixed per model file - each one is a specific trained voice (a lot of them community-built), and the server has whichever ones you've installed. No reference audio, no description conditioning. That's the whole deal.
The inputs that matter
- voice_name - which Piper voice to use. This is the important one: Piper has no "random" fallback that makes sense here, so the voice has to exist on the server. Common examples are things like
en_US-amy-mediumoren_GB-alan-medium. - speed - 0.25 to 4.0, default 1.0.
- noise_scale (default 0.667) - how much randomness/expressiveness the synthesis gets. Lower = flatter and more robotic, higher = more natural but noisier.
- noise_w (default 0.8) - a second noise term that affects prosody and duration variation. Between this and
noise_scale, you've got the two classic VITS knobs. - sentence_silence (default 0.2) - seconds of silence inserted between sentences. The setting people actually tweak when the pacing feels rushed.
Outputs
audio (AUDIO) into a preview/save node, wav_path (STRING) when also_save_wav is on, and metadata_json (STRING) with the request details.
Installing it
ComfyUI Manager → search "TTS WebUI API nodes for ComfyUI", or:
cd ComfyUI/custom_nodes
git clone https://github.com/rsxdalv/ComfyUI-TTS-Webui
then restart. The pack only needs requests, numpy, torch. Piper voice files are small and live on the TTS WebUI server - if voice_name comes back with an error, that's the thing to install server-side.
When it breaks
- Voice not found: the most common failure by far. Piper voices are model files, not just names - the exact
voice_namehas to match one installed on the server. Check what's available and use that string exactly. - Connection refused: server isn't on
127.0.0.1:7778, orapi_basepoints at the wrong host. - Output sounds too robotic: drop
noise_scalea bit and raisesentence_silence- Piper's strength is consistency, not emotion, and pushing the noise knobs too far just makes it shaky.
The honest take: Piper is the least impressive-sounding node in this pack and the most dependable. For UI chimes, accessibility narration, or any "it just needs to read text aloud" use case, it's the one you set and forget. For anything that needs to sound human, reach for Kokoro or Chatterbox instead.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| text | STRING | Hello | — |
| api_base | STRING | http://127.0.0.1:7778 | — |
| api_keyopt | STRING | — | |
| voice_nameopt | STRING | — | |
| speedopt | FLOAT | 1.000.25–4 | — |
| noise_scaleopt | FLOAT | 0.670–2 | — |
| noise_wopt | FLOAT | 0.800–2 | — |
| sentence_silenceopt | FLOAT | 0.200–2 | — |
| timeout_secopt | INT | 1201–600 | — |
| channels_firstopt | BOOLEAN | true | — |
| also_save_wavopt | BOOLEAN | false | — |
| save_prefixopt | STRING | tts | — |
| return_metadataopt | BOOLEAN | true | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | — |
| wav_path | STRING | — |
| metadata_json | STRING | — |