Qwen3-TTS Voice Design 🎨
Describe the voice you want — a gruff wizard, a cheerful shopkeeper, anything
- model_obj
- AUDIO
Qwen3 TTS Voice Design is the node that finally makes "give me a voice that doesn't exist yet" a text field instead of a quest. You describe a voice in plain language - "elderly male voice, gruff and gravelly, annoyed tone with slight wheeze" - and it invents one that matches, then reads your text in it. It's the middle ground between the preset speakers (Custom Voice, zero effort) and voice cloning (requires reference audio). Where cloning gives you an existing voice, design gives you a hypothetical one: characters, game NPCs, narrators, your own audiobook fantasy.
The pack is based on Alibaba's open-weights Qwen3-TTS, which is notable for splitting voice design from voice cloning into separate models. That split matters here because it's a dedicated capability, not a hack - this node loads the VoiceDesign model specifically, and it's the only node in the pack that uses it.
What it takes in
The inputs are refreshingly light:
- text - what the invented voice says
- voice_description - the prompt, multiline. This is the whole game.
- language - Auto plus ten languages
- seed - to reproduce the same voice-ish take
Plus the usual sampling knobs (max_new_tokens, temperature, top_p, repetition_penalty), which you can leave alone. Output is a single AUDIO that plugs into Preview Audio / Save Audio.
The README's example descriptions are a good calibration of the level of detail that works:
"A warm, gentle young female voice with clear pronunciation" "Deep masculine voice with slight rasp, confident and commanding" "Elderly male voice, wise and calm, with slight tremor"
More concrete detail - age, gender, timber, attitude, speaking pace - reads better than vague vibes. The QUICKSTART even shows descriptions written in Chinese working for Chinese text, so you can match the description language to the content language.
The honest caveat
Under the hood, voice_description is passed to the model's voice-design generation as an instruction. Which works - usually. It's worth knowing the community has reported this being the most hit-or-miss node in the Qwen3-TTS family: users on r/comfyui have complained that style instructions get ignored and output collapses to a generic American-accented voice, especially with short or fluffy descriptions. My read: treat the description like a LoRA trigger phrase - specific beats eloquent. If you get a generic readout, tighten the description (add age, accent, mood, pace) rather than making it longer.
Getting it running
Same pack install as the rest: ComfyUI Manager search "Qwen3-TTS", or clone https://github.com/PGCRT/ComfyUI-QWEN3_TTS into custom_nodes/, pip install -r requirements.txt, restart. The critical bit: load the Qwen3-TTS-12Hz-1.7B-VoiceDesign model in the Model Loader - there's no 0.6B VoiceDesign variant, so this is the one node that only has a 1.7B option. First run downloads it into ComfyUI/models/TTS/, so budget for that. And yes, this is the node people wire the wrong model into; the VoiceDesign model does not work in the Custom Voice or clone nodes, and vice versa.
One practical note: since the seed matters and the voice can drift between takes, once you land a description you like, lock the seed and keep that node frozen. Iterate by cloning the node and changing the description, not by re-running the same graph.
Inputs (14)
| Name | Type | Default | Description |
|---|---|---|---|
| model_obj | QWEN3_MODEL | — | |
| text | STRING | 哥哥,你回来啦。[pause:0.5] 人家等了你好久好久了!,要抱抱! It's in the top drawer... wait, it's empty? | — |
| voice_instruction | STRING | 体现撒娇稚嫩的萝莉女声,音调偏高且起伏明显,营造出黏人、做作又刻意卖萌的听觉效果。 Speak in an incredulous tone, but with a hint of panic. | — |
| language | COMBO | Chinese | 10 options: Chinese, English, Japanese, Korean, German, French, +4 |
| output_mode | COMBO | Concatenate (Merge) | 2 options: Batch (Separate), Concatenate (Merge) |
| seed | INT | 00–18446744073709550000 | — |
| max_new_tokensopt | INT | 204864–8192 | — |
| temperatureopt | FLOAT | 0.900.1–2 | — |
| top_popt | FLOAT | 1.000.1–1 | — |
| top_kopt | INT | 500–200 | — |
| repetition_penaltyopt | FLOAT | 1.050.1–2 | — |
| subtalker_temperatureopt | FLOAT | 0.900.1–2 | — |
| subtalker_top_popt | FLOAT | 1.000.1–1 | — |
| subtalker_top_kopt | INT | 500–200 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| AUDIO | AUDIO | — |