Qwen3-TTS Clone Prompt 🧠
Analyze your reference audio once
- model_obj
- ref_audio
- voice_clone_prompt
If you've tried cloning a voice with Qwen3-TTS the naive way - reference audio straight into a Voice Clone node - you've probably noticed something annoying: every time you change the target text, it re-analyzes the reference clip from scratch. Same audio, same analysis, wasted minutes. This node exists to break that cycle. Feed it your reference audio once, get back a reusable voice_clone_prompt, and from then on every generation is just text in, audio out.
The README calls the two approaches "快速模式" (quick mode) and "高效模式" (efficient mode), and it flat-out recommends the efficient one. This node is that mode.
What it does
Qwen3TTSVoiceClonePrompt turns a reference recording into the compact voice representation Qwen3-TTS uses for cloning. The output is a QWEN3_PROMPT - not audio, but a model-usable prompt object - which you can feed into a Voice Clone node's voice_clone_prompt input, hand to the Role Bank for a named character, or save with the Prompt Manager so you never need the original clip again. It's the asset that makes the pack's whole "voice as a saved file" workflow possible.
The inputs that matter:
model_obj- must be a Base model. The node enforces this (Model Mismatchif you feed it a CustomVoice model).ref_audio- your reference clip. A clean 5–8 second sample works well in practice; that's the territory other zero-shot cloners live in too.ref_text- the transcript of what's said in the clip. Required... unless...x_vector_only- the escape hatch. Turn this on and it skips the text entirely and clones from the voiceprint (the README's "X-Vector 纯声纹模式"). You get slightly lower similarity, but you don't need to know what the clip says. Handy when the reference is a language you can't transcribe, or a clip you found without a script.
Output: voice_clone_prompt (QWEN3_PROMPT).
How it works
Mechanically it's thin: it flattens the ComfyUI AUDIO into a numpy waveform, then calls create_voice_clone_prompt() on the loaded model with your (audio, text) pair (or textless, in x-vector mode). The heavy lifting is inside Qwen3-TTS itself - this is where the model builds its speaker embedding. That's also why it's slow enough to be worth caching: the analysis runs once here instead of on every regeneration.
Fitting it into a workflow
Qwen3TTSLoader (Base) ─┬─> Qwen3TTSVoiceClonePrompt ─> voice_clone_prompt
│ ▲ │
Load reference audio ──┘ ref_audio / ref_text ▼
Qwen3TTSVoiceClone (target text)
Wire the voice_clone_prompt into a Voice Clone node's prompt input, and you can hammer out different target texts without touching the reference again. The pack also added [pause:0.5] support to the generated prompts, so even cached voices can hold a beat.
Gotchas
- Don't have a transcript? Two roads: tick
x_vector_only, or run the clip through this pack's SenseVoice ASR node to transcribe it and feed the text back in asref_text. The second route keeps full similarity. - Emotion is the weak spot. Community testing of Qwen3-TTS cloning found the identity comes through strongly but emotion/acting instructions tend to come out neutral or inconsistent - and
x_vector_onlyis slightly worse on expressiveness. If you need an angry or whispering take, budget for multiple seeds and some instruct fiddling. - Base model only, remember. Clone nodes won't accept a CustomVoice-model
model_obj, and neither will this one. - It needs the same heavy install as the rest of the pack: clone +
pip install -r requirements.txt, and let the model download once. There's no per-node install here - it's all one pack, one dependency stack.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| model_obj | QWEN3_MODEL | — | |
| ref_audio | AUDIO | — | |
| x_vector_only | BOOLEAN | false | — |
| ref_textopt | STRING | 参考音频里的具体内容文本。 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| voice_clone_prompt | QWEN3_PROMPT | — |