MiniMax H3 MotionCache
Skip up to a third of MiniMax H3's denoiser calls — if the motion lets you
- model
- MODEL
MiniMax H3 is a 33B omni-modal model that generates video and audio together, and every one of those denoising steps is a full forward pass through the transformer. At 20 steps that's 20 expensive calls. This node is a patch that decides some of them aren't needed, and when it's right you get something like 30% fewer model calls for close to the same clip. It's adapted from the MotionCache paper by MAC-AutoML - an independent port, not an official MiniMax or MAC-AutoML thing - and it's honest about the trade: it's approximate, and you should treat its speedup number as "estimated DiT speedup", not wall-clock.
What it actually does
Drop it between the H3 model loader and the sampler:
MiniMax H3 model → MiniMax H3 MotionCache → sampler
Under the hood it wraps H3's forward call. After a warmup of warmup_steps (4 by default), each step it compares the current joint video/audio latent against the previous step, weighting frame differences by how much motion is happening. If the accumulated, motion-aware change stays under reuse_threshold, it skips the transformer entirely and reuses the residual it saved from the last computed step - for both video and audio, since H3's latents are joint. It never skips more than max_consecutive_skips (2) in a row, and it stays quiet outside the start_percent–end_percent range (0.15–0.95 of the schedule by default) so the noisy start and the detail-settling end still get real calls.
The inputs that matter
The model input is just the patched H3 model, and the single MODEL output wires straight into your guider/sampler. Of the knobs, three actually change behavior:
reuse_threshold(0.15) - how much accumulated change it tolerates before forcing a real call. Raise it and you skip more and get more approximation error; lower it toward 0.05 if faces, hands, lip sync or fast motion start falling apart.motion_strength(1.0) - how strongly moving regions dominate the reuse decision. Frames that are changing a lot refuse to reuse; setting this to 0 treats every pixel equally.max_consecutive_skips(2) - a safety cap so it can't ride a stale residual for too long even if the frame looks quiet.
The rest (subsample_factor, warmup_steps, verbose) are fine at defaults. Flip verbose on if you want a log line per computed or skipped step.
Installing it
Search MiniMax H3 MotionCache in ComfyUI Manager, or:
cd ComfyUI/custom_nodes
git clone https://github.com/starsFriday/ComfyUI-MiniMax-H3-MotionCache.git
Restart ComfyUI. That's it - the pack has no Python dependencies and doesn't download models. The heavy part is what you feed it: ComfyUI 0.30.0+ with native MiniMax H3 support, plus the H3 diffusion model and video VAE (the full-precision weights run to roughly 42.5 GB). And before you clone, remember H3's community license geofences the weights out of the US, EU, UK and Korea - the node doesn't care, but the license does.
What to expect, honestly
Run the log line through your head before you trust it: MiniMax H3 MotionCache - skipped 6/20 model calls (estimated 1.43x DiT speedup). That's the DiT-call estimate, not "your render is 1.43× faster" - VAE decode, text encode and everything else around the sampler still run. Community experience with caching nodes for video (EasyCache on Wan is the closest cousin) is consistently "benchmark it" territory; the win varies a lot by steps and content. The README's own advice is the right protocol: compare a run with the node bypassed against one with it active. This is a motion-skip node, so specifically eyeball motion boundaries, faces, hands, lip sync and fast camera moves, and keep an eye on synced audio. Two hard rules: it only works on H3 diffusion models, and don't combine it with EasyCache on the same model - they'll fight over the same patch.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| reuse_threshold | FLOAT | 0.150–1 | Higher values reuse more model calls. Start at 0.15. |
| motion_strength | FLOAT | 1.00–4 | How strongly frame differences prioritize moving regions. |
| warmup_steps | INT | 42–20 | — |
| max_consecutive_skips | INT | 21–10 | — |
| start_percent | FLOAT | 0.150–1 | — |
| end_percent | FLOAT | 0.950–1 | — |
| subsample_factor | INT | 81–32 | — |
| verbose | BOOLEAN | false | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| MODEL | MODEL | — |