Qwen3-TTS Voice Clone ⚡
Give it a clip, make it say anything
- ref_audio
- voice_clone_prompt
- AUDIO
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_audioorvoice_clone_promptor 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_penaltyup 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.
Inputs (19)
| 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 Qwen3-TTS Voice Clone Prompt (or Load Speaker). Takes precedence over ref_audio. | |
| seedopt | INT | 00–18446744073709550000 | — |
| max_new_tokensopt | INT | 2048512–4096 | — |
| top_popt | FLOAT | 1.000–1 | Nucleus sampling probability |
| top_kopt | INT | 500–100 | Top-k sampling parameter |
| temperatureopt | FLOAT | 0.90.1–2 | — |
| repetition_penaltyopt | FLOAT | 1.051–2 | Penalty for repetition |
| x_vector_onlyopt | BOOLEAN | false | If True, only the speaker embedding is used (ref_text not needed). |
| instructopt | STRING | — | |
| 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 | — |