Skip to main content
Logo
PDFImageMerger — Merge Images into a PDF

PDFImageMerger

Linux Windows

Drop your images. Get one PDF.

Merging a folder of scans or photos into a single PDF shouldn't require a dozen browser tabs, an upload to some unknown server, or a heavyweight office suite. It's a small, well-defined job — it deserves a small, well-defined tool.

PDFImageMerger does exactly that, entirely on your machine. Pick a folder, select files, or drag them straight into the window — even whole folders at once. Reorder the list by drag & drop, check each image's preview, dimensions and size, then build.

Page format is your call: A4, Letter, Legal, A5 in portrait or landscape, or "fit to image" for no fixed page at all — every image becomes a page of its own size. Resolution and compression level are what actually decide the final file size, and PDFImageMerger tells you that size before you commit, by compressing a real sample with your chosen settings.

For the moments you don't want any re-encoding, the "don't modify images" flag switches to a byte-for-byte lossless path: JPEGs are embedded exactly as they are on disk, everything else goes through lossless compression. Bigger file, zero quality lost — your choice, made explicit.

Built to handle real batches too: hundreds of images are merged in chunks rather than held entirely in memory, so a run of 800 photos stays around half a gigabyte of RAM instead of the tens of gigabytes a naive approach would need. Open source. MIT licensed. Built in the AurigaLAB.

Features

Everything you need. Nothing in the way.

Drag & Drop

Drop files or entire folders straight into the window. Reorder the list by drag & drop, with live previews, dimensions and file size for each image.

Page Formats

A4, Letter, Legal, A5 — or "fit to image", with no fixed page: every image becomes a page of its own size.

Real Size Estimate

Resolution (72–600 DPI) and compression level, with the final PDF size estimated by actually compressing a sample — not a guess.

Lossless Mode

"Don't modify images" embeds JPEGs byte-for-byte unchanged and everything else as lossless Flate. Zero quality loss, guaranteed.

Large Batches

PDFs are built in chunks instead of held entirely in RAM — hundreds of images stay within a few hundred MB of peak memory.

Cross-Platform

Linux AppImage and Windows portable build from the same codebase — pywebview + Franken UI, no browser and no internet connection required.

Available on GitHub

Free and open source. Linux and Windows.

Requirements

The Linux AppImage and Windows portable build need nothing pre-installed. Running from source instead needs Python and a WebView backend:

Any platform

pip install -r requirements.txt

Windows and macOS get their native WebView backend as a dependency automatically. Linux has no default backend, so the same command also pulls in Qt — pure pip, no sudo required.

Changelog

What's changed across versions.

v1.0.1 latest · August 2026

Localization & fixes

  • Now speaks English, Italian, Spanish, French, Chinese (Simplified) and Hindi — follows the OS language on first launch, or pick one in Preferences
  • Fixed: language and theme preferences did not survive an app restart (now saved to a JSON config file instead of localStorage)
  • Fixed: a "ModuleNotFoundError: No module named 'gi'" traceback appeared on every Linux launch
  • Fixed: the "Don't modify images" toggle never changed color when turned on
v1.0.0 · August 2026

First release

  • Add images by folder, individual files, or drag & drop — even entire folders
  • Reorderable file list with drag & drop, previews, dimensions and file size
  • Page format: A4 / Letter / Legal / A5, or "fit to image" with no fixed page
  • Portrait/landscape orientation for fixed page formats
  • Resolution (72–600 DPI) and compression level with a real size estimate before building
  • "Don't modify images" mode: byte-identical JPEGs embedded losslessly, zero quality loss
  • Large batches built in chunks to keep memory use low (~550MB peak for 800 A4 images)
  • Linux AppImage and Windows portable build

// Built at AurigaLAB

Source on GitHub