Combine Images (Photo Stitching)
Combine multiple photos into one — chat screenshot stitching, before/after, Instagram 9-grid.
Your images are not uploaded to any server. All processing runs in your browser.
100%
[ AdSense ad slot ]
Common use cases
| Situation | Recommended mode |
|---|---|
| Stitch chat screenshots into one image | Vertical + gap 0px + white background |
| Add multiple photos to a marketplace review | Vertical or grid + gap 5-10px |
| Instagram 9-grid (3×3) | Grid + 3 columns + gap 0px |
| Before / After comparison | Horizontal + gap 4px |
| Product multi-shot composite | Grid + white background + gap 8px |
| App tutorial flow capture | Vertical + gap 12px + gray background |
Horizontal vs vertical vs grid — how mismatched photo sizes get aligned
Combining draws each photo onto one new canvas with
drawImage. The alignment rule differs by mode. Horizontal takes the first photo's height as the baseline and rescales every other photo's width to match that height, keeping aspect ratio, then lays them side by side. Vertical does the opposite — it matches the first photo's width and scales each height proportionally. Grid uses the first photo's size as one cell, then places each photo centered at the largest size that fits inside the cell without cropping (contain-fit). So putting your most representative aspect ratio first affects the result quality. Gap and background color fill the empty space between/around cells.
How many photos, how large a result (canvas limit)
The output is ultimately a single browser canvas, and canvases cap the maximum pixels per side. This tool validates against a safety-margin cap of 16,000px. For horizontal/vertical the stitched cumulative length, and for grid the columns×cell size, must stay under that value — otherwise combining stops and shows a warning with the projected dimensions (computed directly in code). Real browser limits are reportedly ~16,384px on Chrome/Safari and ~11,000px on Firefox, so 16,000 is a conservative line below those. If you hit the cap, reduce the photo count, or resize each photo smaller first, then combine.
Gap, background, order, output format — the options that shape the result
The default mode is vertical (caption stitch). Stitching several chat/messenger screenshots into one image is the most common use, so it opens at vertical + gap 0px and joins seamlessly out of the box. Gap is 0-80px (2px steps) of spacing between photos, and that empty space — plus any leftover area in grid cells smaller than the photo — is filled with the background color. A white background with gap 0 looks clean for caption stitches, while a small gap with a gray or white background separates product shots nicely. Order is changed with the ↑/↓ buttons in the file list and updates the preview instantly; since horizontal and vertical modes align to the first photo, putting your most representative aspect ratio at position 1 makes the rest scale to it for a stable result. In grid mode each photo is contain-fit and centered inside its cell, so mixing different aspect ratios pads with background instead of cropping. Output is JPG (quality 0.92) or PNG (lossless): JPG keeps photo-heavy stitches small, while PNG is better for captures where text and diagrams must stay crisp. Pressing combine downloads exactly what the preview shows as one image.
Related tools
Frequently asked questions
Are my files uploaded?
No. All processing runs in your browser via Canvas API.
Can I combine chat screenshots?
Yes. Vertical mode + gap 0px gives a seamless single image. Stitching messenger captures is a core use case.
What if my photos have different sizes?
Horizontal: scaled to first photo's height. Vertical: scaled to first photo's width. Grid: contain-fit to cell size.
Can I reorder photos?
Yes. Use ↑↓ in the file list. Preview updates immediately.
How many photos can I combine?
No hard limit. Result canvas must stay under browser limit (~16k×16k). Generally 20-30 works fine.
References
Last verified: 2026-05-10 / Browser native Canvas API (no external libraries).
⚠️ If result is large (20MB+), consider JPG output + image compression for upload.