ingram-check
A command-line tool that checks PDF files for Ingram Lightning Source compliance and auto-fixes common issues.
Requirements
- Python 3.11+
- Ghostscript (
gs) — optional; use--use-ghostscriptto prefer it over the native Python backend
Installation
Homebrew (macOS & Linux)
brew tap saggingmeniscus/tap
brew install ingram-check
Installs a self-contained binary — no separate Python required. Supports macOS (Apple Silicon and Intel) and Linux (x86_64 and arm64), including WSL.
PyPI
pip install ingram-checker
# or
uv tool install ingram-checker
Standalone binary
Download the tarball for your platform from the latest release — ingram-check-macos-arm64, ingram-check-macos-x86_64, ingram-check-linux-x86_64, or ingram-check-linux-arm64 — extract it, and run ./ingram-check/ingram-check. No Python installation required.
From source
git clone https://github.com/saggingmeniscus/ingram-check.git
cd ingram-check
uv tool install .
After installation, the ingram-check command is available globally.
Usage
Interior PDFs
# Basic check — auto-detects page size
ingram-check interior book.pdf
# Specify trim size and color type
ingram-check interior book.pdf -t 6x9 -c bw
# With bleed
ingram-check interior book.pdf -t 6x9 --bleed
# Auto-fix (ICC removal, color conversion, crop stripping, downsampling, etc.)
ingram-check interior book.pdf --fix
# Unsafe fixes (includes upsampling low-res images)
ingram-check interior book.pdf --fix-unsafe
# JSON output
ingram-check interior book.pdf --format json
If --trim-size is omitted, the tool detects the page size from the PDF and reports it. An error is shown only if pages have inconsistent dimensions.
Trim sizes can be specified as dimensions (6x9, 5.5x8.5) or aliases (trade, a5, letter, digest, royal, mass market).
Cover PDFs
ingram-check cover cover.pdf -t 6x9
ingram-check cover cover.pdf -t 6x9 -b casewrap --fix
Listing checks
ingram-check interior --list-checks
ingram-check cover --list-checks
Individual checks can be toggled with -e (enable) and -d (disable):
ingram-check interior book.pdf -e bracketed_text -d margins
Checks
Interior (15 checks)
| Check | Severity | Auto-fixable |
|---|---|---|
| Font embedding | Error | |
| Page count (must be even) | Error | Yes |
| Page size consistency | Error | |
| Bleed dimensions | Error | |
| ICC profile removal | Error | Yes |
| Spot color removal | Error | Yes |
| Color space (Grayscale/CMYK) | Error | Yes |
| Crop/registration marks | Error | Yes |
| Ink density (warn 240%, error 300%) | Error | |
| Image resolution | Error/Warning | Yes* |
| Manufacturing statements | Error | |
| Paper certification claims | Error | |
| Bracketed text | Warning | |
| Margins (0.5" recommended) | Warning | |
| PDF/X compliance | Warning |
*Downsampling high-res images is a safe fix (--fix). Upsampling low-res images requires --fix-unsafe.
Cover (9 checks)
Font embedding, page count, cover size, ICC profiles, spot colors, color space, ink density, resolution, and barcode (manual verification).
Auto-fix
--fix applies safe, lossless corrections:
- Pad odd page count with a blank page
- Remove ICC profiles from page resources and image XObjects
- Convert spot colors to CMYK
- Convert RGB to Grayscale or CMYK
- Strip crop/registration marks by setting CropBox = TrimBox
- Downsample images above 375ppi to 300ppi
--fix-unsafe additionally applies fixes that may degrade quality:
- Upsample images below 300ppi (adds pixels via bicubic interpolation, but no real detail)
Fixed PDFs are written to <filename>_fixed.pdf in the same directory.
By default, all fixes use native Python (pikepdf + Pillow). Pass --use-ghostscript to use Ghostscript's pdfwrite device instead.
License
MIT — see LICENSE.
Metadata
Release files for ingram-checker 0.1.8
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| ingram_checker-0.1.8.tar.gz | 86.0 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| ingram_checker-0.1.8-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 131.7 kB
Release files / ingram_checker-0.1.8.tar.gz
| Download URL | ingram_checker-0.1.8.tar.gz |
|---|---|
| Size | 86.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
5eb65ae247c3b359069ee9a1a3ecdef3667cc4f66e12eaad3e0cbe3ee351b51a
|
|
BLAKE2b-256 checksum How to use checksums |
0add919176418377e4680bd04d2d49963944716fc8c9bcd8975c77b4419c5e9f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Aug 19, 2026.
Transparency logRelease files / ingram_checker-0.1.8-py3-none-any.whl
| Download URL | ingram_checker-0.1.8-py3-none-any.whl |
|---|---|
| Size | 45.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
69cc22a42176aa1af26a351107ae9a4a99cd736209805e7600c44817cf671e93
|
|
BLAKE2b-256 checksum How to use checksums |
6e35dc66b8c76848591c09000c79ff8ce81e154a5baf6c228a86a307eb0d710b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Aug 19, 2026.
Transparency logSecurity for ingram-checker 0.1.8
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.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for ingram_checker-0.1.8.tar.gz
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 Aug 19, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.