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

Qwen3-TTS Voice Clone Prompt ⚡

Encode the voice once, reuse it forever — Qwen3-TTS Voice Clone Prompt

By ChrisColeTech·Created 3 months ago·Updated 10 days ago· 29
Qwen3-TTS Voice Clone Prompt ⚡
  • ref_audio
  • voice_clone_prompt
◄ref_text►
◄model_choice0.6B►
◄deviceauto►
◄precisionbf16►
◄attentionauto►
◄x_vector_onlyfalse►
◄unload_model_after_generatefalse►

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_text stops 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 - auto picks 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.

Category🤖 CCTech/Qwen TTS

Inputs (8)

NameTypeDefaultDescription
ref_audioAUDIOReference audio (ComfyUI Audio)
ref_textSTRING—
model_choiceCOMBO0.6B2 options: 0.6B, 1.7B
deviceCOMBOauto5 options: auto, cuda, xpu, mps, cpu
precisionCOMBObf162 options: bf16, fp32
attentionCOMBOautoAttention implementation
x_vector_onlyoptBOOLEANfalseIf True, only speaker embedding is extracted (ref_text not needed)
unload_model_after_generateoptBOOLEANfalseUnload model from memory after generation

Outputs (1)

NameTypeDescription
voice_clone_promptVOICE_CLONE_PROMPT—