Right-click a PDF -> every page as a PNG. Cross-platform (Linux/Windows/macOS).
Project description
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 / Custom Range… (Windows 11: under Show more options, or press Shift+F10).
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 / PDFPixel: Custom Range….
- 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 native menus currently expose All Pages + Custom Range; the newer actions are available there via the CLI (parity is in progress).
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pdfpixel-0.3.0.tar.gz.
File metadata
- Download URL: pdfpixel-0.3.0.tar.gz
- Upload date:
- Size: 28.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d7fb17599531575bf8f17815bfe23529aa6dbca1621af03fe51f8d1bf309e274
|
|
| MD5 |
24ada603a33d9613d0e2de23d0d4bc1d
|
|
| BLAKE2b-256 |
45cc701d74f8ffda2d444d2abe100c24fa9a1d2c7866772757ae73ac43a5e859
|
Provenance
The following attestation bundles were made for pdfpixel-0.3.0.tar.gz:
Publisher:
build.yml on adminpydev/PDFPixel
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pdfpixel-0.3.0.tar.gz -
Subject digest:
d7fb17599531575bf8f17815bfe23529aa6dbca1621af03fe51f8d1bf309e274 - Sigstore transparency entry: 1839886339
- Sigstore integration time:
-
Permalink:
adminpydev/PDFPixel@66ce7d4d0e9cf759b10f66cad1d53e0b5fc5c2e3 -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/adminpydev
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build.yml@66ce7d4d0e9cf759b10f66cad1d53e0b5fc5c2e3 -
Trigger Event:
push
-
Statement type:
File details
Details for the file pdfpixel-0.3.0-py3-none-any.whl.
File metadata
- Download URL: pdfpixel-0.3.0-py3-none-any.whl
- Upload date:
- Size: 19.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
74246b750729ba8d54fbb298dd20619eae2f8781badc1d119cb483574d05aa3c
|
|
| MD5 |
cde557b892f043846899c8a6f82d1d2a
|
|
| BLAKE2b-256 |
9615b16ddef6565f0706562efdd4e00e7f9f772f4bf382d1dc76ea8e4b3e8b82
|
Provenance
The following attestation bundles were made for pdfpixel-0.3.0-py3-none-any.whl:
Publisher:
build.yml on adminpydev/PDFPixel
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pdfpixel-0.3.0-py3-none-any.whl -
Subject digest:
74246b750729ba8d54fbb298dd20619eae2f8781badc1d119cb483574d05aa3c - Sigstore transparency entry: 1839886364
- Sigstore integration time:
-
Permalink:
adminpydev/PDFPixel@66ce7d4d0e9cf759b10f66cad1d53e0b5fc5c2e3 -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/adminpydev
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build.yml@66ce7d4d0e9cf759b10f66cad1d53e0b5fc5c2e3 -
Trigger Event:
push
-
Statement type: