Nodes/ComfyUI-RBG-ImageStitchPlus/RBG Image Stitch Plus 🧩
ComfyUI Node

RBG Image Stitch Plus 🧩

Put three images on one canvas without ever touching Photoshop

By RamonGuthrieΒ·Created about a year agoΒ·Updated 11 days agoΒ· 32
RBG Image Stitch Plus 🧩
  • image1
  • image2
  • image3
  • IMAGE
β—„directionrightβ–Ί
β—„keep_proportionπŸ”„ resizeβ–Ί
β—„pad_color#ffffffβ–Ί
β—„crop_positioncenterβ–Ί
β—„spacing_width0β–Ί
β—„spacing_colorwhiteβ–Ί
β—„custom_spacing_color#ffffffβ–Ί
β—„fill_transparent_backgroundfalseβ–Ί
β—„transparent_fill_color#000000β–Ί
β—„final_resize_mode🚫 noneβ–Ί
β—„final_target_size1024β–Ί
β—„resample_filtermagic_kernel_sharpβ–Ί
β—„supersample_factor1.0β–Ί
β—„final_downsample_interpolationmagic_kernel_sharpβ–Ί
β—„clarity_strength0.00β–Ί
β—„sort_order🎲 1-2-3β–Ί
β—„corner_radius0β–Ί
β—„border_color#ffffffβ–Ί
β—„outer_border_width0β–Ί

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_vsr is a trap if you don't read this. It's listed in the resample dropdowns, but nvvfx is not in requirements.txt. It needs pip 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_strength tooltip 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 small spacing_width gives the most professional-looking result; resize is the trap when your images have different aspect ratios.
  • The pack's __init__.py writes a tiny JS file into its own web/js dir 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.

CategoryRBG-Suite-Pack

Inputs (22)

NameTypeDefaultDescription
directionCOMBOright9 options: right, down, left, up, H_then_V_down, H_then_V_up, +3
keep_proportionCOMBOπŸ”„ resize4 options: πŸ”„ resize, 🧱 pad, πŸ–ΌοΈ pad_edge, βœ‚οΈ crop
pad_colorSTRING#ffffffColor hex code (e.g., #ffffff)
crop_positionCOMBOcenter5 options: center, top, bottom, left, right
spacing_widthINT00–1024β€”
spacing_colorCOMBOwhite6 options: white, black, red, green, blue, custom
custom_spacing_colorSTRING#ffffffβ€”
fill_transparent_backgroundBOOLEANfalseIf true, transparent areas will be filled with the specified color.
transparent_fill_colorSTRING#000000Color hex code (e.g., #000000)
final_resize_modeCOMBO🚫 none3 options: 🚫 none, ↔️ resize_longer_side, ↕️ resize_shorter_side
final_target_sizeINT102464–8192β€”
resample_filterCOMBOmagic_kernel_sharpmagic_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_factorFLOAT1.01–4Upscales then downscales the final image for anti-aliasing. Factor > 1 enables it.
final_downsample_interpolationCOMBOmagic_kernel_sharpInterpolation for downsampling part of supersampling.
clarity_strengthFLOAT0.00-1–1Adjusts midtone contrast. Negative values for a dreamlike look, positive for punchy. -100=soft, +100=punchy.
sort_orderCOMBO🎲 1-2-3Order in which images will be processed and stitched together
corner_radiusINT00–500Radius for rounded corners (0-500px). Creates smooth, polished corners.
border_colorSTRING#ffffffBorder/frame color hex code (e.g., #ffffff for white, #000000 for black).
outer_border_widthINT00–100Width of outer border frame around each image (0-100px). Frames each image beautifully.
image1optIMAGEβ€”
image2optIMAGEβ€”
image3optIMAGEβ€”

Outputs (1)

NameTypeDescription
IMAGEIMAGEβ€”