minimax-pdf
Three tasks. One skill.
Read before any CREATE or REFORMAT work.
Route table
| User intent | Route | Scripts used |
|---|
| Generate a new PDF from scratch | CREATE | → → → → |
| Fill / complete form fields in an existing PDF | FILL | → |
| Reformat / re-style an existing document | REFORMAT | → then full CREATE pipeline |
Rule: when in doubt between CREATE and REFORMAT, ask whether the user has an existing document to start from. If yes → REFORMAT. If no → CREATE.
Route A: CREATE
Full pipeline — content → design tokens → cover → body → merged PDF.
bash
bash scripts/make.sh run \
--title "Q3 Strategy Review" --type proposal \
--author "Strategy Team" --date "October 2025" \
--accent "#2D5F8A" \
--content content.json --out report.pdf
Doc types: ·
·
·
·
·
·
·
·
·
·
·
·
·
·
| Type | Cover pattern | Visual identity |
|---|
| | Dark bg, dot grid, Playfair Display |
| | Left panel + right geometric, Syne |
| | Oversized first-word, DM Serif Display |
| | Near-black, radial glow, Fraunces |
| | Light bg, classical serif, EB Garamond |
| | Dark slate, Outfit |
| | White + single 8px accent bar, Cormorant Garamond |
| | 3 bold horizontal color bands, Barlow Condensed |
| | SVG angled cut, dark/light halves, Montserrat |
| | Inset border, corner ornaments, Cormorant |
| | Ghost letter, all-caps title, Bebas Neue |
| | Warm cream bg, centered stack, hero image, Playfair Display |
| | Navy bg, centered stack, grayscale image, Playfair Display |
| | Near-black, grid lines, monospace, neon green |
| | White bg, thick sidebar, oversized title, Barlow Condensed |
Cover extras (inject into tokens via
,
):
- — abstract text block on the cover (magazine/darkroom)
- — hero image URL/path (magazine, darkroom, poster)
Color overrides — always choose these based on document content:
- — override the accent color; is auto-derived by lightening toward white
- — override the cover background color
Accent color selection guidance:
You have creative authority over the accent color. Pick it from the document's semantic context — title, industry, purpose, audience — not from generic "safe" choices. The accent appears on section rules, callout bars, table headers, and the cover: it carries the document's visual identity.
| Context | Suggested accent range |
|---|
| Legal / compliance / finance | Deep navy , charcoal , slate |
| Healthcare / medical | Teal-green , cool green |
| Technology / engineering | Steel blue , indigo |
| Environmental / sustainability | Forest , olive |
| Creative / arts / culture | Burgundy , plum , terracotta |
| Academic / research | Deep teal , library blue |
| Corporate / neutral | Slate , graphite |
| Luxury / premium | Warm black , deep bronze |
Rule: choose a color that a thoughtful designer would select for this specific document — not the type's default. Muted, desaturated tones work best; avoid vivid primaries. When in doubt, go darker and more neutral.
content.json block types:
| Block | Usage | Key fields |
|---|
| Section heading + accent rule | |
| Subsection heading | |
| Sub-subsection (bold) | |
| Justified paragraph; supports markup | |
| Unordered list item (• prefix) | |
| Ordered list item — counter auto-resets on non-numbered blocks | |
| Highlighted insight box with accent left bar | |
| Data table — accent header, alternating row tints | , , ?, ? |
| Embedded image scaled to column width | /, ? |
| Image with auto-numbered "Figure N:" caption | /, ? |
| Monospace code block with accent left border | , ? |
| Display math — LaTeX syntax via matplotlib mathtext | , ?, ? |
| Bar / line / pie chart rendered with matplotlib | , , , ?, ?, ?, ?, ? |
| Process diagram with nodes + edges via matplotlib | , , ?, ? |
| Numbered reference list with hanging indent | [{id, text}], ? |
| Accent-colored full-width rule | — |
| Small muted label | |
| Force a new page | — |
| Vertical whitespace | (default 12) |
chart / flowchart schemas:
json
{"type":"chart","chart_type":"bar","labels":["Q1","Q2","Q3","Q4"],
"datasets":[{"label":"Revenue","values":[120,145,132,178]}],"caption":"Q results"}
{"type":"flowchart",
"nodes":[{"id":"s","label":"Start","shape":"oval"},
{"id":"p","label":"Process","shape":"rect"},
{"id":"d","label":"Valid?","shape":"diamond"},
{"id":"e","label":"End","shape":"oval"}],
"edges":[{"from":"s","to":"p"},{"from":"p","to":"d"},
{"from":"d","to":"e","label":"Yes"},{"from":"d","to":"p","label":"No"}]}
{"type":"bibliography","items":[
{"id":"1","text":"Author (Year). Title. Publisher."}]}
Route B: FILL
Fill form fields in an existing PDF without altering layout or design.
bash
# Step 1: inspect
python3 scripts/fill_inspect.py --input form.pdf
# Step 2: fill
python3 scripts/fill_write.py --input form.pdf --out filled.pdf \
--values '{"FirstName": "Jane", "Agree": "true", "Country": "US"}'
| Field type | Value format |
|---|
| Any string |
| or |
| Must match a choice value from inspect output |
| Must match a radio value (often starts with ) |
Always run
first to get exact field names.
Route C: REFORMAT
Parse an existing document → content.json → CREATE pipeline.
bash
bash scripts/make.sh reformat \
--input source.md --title "My Report" --type report --out output.pdf
Environment
bash
bash scripts/make.sh check # verify all deps
bash scripts/make.sh fix # auto-install missing deps
bash scripts/make.sh demo # build a sample PDF
| Tool | Used by | Install |
|---|
| Python 3.9+ | all scripts | system |
| | |
| fill, merge, reformat | |
| Node.js 18+ | | system |
| + Chromium | | npm install -g playwright && npx playwright install chromium
|