IdeaFactorys Lab

IDEAFACTORY / TWO AT A TIME

Batch Image Pair Joiner

Find the pair.
Keep the whole picture.

A front and a back. A product and its details. Match each pair, check the order, and turn a folder of images into a tidy batch of joined pictures.

Local processingNo crop or stretchOne image per pair
Your pictures stay in this tab

No uploads, analytics, remote fonts, or saved sessions. Download names and the ZIP’s manifest.json include source filenames and browser-supplied relative paths. Check them before sharing. Clearing this page cannot remove files already downloaded.

01 / Choose files or a folder

or drop image files here

Up to 100 files / 50 included pairs · 20 MiB each · 150 MiB combined · JPEG, PNG and static WebP only. Each source and joined output: at most 12 megapixels and an 8,000 px edge. Oversized joins require your explicit downscale choice.

Folder selection preserves relative folders when supported by your browser. File picking and file drops usually provide names only, so they share one virtual folder. Dropped folders are rejected; use Choose folder instead. No filename sorting or fuzzy match is used. Adding files clears previews and reviews; existing selections remain unless new suffix candidates change that group.

02 / Define the pair

Suffixes are case-sensitive, literal text immediately before the extension. For example, chair_product.jpg + chair_specs.png. The remaining base name and relative folder must match exactly. Extensions may differ. No cross-folder pairing, case folding or Unicode normalization.

Apply rebuilds the matching report and resets manual pairs, chosen candidates, swapped order, pair exclusions and all reviews. File exclusions remain. Editing these fields alone does not apply them.

03 / Set the join

Each image is centered at its native size unless you explicitly choose downscaling. Space beside the smaller image is padded. No crop, stretch or automatic upscaling. An optional edge limit scales the entire join, including the gap. Odd padding may differ by one pixel.

04 / Resolve and inspect every pair

0 / 100 files

Every selected candidate has a stable file ID. Choose deliberately when a side has multiple files. Similar folder names, case or Unicode spellings are flagged and require acknowledgement; they are never merged. Exclude incomplete pairs or unmatched files explicitly.

Two files. One complete picture.

Add files with matching bases and your two suffixes. Every missing side, duplicate candidate and unmatched file stays visible.

05 / Final review

Inspect each preview, source order, dimensions and scale. Mark pairs as you go, or confirm the whole batch once every included preview is ready. Any file, candidate, suffix, layout or output change clears review and old downloads. A pair must have a current preview before review. The checkerboard shows transparency only in the preview; it is never drawn into the exported image.

One joined file for each included pair, plus manifest.json with chosen sources, exclusions, warnings, dimensions and scale. Unique output names prevent overwrites inside the ZIP. Individual downloads use the same reviewed settings. Each output is limited to 20 MiB; the whole ZIP to 150 MiB. Browser encoding can fail on low-memory devices; smaller batches help.

Choose files or a folder to begin.

What is preserved, and what changes

The complete visible image is kept. Browser decoding and re-encoding can change color, orientation handling and compression. Original bytes, EXIF/IPTC, ICC profiles and HDR/16-bit precision are not preserved. JPEG is lossy and flattens transparency onto the selected white or black background. Unsupported, animated or corrupt files are rejected, even if their extension looks correct.

Cancel stops the next step; a native decode or encode already underway may need to finish first. Processing is sequential. Navigating away clears file references and generated previews, including Back/Forward restoration. This page cannot confirm that a download was saved.

A repeatable workflow for repeatable pairs

01

Name the relationship

Use chair_product.jpg and chair_specs.jpg, or page01_front.png and page01_back.png. Separate folders remain separate, even when the base names repeat.

02

Resolve before you join

Missing sides and duplicate suffix matches are never silently dropped. Select each source, swap the order if needed, or explicitly exclude the pair.

03

Review each finished image

Vertical or horizontal joins preserve the whole image. Inspect dimensions, padding and any intentional downscale, then download individual results or the batch ZIP.

Before you join

Can I merge hundreds of scans or product folders?

Work in batches of up to 100 files and 50 included pairs. Choose a folder to preserve its relative paths. This tool creates many two-image outputs, not one long collage or a PDF.

Does it match similar names automatically?

No. Both the relative folder and base name must be identical, and the chosen suffixes are literal and case-sensitive. Case or Unicode-normalization lookalikes remain separate and are reported for review.

What happens if two files match the same side?

That side stays unresolved until you choose a specific file ID. Full filename and path labels remain visible, including extensions. Unchosen candidates are recorded in the manifest.

Will smaller images be enlarged or cropped?

No. The join uses native dimensions by default, centers both images and pads extra space. You may explicitly limit the longest output edge; the whole join scales proportionally, including its gap. Output limits block the join instead of silently resizing it.

What is inside the ZIP?

A uniquely named joined PNG or JPEG for each reviewed pair and a manifest.json. It records source names, relative paths, chosen candidates, excluded items and geometry. Review it before sharing with anyone.

Can I retry a failed preview or export?

Yes. Resolve the reported problem, retry the affected pair or render included previews again, then review the result. A parameter change or cancellation invalidates in-flight work so old results cannot be downloaded.