Easy Image Batch (Koolook)
Easy Image Batch
- keyframes_insert
- keyframe_batch
- source_batch
- image1
- image2
- image3
- image4
- image_batch
- alpha_batch
- selected_image_batch
- selected_frames
Easy Image Batch is a frame-accurate timeline builder for VFX work: it takes a handful of image slots and turns them into a full-length image batch with placeholders filling the gaps. You know how a compositor works - render a few key frames, leave black or gray for the rest, build the cut, check timing - before you commit to rendering everything. That's this node.
It's built around 1-based VFX frame numbers, because real plate pipelines number frames from the shot's start, not from zero. You give it a cut_start_frame (the first VFX frame your output represents), a total_frames window, and it lays out a batch where your connected images land at their specified frame numbers and everything else is placeholder_color.
How it works
The core is image1 through image4, each with an imageN_frame widget that says which VFX frame that image sits at (defaults of 5, 9, 13, 17 - spread out, but you'll change them). Unwired slots are ignored. Beyond that there are two heavier modes:
- source_frames - a free-form 1-based frame list (commas, spaces, tabs, newlines;
14-17expands to 14,15,16,17). Withkeyframes_insertconnected, a packed sequence gets inserted onto the timeline at those exact positions: first frame → first number, second → second, etc. Without a source batch, the gaps fill with placeholder color ("offset/reconstruct mode"); with one connected, inserts composite over the source frames in the cut window. - source_batch - a background plate. When connected, it becomes the backdrop for the whole window and the inserts land on top.
The output is more useful than a plain image: image_batch is the assembled frames, alpha_batch is a MASK where selected frames are black and empty frames are white (flip it with invert_alpha to get a comp-ready holdout), selected_image_batch is just the frames you actually placed, and selected_frames tells you which VFX frame numbers those were. If you're building a cut where an upstream node only needs the real frames, that last pair saves you a lot of slicing.
The inputs a beginner actually sets
Three, honestly. cut_start_frame and total_frames define the window, and placeholder_color decides whether the gaps read as "empty black" or "preview gray." Everything else - the image slots, the insert mode, the source batch - you add as your workflow gets more elaborate. width/height only matter in the fully-empty case (a clean placeholder batch); once any image is connected, its dimensions win.
Install
Part of the ComfyUI-Koolook pack. Manager → Install Custom Nodes → Git URL:
https://github.com/malkuthro/ComfyUI-Koolook.git
Or manually:
cd ComfyUI/custom_nodes
git clone https://github.com/malkuthro/ComfyUI-Koolook.git
Restart, and it's under Koolook/Image. No models, no dependencies beyond what ComfyUI already ships. As with everything in this pack, install it exactly once - a Manager install is custom_nodes/koolook/, and a second git clone creates a parallel install that double-registers everything and corrupts the workflow store on each boot until you remove one folder.
Common issues
- Frames land one off - everything here is 1-based. Frame 5 means VFX frame 5, and output index 0 represents
cut_start_frame, not frame 1. - Empty frames are white when you expected black - check
invert_alphaandplaceholder_color; the alpha semantics (selected = black/0 by default) are easy to flip by accident. - The
keyframe_batchinput you saw in an old workflow - that's a deprecated alias forkeyframes_insert, kept so pre-rename workflows still load. Use the new name; the old one is ignored when both are connected.
Inputs (18)
| Name | Type | Default | Description |
|---|---|---|---|
| total_frames | INT | 811–1024 | Length of the output cut window in frames. |
| cut_start_frame | INT | 11–999999 | First VFX frame represented by output index 0. All frame numbers are 1-based. |
| placeholder_color | COMBO | Black | Fill color for empty frames in image_batch. Alpha output is controlled separately. |
| invert_alpha | BOOLEAN | false | Off: selected frames are black/0 and empty frames are white/1. On: selected frames are white/1 for compositing. |
| source_frames | STRING | Optional 1-based VFX frame list to pick from source_batch (in insert mode, the destination positions). Separators: commas, spaces, tabs, or newlines. Inclusive ranges like 14-17 expand to 14,15,16,17. | |
| image1_frame | INT | 51–999999 | 1-based VFX frame number for image1; the connected image is placed here on top (no effect when the slot is unwired). |
| keyframes_insertopt | IMAGE | Connect a packed sequence of frames to INSERT them onto the timeline at the positions from the frame list (source_frames): 1st frame -> 1st number, 2nd -> 2nd, ... Connected image1-4 still composite on top of the inserts. The background depends on source_batch: if source_batch is NOT connected, the gaps are filled with placeholder_color (offset/reconstruct mode); if source_batch IS connected, the inserts are composited over the source frames in the cut window (insert-over-source mode). With an empty frame list and no slots nothing is placed: a clean placeholder batch (no source_batch) or a clean source-batch passthrough (with source_batch). | |
| keyframe_batchopt | IMAGE | Deprecated alias for keyframes_insert (the input was renamed before release). Use keyframes_insert; this alias keeps pre-rename workflows loading. Ignored when keyframes_insert is also connected. | |
| source_batchopt | IMAGE | — | |
| image1opt | IMAGE | — | |
| image2opt | IMAGE | — | |
| image2_frameopt | INT | 91–999999 | 1-based VFX frame number for image2; the connected image is placed here on top (no effect when the slot is unwired). |
| image3opt | IMAGE | — | |
| image3_frameopt | INT | 131–999999 | 1-based VFX frame number for image3; the connected image is placed here on top (no effect when the slot is unwired). |
| image4opt | IMAGE | — | |
| image4_frameopt | INT | 171–999999 | 1-based VFX frame number for image4; the connected image is placed here on top (no effect when the slot is unwired). |
| widthopt | INT | 5121–8192 | Fallback output width. Used ONLY when no image input provides dimensions (e.g. a fully empty node producing a clean placeholder batch). Ignored whenever an image source is connected. |
| heightopt | INT | 5121–8192 | Fallback output height. Used ONLY when no image input provides dimensions (e.g. a fully empty node producing a clean placeholder batch). Ignored whenever an image source is connected. |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| image_batch | IMAGE | — |
| alpha_batch | MASK | — |
| selected_image_batch | IMAGE | — |
| selected_frames | STRING | — |