ComfyUI Node

Inworld TTS-1.5 Max

Voice that doesn't sound like it's reading a spec sheet

By Runware·Created 2 years ago·Updated about a month ago· 140
Inworld TTS-1.5 Max
  • speech
  • audioSettings
  • audio
numberResults1
settings.temperature1.10
settings.textNormalizationfalse
ttlfalse
ttl_value60
outputFormatMP3

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: speed and volume (a -50 to +100 scale where 0 is neutral), language (a big locale list), and a speech-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.

CategoryRunware/Audio/inworld

Inputs (8)

NameTypeDefaultDescription
speechRUNWARE_SPEECH
audioSettingsoptRUNWARE_AUDIOSETTINGS
numberResultsoptINT11–4Number of results to generate. Each result uses a different seed, producing variations of the same parameters.
settings.temperatureoptFLOAT1.100.1–2Controls randomness in generation. Lower values produce more deterministic outputs, higher values increase variation and creativity.
settings.textNormalizationoptBOOLEANfalseExpands numbers, dates, abbreviations before speech generation.
ttloptBOOLEANfalseEnable to set ttl. Off uses the model's default.
ttl_valueoptINT60Time-to-live (TTL) in seconds for generated content. Only applies when `outputType` is `URL`.
outputFormatoptCOMBOMP3File format for the generated audio.

Outputs (1)

NameTypeDescription
audioAUDIO