Breeze TTS 2 Voice Clone
Clone a voice from ~15 seconds of clean audio — no API, no key
- breeze_model
- reference_audio
- audio
The name is accurate: this node clones a speaker from a clean reference clip and its exact transcript, then makes that voice say whatever you type. It's the workhorse of the pack - a narrator, a character, a consistent voice for a whole video - and the whole thing runs locally with no API key anywhere in the chain.
This is the part of TTS that actually moved in the last couple of years. The KB's audio-generation notes that local tools got genuinely close to ElevenLabs for cloning a specific voice privately, and Breeze TTS 2 is one of the newer entries in that fight. Clone is the conservative mode here: it keeps the reference voice as-is (CFG 1.0), which is what you want when you're replicating someone rather than directing them.
How it works
The model is a three-part stack: a T5Gemma2 text encoder, a Qwen3-style backbone that predicts the first of 16 audio codebook tokens per 12.5 Hz frame, and a depth decoder for codebooks 1–15. Your reference audio gets encoded with the same codec the model uses to output speech, and the transcript is fed in as text conditioning. No reference clip, no clone - the transcript is load-bearing, and the node will hard-refuse to run with reference audio but no transcript.
The inputs that matter
reference_audio- wire a clip in from any Load Audio / video node. This is what your cloned voice comes from. Keep it clean: one speaker, no background music. ~10–20 seconds is plenty; the hard max is 60 s, but long clips eat your 2048-token context at 12.5 tokens per second of reference, and the node will tell you when there's no room left to speak.reference_text- the exact transcript of that clip. This is where everyone gets burned. Whisper the clip yourself if you must, but a wrong word tangibly degrades the clone; the pack ships aBreezeWhisperTranscribenode precisely so you don't hand-type this.text- what you want the voice to say. Inline vocal events work here:(laugh),(sigh),(cough),(clears throat)in English,[笑][叹气]etc. in Chinese.cfg_scale- 1.0 (the default) clones as-is. Raise it to push away from the reference, though for plain cloning you usually don't.seed- 0 uses the current random state; a positive value gives you repeatable output. Set it if you're iterating on a take.
There's a long tail of sampling controls (temperature, top_k/top_p, repetition_penalty, depth_* variants) - leave them alone until you hit a specific problem like looped phrasing, which is what repetition_penalty fixes.
Wiring it up
The audio output is standard ComfyUI AUDIO (24 kHz mono) - save it with a Save Audio / VHS node, or send it straight into a lip-sync pipeline like InfiniteTalk or LTX-2 for a talking head. Chain it after the Load Model node's breeze_model output.
Installing and troubleshooting
From ComfyUI Manager, search "ComfyUI-Breeze-TTS-2", or:
cd ComfyUI/custom_nodes
git clone https://github.com/saganaki22/ComfyUI-Breeze-TTS-2
Restart, let the model download once (~5.5 GiB for the default int8 hybrid into ComfyUI/models/breezetts2/). The most common failures: an inexact transcript, a reference clip over the limit, and empty text. Fix those three and cloning mostly just works. Output is 24 kHz mono regardless of your reference, so don't be surprised when the sample rate reads 24000.
Inputs (14)
| Name | Type | Default | Description |
|---|---|---|---|
| breeze_model | BREEZE_TTS2_MODEL | — | |
| text | STRING | (sigh) It is good to hear your voice again after all this time. | Text to speak. Vocal events like (laugh) (sigh) (cough) (clears throat) work inline; use [笑] [叹气] etc. in Chinese. |
| reference_audio | AUDIO | Clean reference speech to clone timbre, rhythm, and style from. | |
| reference_text | STRING | This is the exact transcript of the reference audio. | The exact transcript of the reference audio. |
| cfg_scale | FLOAT | 1.00.1–10 | Guidance scale. 1.0 clones the reference as-is; raise it to push away from the reference. |
| max_new_tokens | INT | 150064–3000 | Maximum audio frames to generate (12.5 frames per second of speech; the model stops at EOS by itself). |
| temperature | FLOAT | 0.900–2 | Backbone sampling temperature. |
| top_k | INT | 500–1024 | Backbone top-k (0 disables). |
| top_p | FLOAT | 1.000–1 | Backbone top-p (1.0 disables). |
| repetition_penalty | FLOAT | 1.100–2 | HF-style repetition penalty on generated backbone tokens. |
| depth_temperature | FLOAT | 0.900–2 | Depth decoder (codebook 1-15) sampling temperature. |
| depth_top_k | INT | 500–1024 | Depth decoder top-k (0 disables). |
| depth_top_p | FLOAT | 1.000–1 | Depth decoder top-p (1.0 disables). |
| seed | INT | 420–2147483647 | 0 uses the current random state. A positive value is repeatable. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | — |