Nodes/ComfyUI-MiniMaxH3-Contex-Loop/MiniMax H3 Chain De-Rope Freeze Mask
ComfyUI Node

MiniMax H3 Chain De-Rope Freeze Mask

Stop pass 2 from re-texturing the frames you already locked down

By ethanfel·Created 17 days ago·Updated about 18 hours ago· 315
MiniMax H3 Chain De-Rope Freeze Mask
  • state
  • mask
  • dilated_length
  • status
hold_map_used

MiniMax H3 Chain De-Rope Freeze Mask is the partner to Chain De-Rope Guard, and it answers a subtle question: once the Guard has told Time Smear which frames not to retime, how does pass 2 know which pixels it's allowed to re-texture? The Guard protects the timing; this node builds the time-varying mask that protects the texture.

The scenario: a Drift-Control continuation prefix (the frames carried over from the previous scene) gets protected from retiming by the Guard - rate 1 in the hold map means "do not stretch these frames." But the actual pass-2 sampling still runs over the whole scene, and if the sampler re-denoises those protected prefix frames, it re-textures them anyway. You'd get a prefix whose timing survived but whose content got rewritten - a new continuity break, caused by the fix for continuity. Freeze Mask closes that loop.

How it works

It consumes the current Upscale state (which carries the exact RAW/delivered prefix contract) and hold_map_used - the final hold map emitted by H3 Time Smear, including its end expansion and legal-grid padding. From that it derives a time-varying regenerate mask: zero over the continuation prefix (freeze it), one over the material pass 2 may refine. You feed that mask to MAINodes H3 V2V Init and enable its time_varying option.

Why "time-varying"? Because the mask changes over the clip's timeline - the prefix region is frozen early and the mask opens up for the genuinely new material. A static mask would either freeze too much or let the sampler rewrite the prefix. The dilated_length output gives you the exact dilated frame count encoded by hold_map_used, which is your cross-check that the mask and the Time Smear clock agree.

The three outputs are mask (connect to H3 V2V Init), dilated_length, and status (prefix-freeze and dilated-clock summary).

Where it sits

In the bundled de-rope workflow it comes right after Time Smear:

H3 Jerk Oracle → Chain De-Rope Guard → H3 Time Smear → Chain De-Rope Freeze Mask
                                                            ↓
                              H3 V2V Init (mask input, time_varying on)

It's used in concert with Guard - Guard handles the hold map and expand_to_end; Freeze Mask turns the resulting clock into a sampling mask. They're two halves of one protection: one for time, one for pixels.

Installing it

Part of ComfyUI-MiniMaxH3-Contex-Loop (ComfyUI Manager: "MiniMax H3 Contex Loop"), or:

cd ComfyUI/custom_nodes && git clone https://github.com/ethanfel/ComfyUI-MiniMaxH3-Contex-Loop.git

Restart ComfyUI. Like the other de-rope nodes it wraps MAINodes, so install ComfyUI-MAINodes (matlowai) for H3 Time Smear and H3 V2V Init. Standing requirements: H3 weights, current ComfyUI with native Add Guide (PR #15439).

Common issues

The two things that break it: feeding Time Smear's input hold map instead of its hold_map_used output (you need the final map with end expansion and padding baked in - the padding is exactly what makes the dilated clock legal), and forgetting to enable time_varying on H3 V2V Init, which silently turns the freeze into a static mask. If the prefix still gets re-textured, check both.

Categoryconditioning/minimax/contex_loop/upscale

Inputs (2)

NameTypeDefaultDescription
stateH3_CHAIN_UPSCALE_STATECurrent Upscale state carrying the exact RAW/delivered prefix contract.
hold_map_usedSTRINGFinal hold_map_used emitted by H3 Time Smear. It includes end expansion and legal padding.

Outputs (3)

NameTypeDescription
maskMASKTime-varying regenerate mask for H3 V2V Init: zero over the continuation prefix and one over material pass 2 may refine.
dilated_lengthINTExact dilated frame length encoded by hold_map_used.
statusSTRINGPrefix-freeze and dilated-clock summary.