H3 MS Release Resources
The Node That Gives Your RAM Back
Here's the shape of the thing this node exists to defuse. H3 MultiStream's caches are deliberately invisible to ComfyUI's memory management. That's the feature - the pinned DiT, text-encoder and VAE weights survive prompt changes, model reloads and evictions, which is exactly why a prompt edit stops costing a minute. The cost is that nothing you normally do - clearing the queue, switching workflow, unloading models from the menu - gets that RAM back. On a 96 GB box with the int8 text encoder you're holding around 43 GB of pinned system RAM that ComfyUI will never release on its own.
H3 MS Release Resources is the official way to hand it back. It's an output node with no outputs, and it runs every time it's queued, so the intended use is a terminal node in the graph - or a step in an API workflow that ends a batch.
The mechanism, such as it is
There isn't much of one, and that's the point. It's a control node: five switches, each one calling the corresponding release path, printing a line to the console through the [Release] tag. It has no inputs to wire and no outputs to connect, which trips people up - you can drop it in the graph with nothing attached to it and it will still run, because ComfyUI executes output nodes whether or not anything consumes them.
It also forces a re-run every time it's queued. In the source, IS_CHANGED returns float("nan"), the standard ComfyUI trick for "never treat this as cached." Without it, your second queue would skip the node and the release would silently not happen.
The five switches
All five are booleans, and only the first is on by default:
- release_vae_workers (
true) - stops the persistent worker processes that H3 MS VAE Split Decode spawns, one per additional GPU. They restart automatically on the next split decode, so this is cheap and reversible. Each worker holds a CUDA context on its card, which is the real thing you're reclaiming. - detach_hooks (
false) - removes every text-encoder and VAE hook the pack installed. This is the escape hatch for the bypass trap, and it's the one switch in this node that solves a bug rather than freeing memory. ComfyUI never runs a bypassed or muted node, so a bypassed H3 MS Text Encoder Cache leaves its hook attached to the shared encoder and keeps running with the settings from the last prompt that did run it. Because detaching stops the caches from doing anything, a nice pattern is: queue a prompt withdetach_hooksandclear_weight_cacheson at the end of a session, or after you've experimented with bypassing things. - release_side_streams (
false) - drops the per-GPU prefetch side stream used by the weight prefetch. The next split step creates it again. Small, but it's the one resource here that lives on the GPU rather than in host RAM. - clear_weight_caches (
false) - releases the pinned DiT, text-encoder and VAE weight caches. This is the big one for RAM. Expect the next render to be slow: the DiT cache alone takes about 55 seconds to refill on a new process, and the int8 text-encoder cache about 118 seconds. - clear_text_encoder_outputs (
false) - forgets the cached encoder outputs. These are tiny by comparison (~12 MB per 768×1344 I2VA scene at up to 64 entries), so you'd only clear them if you want a guaranteed fresh encode.
Everything released here is recreated on demand. That's the design: nothing in this node is destructive.
If you're driving it from a script
For interactive use, the main menu has an H3 MultiStream submenu with the same operations, and there's an HTTP surface if you're scripting around the queue:
# what's attached, what's cached, how much RAM is left
curl http://127.0.0.1:8188/h3multistream/status
curl -X POST http://127.0.0.1:8188/h3multistream/vae_workers/release
curl -X POST http://127.0.0.1:8188/h3multistream/cache/clear_weights
curl -X POST http://127.0.0.1:8188/h3multistream/cache/clear_outputs
Two safety rails apply to those paths: a worker release is refused while a split decode is running, and clearing weight caches from the menu or HTTP is refused while a prompt is running. The node doesn't need those rails because it is a step in a prompt. Those endpoints also have no authentication of their own, like the rest of ComfyUI's API - anyone who can reach your ComfyUI port can read the status and release workers or caches. Keep it on 127.0.0.1 or a trusted network.
Installing it
It ships with the pack, so there's no separate install - ComfyUI Manager, search ComfyUI-H3-MultiStream, or:
cd ComfyUI/custom_nodes
git clone https://github.com/martonsagi/Comfy-H3-MultiStream ComfyUI-H3-MultiStream
Then restart. No Python dependencies; the pack's dependency list is empty by design, and it requires ComfyUI 0.35.0 or newer.
If you ever see memory climb across prompts with a load already sitting in VRAM that nothing seems to evict, this node is the answer - and if you can't tell whether it worked, GET /h3multistream/status will tell you rather than you guessing at free -g.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| release_vae_workers | BOOLEAN | true | Stop the H3 VAE Split Decode worker process(es); they restart on the next split decode. |
| detach_hooks | BOOLEAN | false | Remove every text-encoder / VAE hook this pack installed. Use after bypassing or deleting a cache node: ComfyUI never runs a bypassed node, so its hook would otherwise stay attached with old settings. |
| release_side_streams | BOOLEAN | false | Drop the prefetch side stream held on each GPU the split has run on; the next split step creates them again. |
| clear_weight_caches | BOOLEAN | false | Release the pinned DiT / text-encoder / VAE weight caches. |
| clear_text_encoder_outputs | BOOLEAN | false | Forget cached text-encoder outputs. |
Outputs (0)
No outputs