Nodes/Qwen3-TTS - Voice Synthesis & Cloning/🎭 Qwen3-TTS VoiceClone
ComfyUI Node

🎭 Qwen3-TTS VoiceClone

Clone a voice from a ten-second clip

By flybirdxxΒ·Created 7 months agoΒ·Updated 3 months agoΒ· 1,874
🎭 Qwen3-TTS VoiceClone
  • ref_audio
  • voice_clone_prompt
  • audio
β—„target_textGood one. Okay, fine, I'm just gonna leave this sock monkey here. Goodbye.β–Ί
β—„model_choice0.6Bβ–Ί
β—„deviceautoβ–Ί
β—„precisionbf16β–Ί
β—„languageAutoβ–Ί
β—„ref_textβ–Ί
β—„seed0β–Ί
β—„max_new_tokens2048β–Ί
β—„top_p0.80β–Ί
β—„top_k20β–Ί
β—„temperature1.0β–Ί
β—„repetition_penalty1.05β–Ί
β—„x_vector_onlyfalseβ–Ί
β—„attentionautoβ–Ί
β—„unload_model_after_generatefalseβ–Ί
β—„custom_model_pathβ–Ί

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 language for 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.

CategoryQwen3-TTS

Inputs (18)

NameTypeDefaultDescription
target_textSTRINGGood one. Okay, fine, I'm just gonna leave this sock monkey here. Goodbye.β€”
model_choiceCOMBO0.6B2 options: 0.6B, 1.7B
deviceCOMBOauto5 options: auto, cuda, xpu, mps, cpu
precisionCOMBObf162 options: bf16, fp32
languageCOMBOAuto11 options: Auto, Chinese, English, Japanese, Korean, French, +5
ref_audiooptAUDIOReference audio (ComfyUI Audio)
ref_textoptSTRINGβ€”
voice_clone_promptoptVOICE_CLONE_PROMPTReusable voice clone prompt from VoiceClonePromptNode
seedoptINT00–18446744073709550000β€”
max_new_tokensoptINT2048512–4096β€”
top_poptFLOAT0.800–1Nucleus sampling probability
top_koptINT200–100Top-k sampling parameter
temperatureoptFLOAT1.00.1–2Sampling temperature
repetition_penaltyoptFLOAT1.051–2Penalty for repetition
x_vector_onlyoptBOOLEANfalseβ€”
attentionoptCOMBOautoAttention implementation
unload_model_after_generateoptBOOLEANfalseUnload model from memory after generation
custom_model_pathoptSTRINGβ€”

Outputs (1)

NameTypeDescription
audioAUDIOβ€”