Custom Voice (QwenTTS)
Nine built-in voices, zero cloning — the fastest way to get Qwen3-TTS talking
- audio
You want a character voice, a narration track, or ten seconds of dialogue - and you don't want to babysit a clone. This is the node for that. Custom Voice (QwenTTS) is the basic text-to-speech node from the ComfyUI-QwenTTS pack, and it's the one you'll reach for first: pick a speaker, type your line, get an AUDIO output. No API, no key, no reference clip required. It's the ComfyUI-native way to run Alibaba's Qwen3-TTS-12Hz models entirely on your own machine.
What it actually does
Under the hood this loads the Qwen3-TTS-12Hz CustomVoice model from Hugging Face (1.7B or 0.6B), encodes your text into speech tokens with the 12Hz tokenizer, and decodes them to a waveform - all local. The "CustomVoice" models ship with nine premium preset timbres, which is what the speaker dropdown is: Aiden, Dylan, Eric, Ono_Anna, Ryan, Serena, Sohee, Uncle_Fu, and Vivian. No extraction, no transcript, no finetuning. If you just need a good voice fast, this is the least fiddly TTS node in the pack.
The node auto-selects your device in CUDA → MPS → CPU order, so it runs on Apple Silicon and CPU too - just slower. Model files are downloaded automatically to ComfyUI/models/TTS/Qwen3-TTS/ on first use, so the first run will hang for a while grabbing a multi-gigabyte model. That's expected.
The inputs that matter
Four required inputs, and you'll only fiddle with two of them:
text- the line to synthesize.speaker- one of the nine preset voices.model_size-0.6Bor1.7B. The 1.7B sounds notably better; use 0.6B when VRAM is tight.language-Autoplus ten languages. The README's 80%-of-problems tip: use the speaker's native language instead of Auto if you can. Mismatched language is a big source of "why does it sound wrong" threads.
Optional inputs worth knowing: instruct is a free-text style instruction ("speak slowly and softly"), seed for reproducibility (-1 = random), and unload_models defaults to true, which clears the model from VRAM after each generation - keep it on unless you're batching.
The single output is audio (type AUDIO), which wires straight into ComfyUI's save/preview audio nodes (or this pack's Audio Duration node if you need timing).
How to install
Via ComfyUI Manager (search ComfyUI-QwenTTS), or manually:
cd ComfyUI/custom_nodes
git clone https://github.com/1038lab/ComfyUI-QwenTTS.git
# then install requirements - use the embedded python on Windows Portable:
python_embeded\python.exe -m pip install -r ComfyUI\custom_nodes\ComfyUI-QwenTTS\requirements.txt
Then restart ComfyUI. This pack depends on transformers>=4.57.0, torch>=2.9.1, torchaudio, librosa, sentencepiece, and a few more - it's a heavier install than most image nodes, and it's exactly the kind of dependency stack that can clash with other packs.
Common issues
- Output hums or trails on past the end of the sentence. This is the Qwen3-TTS classic. The basic node fixes
max_new_tokensat 2048 internally; for short text that's a lot of runway. If you hit it, switch to the Advanced variant and lowermax_new_tokensto 512–1024. 'Qwen3TTSTalkerConfig' object has no attribute 'pad_token_id'- a transformers 5.x nightly build. Pintransformers==4.57.3withtokenizers<0.20.- CUDA out of memory - split long scripts into chunks, use
0.6B, and grab the Advanced node to forceprecision=bf16.
Worth knowing for context: Qwen3-TTS launched API-only and the community grumbled before Alibaba released the weights - so this whole pack only exists because they did. It's not the clone-quality champion (Chatterbox and VibeVoice are still the likeness kings), but as a fast, local, zero-setup preset-voice generator, it's genuinely good.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| text | STRING | Hello from Qwen3-TTS. | Text to synthesize |
| speaker | COMBO | Ryan | 9 options: Aiden, Dylan, Eric, Ono_Anna, Ryan, Serena, +3 |
| model_size | COMBO | 1.7B | 2 options: 0.6B, 1.7B |
| language | COMBO | Auto | 11 options: Auto, Chinese, English, Japanese, Korean, French, +5 |
| instructopt | STRING | Style instruction | |
| unload_modelsopt | BOOLEAN | true | Unload cached models after generation |
| seedopt | INT | -1-1–18446744073709550000 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | — |