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.0.tar.gz (143.5 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.0-py3-none-any.whl (192.4 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: bangerpdf-1.0.0.tar.gz
  • Upload date:
  • Size: 143.5 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.0.tar.gz
Algorithm Hash digest
SHA256 9f441587340982357d30b6713963b2a5e102553cd684bc15950ccb53ab8bc16e
MD5 0b8143406b8448ae8dab73e6b73ed89b
BLAKE2b-256 f03c1affa603d48f4dd9f34da00c314fc762556072191e305e60b0bb7ef15ecd

See more details on using hashes here.

File details

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

File metadata

  • Download URL: bangerpdf-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 192.4 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.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a2ac347a73465bab1181465fbae5fdd0844d886ad58880791be87dd2f28dbb5b
MD5 a68b03e25addb4c8f28141c0149d467c
BLAKE2b-256 874cf056837f0068c7cec44a8d38b8fe74edf0c199c1f17472a2cade716ee18a

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