π Image Stitch
Paste your detail passes back onto the original, seamlessly
- original_image
- cropped_images
- crop_data
- IMAGE
Image Stitch is the second half of a two-node pair - it only makes sense alongside GOAT Nodes' Image Crop. The pattern the two of them implement together is the same detect-crop-refine loop that made Impact Pack's FaceDetailer standard practice: crop a region out, run a fresh sampling pass on it at full resolution so small details don't get mangled, then paste the result back onto the original without a visible seam. The difference from FaceDetailer is that GOAT's version has no detector baked in - you bring your own mask (from wherever: manual painting, a segmentation node, ADetailer's bbox output, whatever produces a MASK) and this pair just handles the crop/composite mechanics around it.
How it works
Image Crop takes your original image plus a batch of masks and hands back cropped regions, cropped masks, and a CROP_DATA bundle recording exactly where each crop came from and how big it should end up. You do your actual work - inpainting, upscaling, a detail pass, whatever - on those cropped images. Image Stitch then takes your (now edited) cropped images, the same crop_data from the crop step, and pastes each one back into its original location on original_image.
The part that actually matters is the blending at the seam. A naive paste-back leaves a visible hard edge where the crop boundary was - different noise pattern, slightly different color, and your eye finds it instantly. blend_range sets how wide a feathered region surrounds each pasted crop, and blend_mode picks the falloff curve across that region: linear is a straight ramp, sine/cubic/quadratic/hermite are smoother S-curves that ease in and out rather than transitioning at a constant rate, and the two mix modes blend between two of those curves. In practice the smoother curves (sine, the default, and the hermite/mix variants) hide the seam better than linear on most photographic content - a straight ramp is more likely to show a faint ring if the crop and the base image don't match perfectly.
Inputs and outputs that matter
original_image- the untouched base image the crops came from.cropped_images- your edited crops, same batch order as what Image Crop gave you.crop_data- must be the exactCROP_DATAobject Image Crop produced for this image. This is a pack-specific type that only flows between these two nodes; it's not something you construct by hand.blend_range(0β512, default 32) - width of the feathered seam in pixels. Too narrow and a mismatched crop shows a ring; too wide and you start eating into detail you wanted to keep from the edited crop.blend_mode(defaultsine) - the falloff shape across that seam.
One output: IMAGE - the full composited result, original resolution.
How to install it
ComfyUI Manager: search "GOAT Nodes", install, restart. Manually:
cd ComfyUI/custom_nodes
git clone https://github.com/AconexOfficial/ComfyUI_GOAT_Nodes.git
then restart. No models involved on either side of this pair - it's geometry and blending, not generation. Both Image Crop and Image Stitch shipped together in the pack's v1.1.1 release, so if you have one you have the other.
Common issues & troubleshooting
Mismatched batch order or count between cropped_images and crop_data is the failure mode to watch for - if you reorder, filter, or drop any crops between the Image Crop step and this node (say, you only wanted to refine some of the detected regions), the stitching will paste the wrong edit into the wrong location, or crash on a count mismatch. Keep the batch intact end to end unless you're deliberately handling that yourself.
Visible seam despite blending. Usually means whatever you did to the cropped image (inpaint, upscale, color grade) shifted the tone or noise character enough that no amount of feathering hides it cleanly - increase blend_range first, and if that's not enough, check that your edit pass didn't drift the color balance from the original (GOAT's own Fast Color Match node is a reasonable fix for exactly that, run on the crop before stitching).
Don't confuse crop_data with tile_data. They're different pack-specific types for two different pairs - Image Crop/Image Stitch use CROP_DATA, while Image Tiler/Image Untiler use TILE_DATA. They're not interchangeable even though the two pairs look conceptually similar.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| original_image | IMAGE | β | |
| cropped_images | IMAGE | β | |
| crop_data | CROP_DATA | β | |
| blend_range | INT | 320β512 | β |
| blend_mode | COMBO | sine | 7 options: linear, sine, cubic, quadratic, hermite, sine_quadratic_mix, +1 |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | β |