π Qwen3-TTS VoiceClone
Clone a voice from a ten-second clip
- ref_audio
- voice_clone_prompt
- audio
This is the node people install the pack for. Give VoiceClone a short clip of someone talking plus the text you want them to say, and it speaks your words in their voice. No training, no fine-tuning - Qwen3-TTS does zero-shot cloning straight from the reference, which puts it in the same generation of open models as Chatterbox that finally made local cloning feel like a real alternative to ElevenLabs. When it works it's genuinely good; the trick is making sure the conditions that make it work are met.
How it works
You provide ref_audio (5β15 seconds of clean speech - this window matters) and ref_text, the transcript of what's said in that clip. The model extracts the speaker's voice features from the audio and aligns them against the transcript, then synthesizes target_text in that voice. It runs on the Base model at either 0.6B (fast, the default) or 1.7B (better quality).
Two shortcuts worth knowing. First, you don't have to re-extract every time: there's a voice_clone_prompt input, and if you feed it a pre-extracted prompt from VoiceClonePrompt (or LoadSpeaker), it takes priority over a raw reference and skips re-encoding. Second, x_vector_only switches to speaker-embedding-only extraction, which means ref_text isn't needed - at a quality cost. Use it only when you have clean audio and no transcript.
The rest is the pack's standard generation stack: language (Auto plus ten), seed, max_new_tokens, top_p/top_k/temperature/repetition_penalty, attention, unload_model_after_generate, plus custom_model_path if you trained a speaker and want to use it here. Output: audio, ready for preview or a save node.
Getting a good clone
The README's advice is the real troubleshooting section, because this node lives and dies by the reference clip:
- Clean, noise-free audio, 5β15 seconds. Background music, room tone, and reverb all leak into the extracted features.
- Correct
ref_text. Getting the transcript right is the single biggest quality lever. Misspoken or missing transcripts produce slurred, garbled output. - Match the language. Pick the right
languagefor the target text.
Community reports back this up - the recurring "Qwen3-TTS Voice Clone never works" complaints (stutter, looping first words) almost always trace to a bad reference or a setup problem like a wrong transformers version, not the model itself. Fix the reference, not the knobs.
Install
VoiceClone is the flagship node 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. Then the one dependency rule the README shouts at you: the pack is incompatible with transformers 5.0+. Pin it:
pip install "transformers>=4.57.0,<5.0.0" # or exactly: pip install transformers==4.57.3
Models auto-download into models/qwen-tts/ on first run (a multi-GB pull - the first generation will look frozen). Pre-download with python download_models.py to skip the wait.
Common issues
First run is slow because of the download; later runs are fast because the model stays cached unless you enable unload_model_after_generate. Stutter or looping first-word output means the reference or its transcript is bad - re-record, don't fiddle with sampling params. On low VRAM, the 0.6B model and unload_model_after_generate on will get you through; OOM errors usually say "use a smaller model," and they mean it.
Inputs (18)
| Name | Type | Default | Description |
|---|---|---|---|
| target_text | STRING | Good one. Okay, fine, I'm just gonna leave this sock monkey here. Goodbye. | β |
| model_choice | COMBO | 0.6B | 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 |
| ref_audioopt | AUDIO | Reference audio (ComfyUI Audio) | |
| ref_textopt | STRING | β | |
| voice_clone_promptopt | VOICE_CLONE_PROMPT | Reusable voice clone prompt from VoiceClonePromptNode | |
| 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 |
| x_vector_onlyopt | BOOLEAN | false | β |
| attentionopt | COMBO | auto | Attention implementation |
| unload_model_after_generateopt | BOOLEAN | false | Unload model from memory after generation |
| custom_model_pathopt | STRING | β |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | β |