Nodes/MiniMax H3 Context Loop/MiniMax H3 Pixel Continuity • Boundary Experiment
ComfyUI Node

MiniMax H3 Pixel Continuity • Boundary Experiment

The tiny switch whose off state is the whole point

By ethanfel·Created 2 months ago·Updated 2 days ago· 520
MiniMax H3 Pixel Continuity • Boundary Experiment
    • options
    • recipe_json
    ◄enabledfalse►
    ◄frames_per_side17►
    ◄denoise0.20►
    ◄steps3►
    ◄canvas_directory►
    ◄base_recipe_json{}►

    Three widgets, two outputs, and a default of off. MiniMax H3 Pixel Continuity • Boundary Experiment is the control node for the join-refinement experiment in the deferred pixel upscale - it produces the options object that Keep Boundary Sources and Experimental Boundary Export both consume, and it's the node that decides whether either of them does anything.

    Off is the important state. With enabled off, the tail-protection recipe is byte-for-byte the one you already had, Capture performs no I/O, and Export passes the assembled path straight through. That's deliberate: the existing tail-protection workflow is the validated path, and this is an opt-in beside it, not a replacement for it.

    The knobs

    enabled            false            - the switch
    frames_per_side    17 (17/34/51)    - editable frames each side of the join
    denoise            0.20             - refinement strength in the center
    steps              3                - sampling steps for the center
    canvas_directory   ""               - blank = ComfyUI temp; use a local SSD
    base_recipe_json   {}               - JSON, gets the boundary contract stamped in
    

    frames_per_side steps in 17s because it has to land on H3's temporal grid. Hand it a 20 and it raises rather than rounding, which is the right call - a silently rounded window would break the correspondence with the cached frames.

    denoise and steps describe the small re-sample applied to the middle frames only. The pack's own comparison test used 0.20 and 3 steps, and only the default 17-frame window has real GPU validation.

    canvas_directory is where the refinement samples its window. Blank means ComfyUI's temp directory; a fast local SSD is the recommended setting, because the export streams frames and the per-join work is disk-bound.

    What recipe_json is actually for

    This is the part that trips people, and it's worth understanding rather than copying.

    When enabled is on, the node writes a boundary_refinement contract - version, frames_per_side, denoise, steps - into the JSON it received in base_recipe_json, and hands the merged JSON out of recipe_json. You wire that into the Upscale Adapter, which records it in the upscale profile's config. Capture and Export both re-check the recorded contract against the options object they were given and refuse to run if they disagree.

    The upshot: change the switch or any of its three sampling settings and you have a different recipe, so the saved profile is no longer compatible. Use a new profile, or reprocess. And because the check is a ValueError, the failure is loud - Connect Boundary Experiment recipe_json to the Upscale Adapter - rather than a quiet mismatch between cached samples and a different recipe.

    base_recipe_json has to be valid JSON; it's parsed, so a stray trailing comma gets you an exception at queue time.

    Wiring, in one line each

    options goes to Keep Boundary Sources (which runs pre-USDU) and Experimental Boundary Export (which runs after assembly). recipe_json goes to the Upscale Adapter so the profile records what you asked for. Nothing else in the graph should need to reference it.

    Install

    Manager search for MiniMax H3 Contex Loop, or:

    cd ComfyUI/custom_nodes
    git clone https://github.com/seitanism/ComfyUI-H3-Motion-Context-MultiRef.git
    git clone --branch main https://github.com/ethanfel/ComfyUI-MiniMaxH3-Context-Loop.git
    

    Restart fully - the pack patches H3 guide and mask paths, and stale patch ownership after a partial update is its own class of confusing bug. No pip requirements ship with it, but the pixel-continuity chain assumes the H3 model files, ffmpeg on PATH, and the ComfyUI-DLSS5-Enhancer, ComfyUI_UltimateSDUpscaleGuider_H3 and ComfyUI-ContextAnchoredTile-videopath packs.

    Should you turn it on

    Probably not yet, unless fixing a specific join is worth the risk of two new boundaries. The node's own description names the tradeoff - "Experimental: may improve the join but introduce artifacts at the replacement edges" - and the measured result on the pack's test footage was a ~6% better join against ~6–7% worse replacement edges.

    Where it is worth the trouble: a genuinely continuous shot split across two scenes at a hard-to-hide point, where the join is more visible than the boundaries would be. Enable it, upscale into a fresh profile, export with the boundary node, then watch the join and the thirty frames either side of it before deciding which file you keep.

    Categoryconditioning/minimax/context_loop/upscale

    Inputs (6)

    NameTypeDefaultDescription
    enabledBOOLEANfalse—
    frames_per_sideINT1717–51—
    denoiseFLOAT0.200.01–1—
    stepsINT31–100—
    canvas_directorySTRING—
    base_recipe_jsonSTRING{}—

    Outputs (2)

    NameTypeDescription
    optionsH3_PIXEL_BOUNDARY_OPTIONS—
    recipe_jsonSTRING—