π΅ Qwen3-TTS CustomVoice
The Qwen3-TTS node that just works
- audio
Not every TTS job needs a reference clip. Sometimes you just want a decent voice to read a line out loud, and you don't want to hunt down clean audio of someone to clone. That's what CustomVoice is for: it's the "just works" node in the Qwen3-TTS pack, using a baked-in list of preset speakers instead of cloning. Pick Ryan, hit run, get a WAV. Nothing to upload, no reference text to transcribe.
The pack wraps Alibaba's open-weight Qwen3-TTS models, and this node drives the dedicated CustomVoice variant (0.6B or 1.7B, default 1.7B). There are nine preset speakers - Aiden, Dylan, Eric, Ono_anna, Ryan, Serena, Sohee, Uncle_fu, Vivian - a mix of English and Asian name archetypes. You feed it the text you want spoken, optionally an instruct style hint, and it returns audio. If you've used any TTS node, this is the familiar part; the Qwen models just happen to be noticeably better at prosody and multilingual output than the old guard.
The inputs that actually matter
The speaker dropdown is the whole point, and the text field is what it speaks. Two things beyond that are worth touching:
instruct- an optional style instruction ("calm, slow, like a bedtime story"). The pack's sibling VoiceDesign node lives and dies by this field; here it's seasoning, not a requirement.model_choice- 0.6B if you're on low VRAM and just demoing, 1.7B for anything you'll actually keep.
Everything else in the schema is the pack's standard generation toolkit: language (Auto plus ten languages), seed, max_new_tokens, and the sampling knobs top_p, top_k, temperature, repetition_penalty. Defaults are sane - leave them alone until a line comes out robotic, then nudge temperature up a hair. attention (auto/sage_attn/flash_attn/sdpa/eager) and unload_model_after_generate are the memory-management pair; enable the unload toggle if you're under ~8GB VRAM or running several different models in one graph. There's also custom_model_path and custom_speaker_name, which exist so a model you fine-tuned with the pack's Train node can load here - skip them unless you've actually trained a speaker.
The single output is audio, a standard ComfyUI AUDIO tensor. Wire it into a preview or a save/preview audio node and you're done.
Install
This ships in flybirdxx/ComfyUI-Qwen-TTS (pack title "Qwen3-TTS - Voice Synthesis & Cloning"). Easiest via ComfyUI Manager - search "Qwen3-TTS" and install. By hand:
cd ComfyUI/custom_nodes
git clone https://github.com/flybirdxx/ComfyUI-Qwen-TTS
cd ComfyUI-Qwen-TTS
pip install -r requirements.txt
Restart ComfyUI. The one dependency that will bite you: the pack breaks on transformers 5.0+. Pin it:
pip install "transformers>=4.57.0,<5.0.0" # or exactly: pip install transformers==4.57.3
Nothing to configure for models - the first run auto-downloads the tokenizer and the model you pick from HuggingFace into ComfyUI/models/qwen-tts/. That first generation looks hung while it pulls a multi-GB model; to avoid the surprise, pre-download with python download_models.py from the pack folder.
Common issues
First generation taking forever is just the download - let it finish once. "Model class is not loaded" in the console means the qwen_tts package failed to import, and the usual culprit is the transformers version. Clone stutter, which hits the pack's other nodes, isn't really a thing here because you're not cloning. If a speaker sounds off, try a different one before touching sampling params - the presets genuinely differ in timbre, and some fit certain text better than others. And keep in mind this is the pack's lowest-common-denominator node: the fun starts with VoiceClone and VoiceDesign.
Inputs (17)
| Name | Type | Default | Description |
|---|---|---|---|
| text | STRING | Hello world | β |
| speaker | COMBO | Ryan | 9 options: Aiden, Dylan, Eric, Ono_anna, Ryan, Serena, +3 |
| model_choice | COMBO | 1.7B | 2 options: 0.6B, 1.7B |
| device | COMBO | auto | 5 options: auto, cuda, xpu, mps, cpu |
| precision | COMBO | bf16 | 2 options: bf16, fp32 |
| language | COMBO | Auto | 11 options: Auto, Chinese, English, Japanese, Korean, French, +5 |
| seedopt | INT | 00β18446744073709550000 | β |
| instructopt | STRING | β | |
| max_new_tokensopt | INT | 2048512β4096 | β |
| top_popt | FLOAT | 0.800β1 | Nucleus sampling probability |
| top_kopt | INT | 200β100 | Top-k sampling parameter |
| temperatureopt | FLOAT | 1.00.1β2 | Sampling temperature |
| repetition_penaltyopt | FLOAT | 1.051β2 | Penalty for repetition |
| attentionopt | COMBO | auto | Attention implementation |
| unload_model_after_generateopt | BOOLEAN | false | Unload model from memory after generation |
| custom_model_pathopt | STRING | β | |
| custom_speaker_nameopt | STRING | β |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | β |