Nodes/VACE Automation/VACE Two Video Bridge Prep
ComfyUI Node

VACE Two Video Bridge Prep

Two videos, one seamless span

By EnviralDesign·Created 6 months ago·Updated 3 months ago· 0
VACE Two Video Bridge Prep
  • 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
left_replace_frames16
right_replace_frames16
edge_blend_frames4
debugfalse
resize_strategypassthrough
width
height

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 video
  • right_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 clips
  • left_replace_frames, right_replace_frames, edge_blend_frames - the three numbers above
  • resize_strategy - passthrough (default) derives size from matching inputs; explicit_resize stretches both videos to width/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 when resize_strategy is explicit_resize
  • debug - 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 the fps override. Read the error - it names both sides.
  • explicit_resize without width/height errors immediately, and the sizes must be multiples of 16.
  • Replace counts bigger than the video. left_replace_frames can'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.

Categoryvideo/VACE

Inputs (10)

NameTypeDefaultDescription
left_videoVIDEO
right_videoVIDEO
left_replace_framesINT160–80
right_replace_framesINT160–80
edge_blend_framesINT40–80Frames at each outer bridge edge used as original guidance and final blend anchors.
debugBOOLEANfalse
resize_strategyCOMBOpassthroughpassthrough derives width/height from matching input videos; explicit_resize stretches both videos to the width/height inputs.
fpsoptFLOAT,INT0.01–1000Optional FPS override. Leave disconnected to derive and validate FPS from the input videos.
widthoptINTTarget width used only when resize_strategy is explicit_resize.
heightoptINTTarget height used only when resize_strategy is explicit_resize.

Outputs (16)

NameTypeDescription
control_videoIMAGE
control_maskMASK
left_keptIMAGE
right_keptIMAGE
bridge_sourceIMAGE
widthINT
heightINT
wan_lengthINT
bridge_framesINT
padding_startINT
padding_framesINT
left_edge_framesINT
right_edge_framesINT
fpsFLOAT
bit_depthINT
color_reference_frameIMAGE