ITL Breeze TTS Loader
The Node That Decides Whether Breeze TTS Fits on Your Card
- model
Breeze TTS 2 is a local, 3B text-to-speech model (BreezeBlue, English + Chinese) with three modes: clone a voice from a few seconds of audio, describe a voice in words, or keep a reference voice and direct the performance. No API, no key, no per-character billing. This loader is the only door into it - every generate node in the pack takes a model link from here and refuses to run without one.
It is also the node that decides whether the whole thing is viable for you, and the answer is stricter than most ComfyUI audio tools. There is no CPU path. No NVIDIA GPU, no Breeze. Once loaded it sits on roughly 7.7 GiB of VRAM, or about 14.4 GiB with fast_path on.
What it actually does
Two jobs, both in one execute() call. First, weights: the first run pulls the ~7.2 GB snapshot from Hugging Face into models/breeze_tts/Breeze-TTS-2/. Downloads resume, and the loader verifies its list of required files before loading - including file size, so a killed download that left 0-byte stubs gets re-fetched instead of producing a cryptic load error later. Second, it loads the tokenizer, the model and the audio tokenizer, and hands the graph a small immutable key rather than the tensors themselves.
That key detail matters more than it sounds. Because the graph carries a key, ComfyUI's output cache never holds a second reference to the model, and the pack's own internal cache is what keeps it resident. The flip side: ComfyUI's model manager cannot see that cache and can never evict it. That's why the pack has an Unload node and an unload_after toggle on every generate node. Run Breeze and then an image or video model in the same workflow without one of them, and you'll OOM on the second model.
The two inputs that matter
attention is the attention kernel. sdpa is the default and the fast one; eager is upstream's reference path. Reach for eager only if sdpa is producing something that sounds broken - otherwise leave it.
fast_path captures CUDA graphs for every stage (upstream calls it --fast-all). Faster generation, roughly double the VRAM, and a noticeably slower first run while graphs are captured. One real trap here: changing the Advanced nodes' sampling settings forces a re-capture, so your first generation after a tweak takes a few seconds longer. The loader also refuses fast_path outright on transformers 5.x, and that's deliberate - Breeze's CUDA graphs replay against transformers' StaticCache, which on 5.x advances from a Python integer a replayed graph never re-executes. Capturing anyway would write every step into the same cache slot: silently wrong audio. So it refuses. On transformers 5, turn fast_path off and everything else works.
Output is a single model socket of type BREEZE_TTS. Wire it into any of the six generate nodes.
Install
ComfyUI Manager is the easy path: search ComfyUI-IntoTheLatent-Utils and install, then restart. Manually:
cd ComfyUI/custom_nodes
git clone https://github.com/Into-The-Latent/ComfyUI-IntoTheLatent-Utils
pip install -r ComfyUI-IntoTheLatent-Utils/requirements.txt
The model code is vendored in the repo (a fork of breezeblue-ai/breeze-tts), so nothing is fetched from GitHub at runtime. One install detail worth knowing before you blame the pack: it declares no torch dependency at all, on purpose, so the install will never replace your CUDA torch build with a CPU-only wheel - the loader just checks for torch >= 2.7 and tells you if yours is too old. If the nodes report missing dependencies, Manager's Try fix on this pack is the intended repair.
Common issues
"Breeze TTS needs an NVIDIA GPU (CUDA)" - that's the honest upstream limit, not a config mistake. There's no fallback.
OOM after the voice, not during it. The classic: Breeze worked, then your checkpoint or Wan render died. Roughly 7.7 GiB is still resident because nothing evicted it. Turn on unload_after on the generate node, or wire the audio through the Unload node. The next Breeze node reloads (~20 s).
Everything sounds fine but the pack looks unmaintained. It is: the repo is published for reference, issues are disabled and pull requests are closed automatically. You fork it, you own it. Related: this pack replaces ComfyUI-AI2Go-Utils, and the node IDs changed from AI2Go* to ITL*, so old workflows won't auto-pick these up. Keep the old pack installed if you need those; they coexist.
One caveat that isn't technical
The weights are research and non-commercial (BreezeBlue Research and Non-Commercial License), which is increasingly normal for open TTS - F5-TTS is CC-BY-NC, and Higgs Audio went non-commercial at v3. And unlike Chatterbox, Breeze has essentially no community track record yet: it's a new name in a field whose default local answer is still Chatterbox. That's not a reason to skip it. It's a reason to test it on your own material before building a pipeline on it.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| attention | COMBO | sdpa | Attention kernel. 'sdpa' is faster; 'eager' is upstream's reference path. |
| fast_path | BOOLEAN | false | Capture CUDA graphs for every stage (upstream --fast-all). Faster generation, ~2x VRAM, longer first run. Changing sampling settings re-captures. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| model | BREEZE_TTS | — |