Painter Combine From Batch
The dissolve that stitches your clips into one video
- images
- images
PainterCombineFromBatch is the least glamorous node in this pack and the one that makes the whole thing work. PainterMultiF2V hands you N−1 separately sampled clips; this node takes that list of decoded frame batches and fuses them back into one continuous video with a soft crossfade at every seam. Without it you'd walk away with several short mp4s instead of the long storyboard the README promises.
You use it after sampling and decoding each segment. Feed it the list of image batches - every segment's frames as a batched IMAGE tensor - and it returns a single batch with all the frames concatenated, ready for any video saver (the bundled workflow pipes it into PainterVideoCombine, a separate pack from the same author).
How it works
It's honest, simple tensor math - no optical flow, no latent blending, no hidden model. Two knobs control the merge:
overlap_frames(default 5, 0–50) - how many frames at each boundary get crossfaded. The blend is a cosine ease-in-out dissolve in pixel space: the tail of clip N fades out while the head of clip N+1 fades in. Short, punchy cuts need a small value; slow pans can take a bigger one.trim_frames(default 0, 0–20) - how many frames to chop off the head of every segment before stitching. This exists because the first frame of each Wan 2.2 clip is a hard-anchored keyframe, and dissolving from a frozen anchor frame is exactly how you get a visible stutter. Trimming a couple of frames past it makes the transition read as motion instead of a jump.
A single segment passes through untouched; overlap_frames of 0 just concatenates everything. If a segment is shorter than the requested overlap, the node clamps the blend to what actually fits rather than crashing.
What to watch
The obvious trap: this is a dissolve, not a motion-aware merge. If your two clips have a fast cut between them - a whip pan, a moving object crossing the seam - a wide overlap window will smear the two frames into ghost trails. Start with the default 5 frames and only widen it when the shots are calm.
It's also pixel-space only. That means every segment has to be VAEDecoded before it reaches this node - you can't merge latents with it, and that's fine, because doing the dissolve in latent space would fight the VAE's temporal compression anyway. And keep in mind that trimming and blending happen in RGB, so color shifts between segments (Wan's occasional tint drift between clips) are blended but not corrected. The fade hides a lot of drift; it won't fix a segment that's a different color temperature than its neighbors.
Install
Same pack, one install:
cd ComfyUI/custom_nodes
git clone https://github.com/princepainter/ComfyUI-PainterMultiF2V
or search ComfyUI-PainterMultiF2V in ComfyUI Manager and restart. No dependencies, no models.
Troubleshooting
- Empty output - every segment got trimmed to nothing (trim larger than segment length). Lower
trim_frames. - Visible stutter at seams - raise
trim_framesa little so the blend doesn't start on the anchor frame, or raiseoverlap_framesfor a longer fade. - Ghosting / double exposure - too much overlap on a fast cut. Dial it back.
It's the glue nobody claps for, but it's also the node with the least to go wrong - a plain, predictable utility that does one thing well.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| overlap_frames | INT | 50–50 | — |
| trim_frames | INT | 00–20 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |