ITL Breeze TTS Voice Direction
Breeze TTS Voice Direction
- model
- reference_audio
- audio
Voice Clone gets you the voice. Voice Design invents one. Voice Direction is the one you want the moment a character has to say more than one kind of line.
You supply a reference clip and its exact transcript - same as cloning - and then an instruction that steers delivery: tone, pace, emotion. Same person, different performance. If your scene has a line that's whispered, a line that's furious, and a line that's exhausted, this is the node that keeps them the same character while they change register.
Why it exists next to Clone
Clone conditions on (audio, transcript) and nothing else, which means the emotional register of your reference clip follows you into every line. That's fine for a single narration take. It's a problem for dialogue.
Direction adds the instruction on top: reference for who, instruction for how. That also unlocks cfg_scale (default 4.0) - Direction's template carries a negative branch, so guidance has something to work against, which Clone's doesn't. Upstream suggests around 4 for direction work, matching the tooltip. Push it up and the instruction is obeyed harder and more mechanically; ease it off and delivery sits closer to the reference's natural reading.
The three inputs that carry the node
reference_audio - a few seconds of the voice, mono is fine, stereo gets downmixed.
reference_text - its exact transcript, and this is the input that decides whether you get a voice at all. The engine refuses an empty value with a message saying it must be the exact transcript of the reference audio, so a blank box is a hard stop rather than a quiet quality loss. Transcribe the clip with ITL Whisper Transcribe - same pack - and don't tidy it up by hand.
instruction - and here's the distinction worth internalising: in Direction, the instruction is about performance, not identity. Describe how the line is delivered - "tired, slower, almost a whisper", "bright and clipped, like a news read" - and let the reference carry age, timbre and accent. Write a physical description of a person here and you're using the wrong node; that's Design.
text is the line itself, bilingual with automatic language detection, and the inline cues work: (laugh), (sigh), (clears throat), or [笑] / [叹气] in Chinese. Then seed and unload_after. Output is one audio.
Practical notes
Set the seed control to fixed before you start A/B-ing. The control_after_generate widget fires after the run, so with randomization on the seed in the box belongs to the next generation, not the take you just heard - the standard ComfyUI way to lose a good seed.
Expect the reference to set a ceiling. If the clip is a bright, fast read and you ask for a sombre, slow line, you'll hear the model split the difference. A calmer reference is a better base for a range of directions than an extremely stylised one.
Changing the instruction is a legitimate way to iterate, but change one variable at a time: same seed, same reference, one instruction edit. Otherwise you can't tell whether the change came from the direction or from the random state.
Install
Part of ComfyUI-IntoTheLatent-Utils - Manager → search ComfyUI-IntoTheLatent-Utils → install → restart, or:
cd ComfyUI/custom_nodes
git clone https://github.com/Into-The-Latent/ComfyUI-IntoTheLatent-Utils
pip install -r ComfyUI-IntoTheLatent-Utils/requirements.txt
First run downloads ~7.2 GB of Breeze weights into models/breeze_tts/Breeze-TTS-2/. NVIDIA GPU required, ~7.7 GiB VRAM resident (≈14.4 GiB with fast_path). Neither ComfyUI's Manager "Try fix" nor a restart installs the weights for you - the node fetches them on first execution.
Gotchas
Both reference_text and instruction are required and both are validated. Empty either one and the node tells you which.
Unload it when something heavier follows. ComfyUI's model manager can't see the pack's internal cache, so ~7.7 GiB stays occupied until you turn on unload_after or route the audio through ITL Breeze TTS Unload. The next Breeze node reloads in about 20 seconds.
Weights are research and non-commercial (BreezeBlue Research and Non-Commercial License) - the same constraint as the rest of this model family, and the same advice: check before you ship.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| model | BREEZE_TTS | From ITL Breeze TTS Loader. | |
| text | STRING | What to say. Inline vocal events: (laugh), (sigh), (clears throat) in English; [笑], [叹气] in Chinese. The model is bilingual (English / Chinese) and detects the language from the text. | |
| reference_audio | AUDIO | A few seconds of the voice to imitate (mono is fine; stereo is downmixed). | |
| reference_text | STRING | Exact transcript of reference_audio. Wrong text = wrong voice. ITL Whisper Transcribe can produce it from the clip. | |
| instruction | STRING | Voice description (Design) or delivery direction (Direction): tone, pace, emotion. | |
| seed | INT | 420–4294967295 | — |
| cfg_scale | FLOAT | 4.00.1–10 | Classifier-free guidance. Upstream suggests ~4 for design / direction. |
| unload_after | BOOLEAN | false | Free the Breeze model (~7.7 GiB VRAM) after this node runs. Turn on when an image/video model runs later in the same workflow; the next Breeze node reloads the weights. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | — |