MiniMax H3 Load AV Latent (Standalone)
Loading a saved H3 latent into today's run
- latent
- loaded_path
- latent_info
MiniMaxLoadLatent ("MiniMax H3 Load AV Latent (Standalone)") is the other half of the save/load pair: it pulls a previously saved joint audiovisual latent back off disk and hands it to your workflow as a LATENT, so a continuation chain survives ComfyUI restarts, machine reboots, and the general chaos of running a 40-node graph across multiple evenings. If SaveLatent is the "checkpoint here" button, this is the "resume" button.
It exists because of an H3-specific reality: the thing you need to continue a clip isn't a PNG of the last frame - it's the full video and audio latent, because that's what gets copied into the next clip's protected head to keep both picture and sound consistent. You can't rebuild that from pixels. Saving the latent is the only faithful way to serialize "where my story is."
How it finds your file
Two inputs, both simple:
latent_path- a folder or filepath. Relative paths resolve against your ComfyUI output directory; the defaultminimax_h3/clipmatches what the Save node writes by default. You can also pass an absolute path, or point it at a specific.safetensorsfile to load that exact clip.clip_index- the selector.1loadsclip_00001.safetensors(it also matches any file in the folder whose name contains_1.or_1_-style markers).0= "latest": it picks the most recently modified safetensors in the folder. That's the convenience mode for "just continue whatever I was doing" - and the natural partner for the Save node's_tempslot.
Internally it loads the file with safetensors (falling back to torch.load), requires a video tensor, and re-packs video plus any audio tensor back into a joint H3 LATENT - the same NestedTensor shape the sampler produced, ready to feed the Continuation Applier's context_latent.
Outputs: latent (the reloaded joint AV latent), loaded_path (the exact file it resolved - useful when you used 0 and want to know which one won), and latent_info (frame count plus video/audio shapes as a string).
Wiring and workflow
The loop you'll actually run looks like this: end of session → SaveLatent with clip_index = N. Start of next session → LoadLatent on the same folder with clip_index = N → its latent into the Continuation Applier's context_latent → generate clip N+1 → SaveLatent with clip_index = N+1. Numbered slots keep "clip 2 was the one worth branching from" as an addressable fact rather than a filename guess.
Two grounded caveats. First, the loader will raise FileNotFoundError if the exact numbered file isn't there - it doesn't silently skip. Second, clip_index = 0 on the load side means "newest file in the folder," which is exactly the right default when you're resuming, but if you also saved with 0 (which overwrites a clip_temp.safetensors) you can clobber the very file you meant to resume - so in a numbered chain, save with explicit slots.
Install
Same pack, same routine:
cd ComfyUI/custom_nodes
git clone https://github.com/knoic/ComfyUI-MiniMaxH3-PrefixStream.git
cd ComfyUI-MiniMaxH3-PrefixStream
pip install -r requirements.txt
Then restart and hard-refresh (Ctrl+F5). No model files, no API - the only dependency is safetensors, which your ComfyUI already has. Node lives under MiniMaxH3/PrefixStream. If you're comparing it to the Clip Bin Picker: Picker is the visual, gallery-driven, "which historical shot do I want" route; this is the fast, deterministic, folder-based route. Both output a compatible latent, so pick whichever matches how your brain organizes projects.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| latent_path | STRING | minimax_h3/clip | Folder or filepath relative to ComfyUI output, or absolute path. |
| clip_index | INT | 10–99999 | Clip index to load (e.g. 1 to continue Clip 2). 0 = latest file. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| latent | LATENT | — |
| loaded_path | STRING | — |
| latent_info | STRING | — |