ElevenLabs Text to Dialogue
Write a script, cast voices, get a finished conversation
- AUDIO
Talking to yourself has never been more productive. ElevenLabsTextToDialogue generates a multi-speaker conversation from text in a single node: each line of dialogue gets its own text and its own voice, and the node returns one combined audio track. It's the podcast-in-a-box node - you write a script, cast the voices, and out comes a finished back-and-forth without ever stitching clips together.
Partner-node setup as always: the script goes to ElevenLabs' hosted model through Comfy's API proxy, billed per 1,000 characters from your Comfy account credits (Settings → Credits). Ships with ComfyUI core, nothing to install, no ElevenLabs key.
The inputs that matter
- inputs - a dynamic counter from 1 to 10 that decides how many dialogue entries the node has. This is the one to set first, because each entry spawns a pair of widgets:
- text{i} - that speaker's line.
- voice{i} - an
ELEVENLABS_VOICEwire, from ElevenLabsVoiceSelector or ElevenLabsInstantVoiceClone. You don't pick a voice from a dropdown here; you wire it in.
- stability - per-line delivery control, default 0.5. Lower = more emotional range, higher = steadier.
- model -
eleven_v3, the only option. No choice to make. - language_code - empty for auto-detect, or an ISO code.
- apply_text_normalization, seed, output_format - the usual set-and-forget trio.
Output and wiring
One AUDIO output - the whole dialogue already assembled into a single track. Wire it into Preview Audio to hear the conversation, or Save Audio (Advanced) to keep it. Because it's one merged file, editing a single line means re-running the node, not trimming the output.
Where people get burned
- Pick the entry count before wiring voices. Bumping
inputsfrom 2 to 3 adds widgets, but changing the count reshapes the node's inputs - if you've already wired voices into entries 1 and 2, the re-count can drop or reorder those connections. Set the count first, then fill it in. - Every entry needs both a text and a voice. The node validates each line before it calls the API; an empty text on any entry aborts the whole batch. It's all-or-nothing.
- Character-based billing on a multi-speaker script adds up fast. A 10-line conversation is trivial; a full podcast episode is not. Test one exchange before you script the whole season.
- Delivery overlap (two people talking over each other) isn't something this node does - each line is sequential. For overlapping speech, generate separately and mix.
For a single-take conversation with distinct voices, it's genuinely one node and one paid call. Just count your entries first.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| stability | FLOAT | 0.50–1 | Voice stability. Lower values give broader emotional range, higher values produce more consistent but potentially monotonous speech. |
| apply_text_normalization | COMBO | Text normalization mode. 'auto' lets the system decide, 'on' always applies normalization, 'off' skips it. | |
| model | COMBO | Model to use for dialogue generation. | |
| inputs | COMBO | Number of dialogue entries. | |
| language_code | STRING | ISO-639-1 or ISO-639-3 language code (e.g., 'en', 'es', 'fra'). Leave empty for automatic detection. | |
| seed | INT | 10–4294967295 | Seed for reproducibility. |
| output_format | COMBO | Audio output format. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| AUDIO | AUDIO | — |