Nodes/ComfyUI-MAINodes/H3 Window Plan (split the pass into N windows) [alpha]
ComfyUI Node

H3 Window Plan (split the pass into N windows) [alpha]

Cut a de-rope pass into N affordable windows

By matlowai·Created 17 days ago·Updated about 18 hours ago· 112
H3 Window Plan (split the pass into N windows) [alpha]
  • images
  • images
  • hold_map
  • splice_map
  • first_frame
  • last_frame
  • window_count
  • dilated_frames
  • report
hold_map
max_dilated_frames209
window0
handle_frames12
coveragefull clip
snap_search24
grid_aligntrue
fps24
s_per_step0.00
est_steps18
overhead_s6.7
edge_protect0

The de-rope pipeline regenerates a slowed-down copy of a MiniMax-H3 clip so fast motion stops smearing. That regenerated copy is the expensive part, and on a card that can't hold the whole dilated pass at once, you need to cut it into chunks. H3 Segment Crop cuts one window around the held span. H3 Window Plan splits that span into as many windows as your budget requires, and hands you window k - one per queue item.

Think of it as the front half of a two-node requeue pair. The flow is deliberately one-click: queue once, read the plan report to learn the window count, set the queue batch count to that number, and queue once more. The window widget increments itself per batch item, seed-widget style, so a batch of N renders all N windows from a single press. Each recovered window feeds H3 Window Collect, which banks everything to disk and splices the full set back together once the last one lands. Every window is an independent queue item, which has a nice property: an OOM on window 3 costs you window 3, not windows 1 and 2.

The budget is dilated frames, not world frames

max_dilated_frames (default 209, which is 17×12+5, i.e. 62 latent tokens) is the per-window budget in smeared frames - the number that sets both the bill and the VRAM peak. The way to set it: read your single-window number off H3 Segment Crop's report and go below whatever your card survived.

The other setting worth understanding is coverage:

  • full clip (default) tiles windows over every frame, so calm spans get repainted too. They're cheap - 1 dilated frame per frame - and they cut cold by construction.
  • held span regenerates only where the hold map fires and splices into the baseline everywhere else. Cheaper, but there's a trap on the upscale recipes: passed-through frames keep baseline resolution, so the clip visibly goes soft the moment motion calms down. Pick it only when the baseline wire is already at pass-2 resolution.

Cold and hot seams, in one paragraph

The plan snaps every cut to a cold boundary first, then to token starts, then to hold plateaus - a cut never lands inside a ramp shoulder if anything else is available. Cold cuts (hold 1 on both sides) crossfade like the single-window path. Hot cuts, forced inside a burst, turn the crossfade off and become a hard cut at a pinned frame: the overlap is generated as context, then overwritten by the next window. Two independent samples of the same frames cross-faded is a dissolve, not a cut, and on audio it doubles a percussive hit.

Outputs and the report

It emits images, the window's hold_map, a splice_map, first_frame/last_frame (pin the seam poses on FL2VA checkpoints), plus window_count and dilated_frames. The report is the price tag: every window's world span, its dilated frame count, and whether each cut came out cold or hot. If a cut is hot, the node's own advice is the right move - raise the budget or lower d_max on the oracle. De-roping a burst at 2x with no seam at all usually beats a visible join in the middle of the action.

Alpha, new 2026-08-12, and part of the pack's deliberate side-by-side of three window implementations - expect interfaces to keep moving. Install is the standard clone:

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

Restart, and note that H3's own open weights are licence-geofenced out of the US, EU, UK and Korea - the pack runs only where you can legitimately hold the model.

Categoryimage/minimax/motion

Inputs (13)

NameTypeDefaultDescription
imagesIMAGEbaseline frames, world clock
hold_mapSTRINGfrom the oracle, H3 Manual Hold Map, or H3 Motion Editor
max_dilated_framesINT20939–3600budget per window in SMEARED frames (17k+5). 209 = 17x12+5, 62 tokens
windowINT00–64which window to emit this queue item; clamped to the plan. Leave the control on 'increment', set the queue batch count to the report's window count, and queue ONCE: each batch item renders the next window
handle_framesINT122–48context frames kept each side, same meaning as H3 Segment Crop
coverageoptCOMBOfull clip'full clip' tiles windows over EVERY frame, so calm spans also get the pass-2 repaint (cheap: they cost 1 dilated frame each and cut cold). 'held span' regenerates only where the hold map fires; frames outside it pass through as baseline. On an upscale recipe passed-through frames keep BASELINE resolution, which reads as the clip going soft the moment motion calms down
snap_searchoptINT240–96how far back from the largest feasible cut to look for a cold one / a token start. 0 = always cut at the budget limit
grid_alignoptBOOLEANtruegrow a hold-1 handle so sum(holds) lands on the 17k+5 grid exactly, instead of letting H3 Time Smear freeze the window's last frame. Interior seams multiply that freeze by N-1, so it is on by default here
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
edge_protectoptINT00–48(alpha) frames held at 1 on EACH side of every hot cut, re-planning until every cut reads cold. A burst that ends at a window edge has no 'after' to slow into and comes back fast after recovery (measured 2026-08-23 on a chained segment: 1.55x -> 1.06x with one token group protected). 0 = off, the shipped hot-cut behaviour

Outputs (8)

NameTypeDescription
imagesIMAGE
hold_mapSTRING
splice_mapSTRING
first_frameIMAGE
last_frameIMAGE
window_countINT
dilated_framesINT
reportSTRING