Nodes/ComfyUI_AIIA/Qwen3-TTS Dialogue (Specialist)
ComfyUI Node

Qwen3-TTS Dialogue (Specialist)

Generate a Full Two-Person Podcast with Qwen3-TTS, Speaker by Speaker

By havvk·Created about a year ago·Updated 6 months ago· 13
Qwen3-TTS Dialogue (Specialist)
  • qwen_model
  • speaker_A_ref
  • speaker_B_ref
  • speaker_C_ref
  • qwen_base_model
  • qwen_custom_model
  • qwen_design_model
  • audio
  • segments_info
dialogue_json
pause_duration0.5
speed_global1.00
seed42
cfg_scale1.5
temperature0.8
top_k20
speaker_A_modeClone
speaker_A_idVivian
speaker_A_emotionNone
speaker_A_expressionNone
speaker_A_dialectNone
speaker_A_design
speaker_A_ref_text
speaker_B_modeClone
speaker_B_idVivian
speaker_B_emotionNone
speaker_B_expressionNone
speaker_B_dialectNone
speaker_B_design
speaker_B_ref_text
speaker_C_modeDesign
speaker_C_idVivian
speaker_C_emotionNone
speaker_C_expressionNone
speaker_C_dialectNone
speaker_C_design
speaker_C_ref_text
top_p0.95
zero_shot_modefalse
max_batch_char1000

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_ref audio (plus speaker_X_ref_text for 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_design and 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; raise temperature if 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.

CategoryAIIA/Qwen

Inputs (38)

NameTypeDefaultDescription
dialogue_jsonSTRING
pause_durationFLOAT0.50–5
speed_globalFLOAT1.000.5–2
seedINT42-1–2147483647
cfg_scaleFLOAT1.51–10
temperatureFLOAT0.80.1–2
top_kINT200–100
qwen_modeloptQWEN_MODEL
speaker_A_modeoptCOMBOClone3 options: Clone, Preset, Design
speaker_A_idoptCOMBOVivian9 options: Vivian, Serena, Uncle_Fu, Dylan, Eric, Ryan, +3
speaker_A_emotionoptCOMBONone20 options: None, Happy (开心), Sad (悲伤), Angry (愤怒), Excited (兴奋), Gentle (温柔), +14
speaker_A_expressionoptCOMBONone25 options: None, With a hint of shyness (带点羞涩), With a hint of a smile (带有一丝笑意), Seductive tone (充满诱惑力), Crying tone (带着哭腔), Cheerful tone (充满笑意), +19
speaker_A_dialectoptCOMBONone19 options: None, Mandarin (普通话), Cantonese (粤语), Shanghainese (上海话), Sichuanese (四川话), Northeastern (东北话), +13
speaker_A_designoptSTRING
speaker_A_refoptAUDIO
speaker_A_ref_textoptSTRING
speaker_B_modeoptCOMBOClone3 options: Clone, Preset, Design
speaker_B_idoptCOMBOVivian9 options: Vivian, Serena, Uncle_Fu, Dylan, Eric, Ryan, +3
speaker_B_emotionoptCOMBONone20 options: None, Happy (开心), Sad (悲伤), Angry (愤怒), Excited (兴奋), Gentle (温柔), +14
speaker_B_expressionoptCOMBONone25 options: None, With a hint of shyness (带点羞涩), With a hint of a smile (带有一丝笑意), Seductive tone (充满诱惑力), Crying tone (带着哭腔), Cheerful tone (充满笑意), +19
speaker_B_dialectoptCOMBONone19 options: None, Mandarin (普通话), Cantonese (粤语), Shanghainese (上海话), Sichuanese (四川话), Northeastern (东北话), +13
speaker_B_designoptSTRING
speaker_B_refoptAUDIO
speaker_B_ref_textoptSTRING
speaker_C_modeoptCOMBODesign3 options: Clone, Preset, Design
speaker_C_idoptCOMBOVivian9 options: Vivian, Serena, Uncle_Fu, Dylan, Eric, Ryan, +3
speaker_C_emotionoptCOMBONone20 options: None, Happy (开心), Sad (悲伤), Angry (愤怒), Excited (兴奋), Gentle (温柔), +14
speaker_C_expressionoptCOMBONone25 options: None, With a hint of shyness (带点羞涩), With a hint of a smile (带有一丝笑意), Seductive tone (充满诱惑力), Crying tone (带着哭腔), Cheerful tone (充满笑意), +19
speaker_C_dialectoptCOMBONone19 options: None, Mandarin (普通话), Cantonese (粤语), Shanghainese (上海话), Sichuanese (四川话), Northeastern (东北话), +13
speaker_C_designoptSTRING
speaker_C_refoptAUDIO
speaker_C_ref_textoptSTRING
qwen_base_modeloptQWEN_MODEL
qwen_custom_modeloptQWEN_MODEL
qwen_design_modeloptQWEN_MODEL
top_poptFLOAT0.950–1
zero_shot_modeoptBOOLEANfalse
max_batch_charoptINT1000100–32768

Outputs (2)

NameTypeDescription
audioAUDIO
segments_infoSTRING