APZmedia: Voice Clone Generate
Speak as a saved voice — or throw a raw clip at it
- model
- voice_prompt
- ref_audio
- audio
This is the node that turns a voice identity into actual speech, and it's the end of the line for the pack's two big workflows: design a voice once, then generate a thousand lines with it. APZmedia: Voice Clone Generate takes a Base model from APZmedia: Model Loader and produces audio from text using either a speaker embedding or a raw reference clip.
Here's the important part - the node accepts one of two ways to specify the voice, and it will refuse to run if you give it neither:
- voice_prompt - a
VOICE_PROMPTembedding, usually from APZmedia: Voice Design or APZmedia: Voice Library Loader. This is the fast, clean path: the embedding is already computed, so generation is a single model call. - ref_audio - a raw ComfyUI
AUDIOclip, if you're skipping the library. When you go this route,ref_text(the transcript of that clip) becomes required - unless you also flip x_vector_only_mode, which tells Qwen to use just the speaker x-vector and ignore the transcript.
The README's framing is worth internalizing: provide voice_prompt or ref_audio (not both required). If you connect both, the embedding wins and the audio is ignored, so don't bother.
Inputs
- model - must be a Base model (
...-1.7B-Baseor0.6B-Base). The node validates this and errors otherwise. - text, language, seed - the line, the language, reproducibility.
- instruct - optional extra style direction. It's passed through to the clone call if non-empty.
- x_vector_only_mode - skip transcript-based in-context learning and use only the x-vector. Faster, and it rescues you when you have a clip but no accurate transcript.
What to expect
Community experience with Qwen3-TTS cloning is honest about a tradeoff: cloned voices are accurate but the raw clone path tends toward monotone, because the model is essentially re-speaking your transcript with the reference voice and there's no separate expression channel for it. The expressive "how to say it" magic lives in the voice-design side of the pack. So if a clone comes out flat, your levers are a better, more accurate ref_text (it must match the audio, and Qwen's in-context learning leans on it), or x_vector_only_mode if the transcript situation is hopeless. Don't expect instruct to do what it does in Voice Design Generate - it's a hint, not a conductor.
Typical wiring
[Model Loader: Base] → [Voice Library Loader] voice_name: "narrator"
↓ voice_prompt
[Voice Clone Generate] text: "Any line you want"
↓ audio
[Audio Saver]
If you've been through Voice Design and saved the identity, this workflow is your daily driver: one Base model resident, a loader, and this node. Set a seed if you need repeatable takes, keep the text multiline if you're doing paragraphs, and remember the audio comes out at 24000 Hz in standard ComfyUI AUDIO format.
Install is the pack-wide clone (https://github.com/APZmedia/ComfyUI-APZmedia-qwen-TTS into custom_nodes), and the Base model downloads from Hugging Face on first use.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| model | QWEN_TTS_MODEL | — | |
| text | STRING | This is the line to synthesize. | — |
| language | COMBO | English | 11 options: English, Chinese, Japanese, Korean, German, French, +5 |
| seed | INT | 00–2147483647 | — |
| voice_promptopt | VOICE_PROMPT | — | |
| ref_audioopt | AUDIO | — | |
| ref_textopt | STRING | — | |
| instructopt | STRING | — | |
| x_vector_only_modeopt | BOOLEAN | false | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | — |