Nodes/ComfyUI-MAINodes/H3 Time Smear (integer holds)
ComfyUI Node

H3 Time Smear (integer holds)

The node that teaches MiniMax-H3 to draw fast motion twice as slowly

By matlowai·Created 17 days ago·Updated about 16 hours ago· 112
H3 Time Smear (integer holds)
  • images
  • images
  • hold_map_used
  • length
  • report
dilation4
hold_map
expand_to_endtrue
fps24
s_per_step0.00
est_steps18
overhead_s6.7

H3 Time Smear is the engine room of the MAINodes Motion Lab, and understanding it is understanding the whole de-rope trick. MiniMax-H3 smears fast motion - backflips, sword arcs, whip-fast reversals - because one latent token spans four pixel frames, and a single token can't hold four distinct poses at once. You can't re-denoise your way out of that, because the missing poses were never generated. So the pack cheats in the time domain: it regenerates the clip as a slowed-down version of itself, seeded from the original. Frames where motion is too fast get held so the model has more temporal room to draw them, and the original frame rate is recovered afterward by dropping the held frames. This node is the "slow it down" step.

How it works

Feed it the baseline frames (images) and it retimes them onto a longer, uniform grid using integer frame holds. Two modes:

  • Uniform (nothing wired to hold_map): every frame is held dilation times (default 4 - the zero-artifact reference point, and the highest cost).
  • Adaptive (wire H3 Jerk Oracle's hold_map): only jerk-hot spans get held; quiet spans stay real-time. Cheaper, preserves the clip's natural beat contrast, at a small artifact risk where the hold curve dips inside a burst.

The output images get their length snapped up to the H3-legal 17k+5 grid by extending the final hold - or to the target model's grid when the map comes from H3 Clock Remap (LTX-2.5 is 8k+1). expand_to_end (default on) handles the awkward case where a map ends in a short rate-1 tail after an expansion span: it runs the span through the last world frame instead of jumping back to real time at the clip end.

The outputs that actually matter

  • hold_map_used - the map after padding and snapping. The README is emphatic: always pass this to H3 Exact Recover. It records exactly what happened so recovery is lossless. It's also what H3 True Clock, H3 Save Hold Map, and the recover nodes read.
  • length - the dilated frame count; wire it where the pipeline needs the regenerated length.
  • report - the price tag. A 5 s action clip regenerates as 11–13 s of frame data, and that dilated length, not your clip length, is what sets the bill and the VRAM peak. Read the TIME multiplier, not the frame one: per-step cost is superlinear in tokens, so 2.5× the frames is roughly 4.9× the time per step. You can set s_per_step from a baseline render of the same clip on your card to get a minutes estimate.

Install

Ships in matlowai/ComfyUI-MAINodes:

cd ComfyUI/custom_nodes
git clone https://github.com/matlowai/ComfyUI-MAINodes

Restart, under image/minimax/motion. No extra Python deps for the nodes themselves, though the example graphs need ComfyUI-KJNodes; you also need MiniMax-H3 weights and ComfyUI's stock H3 support (check the licence's US/EU/UK/Korea carve-outs first).

The recurring beginner mistake is treating Time Smear in isolation. It's the first third of a pipeline - the full chain is baseline → oracle → Time Smear → VAE encode → H3 V2V Init → partial-denoise regen → H3 Exact Recover. Grab examples/motion_pipeline.json and read it as a whole; every node past this one exists because of the retiming it produces.

Categoryimage/minimax/motion

Inputs (8)

NameTypeDefaultDescription
imagesIMAGE
dilationINT41–8uniform hold count; ignored when hold_map is wired
hold_mapoptSTRINGfrom H3JerkOracle — per-frame integer holds
expand_to_endoptBOOLEANtruewhen the map ends in a SHORT rate-1 tail (<= 17 frames) after an expansion span, run that span through the last frame instead (kills the end jump). Uniform maps and longer rest tails are untouched
fpsoptINT241–120only used to phrase the report in seconds
s_per_stepoptFLOAT0.000–120seconds per step from a baseline render of this clip; 0 skips the minutes estimate
est_stepsoptINT181–100steps the regen pass will actually run (total_steps x inject)
overhead_soptFLOAT6.70–600fixed non-sampling seconds per render (setup, VAE encode/decode). 40 measured at 1.5 MP on a warm instance; take it from the gap between your own 1-step and 2-step wall times

Outputs (4)

NameTypeDescription
imagesIMAGE
hold_map_usedSTRING
lengthINT
reportSTRING