Blend Video Chunks (Crossfade)
Blend Video Chunks (Crossfade) — hide the seam between two generated clips
- chunk_a
- chunk_b
- video
- total_frames
You generated chunk one, fed its last frame into the model as the reference, generated chunk two, and now you've got two 81-frame clips with a visible jump where they meet. This node is the thing that turns that pair into one continuous video: it crossfades the overlapping frames at the boundary so the transition is smooth instead of a cut.
It's the pixel-space sibling of Blend Latent Chunks from the same pack. Where that one works on latents before decode, this one takes two decoded IMAGE chunks and blends them directly. Same idea, different place in the graph, different failure modes.
How it works
Both chunks are meant to share overlap_frames at the junction - chunk_a ends where chunk_b begins. The node splits each into a unique region and an overlap region, then blends the overlap with a per-frame weight ramp. Concrete numbers: chunk_a is 81 frames (frames 0–80), chunk_b is 81 frames (frames 65–145), overlap 16. Result is 146 frames: A[0:65], then a 16-frame crossfade of A[65:80] and B[0:15], then B[16:80].
The inputs you'll actually touch:
chunk_a/chunk_b- first and second chunk, straight from your VAE decode.overlap_frames- how many frames the two chunks share and crossfade. Default 16, which is about a second at 16fps and works for most cases. Make sure it matches what you used in ExtractVideoChunk when you sliced the driving video.blend_curve- the shape of the ramp:ease_in_out(default) - Hermite smoothstep3t²-2t³. S-curve, eases in and out, the least visible blend. Reach for this first.linear- straight ramp. Fine but you can see the transition doing its work.sigmoid- a steeper logistic curve, so most of the blend happens near the midpoint. Snappier, more aggressive; use it when the overlap is large and you want to minimize the "ghosting" zone.
Outputs are video (the joined batch) and total_frames (INT, handy for wiring into a frame-count-aware downstream node or just checking your math).
Where people get burned
The node raises a ValueError if overlap_frames is greater than or equal to either chunk's length. Sounds obvious, but it's easy to trip when you reuse a workflow and drop in a shorter chunk - the error message tells you exactly which side is too short, so read it.
The subtler gotcha is why the overlap zone matches in the first place. This node just dissolves pixels; it can't fix two chunks that were generated from different references and genuinely disagree in the overlap. That's the whole point of rolling reference - chunk_b's content near the boundary was conditioned on chunk_a's last frame, so the blend has real agreement to work with. If you're getting double-exposure blobs even with ease_in_out, your chunks weren't rolled correctly, not the node's fault.
Installing it
ComfyUI Manager, search "VideoChunkTools", install, restart. Or the manual route:
cd ComfyUI/custom_nodes
git clone https://github.com/gregtee2/ComfyUI_VideoChunkTools.git
No pip dependencies - pure PyTorch, works with any ComfyUI build. And unlike the Wan-specific nodes in this pack, this one doesn't care what model generated your chunks; it just sees two image batches.
If you're only ever joining chunks that already match frame-for-frame at the boundary, you might not need this node at all - that's what ConcatVideoChunks is for. But when there's any drift, a 16-frame ease_in_out crossfade is the cheapest insurance you can buy.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| chunk_a | IMAGE | First video chunk (the earlier segment) | |
| chunk_b | IMAGE | Second video chunk (continues from chunk_a). The first 'overlap_frames' of chunk_b overlap with the last 'overlap_frames' of chunk_a. | |
| overlap_frames | INT | 161–200 | Number of frames shared between the two chunks. These frames will be crossfaded. |
| blend_curve | COMBO | ease_in_out | Blend curve shape: linear = straight ramp, ease_in_out = smooth S-curve (3t²-2t³, best for most cases), sigmoid = steep S-curve (snappier transition) |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| video | IMAGE | — |
| total_frames | INT | — |