Nodes/ComfyUI-FBnodes/VACE Stitcher
ComfyUI Node

VACE Stitcher

AI-smoothed video transitions between your clips, in one node

By FranckyB·Created 6 months ago·Updated 3 days ago· 13
VACE Stitcher
  • model_high
  • model_low
  • positive
  • negative
  • vae
  • options
  • images
  • audio
  • fps
  • metadata
source_folder
clip_list[]

VACE Stitcher is the pack's heavyweight: it takes several separate video clips, generates smooth AI transitions between them using Wan's VACE framework, and outputs the whole thing as one video with audio and metadata. It's the "join first-last frame videos" pattern - the same one the community's Wan VACE Clip Joiner workflows made famous for turning a handful of generated takes into a continuous short - but packed into a single node with a clip browser, drag-to-reorder list, and cached transitions so you don't redo expensive work every run.

It's part of ComfyUI-FBnodes, François Beaudry's utility pack, and the README credits Bob's Wan VACE Clip Joiner workflow on CivitAI as the inspiration. If your clips' ends don't match their neighbors' starts - which is every AI video clip, basically - this is the node that dissolves the seam with actual generated content instead of a hard cut.

How it works

You supply two models, two conditionings, a VAE, and a clip list. The two-model requirement is the distinctive part: model_high handles the high-noise stage of sampling and model_low the low-noise remainder - the two-stage approach that gets good transitions at acceptable step counts. The positive and negative CONDITIONING inputs come from normal CLIP Text Encode nodes, and vae decodes the result.

The workflow shape: use the file browser to multi-select clips from input or output, drag them into order, and the node generates a transition between each consecutive pair by sampling replacement frames, using frames just before and just after the seam as context. It then crossfades in pixel space (with easing curves and optional color matching) and emits images (IMAGE batch), audio (AUDIO), fps (FLOAT), and metadata (STRING, e.g. for Save Video+ to embed).

Two features make it practical rather than theoretical:

  • Lossless latents. Save your clips with Save Video+'s "Save Latent" option and the stitcher auto-detects the .latent files, loads them in latent space, and skips lossy video decode. A magenta dot in the clip list shows which clips have a latent available. Wan latents are supported.
  • Cached transitions. Each transition is cached as a lossless .latent file in temp, so the first run does all the heavy sampling and re-runs skip already-generated pairs. "Delete Transitions" clears the cache to redo it with different settings.

The inputs that matter

  • model_high / model_low (MODEL) - the two Wan 2.2 VACE models (high-noise + low-noise). This is your one real model download: either the Comfy-Org repackaged bf16/fp8 files or QuantStack's GGUF variants, into models/diffusion_models/ (or models/unet for GGUF).
  • positive / negative (CONDITIONING) - from CLIP Text Encode.
  • vae (VAE) - for decode.
  • source_folder + clip_list - the browser and its JSON list.
  • options (VACE_OPTIONS, optional) - connect a VACE Stitcher Options node to tune context/replace frames, steps, sampler, crossfade, and color matching; leave it unconnected for sensible defaults.

Installing it

ComfyUI Manager - search "ComfyUI-FBnodes" - or:

cd ComfyUI/custom_nodes
git clone https://github.com/FranckyB/ComfyUI-FBnodes.git
pip install -r ComfyUI-FBnodes/requirements.txt

Then download both Wan 2.2 VACE models (high + low noise), bf16/fp8 from Comfy-Org's repackaged Wan or GGUF from QuantStack. The pack's requirements (av for encoding, color-matcher for the color matching) install with it.

Where people get burned

VACE is slow - the KB's Wan guide notes 15–40 minutes per transition on a 4090 at 14B resolution, so budget accordingly and lean on the transition cache. Use a Wan 2.2 i2v-distilled LoRA (CausVid-style, a few steps at CFG 1.0) to bring step counts down; the two-stage design is exactly where that helps. If your run fails, the README's changelog notes a past bug where clips whose dimensions weren't divisible by 32 failed - keep clip sizes on the 32 grid. And without an Options node connected, the seed is random each run, so "delete transitions and re-queue" is how you explore variations.

CategoryFBnodes

Inputs (8)

NameTypeDefaultDescription
model_highMODELModel for high-noise sampling stage (first N steps).
model_lowMODELModel for low-noise sampling stage (remaining steps).
positiveCONDITIONINGPositive conditioning from a CLIP Text Encode node.
negativeCONDITIONINGNegative conditioning from a CLIP Text Encode node.
vaeVAE
source_folderCOMBOSelect which folder to browse.
clip_listSTRING[]JSON list of clips (managed by the UI browser widget).
optionsoptVACE_OPTIONSConnect a VACE Clip Joiner Options node to override defaults.

Outputs (4)

NameTypeDescription
imagesIMAGE
audioAUDIO
fpsFLOAT
metadataSTRING