Nodes/ComfyUI-MAINodes/H3 Manual Hold Map (ranges to holds, gate) [alpha]
ComfyUI Node

H3 Manual Hold Map (ranges to holds, gate) [alpha]

Tired of the oracle being overzealous? Type the ranges yourself

By matlowai·Created 17 days ago·Updated about 17 hours ago· 112
H3 Manual Hold Map (ranges to holds, gate) [alpha]
    • hold_map
    • segments
    • report
    length124
    fps24
    ranges
    hold4
    ramptrue
    bridge8
    oracle_hold_map
    s_per_step0.00
    est_steps18
    overhead_s6.7

    The H3 Jerk Oracle is smart, but it's not you. Sometimes it flags a whole clip when you know the problem is exactly the three seconds around frame 45, and sometimes you want to hold a burst the oracle under-reads. H3 Manual Hold Map is the "I know exactly where the problem is" node - it turns typed time ranges into the same hold-map JSON the oracle emits, so everything downstream (H3 Time Smear, H3 Exact Recover, H3 Audio Recover) works unmodified.

    It's alpha, added in the 2026-08-09 batch, but it's the most approachable way to drive the de-rope pipeline by hand. And because cost scales with the held spans, targeting one burst in a long clip is also the biggest speed lever this pack has.

    The ranges syntax

    36-60, 88-102:3
    1.5s-2.4s:4
    

    Comma-separated start-end pairs, frames or seconds, ends inclusive, with an optional per-range hold count after a colon. Frames it if you think in frames, seconds if you think in seconds - both work. One catch: ranges snap outward to the model's token grid (one token spans roughly 4 frames), so what actually gets held may be slightly wider than what you typed. The segments output echoes what really happened, so trust that over your typed numbers.

    Gate mode

    This is the mode worth knowing about first. Wire the oracle's hold_map into oracle_hold_map and the oracle's holds survive only inside your ranges - it becomes a gate, not a replacement. The oracle still proposes (queue once, watch the saved oraclemap video to see where the heat pools), you type the ranges that matter, and queue again. The report output prices the pass before you commit: world length in, effective regeneration length out, plus a minutes estimate if you set s_per_step from a baseline render of your clip on your card.

    Leave oracle_hold_map unwired and you're authoring holds directly at the hold count (default 4) for every range. The other knobs - ramp (keep on, hard steps jitter) and bridge (8, fills valleys between adjacent peak spans) - are the same rules the oracle uses.

    Inputs worth knowing

    • length - the world-clock frame count of the clip.
    • ranges - the multiline field above.
    • hold - hold count for any range without an explicit :hold.
    • s_per_step, est_steps, overhead_s - the cost-estimate trio; s_per_step is the one that actually calibrates the minutes figure.

    Install

    Same as every node in this pack:

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

    or search ComfyUI-MAINodes in ComfyUI Manager and restart. No Python dependencies ship with the pack; only the example graphs want ComfyUI-KJNodes. The node lives under latent/minimax/motion in the menu.

    Common gotchas

    Ranges that snap wider than you expected are normal - the token grid won't let a token be half-held. If a held span still shows mid-burst artifacts, that's the same plateau-dip issue the oracle's bridge exists for; the node carries the same default 8. And don't forget the report output exists: it's a text wire, so route it to a preview or text node if you want to read it before the expensive pass runs.

    Categorylatent/minimax/motion

    Inputs (10)

    NameTypeDefaultDescription
    lengthINT1245–3600world-clock frame count of the clip
    fpsINT241–120
    rangesSTRINGstart-end[:hold], comma-separated; frames or seconds ('1.5s'), ends inclusive
    holdINT42–8hold count for ranges without an explicit :hold
    rampBOOLEANtrueC1 ramp shoulders, same as the oracle — keep ON
    bridgeINT80–20fill short valleys between peak spans, same rule as the oracle
    oracle_hold_mapoptSTRINGwire H3 Jerk Oracle's hold_map to gate it by your ranges
    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 (3)

    NameTypeDescription
    hold_mapSTRING
    segmentsSTRING
    reportSTRING