ElevenLabs - Text to Dialogue
Scripted multi-voice dialogue
- audio
A podcast with two hosts. A narrated scene with a narrator and three characters. An audiobook with a dozen distinct voices. Doing that with plain TTS means chaining ten separate text-to-speech calls and stitching them together. This node does it in one call: up to ten paired text + voice_id inputs, and it returns a single mixed audio output with each speaker's lines in order.
The input scheme is the whole story. Required: api_key, text1, and voice_id1 - so speaker 1 is mandatory, which is the same as "you must have at least one speaker." Then text2/voice_id2 through text10/voice_id10 are all optional; leave a pair empty and that speaker just doesn't appear. Order matters - the node renders them in numeric order, so it's effectively a script: line 1 in voice A, line 2 in voice B, and so on. Give each speaker their own voice ID (from the selector, fetch, clone, or design nodes) and the conversation comes out with genuinely different characters.
Beyond the lines there's the shared tuning: stability, language (Auto Detect by default), apply_text_normalization, output_format (here it's just the two high-quality options, mp3_44100_192 or opus_48000_192 - so yes, Creator tier+ applies), and seed.
One output: audio, fully mixed and ready to save or lay into a video.
Why you'd build a script this way
Two big wins over chaining TTS nodes. First, one API call means one charge and one round-trip instead of ten. Second, the model gets to hear the whole conversation as context, so it paces the dialogue naturally - turns don't slam into each other like separately-generated clips spliced together. If you're making a podcast episode, a radio-play-style scene, or a multi-character audio drama, this is the node that makes it a single step instead of a pipeline.
Installing it
Part of the ComfyUI API Toolkit pack. Manager: search "API Toolkit". Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/IxMxAMAR/ComfyUI-API-Toolkit
cd ComfyUI-API-Toolkit
pip install -r requirements.txt
Restart. Needs requests and soundfile.
Gotchas
- Ten speakers of dialogue is a lot of characters in one call - budget accordingly, and use the flash TTS models elsewhere if you're iterating on the script.
- The node produces one mixed file, not stems. If you need to re-voice a single line afterward, you re-run the whole dialogue, so get the script right before you commit.
- Keep voice IDs consistent: assign each character one voice and never reuse a voice for two characters, or the "who said that" distinction collapses.
Inputs (26)
| Name | Type | Default | Description |
|---|---|---|---|
| api_key | STRING | — | |
| text1 | STRING | Speaker 1 text. | |
| voice_id1 | STRING | Speaker 1 voice ID. | |
| text2opt | STRING | — | |
| voice_id2opt | STRING | — | |
| text3opt | STRING | — | |
| voice_id3opt | STRING | — | |
| text4opt | STRING | — | |
| voice_id4opt | STRING | — | |
| text5opt | STRING | — | |
| voice_id5opt | STRING | — | |
| text6opt | STRING | — | |
| voice_id6opt | STRING | — | |
| text7opt | STRING | — | |
| voice_id7opt | STRING | — | |
| text8opt | STRING | — | |
| voice_id8opt | STRING | — | |
| text9opt | STRING | — | |
| voice_id9opt | STRING | — | |
| text10opt | STRING | — | |
| voice_id10opt | STRING | — | |
| stabilityopt | FLOAT | 0.500–1 | Voice stability. Lower = more expressive/emotional, Higher = more consistent/monotone. Creative(<0.5), Natural(0.5), Robust(>0.5). |
| apply_text_normalizationopt | COMBO | auto | 3 options: auto, on, off |
| languageopt | COMBO | Auto Detect | 33 options: Auto Detect, English (en), Arabic (ar), Bulgarian (bg), Chinese (zh), Croatian (hr), +27 |
| output_formatopt | COMBO | mp3_44100_192 | Audio output format. mp3_44100_192 and opus require Creator tier+. |
| seedopt | INT | 00–4294967295 | Seed for reproducibility. 0 = random. Determinism not guaranteed. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | — |