PDFPixel
Right-click a PDF → the PDFPixel menu → turn its pages into images, or merge / split / compress it — straight from your file manager, fully local, no app to open. Works on Linux, Windows, and macOS.
- Convert every page (or a range) to PNG / JPG / WEBP / TIFF at any DPI.
- Merge several PDFs into one, split a PDF into per-page files.
- Compress — real image downsampling that keeps text sharp and selectable.
📖 USAGE.md — every action, in and out · 🛠 ARCHITECTURE.md · 🤝 CONTRIBUTING.md · 📦 DISTRIBUTING.md
Supported platforms
| Platform | Status | How to run it |
|---|---|---|
| Linux, glibc ≥ 2.31 — Ubuntu 20.04+, Debian 11+, Mint 20+, Pop!_OS 20.04+, Fedora 32+, RHEL/Rocky/Alma 9+, openSUSE Leap 15.3+/Tumbleweed, Arch & derivatives | ✅ native | .deb / .rpm / AppImage / AUR |
| Older or musl Linux — RHEL/Rocky/Alma 8, Debian 10, Ubuntu 18.04, CentOS 7, Alpine (glibc < 2.31 or musl) | ✅ portable | Flatpak (own runtime, any distro) or pipx install pdfpixel |
| CPU architectures | ✅ | x86-64 (amd64) and ARM64 (aarch64) — both built in CI |
| Windows 10 / 11 | ✅ | pdfpixel-setup.exe (per-user, unsigned) |
| macOS 12+ (Intel & Apple Silicon) | ⚠️ experimental | .dmg, unsigned — Terminal install (below) |
Signing status — builds are unsigned. We don't have an Apple Developer ID, so the macOS build can't be signed/notarized: expect a Gatekeeper prompt and use the Terminal install method below. Windows shows a one-time SmartScreen prompt. The native right-click menu ships only with the Linux
.deb/.rpm/AUR packages — AppImage, Flatpak and pip are CLI/app-only (a sandbox/portability limit, not a choice).
Install
Grab the artifact for your OS from the Releases page.
Linux
Native packages are built on glibc 2.31, so they run on glibc ≥ 2.31
(Ubuntu 20.04+, Debian 11+, Fedora 32+, RHEL/Rocky/Alma 9+, openSUSE Leap 15.3+),
amd64 and arm64, with no security prompt. On older distros (RHEL 8,
Debian 10, Ubuntu 18.04, CentOS 7) or musl (Alpine), use Flatpak or
pipx install pdfpixel instead.
| Distro family | Install |
|---|---|
| Debian/Ubuntu/Mint/Pop!_OS | sudo apt install ./pdfpixel_*.deb |
| Fedora/RHEL/openSUSE | sudo dnf install ./pdfpixel-*.rpm |
| Arch/CachyOS/EndeavourOS | yay -S pdfpixel (AUR) |
| Any (no install) | chmod +x PDFPixel-*.AppImage then run it |
| Any (Python) | pipx install pdfpixel (CLI only) |
The PDF engine and dialog are bundled — no poppler, no system Python. The
.deb/.rpm install the right-click menu for GNOME Files (Nautilus),
Cinnamon (Nemo), MATE (Caja) and KDE Dolphin (install the matching binding —
nautilus-python / nemo-python / python3-caja — for the GTK ones); XFCE
Thunar takes a one-time manual step (integrations/linux/thunar-actions.md).
After installing, reload the file manager (nautilus -q) or log out/in.
The AppImage and pip/Flatpak builds are the app/CLI only (no host
right-click menu — a sandbox/portability limit), but run anywhere:
./PDFPixel-*.AppImage --pages 1,3-5 file.pdf.
(From a checkout: ./install.sh — uses system Python, needs python3-tk.)
Windows 10/11
- Download
pdfpixel-setup.exeand run it (per-user, no admin). - SmartScreen — "Windows protected your PC": More info → Run anyway.
- Finish the installer (installs to
%LOCALAPPDATA%\Programs\PDFPixel). - Right-click a PDF → PDFPixel → All Pages / First Page / Custom Range… / Split into Pages / Compress (Windows 11: under Show more options, or press Shift+F10). (Merge is command-line only on Windows — classic shell verbs run per file.)
Uninstall via Settings ▸ Apps (removes the menu entry too).
macOS (experimental)
The build is unsigned, and recent macOS no longer offers a right-click "Open" for downloaded scripts, so use Terminal (it bypasses Gatekeeper's launch gate cleanly):
- Download
pdfpixel-*.dmgand double-click to mount it. - In Terminal, run (prefix with
sudoif it can't write to/Applications):bash "/Volumes/PDFPixel/Install PDFPixel.command"
This copies the app to/Applications/PDFPixel, installs the Quick Actions to~/Library/Services, and clears the quarantine flag. - Right-click a PDF in Finder → Quick Actions → PDFPixel: All Pages / First Page / Custom Range… / Split into Pages / Compress / Merge PDFs (select 2+ PDFs for Merge).
- Not listed? Enable it under System Settings → Privacy & Security → Extensions → Finder (or Keyboard → Keyboard Shortcuts → Services).
No prompt at all: build it yourself on your Mac (locally-built files carry no quarantine) —
bash packaging/macos/build_dmg.sh.
Always-works fallback (any OS) — run the bundled CLI directly:
/Applications/PDFPixel/pdfpixel --pages 1,3-5 ~/file.pdf # macOS
"%LOCALAPPDATA%\Programs\PDFPixel\pdfpixel.exe" file.pdf # Windows
pdfpixel --pages 5-8 file.pdf # Linux
Usage at a glance
pdfpixel file.pdf # all pages → PNG @ 200 DPI
pdfpixel --pages 1,3-5,9 file.pdf # a page-range mix
pdfpixel --format jpg --dpi 300 file.pdf # JPG at print resolution
pdfpixel --ask file.pdf # pop the Custom… dialog
pdfpixel merge a.pdf b.pdf # → merged.pdf
pdfpixel split report.pdf # → report_p1.pdf, report_p2.pdf, …
pdfpixel compress --quality low scan.pdf # shrink images
Outputs land beside the source and never overwrite it. Exit codes: 0 ok ·
1 ≥1 file failed · 2 no files / malformed --pages. Full reference and the
right-click flow are in USAGE.md.
Development
pip install -e ".[dev]"
pytest -q
The codebase is a thin file-manager shim that launches a self-contained CLI
(pdfpixel/: core rendering, pdfops merge/split/compress, cli, dialog,
notify); the menu is generated from one ACTIONS list. See
ARCHITECTURE.md for the design and
CONTRIBUTING.md for setup, build, and release steps.
Notes / scope
- Self-contained: each installer bundles a frozen Python runtime, the PDF
engine (PDFium via
pypdfium2,pikepdf), and the tkinter dialog. No system Python or poppler required. - Unsigned — hence the SmartScreen / Gatekeeper prompts above. macOS signing/notarization needs an Apple Developer ID we don't currently have, so the Terminal install is the supported macOS path; Windows signing may come later with a certificate.
- Sandboxed builds (Flatpak/Snap) and the AppImage/pip CLI can't install a
host file-manager menu — that's a platform limit. The full right-click menu
ships with the
.deb/.rpm/AUR packages. - Windows/macOS menus now expose the full action set (All Pages, First Page, Custom Range, Split, Compress; macOS also Merge). Windows Merge stays CLI-only (classic shell verbs run per selected file). Lands in the next release build.
Metadata
Release files for pdfpixel 0.3.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| pdfpixel-0.3.1.tar.gz | 28.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pdfpixel-0.3.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 47.7 kB
Release files / pdfpixel-0.3.1.tar.gz
| Download URL | pdfpixel-0.3.1.tar.gz |
|---|---|
| Size | 28.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c3af10a555fb64e7693662865d600b39ce9a2b30ce8b805ed390cf3d523ed8e6
|
|
BLAKE2b-256 checksum How to use checksums |
ef583593db467059aecd8f32198657653ae90ef7b00578be11f8026288c9f49e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 16, 2026.
Transparency logRelease files / pdfpixel-0.3.1-py3-none-any.whl
| Download URL | pdfpixel-0.3.1-py3-none-any.whl |
|---|---|
| Size | 19.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a8bd92b2649db8e9741720b18173b4a6ca5a4ab34355be41e411129dc9e8961d
|
|
BLAKE2b-256 checksum How to use checksums |
bd540e3c1b261b99e280ff7a16459f61e28d46903c137edcb3d7a3b92f01e12e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 16, 2026.
Transparency log