Nodes/ComfyUI Wan VACE Prep/πŸͺ VACE Join
ComfyUI Node

πŸͺ VACE Join

Stitching two Wan clips into one take without the seam

By stuttlepressΒ·Created 8 months agoΒ·Updated 25 days agoΒ· 100
πŸͺ VACE Join
  • video_1
  • video_2
  • control_video
  • control_mask
  • width
  • height
  • length
  • start_images
  • end_images
  • context_frames
  • replace_frames
  • new_frames
β—„context_frames8β–Ί
β—„replace_frames8β–Ί
β—„new_frames0β–Ί

If you make multi-shot videos with Wan, you already know the problem: the individual clips are fine, and then the cut between them is a dead giveaway. Subjects jump, lighting shifts, and no amount of fade handles it. VACE Join exists to fix that one thing. It's the pack's flagship node - the piece of "node math" that the author (Reddit's goddess_peeler, GitHub's stuttlepress) says replaced square meters of spaghetti workflow in their Wan VACE Clip Joiner. One gotcha before you go hunting for it: the class name is WanVACEPrep but it appears in the node menu as πŸͺ VACE Join. Renaming classes would break existing workflows, so the old names stuck around.

Wan VACE, in case you've only touched the base model, is Alibaba's official control framework for Wan: it generates video from a control video plus a mask that says which frames (or which regions) are real and which are yours to regenerate. That's exactly the machinery a transition needs, and this node builds both control inputs for you.

How it works

Give it two clips and it assembles the transition out of three zones:

  • Context frames from the facing edge of each clip - these are preserved verbatim and act as the model's reference. VACE interpolates from them.
  • A replacement zone where replace_frames from each edge are dropped and handed to Wan to regenerate.
  • Optionally new_frames of entirely fresh footage between the two clips, lengthening the transition.

Under the hood it takes the context slices from each video, fills the middle with gray (0.5) placeholder frames, and sets the mask to 1 across that middle zone. That's the whole job: context video + mask out, and Wan VACE does the interpolation. There's a subtle 4n+1 rule at play too - Wan generates 4n+1 frames at a time, so the node adds one extra placeholder frame to the regeneration zone rather than letting the model quietly round your count down.

The inputs and outputs that matter

You only really set three things:

  • video_1 / video_2 - your two clips as IMAGE batches. They must have identical resolution, and both dimensions have to be divisible by 16, or the node raises an error.
  • context_frames (default 8) - reference frames from each edge. Multiples of 4. More context anchors the transition better but costs VRAM.
  • replace_frames (default 8) - frames to regenerate at each edge. Also multiples of 4.
  • new_frames (default 0) - extra frames to insert between the clips. 0 or a multiple of 4.

The outputs are what you'd expect from a prep node: control_video and control_mask wire straight into the native WanVaceToVideo node's control_video / control_masks inputs, along with width, height, and length if you want to drive latent sizing. The two you can't skip: start_images and end_images, the preserved segments that bookend the transition. After sampling, you concatenate start_images + the generated transition + end_images and save the result. The context_frames / replace_frames / new_frames outputs are passthroughs for downstream wiring.

Install

Same as the whole pack - ComfyUI Manager, search "Wan VACE Prep", install, restart. Or:

cd /path/to/comfyui/custom_nodes
git clone https://github.com/stuttlepress/ComfyUI-Wan-VACE-Prep

No extra pip packages (the project declares zero dependencies), and nothing to download for the node itself. You still need the Wan VACE checkpoint (Wan2.1-VACE-14B, or 1.3B on smaller cards) plus the base Wan model and VAE before any of this produces pixels. As of v1.1.0 the pack runs on ComfyUI's Nodes 2.0 (V3) API; it's fully compatible with the legacy renderer, but if something misbehaves after a ComfyUI update, that migration is the prime suspect.

Common issues

  • "Video dimensions must be divisible by 16" - resize your clips first. This is the most common wall and it's by design; Wan's VAE needs the grid.
  • "context_frames + replace_frames too large for video" - both clips need at least context_frames + replace_frames frames. Short clips, shrink the numbers.
  • Dimension mismatch between video_1 and video_2 - the node checks and refuses rather than silently cropping. Standardize on a resize node upstream.
  • Jumpy, linear motion at the join - that's Wan VACE being Wan VACE at low context. Bump context_frames, and consider CausVid-style speed LoRAs if 20-40 minute VACE generations make you want to cry; they're practically required for iterating on a join.
CategoryWan VACE Prep/VACE

Inputs (5)

NameTypeDefaultDescription
video_1IMAGEβ€”
video_2IMAGEβ€”
context_framesINT84–120Reference frames from each video edge for VACE interpolation (multiple of 4).
replace_framesINT80–120Number of frames to regenerate at each transition edge (multiple of 4).
new_framesINT00–240Number of new transition frames to generate, in addition to the replace_frames (multiple of 4).

Outputs (10)

NameTypeDescription
control_videoIMAGEβ€”
control_maskMASKβ€”
widthINTβ€”
heightINTβ€”
lengthINTβ€”
start_imagesIMAGEβ€”
end_imagesIMAGEβ€”
context_framesINTβ€”
replace_framesINTβ€”
new_framesINTβ€”