Image_merge2image
Stitch two images together with a feathered seam
- image1
- image2
- mask2
- blended_image
A manual panorama-and-collage stitcher rather than a compositing tool with per-pixel control: image1_position picks which side image1 sits on (up/down/left/right/center), image2 fills the rest, and the join between them gets feathered rather than left as a hard seam.
How it works
blendsmooth (default 100, up to 4000) controls how wide the feathered transition is where the two images meet - higher values blend a wider band, lower values give a harder edge. Optional mask2 gives you manual control over the boundary instead of relying purely on blendsmooth's automatic feather. x_compress/y_compress (0–1) pull the two images closer together - how much they overlap or compress into each other rather than sitting flush edge to edge; at 0 they're a no-op.
The inputs and outputs that matter
image1,image2(both required).image1_position(up/down/left/right/center) - which sideimage1occupies.blendsmooth(default 100) - feather width at the seam.mask2(optional) - manual control over the blend boundary.x_compress/y_compress(default 0) - overlap between the two images.- Output:
blended_image.
How to install it
Via ComfyUI Manager: search ComfyUI-Apt_Preset, install, restart. Manually:
cd ComfyUI/custom_nodes
git clone https://github.com/cardenluo/ComfyUI-Apt_Preset.git
Windows: install.bat. Linux/Mac: pip install -r ComfyUI-Apt_Preset/requirements.txt in your venv. Restart. Nothing to download for this node - the pack's heavier dependencies belong to other parts of this ~300-star, actively maintained pack.
Common issues & troubleshooting
Seam reads as an obvious soft smear. A large blendsmooth on two images with very different content at the join produces exactly that - the feather is doing what it's told. Either lower blendsmooth for a harder seam, or make sure the two source images actually share enough visual context near the join for a wide blend to look intentional rather than muddy.
x_compress/y_compress seem to do nothing. They only matter once there's actual overlap between the two images to compress - at 0, both are no-ops by design. Push them up if you want the images pulled tighter together than a flush edge-to-edge join.
blendsmooth's range is a lot wider than you'd expect. It goes up to 4000, which is a huge feather relative to image1_position's five simple placement options - for typical image sizes, a value anywhere near that ceiling will blend most of the frame rather than just the seam. Start low (the default is 100) and raise it gradually rather than assuming you need a large number to get a smooth transition.
Use case worth knowing about. This is a manual alternative to a model-driven outpaint - joining two separate generations into a wider or taller composition, or building a simple diptych, without needing a sampler pass at all. It's also a reasonable way to build a reference sheet by hand: place a character turnaround or a product shot from two angles side by side before feeding the pair into whatever downstream node expects a single combined image.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| image1 | IMAGE | — | |
| image2 | IMAGE | — | |
| image1_position | COMBO | 5 options: up, down, left, right, center | |
| blendsmooth | INT | 1001–4000 | — |
| mask2opt | MASK | — | |
| x_compressopt | FLOAT | 0.000–1 | — |
| y_compressopt | FLOAT | 0.000–1 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| blended_image | IMAGE | — |