Nodes/ComfyUI-SA-Nodes-QQ/Chain Edit Video (QQ)
ComfyUI Node

Chain Edit Video (QQ)

Copy one video's crop to every shot in your Wan workflow

By siraxe·Created 11 months ago·Updated about 18 hours ago· 72
Chain Edit Video (QQ)
  • metadata
  • METADATA
cropfalse
start_offset0

ChainEditVideo is the courier that carries one video's framing to another. It doesn't touch a single pixel itself - it passes a METADATA object between the pack's Power Load Video nodes, so shot two gets the exact same crop as shot one, or starts on the same frame. If your workflow has one "Load Video" that your whole graph keys off, you don't need this. If you're stitching together multiple reference clips and they keep coming out with slightly different framing because you eyeballed crop_x on each loader, this is the fix.

It ships in siraxe's experimental Wan video pack (the repo that's been renamed to ComfyUI-SA-Nodes-QQ; more on that in the install section). Power Load Video is the pack's flagship loader, and its metadata output is a fat dict: crop bounds, fps settings, frame count, output dimensions, even whether it was resized or ran the high-res dual path. ChainEditVideo is the relay in the middle.

How the chain works

Wire it like this: Power Load Video → ChainEditVideo → a second Power Load Video's metadata input. The second loader reads the dict it receives and applies what's in it - if crop_enabled is true it adopts the crop boundaries, and if start_offset is non-zero it shifts its start_frame by that many frames. That's the whole loop, and it's worth knowing one detail: ChainEditVideo is a gate, not a suggestion. With crop off it actively writes crop_enabled = False into the dict, which turns cropping off on the downstream loader. Forget to flip the toggle and your carefully-trimmed second video quietly loses its crop.

The two inputs that actually matter:

  • crop (BOOLEAN) - set this to propagate the crop area from the incoming metadata to the next loader. The crop values (center x/y and width/height) are normalized 0–1 fractions, so they survive resolution changes between clips.
  • start_offset (INT, −999999 to 999999) - added to the next loader's starting frame. Positive skips ahead, negative pulls earlier. Useful when two reference clips should line up on the same moment. It's a transient adjustment: the downstream loader's own metadata output doesn't echo it back.

metadata (optional) is where the chain starts. Leave it unconnected and the node fabricates a default dict - no crop, your offset applied - which is handy for testing a chain before you've picked the video. The output is a single METADATA socket, and you can stack these: Load → ChainEdit → ChainEdit → Load to build up edits step by step.

Install

Same story as the rest of the pack. Either grab it in ComfyUI Manager (search "WanVideoWrapper QQ", now listed under SA-Nodes-QQ) or:

cd ComfyUI/custom_nodes/
git clone https://github.com/siraxe/ComfyUI-WanVideoWrapper_QQ.git

Restart ComfyUI. No extra pip dependencies and no model downloads - the pack ships without a requirements.txt, and this node is pure dict-passing.

The one gotcha that bites people: the repo renamed to ComfyUI-SA-Nodes-QQ in v1.3.4, and old workflow .json files still reference the previous wanwrapper_qq folder. If ComfyUI starts re-installing a mystery node pack when you load an older workflow, delete the stale wanwrapper_qq directory from custom_nodes and reload.

When you'd actually use it

Honestly? Not often. This is a consistency tool for multi-shot reference work - matching crops across clips, syncing start frames - and most Wan users run single-reference I2V and never need it. Keep it in your back pocket for the day your graph grows a second Load Video and you start tweaking crop sliders in parallel. That's the workflow where it pays for itself.

CategoryPower/Video

Inputs (3)

NameTypeDefaultDescription
cropBOOLEANfalse
start_offsetINT0-999999–999999
metadataoptMETADATA

Outputs (1)

NameTypeDescription
METADATAMETADATA