Runware Speech
The Builder That Feeds Every TTS Model
- speech
Every text-to-speech node in this pack works the same way: a RunwareBuild_speech node holds the "what to say and in whose voice," and the actual TTS model - Fish Audio S2.1 Pro, Runware Sync 3, PixVerse LipSync, the HeyGen avatar nodes, Seed Audio 1.0 - renders it. The builder is the part you actually write, which is why it gets its own node instead of burying a dozen widgets in every model. It outputs a speech object; the model node turns that into an AUDIO result (or a talking avatar, in the case of the lip-sync and avatar models).
How it works
RunwareBuild_speech packages your text, a voice, and some performance tweaks into a RUNWARE_SPEECH object. The model node you wire it into is what makes it say anything - this builder is pure payload, computed nowhere and stored nowhere until the request goes up to Runware's cloud. It's a single (non-stackable) builder, so one speech object per model node; if you want a dialogue, use speaker tags in the text rather than chaining builders.
The inputs that matter
- text - what gets spoken, and it's smarter than a plain string. The tooltip documents speaker tags (
[Sam] Hello [Bob] Hi there) for dialogue mode, and provider markup like[laughs]and[short pause]for performance. That's the difference between a robot reading and something that feels directed. - voice - the voice to use. The schema lists six current voices (una, leo, eve, ara, sal, rex). One honest caveat: Runware rotates its TTS backends, and the voice roster in the live pack can differ from what a snapshot shows - so audition voices by ear, not by name.
- language - optional language code (
(default)plus the usual suspects: en, ar-EG, bn, zh, fr, de, hi, id, it, and more). Set it when the text isn't English or the default auto-detect gets it wrong. - speed (0.5–1.5), volume (0–1), pitch (-50 to +50) - the performance knobs. Defaults are neutral, and they're exactly as useful as you'd expect: pitch up for a brighter read, slow down for gravitas.
There's also an advanced_json escape hatch that merges extra JSON into this speech object (the tooltip mentions voices - handy if you need to pass voice params the widgets don't expose). Leave it empty unless you know the API shape.
Wiring it in
Output is speech, which plugs into any model exposing that socket - most usefully Fish Audio S2.1 Pro (which requires it), Sync 3, PixVerse LipSync, and the avatar models. For a voice-cloned character, pair it with RunwareBuild_referenceVoices: speech carries the line, referenceVoices carries whose voice.
Install and setup
The standard Runware install - ComfyUI Manager (search "Runware"), install, restart; or git clone into custom_nodes plus pip install -r ComfyUI-Runware/requirements.txt. Dependencies are light (runware-sdk, pillow, soundfile); nothing heavy is downloaded because the TTS model runs on Runware's servers. You'll need an API key - Settings → Runware API key, RUNWARE_API_KEY, or runware auth login - and a funded account. Worth knowing before you commit: Runware's minimum top-up is roughly $20 with a card on file, and the community's been vocal that the pricing isn't the friction - the funding step is.
Troubleshooting
- Audio comes back as a path instead of an AUDIO socket - the pack degrades to a saved file when it can't decode the audio; install
soundfile(it's in requirements) and restart. - Voice sounds wrong - check the language field and the markup. A stray
[laughs]in a language that doesn't support it can derail the read. - Empty output - the advanced_json route will happily send a broken body if you typo it; empty it and retry before blaming the model.
It's the node you'll actually type into every time you build a TTS workflow - small, but it's the entire "what to say" side of the pipeline.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| text | STRING | Text to convert to speech. For dialogue mode, use speaker tags such as [Sam] Hello [Bob] Hi there. Provider markup tags like [laughs] and [short pause] are also supported. | |
| voice | COMBO | Zephyr | Voice identifier to use for speech generation. |
| volumeopt | INT | 0-50–100 | Volume level of the generated speech. `100` produces 2.0x volume, `0` leaves volume unchanged, and `-50` produces 0.5x volume. |
| speedopt | INT | 0-50–100 | Playback speed of the generated speech. `100` produces 2.0x speed, `0` is the normal rate, and `-50` produces 0.5x speed. |
| languageopt | COMBO | en-US | Language code for speech generation. |
| pitchopt | INT | 0-12–12 | Pitch adjustment for the voice. |
| advanced_jsonopt | STRING | Extra JSON merged into this speech: voices |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| speech | RUNWARE_SPEECH | — |