Qwen TTS Voice Clone Prompt
Clone a voice from three seconds of audio, no API key required
- model
- ref_audio
- voice_prompt
The name undersells it. This node takes a snippet of somebody's voice - a couple of seconds of clean audio - and builds a "voice clone prompt" that Qwen3-TTS then uses to speak anything you want in that voice. It's the closest thing in this pack to an ElevenLabs clone sitting in your local ComfyUI graph. No API, no subscription, no credit card. The 1.7B custom-voice model that backs it was one of the most-hyped open TTS releases of late 2025, and community tests kept calling out how well it held up on a midrange GPU.
Where this fits: it doesn't generate audio. It produces a QWEN_TTS_VOICE_PROMPT object - the voice identity - which you feed into something that turns text into sound. In a Vantage workflow that usually means the Speaker Bank → Multi Speaker chain, so one cloned voice (or five) can narrate a whole dialogue.
What it needs
- model - the
custom_voice_modeloutput fromQwenTTSModelDownloader. - ref_audio - a ComfyUI
AUDIOobject. Load one with any audio loader you have (VHS or the pack's own audio loading node). Keep it short and clean; 3–30 seconds of speech, no music, no background hiss if you can help it. Garbage reference audio is the single biggest cause of a mushy clone.
That's the whole required set. Everything else is optional tuning:
- ref_text - the transcript of the reference clip. Qwen can get the phonetic content from the audio itself, but a correct transcript improves pronunciation and prosody noticeably. Leave blank and it goes audio-only.
- x_vector_only - toggle to keep only the speaker's vocal identity and throw away phonetic content. Useful when your reference clip's content would leak into the read ("say this sentence in this voice" vs. "talk like this person about anything").
- save_voice + voice_name - persist the built prompt to disk (it lands in the pack's
custom_voices/folder). Then a Speaker Bank node can load it later without ever touching the reference audio again. If you save,voice_nameis required - the node refuses to run otherwise. - overwrite_existing - replace a saved voice of the same name instead of auto-suffixing
-1. - unload_model_after_prompt - drop the 1.7B clone model from VRAM as soon as the prompt is built. Do this in multi-voice pipelines where the model would otherwise sit loaded between calls.
What comes out
One output: voice_prompt. Wire it into a Speaker Bank (to bundle several voices) or straight into the TTS generation path.
Install
This is one node in the Vantage-Nodes pack:
cd ComfyUI/custom_nodes
git clone https://github.com/vantagewithai/Vantage-Nodes.git
pip install -r requirements.txt
Or ComfyUI Manager → search "Vantage-Nodes" → Install → restart. You also need the custom-voice model downloaded once via QwenTTSModelDownloader (it's a few GB, first run is slow).
Common issues
- OOM while cloning - the node catches it, unloads the model and tells you to lower expectations: try
sdpaattention instead offlash_attn, close other GPU apps, or run the downloader withfp32/smaller footprint. The OOM handler is one of the better ones in this pack; it recovers cleanly instead of wedging your whole session. - Voice sounds nothing like the reference - check your
ref_audiofirst (background noise and music are the killers), then add the correctref_text, then tryx_vector_only. - "Voice name is required when save_voice is enabled" - self-explanatory, but the error message is the whole fix.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| model | QWEN_TTS_MODEL | — | |
| ref_audio | AUDIO | — | |
| ref_textopt | STRING | — | |
| x_vector_onlyopt | BOOLEAN | false | Only use speaker x-vector (no phonetic content) |
| deviceopt | COMBO | inherit | 5 options: inherit, auto, cuda, mps, cpu |
| attentionopt | COMBO | inherit | 6 options: inherit, auto, sage_attn, flash_attn, sdpa, eager |
| unload_model_after_promptopt | BOOLEAN | false | Unload model from memory after building voice prompt |
| save_voiceopt | BOOLEAN | false | Save this voice for reuse |
| voice_nameopt | STRING | — | |
| overwrite_existingopt | BOOLEAN | false | Overwrite existing voice with same name |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| voice_prompt | QWEN_TTS_VOICE_PROMPT | — |