π¨ Qwen3-TTS VoiceDesign
Invent a voice from a sentence
- audio
Voice cloning needs a reference voice to copy. VoiceDesign skips that entirely: you describe a voice in words - "a gentle female voice with a high pitch," "a gruff elderly man, slightly hoarse" - and the model invents it. No reference clip, no transcript, no voice you've ever heard before. It's the pack's answer to the "what if there were a voice for this character" problem, and it's the most fun node in the whole pack precisely because you're not cloning anyone; you're conjuring.
How it works
The two required text inputs are text - the line to speak - and instruct, the description of the voice you want. Both are mandatory: the node raises an error if instruct is empty, because there's nothing to generate from otherwise. The model runs on the VoiceDesign variant, and one restriction is baked into the source: VoiceDesign only supports the 1.7B model. Pick 0.6B and it errors out - that's by design, not a bug, so don't fight it.
The rest of the inputs are the pack's standard toolkit: model_choice, device, precision, language (Auto plus ten), and the generation knobs seed, max_new_tokens, top_p/top_k/temperature/repetition_penalty, attention, unload_model_after_generate. Output is a single audio.
Writing good instructions
The instruct field does a lot of work, and the style of prompt that works here is concrete and adjective-heavy: describe timbre ("deep", "breathy", "nasal"), age or gender if it matters, delivery ("slow and deliberate", "cheerful", "monotone"), and any persona flavor. Short, clear English sentences tend to land better than elaborate prose - the model parses descriptions, it doesn't write fanfic. If you're planning a character with a designed voice, you can pair VoiceDesign with the pack's persistence loop: wire its output into VoiceClonePrompt to extract features from the invented voice, SaveVoice it, and reuse it in dialogue later.
The honest caveat from the community: VoiceDesign can be inconsistent - people have reported it ignoring styles and defaulting to a flat American accent. Treat the first output as a rough sketch; nudge the instruction and re-run. That's also why the pack's own advice leans on cloning for anything that must be right.
Install
VoiceDesign is part of flybirdxx/ComfyUI-Qwen-TTS ("Qwen3-TTS - Voice Synthesis & Cloning"). ComfyUI Manager: search "Qwen3-TTS". Or:
cd ComfyUI/custom_nodes
git clone https://github.com/flybirdxx/ComfyUI-Qwen-TTS
cd ComfyUI-Qwen-TTS
pip install -r requirements.txt
Restart ComfyUI. Pin the pack's one critical dependency - transformers 5.0+ breaks it:
pip install "transformers>=4.57.0,<5.0.0" # e.g. transformers==4.57.3
First run downloads the VoiceDesign model into models/qwen-tts/ (multi-GB, and it looks frozen while it pulls). Pre-fetch with python download_models.py if you want it over with.
Common issues
An error saying "Text and instruction description are required" means instruct is blank - fill it in. "VoiceDesign only supports 1.7B" means you flipped the model choice to 0.6B - flip it back. And if the voice comes out generic or ignores your style description, that's the model being temperamental rather than broken: reword the instruction, keep it concrete, and re-run. One design note: since it's 1.7B only, this is the heaviest node in the pack per run - enable unload_model_after_generate on low VRAM.
Inputs (14)
| Name | Type | Default | Description |
|---|---|---|---|
| text | STRING | Hello world | β |
| instruct | STRING | β | |
| 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 | β |
| 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 |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | β |