Qwen3-TTS Advanced Dialogue Engine 🎭
One node, a whole conversation in mixed voices
- model_obj
- texts
- instructs
- roles
- pauses
- role_bank
- AUDIO
This is the payoff node - the one that makes ComfyUI-Qwen3-TTS a real multi-role voice tool rather than a single-speaker TTS wrapper. Wire it the outputs of a Script Processor and a Role Bank and it generates the entire conversation in one pass: each character speaking in their own cloned voice, emotion instructions applied per line, pauses held to the millisecond, all merged into a single AUDIO track at the end. One node, one button, one finished dialogue.
It's aimed at the jobs that are painful with single-voice TTS: podcast back-and-forth, audiobook dialogue, skits, game voiceovers, or the audio track you're about to push into a lip-sync or talking-head stage.
What goes in
The node's required inputs are the four lists from Qwen3TTSScriptProcessor plus the role mapping:
texts,instructs,roles,pauses- the fourLISToutputs of the Script Processor, matched position by position.role_bank- aQWEN3_ROLE_BANKfrom the Role Bank node, mapping role names to cloned voices.model_obj- a Base model (the loader enforces this via the same model-compatibility check as cloning).
Then the full sampling stack: seed (lock it for reproducible takes - the README is explicit that fixing the seed reproduces the result exactly), max_new_tokens (2048 default), temperature (0.9), top_p (1.0), top_k (50), repetition_penalty (1.05), plus three subtalker_* controls for the model's secondary speaker branch. Output is a single merged AUDIO.
How it works
Under the hood it walks the lists in lockstep. A PAUSE entry appends raw silence of the requested duration. Anything else looks up the role in the bank - and here's the forgiving bit: if the role isn't found, it warns and grabs the first voice in the bank, or errors if the bank is empty. Each line is generated with generate_voice_clone() using that role's prompt and the line's instruct, with language hard-coded to auto, and then everything is concatenated into one continuous 24kHz track. It's sequential - each segment waits on the last - which is why a long script is a "go make tea" operation, not a "watch it fill in" one.
The two gotchas that'll bite you
- Wrong-voice fallout. Because a missing role silently reuses the first bank voice, a typo in a role name produces two characters sharing a voice with no error anywhere. Double-check that role names match between script and bank before you blame the model.
- It's a long single pass. Community reports on Qwen3-TTS generation put a 100-word paragraph at ~45–55 seconds on a 3090, and a dialogue is several of those back to back. On an 8GB card, load the 0.6B Base model and keep
bf16- the README's OOM advice is exactly that: bf16, smaller model, smaller batch.
If you're starting from nothing
The chain is: Loader (Base) → Voice Clone Prompt per character → Role Bank to name them → Script Processor for the script → Advanced Dialogue for the output. The pack ships a ready-to-run "Advanced Dialogue Engine" workflow in example_workflows/, which is worth loading first - it shows the wiring and saves you guessing at the plumbing.
Install is the pack-wide routine: git clone https://github.com/wanaigc/ComfyUI-Qwen3-TTS, pip install -r requirements.txt, restart ComfyUI. And expect the first run to download the Base model - several GB, so budget for it.
Inputs (15)
| Name | Type | Default | Description |
|---|---|---|---|
| model_obj | QWEN3_MODEL | — | |
| texts | LIST | — | |
| instructs | LIST | — | |
| roles | LIST | — | |
| pauses | LIST | — | |
| role_bank | QWEN3_ROLE_BANK | — | |
| seed | INT | 00–18446744073709550000 | — |
| max_new_tokens | INT | 204864–8192 | — |
| temperature | FLOAT | 0.900.1–2 | — |
| top_p | FLOAT | 1.000.1–1 | — |
| top_k | INT | 500–200 | — |
| repetition_penalty | FLOAT | 1.050.1–2 | — |
| subtalker_temperature | FLOAT | 0.900.1–2 | — |
| subtalker_top_p | FLOAT | 1.000.1–1 | — |
| subtalker_top_k | INT | 500–200 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| AUDIO | AUDIO | — |