Nodes/ComfyUI-QwenTTS/Voice Clone (QwenTTS)
ComfyUI Node

Voice Clone (QwenTTS)

Turn a few seconds of audio into a speaking clone — transcript optional

By 1038lab·Created 7 months ago·Updated 7 months ago· 249
Voice Clone (QwenTTS)
  • reference_audio
  • voice
  • audio
target_textHello, this is a cloned voice.
model_size1.7B
languageAuto
reference_text
x_vector_onlyfalse
unload_modelstrue
seed-1

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 unless x_vector_only is 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.6B or 1.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.

Category🧪AILab/🎙️QwenTTS

Inputs (9)

NameTypeDefaultDescription
target_textSTRINGHello, this is a cloned voice.Text to speak
model_sizeCOMBO1.7B2 options: 0.6B, 1.7B
languageCOMBOAuto11 options: Auto, Chinese, English, Japanese, Korean, French, +5
reference_audiooptAUDIOReference audio for cloning (not needed if voice is provided)
reference_textoptSTRINGTranscript of reference audio
x_vector_onlyoptBOOLEANfalseSkip ref_text by using speaker embedding only
voiceoptVOICE
unload_modelsoptBOOLEANtrueUnload cached models after generation
seedoptINT-1-1–18446744073709550000

Outputs (1)

NameTypeDescription
audioAUDIO