Inworld TTS-1.5 Max
Voice that doesn't sound like it's reading a spec sheet
- speech
- audioSettings
- audio
Text-to-speech in ComfyUI used to mean bolting an ElevenLabs API call onto the side of your graph. The Runware pack just makes it a first-class citizen: Inworld TTS-1.5 Max is a hosted TTS node with a real AUDIO output that plugs into ComfyUI's audio nodes like it grew there. Inworld's TTS line shows up on the voice leaderboards alongside the usual suspects, and Max is the quality end of it.
You'd reach for this when your workflow needs narration, a voiceover track, or dialogue - think video pipelines where a WAN or LTX render is waiting on a voice to go with it. The hook: this node gives you a voice, not a robot, and it handles multi-speaker dialogue natively.
How it works
The required input isn't a text box - it's a speech socket of type RUNWARE_SPEECH. You wire in a Runware Speech builder node, and that's where the text and voice live:
text- your script. For dialogue, use speaker tags:[Sam] Hello [Bob] Hi there. Provider markup like[laughs]and[short pause]is supported too.voice- a dropdown of real voice names (Zephyr, Achernar, Achird, Alnilam…). Default is Zephyr. Pick one and it's consistent across runs.- Optional on the builder:
speedandvolume(a -50 to +100 scale where 0 is neutral),language(a big locale list), and aspeech-level random seed.
Back on the model node, the knobs that matter: settings.temperature (0.1–2, default 1.1) controls how wild the delivery gets - lower is more deterministic, higher is more expressive; settings.textNormalization expands numbers, dates, and abbreviations before generation, so "Dr." becomes "doctor" - flip it on for prose, off for product codes and URLs. numberResults goes up to 4 per call, and outputFormat is MP3/WAV/FLAC/OGG.
The output is a ComfyUI AUDIO value (waveform + sample rate), decoded on your machine via soundfile - wire it into a Save Audio node like the pack's own audio workflow does. If you want stereo or a specific bitrate, the Runware Audio Settings builder (RUNWARE_AUDIOSETTINGS) plugs into the audioSettings socket.
Installing it
Standard pack install:
cd ComfyUI/custom_nodes
git clone https://github.com/Runware/ComfyUI-Runware
pip install -r ComfyUI-Runware/requirements.txt
Restart, set your API key in ComfyUI Settings → Runware API key or via RUNWARE_API_KEY. Dependencies include soundfile - that's what decodes the audio on your side, and it's in the requirements, so you're covered.
Where people get burned
Mostly the mental model: people search for a text input on this node and can't find one because the text lives upstream in the Runware Speech builder. Wire that first. Also remember it's a paid, hosted API - voice generation is metered, so a numberResults of 4 with a long script is real money, and the pack's standing $20-minimum top-up complaint applies. If you get an empty/zeroed AUDIO on output, the node prints a hint telling you to check soundfile - it's a decode dependency, not the API being down.
Inputs (8)
| 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.temperatureopt | FLOAT | 1.100.1–2 | Controls randomness in generation. Lower values produce more deterministic outputs, higher values increase variation and creativity. |
| 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 | — |