VACE Two Video Bridge Prep
Two videos, one seamless span
- left_video
- right_video
- fps
- control_video
- control_mask
- left_kept
- right_kept
- bridge_source
- width
- height
- wan_length
- bridge_frames
- padding_start
- padding_frames
- left_edge_frames
- right_edge_frames
- fps
- bit_depth
- color_reference_frame
Everything else in this pack is built around iterating over a clip list. VACE Two Video Bridge Prep is the direct path instead: drop in two native VIDEO inputs, tell it how many frames to replace on each side, and it builds a clean left/right bridge window for generating one smooth seam. The README calls this the preferred route for "editor/NLE use" - no loop, no clip list, no intermediate files. Just left clip, right clip, one transition.
How it works
You give it left_video and right_video (native Comfy VIDEO objects - load them with VACELoadVideoFromPath or your usual loader). It reads the frames and FPS out of both, then:
left_replace_frames(default 16) - frames replaced from the end of the left videoright_replace_frames(default 16) - frames replaced from the start of the right video
The visible bridge span is left_replace_frames + right_replace_frames. But here's where the node earns its keep: Wan generation lengths follow a 4n + 1 pattern (17, 33, 49, 81...), and a 32-frame visible bridge isn't a valid window. So Prep pads the seam with masked frames up to the next valid length and returns wan_length, padding_start, and padding_frames telling you exactly where that hidden padding is. The README's example: a 32-frame visible bridge becomes a 33-frame Wan control window, and VACE Two Video Bridge Assemble trims it back down to 32. You never see the padding; it just means your "ask for 32, get 32" request actually works.
edge_blend_frames (default 4) marks frames at each outer bridge edge that stay anchored to the original footage - used both as guidance for the model and later as blend anchors when Assemble re-mixes the generated edges back into the source.
Inputs and outputs that matter
left_video,right_video(VIDEO) - the two clipsleft_replace_frames,right_replace_frames,edge_blend_frames- the three numbers aboveresize_strategy-passthrough(default) derives size from matching inputs;explicit_resizestretches both videos towidth/height(multiples of 16)fps(optional) - an FPS override; leave disconnected to derive and validate FPS from both videos (mismatched FPS errors)width,height(optional) - only used whenresize_strategyisexplicit_resizedebug- console prints of all the derived numbers
The outputs you'll actually touch: control_video + control_mask (into your VACE control nodes), left_kept + right_kept (the un-replaced clip bodies), bridge_source (the original frames of the bridge span, used for edge blending), and wan_length/bridge_frames/padding_*/edge_frames to wire into the Assemble node. fps and bit_depth come out for encoding, and color_reference_frame is a single frame (the last non-gray left anchor) for color matching - feed it to something like KJNodes' ColorMatch if you're chasing consistent color.
Installing it
Part of the comfy-vace-automation pack, no extra pip dependencies:
cd ComfyUI/custom_nodes
git clone https://github.com/EnviralDesign/comfy-vace-automation
Restart ComfyUI, or install via ComfyUI Manager (search "comfy-vace-automation").
When it bites you
- Mismatched inputs. With
passthrough, both videos must share resolution and channels; with mismatched FPS you'll get an error unless you set thefpsoverride. Read the error - it names both sides. explicit_resizewithoutwidth/heighterrors immediately, and the sizes must be multiples of 16.- Replace counts bigger than the video.
left_replace_framescan't exceed the left video's length, same for the right. The error tells you the limit. - Bridge span too long. The visible maximum is 80 frames (the Wan window tops out at 81). If you need a longer transition, split the work - this node is designed around the 4n+1 window, not around breaking it.
For the VACE side, remember this pack doesn't bundle the inference nodes - the README points at external packs like KJNodes for extras such as WanVideoNAG and ColorMatch. Prep hands off standard control video + mask, so it slots into whatever Wan VACE setup you already run.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| left_video | VIDEO | — | |
| right_video | VIDEO | — | |
| left_replace_frames | INT | 160–80 | — |
| right_replace_frames | INT | 160–80 | — |
| edge_blend_frames | INT | 40–80 | Frames at each outer bridge edge used as original guidance and final blend anchors. |
| debug | BOOLEAN | false | — |
| resize_strategy | COMBO | passthrough | passthrough derives width/height from matching input videos; explicit_resize stretches both videos to the width/height inputs. |
| fpsopt | FLOAT,INT | 0.01–1000 | Optional FPS override. Leave disconnected to derive and validate FPS from the input videos. |
| widthopt | INT | Target width used only when resize_strategy is explicit_resize. | |
| heightopt | INT | Target height used only when resize_strategy is explicit_resize. |
Outputs (16)
| Name | Type | Description |
|---|---|---|
| control_video | IMAGE | — |
| control_mask | MASK | — |
| left_kept | IMAGE | — |
| right_kept | IMAGE | — |
| bridge_source | IMAGE | — |
| width | INT | — |
| height | INT | — |
| wan_length | INT | — |
| bridge_frames | INT | — |
| padding_start | INT | — |
| padding_frames | INT | — |
| left_edge_frames | INT | — |
| right_edge_frames | INT | — |
| fps | FLOAT | — |
| bit_depth | INT | — |
| color_reference_frame | IMAGE | — |