H3 Motion Recovery · Load Verified First Pass (T8 EXP)
Loading a first pass you can actually prove is the first pass
- av_latent
- report_json
What it is
Motion Recovery is the pack's "shoot it loose, then repair it" route: pass one renders a longer take with motion deliberately smeared out of it, pass two refines that smeared material back into something watchable. Because pass two is expensive and iterative, you want to freeze pass one and stop paying for it.
This node is the only door into that frozen pass-one material. It loads a native H3 AV checkpoint from the pack's own checkpoint store and refuses to load it unless you can prove it's the right one.
Specifically, it wants all of these and checks all of them:
checkpoint_path- the stored checkpoint, relative to the pack's native H3 checkpoint root.expected_manifest_json- the manifest you kept when the checkpoint was written, pasted in as text.expected_file_sha256- the whole-file digest, 64 hex characters. Anything else is rejected outright.expected_frame_count,expected_width,expected_height- the original H3 geometry.hash_chunk_megabytes- default8; just how big a bite the hasher takes when reading a multi-gigabyte file. Leave it unless hashing is painfully slow or stalling.
If you're wondering why you have to type a SHA by hand: because the alternative is a loader that happily accepts "some frozen source that looked about right," which is exactly the failure this pack spends thousands of words avoiding. It never samples. It never silently swaps in a different frozen pass.
The geometry checks are stricter than you'd expect
expected_frame_count isn't just any number between 5 and 3600. It has to be an H3-aligned frame count - the value the pack would produce from its own alignment rule - so an arbitrary 100 frames fails.
Width and height must be multiples of 32 and the node then verifies the actual latent layout against them: the video latent's channel count and its height/16 × width/16 spatial dims, and the audio latent's channel/length shape derived from frame count and frame rate. Then it checks the file's own receipt: the manifest must report a match against the external receipt, and the checkpoint's recorded ID must be exactly the Motion first-pass ID, not some other checkpoint you happen to have lying around.
Blunt way to put it: this node is an argument. If your "first pass" was produced by any other route, it will not pass.
Inputs and outputs
Everything above is an input; nothing is optional. Outputs are av_latent plus report_json. The latent goes into the Motion Recovery pass-two binding node; the report is your evidence that geometry, ID and digest all matched.
native H3 AV checkpoint + manifest + SHA + geometry
→ MiniMaxH3MotionFrozenFirstPassLoadEXPT8 → av_latent → Motion pass-2 Bind
It also participates in caching properly: its fingerprint is derived from the file and the expected values, so a missing or swapped file doesn't leave a stale latent cached in your session.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/T8mars/comfyui-minimax-h3-audio-T8.git minimax-h3-audio-T8
ComfyUI Manager: search MiniMax H3 Audio T8, install, then fully quit and restart ComfyUI and refresh the page. Node packs of this size don't hot-register, and the pack's guide says red or missing nodes usually mean you updated this repo without updating core, the frontend and Manager together.
Models: H3 transformer in models/diffusion_models, Qwen3-VL text encoder in models/text_encoders, H3 video and audio VAEs in models/vae. The pack ships no weights and no Python dependencies - requirements.txt is intentionally package-free so installation can't overwrite ComfyUI's torch build. The Motion Recovery graphs live under examples/workflows/57-motion-recovery-split, including a freeze-first-only graph that is the natural place to start.
Common issues
"Requires an explicit first-pass checkpoint path / external manifest / file SHA-256." You left a field blank, or the digest isn't 64 hex characters. This is a hard requirement, not a default you can skip.
"Requires native H3 frame/canvas geometry." Your frame count isn't H3-aligned, or width/height aren't multiples of 32. Fix the source render rather than rounding here.
"Differs from expected AV geometry." The checkpoint is real and the digest matched, but it was made at a different resolution or length than you declared. Recheck what you actually rendered in pass one.
You deleted the manifest. Then you can't load that checkpoint. Keep the manifest and SHA next to the file when you write it; the loader is not going to reconstruct them for you.
Red nodes. Update ComfyUI core, the frontend and Manager together, then restart fully.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| checkpoint_path | STRING | — | |
| expected_manifest_json | STRING | — | |
| expected_file_sha256 | STRING | — | |
| expected_frame_count | INT | 1245–3600 | — |
| expected_width | INT | 51232–8192 | — |
| expected_height | INT | 76832–8192 | — |
| hash_chunk_megabytes | INT | 81–64 | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| av_latent | LATENT | — |
| report_json | STRING | — |