H3 阶段释放(保留 AV Latent)
The pass-through node that frees your VRAM before the VAE decode asks for it
- av_latent
- av_latent
MiniMax H3 is a hungry model. The pack's production baseline runs a 32B Qwen3-VL text encoder and an INT8 ConvRot diffusion model, and on a single GPU you're scraping the top of your VRAM budget by the time sampling finishes. The decode step right after is exactly where OOMs happen - the VAE needs headroom that the diffusion model is still squatting on. H3LatentPhaseBarrier is a one-trick node that fixes that specific moment.
It's a pass-through: av_latent in, av_latent out, untouched. But when it executes, it proactively unloads all resident models, empties ComfyUI's cache, and runs a garbage collection - releasing the VRAM the H3 sampler just used before the VAE decode begins. You drop it between your sampler and the decoder, and you get a clean phase boundary where the heavy model gets out of the way.
Why it exists
On a two-GPU rig the effect is real but subtler: ComfyUI keeps whatever's warm in VRAM to avoid reload costs, and that "keep it warm" behavior is exactly what starves the decode. The barrier forces the eviction at a deterministic point in the graph instead of hoping the scheduler does it at the last second. The README's own numbers (roughly 25 GB peak for sampling on the test 8188 rig) make clear this isn't paranoia - decode on top of that is where a "stable" workflow turns into a "CUDA out of memory" one.
The inputs and outputs couldn't be simpler:
av_latent(LATENT, required) →av_latent(LATENT)
That's the whole interface. You wire the sampler's AV latent in, and the VAE decoder takes the same latent out the other side. It doesn't split, merge, or touch the latent content - the "phase release" (阶段释放) is entirely about memory state.
Installing it
cd ComfyUI/custom_nodes
git clone https://github.com/bo341805sg/ComfyUI-CineTimeline
# restart ComfyUI
Or ComfyUI Manager → search "CineTimeline". No extra dependencies for this node itself - the heavy H3 deps (KJNodes' Sage attention patch, minimax-h3-audio-T8) belong to the sampling side of the graph, not here.
Gotchas
- It unloads, and unloading has a cost. If the same diffusion model is needed again after the decode, ComfyUI will pay a reload penalty. Don't sprinkle barriers through a graph that reuses the model downstream - one barrier at the decode boundary is the intended placement, not a general-purpose "free VRAM" button.
- It pins nothing and moves nothing. For the companion problem - keeping the decode itself on one specific GPU - pair it with
H3PinnedVAEDevice, which forces the VAE onto a fixed card. Barrier for the phase, pin for the device. - It's a graph-order illusion, carefully done: the node forces eviction by executing at the point where you placed it, which in ComfyUI is a guarantee you don't get from hoping the scheduler sequences the decode favorably. That's the whole trick, and it works.
Reach for it when your H3 decode OOMs on a near-full card, or when you're assembling the pack's dual-GPU workflow and want the decoder to run in a clean house. It's invisible when it works - and that's exactly the point.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| av_latent | LATENT | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| av_latent | LATENT | — |