Image Batch Join With Transition
Stitch two clips together with a real transition
- images_1
- images_2
- IMAGE
Joining two video clips is easy - you concatenate the frame batches and you're done. But a hard cut between two AI-generated clips looks jarring. ImageBatchJoinWithTransition joins two batches and blends them across a chosen number of frames with an actual animated transition: a slide, a fade, a circle wipe, a door open. During the blend, frames from both clips play together, so the video keeps moving through the join instead of freezing on a crossfade.
If you're assembling longer videos out of shorter generated segments, this is the node that makes the seams look intentional instead of accidental.
How it works
You give it two image batches and tell it where in the first batch the transition should start. Over transitioning_frames, it blends the two clips using the transition shape and easing you pick, then continues into the second clip. Because it composites frame-by-frame during the overlap, both clips are still animating while the wipe happens - that's the detail that makes it read as a proper edit rather than a still-image dissolve.
It's a surprisingly deep little node for something in a "random collection of utility nodes" pack - you get a whole menu of transition types and easing curves, which is more than most dedicated video nodes bother with.
The inputs and outputs that matter
The two that define the join:
images_1andimages_2(IMAGE) - first clip, then second.start_index(INT, default 0) - where inimages_1the transition begins.transitioning_frames(INT, default 1) - how long the blend lasts. This is your main dial: 1 is basically a cut, higher numbers give a longer, smoother handoff.
The style controls:
transition_type- horizontal/vertical slide, box, circle, horizontal/vertical door, or fade.fadeis the safe classic; the slides and wipes are more cinematic.interpolation- the easing curve: linear, ease_in, ease_out, ease_in_out, bounce, elastic, glitchy, exponential_ease_out.ease_in_outfeels natural;glitchyandelasticare stylistic.blur_radius(FLOAT, default 0) - softens the transition edge.reverse(BOOLEAN) - flips the transition direction.device(CPU/GPU, default CPU) - set it to GPU for anything non-trivial; CPU is fine for tiny jobs but slow on big batches.
Output is a single IMAGE batch - the two clips, joined and blended, ready for your video combine node.
How to install it
ComfyUI Manager: search KJNodes for ComfyUI, install, restart. Manually:
cd ComfyUI/custom_nodes
git clone https://github.com/kijai/ComfyUI-KJNodes
pip install -r ComfyUI-KJNodes/requirements.txt
Restart and it's under KJNodes/image. No model downloads.
Common issues & troubleshooting
The transition is too abrupt. transitioning_frames is probably 1 or very low. Raise it - 8 to 16 frames gives a transition you can actually see. Remember those frames overlap the two clips, so a long transition eats into both.
Resolution mismatch errors. The two batches should share the same width and height. Blending frames of different dimensions doesn't work cleanly - resize images_2 to match images_1 upstream.
It's slow. You're likely on CPU. Flip device to GPU. On big, high-res batches the difference is large.
The blend looks off / lands in the wrong place. Check start_index. If it's set past the length of images_1, or at 0 when you wanted the transition later, the join happens somewhere you didn't intend. Count frames and set it deliberately.
I just want a plain cut. Then you don't need this node - a straight batch concatenation joins two clips with no transition. Use this one specifically when you want the blend.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| images_1 | IMAGE | — | |
| images_2 | IMAGE | — | |
| start_index | INT | 0-10000–10000 | — |
| interpolation | COMBO | 8 options: linear, ease_in, ease_out, ease_in_out, bounce, elastic, +2 | |
| transition_type | COMBO | 7 options: horizontal slide, vertical slide, box, circle, horizontal door, vertical door, +1 | |
| transitioning_frames | INT | 11–4096 | — |
| blur_radius | FLOAT | 0.00–100 | — |
| reverse | BOOLEAN | false | — |
| device | COMBO | CPU | 2 options: CPU, GPU |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |