Clip Stitcher
Join your AI clips into one video without a trip to the editor
- video
Clip Stitcher is the node that turns a folder of separate AI clips into one continuous video, with proper cross-dissolves and audio crossfades, without leaving ComfyUI. It's pure pixel blending - no generation, no AI, no model downloads - which makes it the fast, deterministic sibling of the pack's heavier VACE Stitcher. Where VACE Stitcher generates AI transitions between clips, this one just cuts and dissolves, so it's what you reach for when your clips already flow and you just need them glued.
It ships in ComfyUI-FBnodes, François Beaudry's utility pack. The use case it's built for is the one every video-generation workflow ends at: you generated a handful of 5-second Wan or LTX takes and you want a single deliverable, not a mess of files to assemble in DaVinci.
How it works
You pick a folder (source_folder: input or output), use the built-in browser to multi-select clips into clip_list, reorder them by dragging, and the node encodes the whole thing into one 10-bit VIDEO output via ComfyUI's CreateVideo. Two settings control the stitching:
blend_duration(0–60s, default 0.5) - seconds of cross-dissolve between clips. 0 is a hard cut. Audio is crossfaded to match, so you don't get a click or a gap at the seam.clip_duration(0–600s, default 5) - the fixed segment length. Leave at 0 to use each clip's full length; set it when your sources vary in length and you want a uniform rhythm.
The fixed-segment math is worth knowing before you set it blind: clip 0 plays from 0 to clip_duration; each later clip overlaps the previous by blend_duration, so with 5s duration and 1s blend your segments start at 0, 4, 9, 14… Short clips get padded with black rather than throwing an error. If you just want to concatenate, set clip_duration to 0 and blend_duration to 0 - hard cut, full lengths.
The inputs that matter
source_folder-inputoroutput, which side of ComfyUI you're browsing.clip_duration- 0 for legacy full-length mode; a positive number forces fixed segments.blend_duration- 0 for a cut, 0.3–1.0 for a typical dissolve.
Output is a single video (VIDEO) that you can feed straight into Save Video+ (or the pack's own Save Video+) to mux audio and write an H.264/H.265 file.
Installing it
ComfyUI Manager - search "ComfyUI-FBnodes" - or manually:
cd ComfyUI/custom_nodes
git clone https://github.com/FranckyB/ComfyUI-FBnodes.git
pip install -r ComfyUI-FBnodes/requirements.txt
Restart ComfyUI. The real dependencies are av (PyAV) for the video encoding and color-matcher; both install with the pack. No model files.
Gotchas
The classic mistake is forgetting that a cross-dissolve needs overlap: if blend_duration is larger than your shortest clip, things get weird, so keep blends modest. And because this is a video-processing node, it only runs as fast as PyAV can encode - a long timeline of 10-bit clips isn't instant, but it's nothing like a generation pass. If you want AI-smoothed transitions where clips genuinely don't match, that's VACE Stitcher's job, and the two nodes are designed to sit at different points in the same workflow.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| source_folder | COMBO | Select which folder to browse clips from. | |
| clip_list | STRING | [] | JSON list of clips (managed by the UI browser widget). |
| clip_duration | FLOAT | 5.000–600 | Fixed segment length per clip in seconds. 0 = use full clip length (legacy). When > 0, clip 0 starts at 0; clip i starts at i*clip_duration - blend, and ends at (i+1)*clip_duration. |
| blend_duration | FLOAT | 0.500–60 | Seconds to cross-dissolve between clips. 0 = hard cut. In fixed-segment mode, each clip after the first spans clip_duration + blend so it overlaps the previous clip by blend. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |