ImageConcat
Two images, one canvas — the node that just stacks them
- image_L
- mask_L
- image_R
- mask_R
- contact_image
- contact_mask
- contact_data
The name is a lie, in the best way. ImageConcat doesn't call an API, needs no key, and loads no model. It's a glorified torch.cat wrapped in a node - which is exactly what you want when the only thing between you and a clean before/after comparison is one piece of the graph.
Feed it two images and it stacks them vertically: image1 on top, image2 below, single IMAGE out. The second input is resized first so its width matches image1's, keeping its own height. Feed it two outputs from the same workflow and nothing moves - you get a clean vertical stack. Feed it a 1024×768 next to a 512×512 and the wide one gets squeezed to the narrow width at its own height. It's bicubic with antialiasing, so not a hacky pixel-drag, but keep the inputs similar resolution and you'll never notice the resampling.
The whole input list is two: image1 and image2. That's it. Two in, one out, no settings to mis-set.
Where you reach for it: before/after pairs (the img2img result stacked over its source is the classic), vertical reference sheets of poses, or stitching two pieces back together after processing them separately. That last one pairs naturally with ImageCut from the same pack, which slices an image into top and bottom outputs - cut, process each half, stack them back. After a cut the halves already share a width, so the rejoin is lossless.
Install is the same for the whole ImgProcessing pack. ComfyUI Manager → search "ImgProcessing_ComfyUI" → install → restart. Or by hand:
cd ComfyUI/custom_nodes
git clone https://github.com/nirbhay-faaya/ImgProcessing_ComfyUI
# restart ComfyUI
No models to download, no requirements.txt. The one real dependency in the pack is opencv-python, and it's imported at the top of the pack's single .py file - so if cv2 is missing, this node and its three siblings all vanish from your menu at once. If ImageConcat doesn't show up after install, that's the first thing to check:
pip install opencv-python # into your ComfyUI venv, then restart
One genuine gotcha: the stack happens on the batch-aware height axis, so both inputs need the same batch size. Two single frames (the normal case - each Load Image gives batch 1) work fine. Feed it a batch of 4 on one side and a single frame on the other and torch.cat will complain. Keep both sides single frames or both same-length batches.
Also set expectations on maintenance: this pack is a single commit from May 2024, untouched since. Sounds scarier than it is - there are no weights to go stale and no API to drift. Pure tensor math doesn't rot. And note it's vertical only; if you need a horizontal side-by-side, this node won't do it and no input-flipping will fix that. It is what it is.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| bg_color_L | STRING | #FFFFFF | — |
| image_Lopt | IMAGE | — | |
| mask_Lopt | MASK | — | |
| image_Ropt | IMAGE | — | |
| mask_Ropt | MASK | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| contact_image | IMAGE | — |
| contact_mask | MASK | — |
| contact_data | DICT | — |