H3 Load Hold Map (sidecar)
Steal a hold map from another model's graph without loading that model
- hold_map
- world_len
- path
Part of the pack's "de-rope for any model" toolchain (it lives on the generic-derope branch in the repo, so treat it as alpha). The idea: you ran the H3 de-rope, the oracle found the motion that was too fast, and the result was good. Now you want the same timing decision to drive a different model - say an LTX-2.5 or Wan pass - without loading both models into one graph. H3 Load Hold Map reads the hold-map sidecar that H3 Save Hold Map wrote next to your render, and hands it back as the same hold-map JSON, ready for H3 Clock Remap or straight into H3 Time Smear.
How it works
Give it the SaveVideo prefix of the arm whose clock you want - e.g. video/panrun_base - and it finds the newest <prefix>.holdmap*.json under the output directory. Absolute paths, and paths that already end in .json, are taken as they are. It then passes the clock through and deliberately nothing else: the README's warning is that the target grid of the graph that wrote the sidecar must not leak into a different model's smear, so only the holds and the world length travel.
Inputs:
path(defaultvideo/derope) - the SaveVideo prefix, or a direct.jsonpath.start/length- crop the clock to a window of source frames, for a model whose per-pass cap the whole clip exceeds. If you crop here, feed the same window of frames to H3 Time Smear (via ImageFromBatch's start/length) or the map and the video won't line up.
Outputs:
hold_map- the clock, ready to wire into H3 Clock Remap or H3 Time Smear.world_len- how many world frames the map covers.path- the resolved file path, so you can see what it actually loaded.
When you'd use it
The whole "clock in one graph, model in another" split exists because the H3 model is heavy - 33B, roughly 42.5 GB at full precision before quantization - and you don't want two video models resident to make a timing decision. Run the cheap H3 pass once, save the clock, then let an LTX-2.5 graph (which runs on far smaller cards) re-render with the same retiming. It's the same thinking behind the rolling-window graphs: decide once, pay for it many times.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/matlowai/ComfyUI-MAINodes
or ComfyUI Manager → ComfyUI-MAINodes, restart. Category image/minimax/motion. The README notes the any-model machinery is on a branch until the oracle-shaped LTX arm is measured, so if this node isn't in your menu, you may be on the default branch where it ships only via the generic-derope branch - check the repo.
Common gotchas
If it errors with no sidecar found for the prefix, the path is wrong or the render that wrote the map didn't finish - the sidecar is written by H3 Save Hold Map, not by the save-video node you may have substituted. And if you crop with start/length, matching the frame window downstream is on you; a mismatched window is the classic silent failure mode here.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| path | STRING | video/derope | SaveVideo prefix of the arm whose clock you want, or a .json path |
| startopt | INT | 00–100000 | crop the clock to a window of source frames (for a model whose per-pass cap the whole clip exceeds); feed the SAME window of frames to H3 Time Smear (ImageFromBatch start/length) |
| lengthopt | INT | 00–100000 | window length in source frames; 0 = to the end |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| hold_map | STRING | — |
| world_len | INT | — |
| path | STRING | — |