Inworld Realtime TTS-2
Realtime voice, minus the sliders
- speech
- audioSettings
- audio
If you're building anything where the voice has to keep up with the moment - a live interaction, a character that reacts, a pipeline that can't afford a seconds-long wait - the Inworld Realtime TTS-2 node is the one. It's the newest voice model in the Runware pack, tuned for low latency, and the display name says "Realtime" for a reason: this is the model you pick when speed of delivery is the point.
The giveaway is in the schema. Where the 1.5 siblings offer a settings.temperature dial for expressiveness, TTS-2 drops it entirely. You don't tune this voice; you use it. That's a feature for a realtime model - fewer knobs to fight when your goal is "say it now."
How it works
The required input is the speech socket (RUNWARE_SPEECH), wired to a Runware Speech builder node where the real inputs live: your text (with dialogue tags like [Sam] Hello [Bob] Hi there and provider markup such as [laughs], [short pause]), a voice from the named list (Zephyr by default), plus optional speed, volume, and language.
On the model node, the one behavior knob worth knowing is settings.textNormalization - expands numbers, dates, and abbreviations before generation, so "I'm 25, born in '91" reads naturally rather than as digits. Flip it on for spoken prose, off for addresses and codes you want read literally. numberResults goes up to 4, and outputFormat is MP3/WAV/FLAC/OGG. The Runware Audio Settings builder plugs into audioSettings for stereo, bitrate, or sample rate control.
Output is a native ComfyUI AUDIO (waveform + sample rate), decoded on your machine via soundfile, and it drops straight into a Save Audio node.
Installing it
It's in the same official pack as the rest:
cd ComfyUI/custom_nodes
git clone https://github.com/Runware/ComfyUI-Runware
pip install -r ComfyUI-Runware/requirements.txt
Restart, set your key under ComfyUI Settings → Runware API key or via RUNWARE_API_KEY. Light dependencies - runware-sdk, pillow, soundfile.
Where people get burned
The main gotcha is looking for knobs that aren't there: no settings.temperature on TTS-2 is by design, not a bug, so don't hunt for expressiveness control that lives on the 1.5 nodes instead. And while "realtime" means low latency, it doesn't mean free - it's still a metered cloud API, so looping it in a live system will bill you per utterance, and the pack's $20-minimum top-up quirk applies. Text lives upstream in the Runware Speech builder; if the node has no output, check that wire first.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| speech | RUNWARE_SPEECH | — | |
| audioSettingsopt | RUNWARE_AUDIOSETTINGS | — | |
| numberResultsopt | INT | 11–4 | Number of results to generate. Each result uses a different seed, producing variations of the same parameters. |
| settings.textNormalizationopt | BOOLEAN | false | Expands numbers, dates, abbreviations before speech generation. |
| ttlopt | BOOLEAN | false | Enable to set ttl. Off uses the model's default. |
| ttl_valueopt | INT | 60 | Time-to-live (TTL) in seconds for generated content. Only applies when `outputType` is `URL`. |
| outputFormatopt | COMBO | MP3 | File format for the generated audio. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | — |