🅱🅱视频淡入拼接|Videos Concat with CrossFade
Stitching two clips with a fade instead of a hard cut
- images1
- images2
- IMAGE
Two videos, one node, a smooth dissolve where they meet instead of an abrupt jump cut. If you've ever concatenated two AI clips with a plain batch concat and flinched at the hard cut where frame N of clip A meets frame 1 of clip B, this is the fix. In ComfyUI a "video" is just an IMAGE tensor with frames stacked on the batch dimension - the same thing AnimateDiff, Wan, and VideoHelperSuite hand you - so a node that rearranges and blends a frame batch is doing the video editing.
How it works
The math is a straight linear crossfade, fully visible in the source. Give it two frame batches (images1, images2) and a fade length. It keeps the entire first clip except its last cross_fade_frames, then blends those last frames of clip 1 against the first cross_fade_frames of clip 2 with a linear alpha ramp, then appends the rest of clip 2. Output length is len1 + len2 − cross_fade_frames, and the transition is smooth because every frame in the overlap is a mix of both clips.
Two behaviors worth knowing. If the two clips differ in resolution, the node silently bilinear-upscales images2 to match images1 - convenient, but notice it's one-way, so put your higher-res clip in the images1 slot. And if cross_fade_frames exceeds either clip's length, it throws a clear error (the messages are bilingual, which is your first hint this is a Chinese dev's pack). The one real trap: the cross_fade_frames default is 0, which is a degenerate "no fade" case that leaves nothing to blend. Set it to something like 8–24 frames (at 30fps that's a third of a second to most of a second) or the node has nothing to do.
The inputs that matter
- images1 - first frame batch (IMAGE).
- images2 - second frame batch. Gets upscaled to match
images1if sizes differ. - cross_fade_frames - length of the dissolve, 0–10000, default 0. Raise it above 0; that's the whole point of the node.
One output, an IMAGE frame batch, ready for a VHS encode or a Save Video node.
When you'd actually reach for it
The seamless-loop problem is real and recurring in this community - people post "seamless loop video workflow" threads regularly, and most of them are assembling short generated clips into longer, smoother sequences. This is the simpler, non-looping half of that family. Use it to join two generated segments into one longer take, or to stitch a scene change without a visible seam. If you specifically want the output to loop back on itself, grab the sibling Loopback Videos Concat with CrossFade node instead - this one just joins front to back.
Install
Same zero-dependency pack as the rest of BBTools - no models, no pip requirements, just torch/PIL/comfy utilities that ship with ComfyUI. ComfyUI Manager (search ComfyUI-BBTools) or:
cd ComfyUI/custom_nodes
git clone https://github.com/bbaudio-2025/ComfyUI-BBTools
then restart. The author, bbaudio-2025 (bbaudio2024 on reddit, the VACE long-video tools dev), keeps this pack deliberately minimal, so don't expect docs - the source is short and readable if you want to confirm the fade math yourself. Keep your fade above 0, mind which slot your higher-res clip is in, and you'll get a clean dissolve every time.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| images1 | IMAGE | — | |
| images2 | IMAGE | — | |
| cross_fade_frames | INT | 00–10000 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |