Breeze TTS 2 Voice Direction
Clone the voice, then tell it how to feel — voice direction with an instruction
- breeze_model
- reference_audio
- audio
Voice Clone keeps a voice identical. Voice Design invents one. Voice Direction sits between them: it takes a real reference voice and directs it - same speaker identity, but you steer tone, emotion, pace, and delivery with a plain-English instruction. If you've got one good recording of a character and you need them to deliver fifteen different emotional takes, this is the node you'll live in.
It reads like the clone node with an extra text box, and that's basically what it is - but the settings shift. Where clone sits at CFG 1.0 to preserve the source, direction defaults to CFG 4 because following your instruction needs guidance weight. The tradeoff is real: the higher CFG pulls the delivery toward what you asked, at some cost to perfect voice fidelity. That's the intended bargain.
How it works
The reference audio gets encoded with the same 16-codebook codec the model uses to speak, so the speaker identity is baked into the conditioning. Your instruction is appended to the text prompt, and a negative prompt built from the same segments runs under classifier-free guidance. The result is the reference voice filtered through the direction - "speak slowly with a restrained, serious tone" produces the same person, unhurried and flat.
The inputs that matter
reference_audio+reference_text- the voice you're directing. Same rules as clone: clean single-speaker audio, exact transcript, keep it under ~20 seconds (hard max 60 s). A wrong transcript pollutes the identity you're trying to preserve.instruction- your direction. "Speak slowly with a restrained, serious tone" is the shipped example, and that's the right granularity: pace, emotion, delivery. Inline vocal events in thetextfield ((laugh),(clears throat), etc.) layer on top.cfg_scale- 4 by default. Lower it if the voice starts breaking character; raise it if the direction isn't landing.stitch_reference- the hidden gem.nonereturns generated speech only;beforeplays your original reference clip first;afterappends it at the end. It's a pure output edit - generation is untouched - but it's surprisingly handy for A/B comparisons right in the audio preview, or for giving listeners the "before" voice to compare against.
Same seed + sampling-control family as the other generation nodes; the depth_* knobs and temperature can stay at defaults until you have a specific artifact to chase.
Wiring it up
audio out is standard AUDIO (24 kHz mono) → Save Audio or a lip-sync pipeline. Wire breeze_model in from the Load Model node.
Installing and troubleshooting
Same pack, same path:
cd ComfyUI/custom_nodes
git clone https://github.com/saganaki22/ComfyUI-Breeze-TTS-2
or ComfyUI Manager → search "ComfyUI-Breeze-TTS-2", restart, let weights download to ComfyUI/models/breezetts2/.
Where people get burned: the direction doesn't show up at all - raise cfg_scale and make the instruction shorter and more concrete ("angry" lands better than a paragraph of implied anger). The voice itself drifts or wobbles - lower cfg_scale a notch and re-check the reference transcript. And remember the language rule from the design node: keep the instruction in the same language as the text. Direction is the fiddliest of the three modes because you're balancing two goals at once - identity and emotion - but when it clicks, it's the most useful one in the pack.
Inputs (16)
| Name | Type | Default | Description |
|---|---|---|---|
| breeze_model | BREEZE_TTS2_MODEL | — | |
| text | STRING | (clears throat) We need to discuss what happened last night. | Text to speak. Vocal events like (laugh) (sigh) (cough) (clears throat) work inline; use [笑] [叹气] etc. in Chinese. |
| reference_audio | AUDIO | Reference speech whose speaker identity is kept. | |
| reference_text | STRING | This is the exact transcript of the reference audio. | The exact transcript of the reference audio. |
| instruction | STRING | Speak slowly with a restrained, serious tone. | Direction for tone, emotion, pace, and delivery applied on top of the cloned voice. |
| cfg_scale | FLOAT | 4.00.1–10 | Guidance scale. 4 is recommended for instruction-following. |
| stitch_reference | COMBO | none | Stitch the original reference clip into the output audio: 'none' returns the generated speech only, 'before' plays the reference clip first, 'after' appends it at the end. Purely an output edit; generation is unchanged. |
| 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 | — |