Voice Clone (QwenTTS)
Turn a few seconds of audio into a speaking clone — transcript optional
- reference_audio
- voice
- audio
This is the node everyone installs the pack for, and the one with the worst reputation - which is both deserved and mostly avoidable. Voice Clone (QwenTTS) uses Qwen3-TTS's Base model to clone a voice from a short reference clip (the README says ~3 seconds), then speaks whatever target_text you give it in your voice. It's the zero-shot cloning workhorse of the pack: no training, no fine-tuning, just a reference audio sample and a line.
How cloning works here
Qwen3-TTS clones through a voice prompt: the reference audio is run through the model to produce a speaker embedding (plus, optionally, an in-context-learning "code" prompt from the transcript). That prompt is then used to drive generation in the cloned voice. The practical consequence is that the node needs two things to clone well: the reference_audio and a reference_text transcript of what's being said in it.
That transcript matters more than you'd expect. Qwen3-TTS's clone quality drops sharply when the text doesn't match the audio - the model literally aligns the reference's speech tokens to the transcript. This is also the pack's clever bit: you don't have to hand-type the transcript, because it ships a Whisper STT (QwenTTS) node that writes it for you. Audio in, transcript out, feed both in here.
If you can't be bothered (or the clip is unintelligible), flip x_vector_only to true - that skips the transcript and uses only the speaker embedding. It's the "good enough" path, and honestly the one many people end up on.
The inputs that matter
target_text- what the clone should say. Multiline, so do whole paragraphs.reference_audio(AUDIO) - the voice to clone. Clean, isolated speech wins; background music and room tone are why clones sound "off."reference_text- the transcript. Required unlessx_vector_onlyis on (the basic node will silently fall back to x-vector mode if you leave it blank).voice(VOICE) - a saved voice from the Create Voice (QwenTTS) / Load Voice pair. If you provide this, you don't need reference audio or text at all.model_size-0.6Bor1.7B. 1.7B for anything you care about.language,seed,unload_models- same as the rest of the pack.
Output is a single audio (AUDIO) that feeds save/preview nodes.
Install
ComfyUI Manager (search ComfyUI-QwenTTS) or:
cd ComfyUI/custom_nodes && git clone https://github.com/1038lab/ComfyUI-QwenTTS.git
python3 -m pip install -r ComfyUI/custom_nodes/ComfyUI-QwenTTS/requirements.txt
Cloning uses the Base model (1.7B or 0.6B), which auto-downloads to ComfyUI/models/TTS/Qwen3-TTS/ on first use.
Why it "never works" - and the fixes
The most common complaints in the wild are a stutter that loops on the first word, or a clip that rambles into 2+ minutes of noise. Both are usually the same root cause as the README's top fix: max_new_tokens too high for the target text (the basic node uses 2048 internally) plus sampling noise. Grab the Advanced variant, set max_new_tokens to 512–1024 for short lines, and keep do_sample=false. Also check reference_text matches the audio word-for-word - a mismatched transcript is the other classic cause of garbled clones.
Be realistic about the ceiling: the community's TTS ranking puts Qwen3-TTS behind EchoTTS, Chatterbox, and VibeVoice on likeness. It's fast, local, and multilingual (10 languages), but if a spot-on impersonation is the goal, this isn't the tool - reach for it when you want "a voice like this" cheaply and offline.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| target_text | STRING | Hello, this is a cloned voice. | Text to speak |
| model_size | COMBO | 1.7B | 2 options: 0.6B, 1.7B |
| language | COMBO | Auto | 11 options: Auto, Chinese, English, Japanese, Korean, French, +5 |
| reference_audioopt | AUDIO | Reference audio for cloning (not needed if voice is provided) | |
| reference_textopt | STRING | Transcript of reference audio | |
| x_vector_onlyopt | BOOLEAN | false | Skip ref_text by using speaker embedding only |
| voiceopt | VOICE | — | |
| unload_modelsopt | BOOLEAN | true | Unload cached models after generation |
| seedopt | INT | -1-1–18446744073709550000 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | — |