Inworld TTS-1.5 Mini
The fast, cheap voice for first passes
- speech
- audioSettings
- audio
Narration is a draft most of the time. You don't want the best voice model in the world for the fifth revision of a script you're still cutting; you want something fast and cheap that proves the timing works. Inworld TTS-1.5 Mini is exactly that - the lighter sibling of the 1.5 Max voice node, and structurally identical to it.
It's a hosted TTS model served through Runware, so it lives in your ComfyUI graph as a proper node with an AUDIO output rather than a hand-rolled API call. The pitch: use Mini to iterate on scripts and timing, swap in Max (or the realtime TTS-2) for the final render. Same family, same voices, lower bill.
How it works
The required input is a speech socket of type RUNWARE_SPEECH - the text and voice live upstream in a Runware Speech builder, not on this node. In that builder you set your text (with [Sam] Hello [Bob] Hi there style tags for dialogue, plus markup like [laughs] or [short pause]), pick a voice from the named dropdown (Zephyr by default), and optionally set speed, volume, and language.
On the model node itself: settings.temperature (0.1–2, default 1.1) tunes expressiveness - lower for flat, deterministic reads, higher for animated delivery. settings.textNormalization expands numbers and abbreviations ("Dr." → "doctor") before generation, which you want for prose and not for product codes. numberResults tops out at 4, and outputFormat is MP3/WAV/FLAC/OGG. The Runware Audio Settings builder wires into audioSettings if you need specific channels, bitrate, or sample rate.
Output is a ComfyUI AUDIO value (waveform + sample rate), decoded locally with soundfile - straight into a Save Audio node, exactly like the pack's audio workflow.
Installing it
Same official pack:
cd ComfyUI/custom_nodes
git clone https://github.com/Runware/ComfyUI-Runware
pip install -r ComfyUI-Runware/requirements.txt
Restart, then set your API key in ComfyUI Settings → Runware API key or via RUNWARE_API_KEY. Requirements include soundfile for audio decode - nothing heavier.
Where people get burned
The schema is a copy-paste of Max, so the only real decision is which node you're using - and people forget Mini is the budget lane, then wonder why a hero VO track sounds less polished than the Max render next to it. That's not a bug; that's the tiering. And the pack-standard reminders: the text lives in the Runware Speech builder, not here, and this is a metered API - Mini is cheap, but numberResults of 4 across twenty script versions is still charges accumulating.
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 | — |