Nodes/ComfyUI-Breeze-TTS-2/Breeze TTS 2 Voice Direction
ComfyUI Node

Breeze TTS 2 Voice Direction

Clone the voice, then tell it how to feel — voice direction with an instruction

By Saganaki22·Created 4 days ago·Updated a day ago· 32
Breeze TTS 2 Voice Direction
  • breeze_model
  • reference_audio
  • audio
text(clears throat) We need to discuss what happened last night.
reference_textThis is the exact transcript of the reference audio.
instructionSpeak slowly with a restrained, serious tone.
cfg_scale4.0
stitch_referencenone
max_new_tokens1500
temperature0.90
top_k50
top_p1.00
repetition_penalty1.10
depth_temperature0.90
depth_top_k50
depth_top_p1.00
seed42

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 the text field ((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. none returns generated speech only; before plays your original reference clip first; after appends 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.

CategoryBreeze TTS 2

Inputs (16)

NameTypeDefaultDescription
breeze_modelBREEZE_TTS2_MODEL
textSTRING(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_audioAUDIOReference speech whose speaker identity is kept.
reference_textSTRINGThis is the exact transcript of the reference audio.The exact transcript of the reference audio.
instructionSTRINGSpeak slowly with a restrained, serious tone.Direction for tone, emotion, pace, and delivery applied on top of the cloned voice.
cfg_scaleFLOAT4.00.1–10Guidance scale. 4 is recommended for instruction-following.
stitch_referenceCOMBOnoneStitch 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_tokensINT150064–3000Maximum audio frames to generate (12.5 frames per second of speech; the model stops at EOS by itself).
temperatureFLOAT0.900–2Backbone sampling temperature.
top_kINT500–1024Backbone top-k (0 disables).
top_pFLOAT1.000–1Backbone top-p (1.0 disables).
repetition_penaltyFLOAT1.100–2HF-style repetition penalty on generated backbone tokens.
depth_temperatureFLOAT0.900–2Depth decoder (codebook 1-15) sampling temperature.
depth_top_kINT500–1024Depth decoder top-k (0 disables).
depth_top_pFLOAT1.000–1Depth decoder top-p (1.0 disables).
seedINT420–21474836470 uses the current random state. A positive value is repeatable.

Outputs (1)

NameTypeDescription
audioAUDIO