Qwen3-TTS Voice Clone Prompt ⚡
Encode the voice once, reuse it forever — Qwen3-TTS Voice Clone Prompt
- ref_audio
- voice_clone_prompt
Voice cloning has one annoying property in ComfyUI: the expensive step is identical every run. You feed in the same five-second clip, the model re-encodes the same speaker features, and you pay for it again - in wall time, and in the fact that nothing downstream can reuse that work.
Qwen3-TTS Voice Clone Prompt is the fix. It takes a reference clip, runs it through a *-Base checkpoint once, and hands you a VOICE_CLONE_PROMPT you can wire into as many generations as you like.
What it's for
This is the "extract" half of a two-node cloning pipeline - extract here, speak over in Qwen3-TTS Voice Clone. It's worth extending your graph for it whenever you're doing more than one take with the same voice: a batch of lines for one character, a dialogue scene, a video narration where you'll iterate the script five times.
It also pairs with the persistence nodes in the same pack. Extract once, save the prompt with Qwen3-TTS Save Voice, and every session after that starts without a reference clip at all.
How it works
The node loads its own *-Base checkpoint in-node. There's no loader pair, no model socket to wire, which is deliberate: it's a faithful port of the flybirdxx Qwen-TTS node surfaces, so model_choice, device, precision and attention are all live widgets here. Ask for a config another Qwen3-TTS node already has and you get the same cached weights rather than a second copy in VRAM - the pack keeps a single-slot cache keyed on exactly that combination.
On your side, the reference audio is normalised before it goes anywhere: stereo is downmixed to mono, the waveform is flattened to 1-D float32, and anything under 1024 samples gets zero-padded up to the model's own minimum. What comes back on voice_clone_prompt is a picklable feature object from the qwen-tts package - not a tensor you can eyeball in a preview node.
Inputs that matter
- ref_audio - required, and it's the whole ballgame. Five to eight seconds of clean, single-speaker audio beats a minute of noisy interview.
- ref_text - the transcript of that clip. The placeholder says "highly recommended for better quality" and that's honest: leave it blank and the extract still runs, you just get a weaker alignment between voice and words.
- model_choice - 0.6B by default, 1.7B if you have the room. 0.6B is the one people report getting stable on 8GB cards.
- x_vector_only - optional, and the interesting shortcut. Turn it on and only the speaker embedding is extracted, so
ref_textstops mattering at all. It's cheaper, and users going for VRAM headroom reach for it - the trade being that less of the voice comes through. - attention -
autopicks the best installed option in the order sage_attn, flash_attn, sdpa, eager. If you name one you don't have, you get sdpa and a log line.
The output wires into Voice Clone's voice_clone_prompt (where it takes precedence over a raw ref_audio), into Save Voice, or into any of the eight prompt_N slots on Role Bank.
Install
ComfyUI Manager, search the pack title, or by hand:
cd ComfyUI/custom_nodes
git clone https://github.com/ChrisColeTech/ComfyUI-GGUF-Loader
pip install -r ComfyUI-GGUF-Loader/requirements.txt
gguf is the only hard dependency; qwen-tts is the optional one these nodes need, and it's already listed in that requirements file. Models download on first queue into models/Qwen3-TTS/, or prefetch by hand:
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
If qwen-tts fails to import, every Qwen3-TTS node disappears from the menu at once and you get a single line in the startup log - "Qwen3-TTS nodes disabled" - not an error dialog. pip install qwen-tts and restart.
The other one is expectation-setting: this node does not make the clone better, it makes it reusable. If the reference clip is bad, you'll be reusing a bad prompt at speed. And the pack has compatibility shims for newer transformers versions, which is worth knowing because the upstream pack this was ported from pins transformers<5 - you don't need both installed.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| ref_audio | AUDIO | Reference audio (ComfyUI Audio) | |
| ref_text | STRING | — | |
| 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 |
| attention | COMBO | auto | Attention implementation |
| x_vector_onlyopt | BOOLEAN | false | If True, only speaker embedding is extracted (ref_text not needed) |
| unload_model_after_generateopt | BOOLEAN | false | Unload model from memory after generation |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| voice_clone_prompt | VOICE_CLONE_PROMPT | — |