Nodes/ComfyUI-Qwen3-TTS-Fast/Qwen3 TTS Batch Generate (Fast)
ComfyUI Node

Qwen3 TTS Batch Generate (Fast)

One line in, one clip per line out

By YildirimMc·Created about 23 hours ago·Updated about 23 hours ago· 1
Qwen3 TTS Batch Generate (Fast)
  • model
  • clone_prompt
  • AUDIO
text_listLine 1 Line 2 Line 3
separator
language
seed0
speaker
increment_seedtrue
max_new_tokens2048
temperature1.00
top_p0.80
repetition_penalty1.10

The node for when you have a script - a list of lines - and want a clip per line without hand-running one generate node per paragraph. You paste the whole script into a single multiline box, and it produces one AUDIO clip per non-empty line, output as a list of AUDIO. That last part is the detail that trips people up: this isn't a single clip out, it's AUDIO[], so save nodes that eat one clip won't take it directly - you wire it into something list-aware or split it.

Batch is where the "Fast" in the pack name stops being a nice-to-have and becomes the whole point. Qwen3-TTS is genuinely good but was slow per clip; with CUDA-graph acceleration it chews through a multi-line narration fast enough that "generate the whole voiceover, then tweak" is a viable workflow instead of a punishment. The console even prints batch stats after a run - clips, total audio seconds, wall time, and a real-time factor - which is oddly satisfying on a 40-line batch.

How it works

A line in the text_list box is a clip out, split on separator (default newline; change it if your script already uses newlines inside lines, though honestly newline is right for 99% of cases). Generation runs sequentially on the loaded model - one generation at a time is a hard limit of this architecture - and each clip gets the seed bumped by one per line if increment_seed is on (default), so lines don't all come out with identical delivery.

The voice comes from one of two places, and which one works depends on your checkpoint:

  • clone_prompt input connected → every line uses that cloned voice. This is the right way to batch narration: build the voice once with Create Clone Prompt, then generate a whole script in that voice. Needs a Base checkpoint.
  • Otherwise → the speaker preset dropdown (Vivian, Serena, Uncle_Fu, …) with no clone, which needs a CustomVoice checkpoint. There's no text-per-line beyond text_list, so this node's other job - beyond batching - is choosing which voice engine is driving.

language, seed, and the sampling trio (max_new_tokens 2048, temperature 1.0, top_p 0.8, repetition_penalty 1.1) apply across all lines. Same fast-path caveat: temperature is a mild nudge, not a drama switch.

How to install it

One pack, one install - ComfyUI Manager, search "Qwen3-TTS", install, restart:

cd ComfyUI/custom_nodes
git clone https://github.com/YildirimMC/ComfyUI-Qwen3-TTS-Fast
pip install -r ComfyUI-Qwen3-TTS-Fast/requirements.txt

NVIDIA GPU needed; the checkpoint downloads itself into ComfyUI/models/TTS/ on first use.

Common issues

"text_list is empty after splitting" - the separator isn't what's actually in your box (a Windows paste can smuggle in \r\n). Set separator to \r\n, or just re-paste with plain newlines.

Save node refuses the output - remember it's a list of AUDIO. You need a list-capable consumer, or run lines individually through a single-clip node if your save node can't iterate.

A batch stops dead mid-way - sequential generation means one bad long line can blow the cache budget and take the batch with it (max_new_tokens clamped to max_seq_len - 256). Split long lines, or raise max_seq_len on the Loader.

Voice is wrong for every line - checkpoint mismatch: CustomVoice checkpoint for the speaker mode, Base checkpoint when you're feeding a clone prompt. Check the loader's model_name before blaming the batch.

If your end goal is a talking head, this is the front end: batch-generate the dialogue lines, then feed the per-line AUDIO clips into an audio-driven avatar workflow in order.

CategoryQwen3_TTS_Fast

Inputs (12)

NameTypeDefaultDescription
modelQWEN3TTS_FAST
text_listSTRINGLine 1 Line 2 Line 3
separatorSTRING
languageCOMBO11 options: Auto, Chinese, English, Japanese, Korean, German, +5
seedINT00–18446744073709550000
speakeroptCOMBO9 options: Vivian, Serena, Uncle_Fu, Dylan, Eric, Ryan, +3
clone_promptoptQWEN3TTS_FAST_PROMPT
increment_seedoptBOOLEANtrue
max_new_tokensoptINT20481–8192
temperatureoptFLOAT1.000.1–2
top_poptFLOAT0.800.1–1
repetition_penaltyoptFLOAT1.101–2

Outputs (1)

NameTypeDescription
AUDIOAUDIO