Skip to main content

Make banger PDFs from HTML or data — print-ready output across desktop, digital press, and commercial offset tiers, with built-in QA and HTML Review Bundles

Project description

bangerpdf

Make banger PDFs from HTML or data.

A unified Python CLI + Claude Code skill for generating print-ready PDFs across three output tiers — desktop, digital press, and commercial offset CMYK — with built-in QA, HTML Review Bundles, and ten starter packs covering bids, proposals, briefings, reports, one-pagers, certificates, invoices, letters, and more.

Built by AI Build Lab, inspired by John Jefferies' HTML-to-PDF toolkit and the Fishback Plumbing bid pipeline.

What's in the box

  • Three-tier print pipeline — desktop / digital press (crop marks + bleed) / commercial offset (RGB→CMYK + PDF/X-4), all using WeasyPrint 67+ native CMYK support. No Ghostscript dependency.
  • Brand kit systembrand-kit.yaml defines primary/accent/font/logo once, every starter pack reads it.
  • Ten starter packsbid-package, mgm-strategy-plan (schema-driven for any agentic workflow), proposal-package, briefing-package, one-pager, certificate, invoice, letter, report-package, review-bundle.
  • Built-in QA checker — 13 checks powered by PyMuPDF: density, page count, orphan headers, orphan signatures, table splits, content overflow, broken images, unresolved Jinja2 variables, broken URLs, headline consistency, font embedding, bleed area, PDF/X compliance.
  • HTML Review Bundles — v1 → v2 → approval workflow modeled on real client work. Inline annotations, diff markers, self-contained HTML you can email or upload anywhere.
  • Claude Code skill — outcome-triggered, fires on "build me a bid", "make this print-ready", "polish for client", etc. Bundled inside the package via bangerpdf skills install.

Install

pip install bangerpdf

If you hit externally-managed-environment (Homebrew Python on macOS):

pip install bangerpdf --break-system-packages

Or use a virtual environment:

python3 -m venv ~/.bangerpdf-venv && ~/.bangerpdf-venv/bin/pip install bangerpdf

Quick start

# Verify everything installed cleanly
bangerpdf doctor

# Convert any HTML file to a print-ready PDF
bangerpdf convert brochure.html --embed-assets

# Scaffold a bid package from the starter
bangerpdf init bid-package ./acme-bid

# Build all three tiers
cd ./acme-bid
bangerpdf build --tier all

# Run the QA checker
bangerpdf qa

# Wrap it as a Review Bundle for client approval
bangerpdf review init . --from .
bangerpdf review build

Talk to Claude Code

After running bangerpdf skills install, your AI agent can do this on its own:

"Build me a bid package for Acme Plumbing. Headline number is $445,000. Use Inter for typography and the Fishback navy/blue palette."

Or:

"Take this markdown report and turn it into a print-ready PDF with our brand. Run the QA checker and fix anything it flags."

CLI reference

bangerpdf convert <input.html> [--embed-assets] [--size letter|a4] [--output-dir DIR]
bangerpdf proof <input.pdf> [--dpi 300]
bangerpdf init <pack> <project-dir> [--brand NAME] [--primary HEX] [--logo PATH]
bangerpdf build [--tier desktop|digital-press|commercial|all] [--watch]
bangerpdf qa [--strict] [--diff] [--json]
bangerpdf review init <dir> --from <pack-dir>
bangerpdf review build|revise|approve|annotate
bangerpdf brand show|set
bangerpdf list-packs
bangerpdf skills install|uninstall|path
bangerpdf doctor
bangerpdf --version

Run bangerpdf <command> --help for full options.

Lineage

bangerpdf unifies three earlier pipelines:

  • JJ's pdf-toolkit (commit ae5cbf73d, Mar 2 2026) — battle-tested HTML→PDF conversion, lifted unchanged as bangerpdf.convert, bangerpdf.embed_assets, bangerpdf.proof.
  • Fishback Plumbing bid pipeline (Mar 21 – Apr 3 2026) — data-driven multi-document rendering pattern, generalized into bangerpdf.render.
  • The bug experience that started it all — Joe Fishback's bid had 6 layout issues that needed manual fixing. The QA checker exists so that never has to happen again.

If you're a DocGen alum, this tool is for you. It's the file-creation-and-styling layer your agentic workflows have been missing.

License

MIT. See LICENSE.

bangerpdf depends on PyMuPDF, which is AGPL3. PyMuPDF is used as a library; running bangerpdf as a local CLI does not trigger AGPL distribution obligations. If you embed bangerpdf in a hosted service, consult PyMuPDF's licensing.

Support

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

bangerpdf-1.0.1.tar.gz (218.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

bangerpdf-1.0.1-py3-none-any.whl (284.9 kB view details)

Uploaded Python 3

File details

Details for the file bangerpdf-1.0.1.tar.gz.

File metadata

  • Download URL: bangerpdf-1.0.1.tar.gz
  • Upload date:
  • Size: 218.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for bangerpdf-1.0.1.tar.gz
Algorithm Hash digest
SHA256 2579525f7a607cbc5c107fb8156df283306406f26cf37ef73238d02ff92a819c
MD5 e7ec3f7cf9f5657bfa4dfa9cf778cf04
BLAKE2b-256 a75858b9c51566092b2f2e35351e6e7477b474133f8e8747033e36595830e6cd

See more details on using hashes here.

File details

Details for the file bangerpdf-1.0.1-py3-none-any.whl.

File metadata

  • Download URL: bangerpdf-1.0.1-py3-none-any.whl
  • Upload date:
  • Size: 284.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for bangerpdf-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 1acf5285e7c2319cd5238dc700269caf0b95520392e8a03de351e8c205c2d63d
MD5 5978742fae1b4b80ac40040da8cd9b74
BLAKE2b-256 e9943676c2884365be1f2e7635e3056bb25c0af66c4080091fb4ed94ffeaac57

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page