Nodes/ComfyUI-GGUF-Loader/Qwen3-TTS Voice Clone ⚡
ComfyUI Node

Qwen3-TTS Voice Clone ⚡

Give it a clip, make it say anything

By ChrisColeTech·Created 3 months ago·Updated 10 days ago· 29
Qwen3-TTS Voice Clone ⚡
  • 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_p1.00►
◄top_k50►
◄temperature0.9►
◄repetition_penalty1.05►
◄x_vector_onlyfalse►
◄instruct►
◄attentionauto►
◄unload_model_after_generatefalse►
◄custom_model_path►

Cloning is the TTS job where the model matters less than the reference. Qwen3-TTS Voice Clone takes a short clip of somebody talking - or a voice you already encoded - and makes that voice read whatever you type into it.

It's a different flavour from the local names you've probably read about. Chatterbox is still the community's default for generic cloned speech, and F5-TTS is the fast one. Qwen3-TTS landed with open weights in early 2026 and carved out its own corner: very short reference clips, ten languages behind one node, and a clean split between cloning a voice and describing one. If your voice is a recording, this is the node.

How it works

The node loads its own *-Base checkpoint in-node - model_choice (0.6B or 1.7B), device, precision, attention are all widgets on the node itself, ported faithfully from the flybirdxx surfaces. There is no upstream model wiring to get wrong, which is the nicest thing about this pack's Qwen TTS family: drop the node in, point it at audio, queue.

Under the hood it's autoregressive over the codec's own token rate - the 12Hz in the checkpoint names is that rate - and the waveform is decoded back into a ComfyUI AUDIO dict. Reference audio gets downmixed to mono and padded to at least 1024 samples before use.

The inputs you actually set

  • target_text - what it says. Multiline, so paste a paragraph if you want.
  • voice_clone_prompt - a reusable prompt from Voice Clone Prompt or Load Speaker. Takes precedence over ref_audio, so if you're wondering why your new reference clip is being ignored, that's why.
  • ref_audio + ref_text - the one-shot path: clip in, transcript in. You need at least one of ref_audio or voice_clone_prompt or the node stops with "Either reference audio or voice clone prompt is required".
  • model_choice - 0.6B default. On 8GB cards that's the one people report working; 1.7B is better where it fits.
  • max_new_tokens - 512 to 4096, default 2048. This is your length budget, not a target. Long text that runs out of tokens gets truncated, so raise it for a paragraph.
  • temperature / top_p / top_k / repetition_penalty - speech sampling, same shape as LLM sampling. Defaults (0.9, 1.0, 50, 1.05) are sane; nudge repetition_penalty up if it loops.
  • seed - with control_after_generate, so you can audition takes without editing the graph.

The output is a single AUDIO, which means it goes anywhere audio goes: SaveAudio, a video's audio input, or the reference track for a lip-sync pass.

Install

ComfyUI Manager, search the pack title, or:

cd ComfyUI/custom_nodes
git clone https://github.com/ChrisColeTech/ComfyUI-GGUF-Loader
pip install -r ComfyUI-GGUF-Loader/requirements.txt   # gguf is the hard dep; qwen-tts is the one this needs

Weights land in models/Qwen3-TTS/ on first queue and every load after that is offline. To fetch ahead of time:

huggingface-cli download Qwen/Qwen3-TTS-12Hz-0.6B-Base --local-dir ComfyUI/models/Qwen3-TTS/Qwen3-TTS-12Hz-0.6B-Base

Where people get burned

Stuttering, garbage, or a clip that ends after one word. This is the complaint you'll find in the wild, and it tracks the reference more than the settings. Clean single-speaker audio of five to eight seconds, a transcript that matches the clip word for word, and 0.6B on a small card is the setup that reports back as stable. If you've tried all that, the attention fallback and the precision value are the other two knobs worth moving (bf16 is the default; pre-Ampere cards get quietly switched to fp32 and forced to eager attention).

Emotions don't take. You can put styling in instruct here, but cloned-voice emotion control is the known soft spot of this family - people struggling to get "angry" or "whispery" out of a clone is a recurring thread. The design and clone checkpoints are separate models; emotion is Voice Design's job, or a finetune's. Don't buy the node on that feature.

custom_model_path silently doesn't apply. Point it at a fine-tuned folder that contains a speech_tokenizer/ subfolder, or it's not a full Qwen3-TTS model folder and the node tells you so.

VRAM juggling in a mixed workflow. unload_model_after_generate clears the loaded checkpoint and the CUDA cache after each run. Useful when a diffusion model needs the card back; leave it off when you're doing a dozen takes in a row and want the cached weights.

Category🤖 CCTech/Qwen TTS

Inputs (19)

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 Qwen3-TTS Voice Clone Prompt (or Load Speaker). Takes precedence over ref_audio.
seedoptINT00–18446744073709550000—
max_new_tokensoptINT2048512–4096—
top_poptFLOAT1.000–1Nucleus sampling probability
top_koptINT500–100Top-k sampling parameter
temperatureoptFLOAT0.90.1–2—
repetition_penaltyoptFLOAT1.051–2Penalty for repetition
x_vector_onlyoptBOOLEANfalseIf True, only the speaker embedding is used (ref_text not needed).
instructoptSTRING—
attentionoptCOMBOautoAttention implementation
unload_model_after_generateoptBOOLEANfalseUnload model from memory after generation
custom_model_pathoptSTRING—

Outputs (1)

NameTypeDescription
AUDIOAUDIO—