H3 Latent Bank (sample once, skip the pass) [alpha]
Keep the pass-1 latent so window items stop re-rendering it
- samples
- samples
- report
Alpha node from the rolling-window era of this pack, and it solves a very specific pain. When you split a long de-rope into windows, every window item wants the pass-1 baseline render. Requeueing an unchanged graph already hits ComfyUI's node cache, so a plain window requeue re-samples nothing - but that cache is dropped the moment you queue any other workflow in between, restart ComfyUI, or edit anything upstream. Then window item 2 re-renders the whole baseline before it can start its own window. H3 Latent Bank banks the pass-1 latent to disk, so every later item is served from the bank instead of re-running the pass.
How it works
It sits right after the pass-1 sampler, and its samples input is lazy: on a bank hit, ComfyUI never stages the sampler, which means the sigmas, the noise, the guider and the pass-1 text encode are all skipped too. Everything downstream of the bank still runs - the VAE decodes and the oracle read the banked latent and do their work again - but that's seconds against the pass they replace.
Why bank the latent and not the frames? Latents are tiny. The H3 AV latent of a 107-frame 480x832 clip is 4.8 MB, against 513 MB for the same clip decoded to float32 frames. And everyone who reads that latent - the video decode, the audio decode, and H3 Jerk Oracle which reads the latent directly - can hang off this one node.
Inputs that matter:
samples- the pass-1 latent from the sampler.bank_key(defaultpass1) - names the bank. One key per pass you want to keep.mode-use bank if presentorrefresh (re-sample, overwrite). Press refresh after you change anything the key doesn't cover.seed/fingerprint- the only things folded into the filename beyondbank_key. Wire the noise seed; put steps, scheduler, LoRA strength and resolution intofingerprintyourself.store_dtype- float32 (exact, default) or float16 (half the file). Float16 sits below a VAE decode's noise, but it isn't bit-identical - keep float32 while you're comparing takes.
The staleness contract is on you
The node says this plainly and you should believe it: nothing is fingerprinted for you beyond seed and fingerprint. Change a dial the key doesn't cover and you will silently ship the old take unless you change bank_key or hit refresh. That's the whole trust model.
Install
Same as the rest of the pack:
cd ComfyUI/custom_nodes
git clone https://github.com/matlowai/ComfyUI-MAINodes
or ComfyUI Manager → search ComfyUI-MAINodes, restart. Category is latent/minimax.
Common gotchas
The default store_dir is output/h3_latent_bank, relative to the ComfyUI working directory - the tooltip's warning is that /tmp is a RAM disk on most Linux installs, and the whole point of the bank is surviving a reboot. Also: this is not window-specific. The author notes a seed hunt or an extension chain on the same prompt can encode once between them too. Just remember the staleness rule: when in doubt, refresh.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| samples | LATENT | from the sampler; on a bank hit this link is never evaluated, so the sampler does not run | |
| bank_key | STRING | pass1 | names the bank. One key per pass you want to keep |
| store_dir | STRING | output/h3_latent_bank | a relative path lands inside the ComfyUI working directory. Avoid /tmp: it is a RAM disk on most Linux installs and the bank is meant to survive a reboot |
| mode | COMBO | use bank if present (default) | 2 options: use bank if present (default), refresh (re-sample, overwrite) |
| seedopt | INT | 0–18446744073709550000 | wire the sampler's noise seed; it joins the filename, so a new seed misses the bank instead of being served the old take |
| fingerprintopt | STRING | anything else that decides this pass, as a string. Nothing is hashed for you except this and 'seed' | |
| store_dtypeopt | COMBO | float32 (exact) | 2 options: float32 (exact), float16 (half the file) |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| samples | LATENT | — |
| report | STRING | — |