Nodes/VACE Automation/VACE Crossfade Transition
ComfyUI Node

VACE Crossfade Transition

Blend the seam back into the source so nobody sees the join

By EnviralDesign·Created 6 months ago·Updated 3 months ago· 0
VACE Crossfade Transition
  • control_video
  • vace_output
  • images
context_frames8
easingease_in
enabledtrue

VACE is great at generating a transition that motion-wise bridges two clips. What it's less great at is matching your original footage frame-for-frame - the regenerated seam can drift in color, lighting, or texture, and when you cut it in next to the untouched source, you see the join. VACE Crossfade Transition exists to hide that. It blends the original seam context back into the VACE-regenerated seam with an easing curve, so the transition eases out of your real footage and eases back into it instead of announcing itself.

How it works

You hand it two things that must be the same shape: control_video (the original control window you fed into VACE) and vace_output (what VACE generated). Then it does a three-part blend:

  • Head - the first context_frames ease from the original into the VACE output.
  • Middle - passes through untouched (that's the genuinely new generated content).
  • Tail - the last context_frames ease from the VACE output back into the original.

The easing dropdown (linear, ease_in, ease_out, ease_in_out) shapes how aggressively the blend ramps. Default is ease_in, which starts the head blend slow and speeds up - a good default for most seams. And if you set enabled to false, the node is a no-op: it returns vace_output untouched. Handy for A/B testing whether the blend is actually helping or just softening the generated motion.

Inputs and outputs that matter

  • control_video (IMAGE) - the original control frames
  • vace_output (IMAGE) - the generated seam, must match control_video exactly
  • context_frames (INT, default 8) - how many frames on each side get blended
  • easing (enum, default ease_in)
  • enabled (boolean, default true)

Output is a single images output - the blended transition clip. That wires into VACE Join Assemble as the transition_images input, sitting between start_images and end_images.

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

  • Shape mismatch. control_video and vace_output must match exactly - same frame count, resolution, channels. The error is explicit about both shapes, so usually one of your nodes resized something along the way. Fix the pipeline, not the error.
  • Too short to blend. If the clip is shorter than 2 × context_frames, the node refuses because it can't build non-overlapping head and tail blends. Drop context_frames or feed it a longer control window.
  • Blending away the generation. If your seam had strong motion you want to keep, a long context_frames with ease_in_out can flatten it back toward the original. When in doubt, preview with enabled off first, then on, and keep whichever looks less like a cut.

Worth knowing: this same easing family (linear/ease_in/ease_out/ease_in_out) is what the pack's newer two-video bridge uses for its edge_blend_easing setting. If you've used one, the other behaves the same way - the old crossfade curve carried straight over.

Categoryvideo/VACE

Inputs (5)

NameTypeDefaultDescription
control_videoIMAGE
vace_outputIMAGE
context_framesINT81–4096
easingCOMBOease_in4 options: linear, ease_in, ease_out, ease_in_out
enabledBOOLEANtrue

Outputs (1)

NameTypeDescription
imagesIMAGE