FL Qwen3 TTS Voice Clone
Clone a voice from five seconds of audio — the node this pack is really about
- model
- ref_audio
- voice_clone_prompt
- audio
This is the headline node. Feed it a ref_audio clip of someone talking - five to fifteen seconds of clean speech is the sweet spot - and it'll make that voice say whatever you put in text, in any of ten languages. Zero-shot voice cloning, no per-voice training, all local, Apache 2.0 licensed end to end. On the open-TTS spectrum from the ComfyUI world, Qwen3-TTS's cloning sits as a genuinely multilingual alternative to the English-first heavyweights, and the community response has been notably warm on clone quality - one r/StableDiffusion user called it better than their professional ElevenLabs clone for some tests.
The caveat, to be fair: it's not a real-time model. Generation runs at roughly 3.5x real-time, and while the multilingual support is the strongest in the local TTS stack, people do report an accent bleed-through on some cloned non-native voices. Great for narration and character work. Not a live voice changer.
How it works
The node needs a Base model (Qwen3-TTS-12Hz-1.7B-Base - or the 0.6B Base for lower VRAM; one user reported the small one actually captures the cloned voice surprisingly well). The loader's other variants get refused with a friendly error.
Two cloning modes, controlled by x_vector_only_mode:
x_vector_only_mode = false(default) - ICL mode. The model uses both the reference transcript and the reference speech codes to condition generation. This is the higher-fidelity path, and it needsref_text- the transcript of what's actually said in the reference clip. Mismatched or missing transcript, worse clone.x_vector_only_mode = true- the model uses only the extracted speaker embedding (the "x-vector"). Faster, ignoresref_textentirely, slightly less faithful. The fallback when you can't be bothered to transcribe.
The reference audio gets prepped automatically: truncated to 15 seconds, padded if it's under a second, and passed to the model, which extracts a speaker embedding plus speech codes. Then it generates and hands you a standard AUDIO output.
The inputs that matter
ref_audio- the voice you're cloning. Five to fifteen seconds of clean, single-speaker speech. This is the variable that matters most; a bad reference is a bad clone no matter what else you set.ref_text- the transcript of the reference clip. Strongly recommended in default (ICL) mode. This is exactly what the Transcribe node in this pack is for - you can wire its output here so you never type it.text- what the cloned voice says.language- the ten-language list.- The sampling block (
top_k,top_p,temperature,repetition_penalty,max_new_tokens,seed) - defaults are fine;seed = -1means random. voice_clone_prompt- an optional pre-computed prompt from the Voice Clone Prompt node. If you're generating many lines with one clone, use it; it skips the re-extraction on every call.
Output: one audio (AUDIO).
Installing
ComfyUI Manager → "FL Qwen3 TTS", or:
cd ComfyUI/custom_nodes
git clone https://github.com/filliptm/ComfyUI-FL-Qwen3TTS.git
cd ComfyUI-FL-Qwen3TTS
pip install -r requirements.txt
Restart, and let the loader pull the Base model on first run.
Common issues
Where people actually get burned: feeding a longer or noisier reference than the 5–15s sweet spot (the node will silently truncate at 15s, and a truncated transcript mismatch quietly degrades the clone), and skipping ref_text in default mode. If the clone sounds off, transcribe the reference properly, then re-run. And don't forget the Base-model requirement - reaching for a CustomVoice model because you have it cached is the fastest way to an error screen.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| model | QWEN3TTS_MODEL | — | |
| text | STRING | Hello, this is a test of voice cloning. | — |
| ref_audio | AUDIO | — | |
| language | COMBO | English | 10 options: Chinese, English, Japanese, Korean, German, French, +4 |
| x_vector_only_mode | BOOLEAN | false | — |
| top_k | INT | 501–200 | — |
| top_p | FLOAT | 1.000.1–1 | — |
| temperature | FLOAT | 0.900.1–2 | — |
| repetition_penalty | FLOAT | 1.051–2 | — |
| max_new_tokens | INT | 2048128–8192 | — |
| seed | INT | -1-1–18446744073709550000 | — |
| ref_textopt | STRING | — | |
| voice_clone_promptopt | VOICE_CLONE_PROMPT | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | — |