Qwen3-TTS Dialogue (Specialist)
Generate a Full Two-Person Podcast with Qwen3-TTS, Speaker by Speaker
- qwen_model
- speaker_A_ref
- speaker_B_ref
- speaker_C_ref
- qwen_base_model
- qwen_custom_model
- qwen_design_model
- audio
- segments_info
If you've ever glued three separate TTS runs together by hand to fake a dialogue, this node exists to end that. Qwen3-TTS Dialogue (Specialist) takes a parsed podcast script and turns it into a full two- (or three-) voice audio track, letting you clone one speaker from a 3-second clip and "design" the other from a text description. It's the flagpole node of the AIIA podcast pipeline, and it's the one that makes Alibaba's Qwen3-TTS family actually fun to use.
How it works
You feed it dialogue_json - that's the structured output of the AIIA Podcast Script Parser, lines like A: 大家好 already turned into JSON with speakers, pauses, and optional emotion tags. The node walks each line, and for every speaker it asks the connected Qwen model to speak it. The trick is per-speaker mode:
- Clone - feed
speaker_X_refaudio (plusspeaker_X_ref_textfor stability) and it mimics that voice. - Preset - pick from the nine official timbres (
Vivian,Serena,Dylan,Ryan…). - Design - type a voice description like "raspy deep male" into
speaker_X_designand it invents the voice.
Emotion and expression dropdowns (speaker_X_emotion, speaker_X_expression, speaker_X_dialect) get translated into the model's natural-language instruct field, and consecutive same-emotion lines are batched so each instruct stays clean. That's a genuinely nice touch - see the emotion-to-instruction mapping in the README.
The inputs that actually matter
The dialogue and the qwen_model slot are the only required connections. For everything else, focus on:
speaker_A_mode/speaker_B_mode/speaker_C_mode- Clone / Preset / Design per role.pause_duration- silence between lines (0.5s default). Bump it if lines feel rushed.speed_global,cfg_scale,temperature,top_k- the model's sampling knobs. Defaults are sane; raisetemperatureif the delivery sounds robotic.
Outputs are audio (the finished track) and segments_info, a JSON timeline that plugs straight into AIIA Subtitle Gen or the stitcher. Where people get burned: Base models are for cloning, CustomVoice models are for presets, VoiceDesign for text-designed voices. The community has been loudly frustrated that Qwen3-TTS clone "never works" - almost always because someone loaded the wrong variant. Clone = ...-Base.
Wiring and models
You only get one qwen_model input, so if you want "Speaker A cloned, Speaker B designed", load two models and bundle them with the Qwen3-Model Router. The router's qwen_bundle output feeds this node directly. Model folders go in ComfyUI/models/qwen_tts/Qwen/ (e.g. Qwen3-TTS-12Hz-1.7B-Base), and the node auto-installs the qwen-tts library on first run - Flash Attention 2 speeds it up a lot.
Install & troubleshooting
Same pack-wide story: install havvk/ComfyUI_AIIA via ComfyUI Manager, or git clone https://github.com/havvk/ComfyUI_AIIA.git into custom_nodes/, then restart. If synthesis hangs, the first run is downloading the model - give it time. Stuttering or looped audio usually means you're cloning with a CustomVoice model; switch to Base. And if the dialogue reads tags out loud as words, your engine of choice is being fed [Happy] - the specialist node cleans these, but check your source script.
Inputs (38)
| Name | Type | Default | Description |
|---|---|---|---|
| dialogue_json | STRING | — | |
| pause_duration | FLOAT | 0.50–5 | — |
| speed_global | FLOAT | 1.000.5–2 | — |
| seed | INT | 42-1–2147483647 | — |
| cfg_scale | FLOAT | 1.51–10 | — |
| temperature | FLOAT | 0.80.1–2 | — |
| top_k | INT | 200–100 | — |
| qwen_modelopt | QWEN_MODEL | — | |
| speaker_A_modeopt | COMBO | Clone | 3 options: Clone, Preset, Design |
| speaker_A_idopt | COMBO | Vivian | 9 options: Vivian, Serena, Uncle_Fu, Dylan, Eric, Ryan, +3 |
| speaker_A_emotionopt | COMBO | None | 20 options: None, Happy (开心), Sad (悲伤), Angry (愤怒), Excited (兴奋), Gentle (温柔), +14 |
| speaker_A_expressionopt | COMBO | None | 25 options: None, With a hint of shyness (带点羞涩), With a hint of a smile (带有一丝笑意), Seductive tone (充满诱惑力), Crying tone (带着哭腔), Cheerful tone (充满笑意), +19 |
| speaker_A_dialectopt | COMBO | None | 19 options: None, Mandarin (普通话), Cantonese (粤语), Shanghainese (上海话), Sichuanese (四川话), Northeastern (东北话), +13 |
| speaker_A_designopt | STRING | — | |
| speaker_A_refopt | AUDIO | — | |
| speaker_A_ref_textopt | STRING | — | |
| speaker_B_modeopt | COMBO | Clone | 3 options: Clone, Preset, Design |
| speaker_B_idopt | COMBO | Vivian | 9 options: Vivian, Serena, Uncle_Fu, Dylan, Eric, Ryan, +3 |
| speaker_B_emotionopt | COMBO | None | 20 options: None, Happy (开心), Sad (悲伤), Angry (愤怒), Excited (兴奋), Gentle (温柔), +14 |
| speaker_B_expressionopt | COMBO | None | 25 options: None, With a hint of shyness (带点羞涩), With a hint of a smile (带有一丝笑意), Seductive tone (充满诱惑力), Crying tone (带着哭腔), Cheerful tone (充满笑意), +19 |
| speaker_B_dialectopt | COMBO | None | 19 options: None, Mandarin (普通话), Cantonese (粤语), Shanghainese (上海话), Sichuanese (四川话), Northeastern (东北话), +13 |
| speaker_B_designopt | STRING | — | |
| speaker_B_refopt | AUDIO | — | |
| speaker_B_ref_textopt | STRING | — | |
| speaker_C_modeopt | COMBO | Design | 3 options: Clone, Preset, Design |
| speaker_C_idopt | COMBO | Vivian | 9 options: Vivian, Serena, Uncle_Fu, Dylan, Eric, Ryan, +3 |
| speaker_C_emotionopt | COMBO | None | 20 options: None, Happy (开心), Sad (悲伤), Angry (愤怒), Excited (兴奋), Gentle (温柔), +14 |
| speaker_C_expressionopt | COMBO | None | 25 options: None, With a hint of shyness (带点羞涩), With a hint of a smile (带有一丝笑意), Seductive tone (充满诱惑力), Crying tone (带着哭腔), Cheerful tone (充满笑意), +19 |
| speaker_C_dialectopt | COMBO | None | 19 options: None, Mandarin (普通话), Cantonese (粤语), Shanghainese (上海话), Sichuanese (四川话), Northeastern (东北话), +13 |
| speaker_C_designopt | STRING | — | |
| speaker_C_refopt | AUDIO | — | |
| speaker_C_ref_textopt | STRING | — | |
| qwen_base_modelopt | QWEN_MODEL | — | |
| qwen_custom_modelopt | QWEN_MODEL | — | |
| qwen_design_modelopt | QWEN_MODEL | — | |
| top_popt | FLOAT | 0.950–1 | — |
| zero_shot_modeopt | BOOLEAN | false | — |
| max_batch_charopt | INT | 1000100–32768 | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | — |
| segments_info | STRING | — |