ITL Breeze TTS Unload
The Breeze TTS Unload Node
- audio
- audio
Most ComfyUI nodes are boring in proportion to how useful they are, and this is the boringest node in the pack. One audio input, one audio output, identical bytes both sides. What it does in between is give you back about 7.7 GiB of VRAM.
Here's the situation it fixes. Breeze TTS 2 loads as a 3B model and stays resident so your second and third lines of dialogue don't pay a 20-second reload. But the pack keeps that model in its own cache, keyed by checkpoint path, attention kernel and fast_path. ComfyUI's model manager has no idea that cache exists, so it can never unload it for you. That's not a bug in the pack - it's the cost of loading through transformers instead of through ComfyUI's native model loaders. It does mean the memory is yours to release manually, and that's all this node is: a graph-visible unload() call.
How to place it
It works by wire position. ComfyUI executes nodes in dependency order, so an Unload node downstream of a Breeze generate node runs after the audio exists and before whatever consumes that audio next. Generated clip in, Unload, then your save-audio node, your lip-sync model, your Wan render. The image or video model that runs later in the workflow now has the memory it needs.
That ordering is the whole trick. Put it upstream of the generate node and you've unloaded… nothing, and then Breeze reloads immediately. It won't warn you; it just won't help.
ITL Breeze TTS Loader ─► ITL Breeze TTS Voice Clone ─► ITL Breeze TTS Unload ─► Save Audio
Is it redundant?
Often, yes - and you should know that before adding a node to your graph. Every Breeze generate node (Clone, Design, Direction, and their Advanced twins) has an unload_after boolean that calls the exact same unload when the node finishes. One wire-free toggle versus one extra node. For the single-generation case, use the toggle.
This node earns its place in three situations. You have several generate nodes and you'd rather have one explicit unload point at the end of the audio section than remember to flip a toggle on each. You want the unload to happen only after the audio has been consumed downstream, rather than the instant synthesis finishes - the ordering above is finer-grained control than a per-node toggle gives you. Or you just want the VRAM strategy to be visible when someone else opens your workflow, which is a real argument in a pack that also ships an unload toggle most people forget exists.
There's no input to configure and nothing to get wrong. No audio on the wire means the node doesn't run at all, so it can't unload the model you're still using.
Install
Nothing special - it's part of ComfyUI-IntoTheLatent-Utils, so it arrives with the rest of the pack. ComfyUI 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
What to expect afterwards
The next Breeze node reloads the weights, about 20 seconds. If your pipeline is "one line of narration, then a video render", that reload cost is paid once and entirely worth it. If it's "twelve lines of dialogue interleaved with twelve image renders", you're now paying 20 seconds twelve times and should restructure the graph instead - all the dialogue first, unload once, then the video work.
One small thing: because the node hands the audio straight back, it's safe to drop into an existing graph without rewiring anything downstream. Your Save Audio node doesn't care that it moved.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| audio | AUDIO | Passed through unchanged. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | — |