H3 Motion Context Load Latent
Loading the previous H3 clip's latent, without the quality tax
- LATENT
This is the "read" half of the H3 Motion Context pack's latent pair: it loads the previous clip's saved AV latent off disk and hands it to the Motion Context node's context_latent input. That single wire is the difference between a chain with no visible seam and the old lossy way - the previous clip's tail gets sliced straight out of its latent rather than decoded to pixels, resized, and re-encoded, which is where colour drift and softening down a long chain come from. Nothing to configure on the Motion Context side; the loader just makes the file available.
Why does it need a dedicated node instead of stock Load Latent? Because stock Save/Load Latent can't handle H3's paired video/audio latent - H3 generates picture and sound together, and the file this loader reads holds both streams side by side. It's saved by the matching Save Latent node (tagged h3_motion_context_av_v1), which also knows how to write it.
Inputs
Two inputs, and clip_index is the one you'll actually touch:
latent_path- a saved latent file or a folder, defaulth3_context. Relative paths resolve against the ComfyUI output directory. Pointing at a specific file always loads that file, ignoring the index entirely.clip_index- the clip you want to continue from. Making clip 2 from clip 1: set 1 here and 2 on the Save node. Re-rolling clip 2 changes nothing - it reloads slot 1 and overwrites slot 2's reject, which is exactly what you want. Set it to 0 and the loader grabs the newest file in the folder instead. Simpler, but not retry-safe: a re-roll then loads its own rejected audio. Don't use 0 for anything you're going to re-run.
The filename convention is the part that trips people up. Indexed slots use the natural names - clip_00002.safetensors is clip 2. Auto-saved files (clip_index 0) carry a trailing underscore, clip_00002_.safetensors, because they're numbered by run, not by clip, and indexed loading skips them on purpose so a rejected attempt can't masquerade as a clip slot. If you get a "no saved latent for clip N" error and there's an underscored file sitting right there, the README tells you the fix: rename it to drop the trailing underscore, and it becomes a valid slot.
Output is a single LATENT. Two constraints worth memorizing. First, it's only for the Motion Context node's context_latent input - don't wire it into a VAE decode. The loader deliberately returns a structure that can't be mistaken for a decodable latent, so the failure mode if you try is loud, not silent. Second, the latent carries the previous clip's resolution, and a latent can't be resized: if you change resolution mid-chain, the Motion Context node refuses and names both resolutions. Regenerate the previous clip at the new size, or start a fresh chain there.
Install
Same as the rest of the pack: ComfyUI Manager (search "H3 Motion Context") or git clone https://github.com/NikoDemon80/ComfyUI-H3-Motion-Context into ComfyUI/custom_nodes, then restart. No models to download - it leans on safetensors, which ComfyUI already ships. Leave context_latent unwired entirely for clip 1 of a chain; the loader only enters the picture from clip 2 onward.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| latent_path | STRING | h3_context | A saved latent file, or a folder (relative paths resolve against the ComfyUI output directory). Pointing at a specific FILE always loads that file, ignoring clip_index. |
| clip_index | INT | 00–9999 | The clip to CONTINUE FROM: that clip's slot is loaded. Generating clip 2 from clip 1: set 1 here and 2 on the Save node. 0 = newest file in the folder (NOT retry-safe: a re-roll loads its own rejected audio). |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| LATENT | LATENT | — |