RBG Image Stitch Plus π§©
Put three images on one canvas without ever touching Photoshop
- image1
- image2
- image3
- IMAGE
Every ComfyUI user eventually hits the same wall: you've got two or three images and you need them on one canvas. LoRA before/after grids, upscale tiles that need reassembling, outpainted strips to join into a panorama, a character sheet for a training run. Out of the box ComfyUI is oddly bad at this - it's a graph, not a photo editor. RBG Image Stitch Plus is the small, opinionated node that fixes exactly that hole, and it's the reason the pack exists.
It takes up to three images and lays them out in one canvas with a surprising amount of control for a node that installs with a single pip install. The sibling RBGPadPro is the padding utility in the same pack; this one is the compositor.
What it actually does
You feed in image1, image2, image3 (all optional - two is the common case) and pick a direction: simple left/right/up/down, compound layouts like H_then_V_down for L-shapes, or Grid_2x2 for a four-quadrant collage. The sort_order menu decides which of your three inputs gets placed first, so you don't have to rewire the graph to change reading order.
Where it gets clever is mismatched sizes, which is the thing that makes naive stitching ugly. keep_proportion gives you four answers:
- resize - stretches images to the layout's required dimensions (distorts if they're very different).
- pad - matches the largest image in each dimension and fills the gaps with
pad_color. - pad_edge - the standout: samples the average colour of each image's border pixels and uses that as the fill, so the extension blends with the image instead of showing a hard white bar.
- crop - crops everything to a uniform size, with
crop_position(center/top/bottom/left/right) choosing what survives the cut.
Then it finishes with the extras: spacing_width + spacing_color for a visible gap between images, corner_radius + outer_border_width for rounded-corner framed grids, and fill_transparent_background to drop a solid colour behind any alpha.
The quality pass
The tail of the widget list is where this node punches above its weight. supersample_factor above 1 renders the whole composite larger, then downsamples - cheap anti-aliasing for clean diagonal seams. clarity_strength does an unsharp-mask style pass (gaussian blur, subtract the blur to get midtone detail, add it back scaled), so negative values go soft/dreamy and positive values punch up contrast. final_resize_mode (resize_longer_side / resize_shorter_side) plus final_target_size normalizes the whole canvas to a target dimension at the end - handy for matching a 1024-wide canvas convention before a VAE encode.
The single output is one IMAGE, ready to wire into a save node, a VAE encode, or an upscaler.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/RamonGuthrie/ComfyUI-RBG-ImageStitchPlus.git
cd ComfyUI-RBG-ImageStitchPlus
pip install -r requirements.txt
Restart ComfyUI and it appears under the RBG-Suite-Pack category. Easier route: ComfyUI Manager, search "RBG Image Stitch Plus" (the pack title is ComfyUI-RBG-ImageStitchPlus), install, restart. The whole dependency list is numpy and Pillow - no model files, no heavy torch extras, nothing that'll fight your environment. It's one of the rare custom nodes that won't break anything else you have installed.
The gotchas worth knowing
nvidia_rtx_vsris a trap if you don't read this. It's listed in the resample dropdowns, butnvvfxis not in requirements.txt. It needspip install nvvfx, an RTX GPU, and NVIDIA driver 570+. If it's missing, the node silently falls back to lanczos - you'll only see the warning in the console. Treat it as an optional bonus, not a default.- The
clarity_strengthtooltip mentions "-100/+100" but the actual range is -1.0 to 1.0. Trust the slider, not the wording. - For comparison grids,
pad_edge+ a smallspacing_widthgives the most professional-looking result;resizeis the trap when your images have different aspect ratios. - The pack's
__init__.pywrites a tiny JS file into its ownweb/jsdir on load that pulls the Material Icons stylesheet from Google Fonts. Harmless, but if you're fully offline the node's emoji labels are the only thing affected.
Want to make a panorama from outpainted strips or a clean before/after grid? This is the node. Reach for the sibling Pad Pro when you need to prepare one image for outpainting instead of joining several.
Inputs (22)
| Name | Type | Default | Description |
|---|---|---|---|
| direction | COMBO | right | 9 options: right, down, left, up, H_then_V_down, H_then_V_up, +3 |
| keep_proportion | COMBO | π resize | 4 options: π resize, π§± pad, πΌοΈ pad_edge, βοΈ crop |
| pad_color | STRING | #ffffff | Color hex code (e.g., #ffffff) |
| crop_position | COMBO | center | 5 options: center, top, bottom, left, right |
| spacing_width | INT | 00β1024 | β |
| spacing_color | COMBO | white | 6 options: white, black, red, green, blue, custom |
| custom_spacing_color | STRING | #ffffff | β |
| fill_transparent_background | BOOLEAN | false | If true, transparent areas will be filled with the specified color. |
| transparent_fill_color | STRING | #000000 | Color hex code (e.g., #000000) |
| final_resize_mode | COMBO | π« none | 3 options: π« none, βοΈ resize_longer_side, βοΈ resize_shorter_side |
| final_target_size | INT | 102464β8192 | β |
| resample_filter | COMBO | magic_kernel_sharp | magic_kernel_sharp: Magic Kernel 3 + Sharp-2013 | mitchell_netravali: B=C=1/3 spline | anti_aliased_bicubic: PyTorch AA | dwt_haar: Haar LL low-pass downscaling | nvidia_rtx_vsr: RTX AI upscaler |
| supersample_factor | FLOAT | 1.01β4 | Upscales then downscales the final image for anti-aliasing. Factor > 1 enables it. |
| final_downsample_interpolation | COMBO | magic_kernel_sharp | Interpolation for downsampling part of supersampling. |
| clarity_strength | FLOAT | 0.00-1β1 | Adjusts midtone contrast. Negative values for a dreamlike look, positive for punchy. -100=soft, +100=punchy. |
| sort_order | COMBO | π² 1-2-3 | Order in which images will be processed and stitched together |
| corner_radius | INT | 00β500 | Radius for rounded corners (0-500px). Creates smooth, polished corners. |
| border_color | STRING | #ffffff | Border/frame color hex code (e.g., #ffffff for white, #000000 for black). |
| outer_border_width | INT | 00β100 | Width of outer border frame around each image (0-100px). Frames each image beautifully. |
| image1opt | IMAGE | β | |
| image2opt | IMAGE | β | |
| image3opt | IMAGE | β |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | β |