About pptx-author
pptx-author is a skill for authoring presentation slides in Markdown and mapping them to template layouts. It produces a slides.md file for a later rendering step and supports validation before rendering.
Key features
- 01Write slides in Markdown
- 02Specify template layout hints
- 03Structure text, images, and tables by layout
- 04Validate hints and content with scripts
Use cases
- 01Author slides for a presentation template
- 02Match slide content to layouts
- 03Check layout hints before rendering
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ tristan-mcinnis/ pptx-from-layouts-skill --skill pptx-authorAfter installing, type/pptx-authorin Claude Code to confirm it loaded.
Bundled filesscripts/lint_hints.py
Details
From the project READMEStep 2 — Author (pptx-author)
Write the deck as markdown where every slide names the exact template layout it
should land on, using [HINT: layout_name]. This is the bridge between "I know
my template's layouts" (Step 1) and "render the deck" (Step 3).
STEP 1 — PROFILE STEP 2 — AUTHOR STEP 3 — RENDER
pptx-profile pptx-author pptx-from-layouts
─────────────── ─────────────── ─────────────────
your-template.pptx slides.md (+ [HINT:]) slides.md + config
│ │ │
▼ ▼ ▼
catalog.py ──catalog.md──▶ write & lint ──slides──▶ generate.py ─▶ deck.pptx
└────────────────── config.json ───────────────────▲ (validated)
You are here: Step 2. You need the layout-catalog.md from Step 1 (or use the
bundled Inner Chapter layouts). Output is a slides.md the renderer consumes.
The contract
- Slides are separated by
---. Each begins with a title and (optionally) a hint. # Slide N: Titleor## Title— the title. Make it a claim, not a label ("Three briefs, one foundation" — not "Overview").[HINT: layout_name]— names a real layout from the Step-1 catalog. Copy the value verbatim from the catalog's Hint column. The engine fills that layout's actual placeholders.- Content matches the layout:
column-*/grid-*layouts →[Column N: Header]blocks (or**Header**- body lines).
- image-bearing layouts →
[Image: path/to.jpg]. - tabular data → a markdown table.
- everything else →
-bullets (the last resort, not the reflex).
Hints vs. Visual types — when to use which
| You have… | Author with | Why |
|---|---|---|
| A profiled template + its catalog | [HINT: real-layout-name] | Precise: targets the exact layout. The "creating" path. |
| No catalog / unsure of layouts | **Visual: type** (e.g. process-4-phase) | Semantic: the engine auto-picks a layout for that intent. |
[HINT:] always wins if both are present. A hint that doesn't match the template
is ignored with a warning and falls back to auto-detection — so lint first.
Lint before you render
python scripts/lint_hints.py slides.md --config your-template-config.json
# or, against the Step-1 markdown catalog:
python scripts/lint_hints.py slides.md --catalog your-template-layout-catalog.md
# no flag → validates against the bundled Inner Chapter template
The linter flags, per slide: P0 unknown hint (with a "did you mean…?"
suggestion — this will mis-render), P1 missing title, P2 bullets mixed
with a table. Exit code 2 means fix-and-re-run.
Example
# Slide 1: Personas that respond like real humans
[HINT: title-cover]
### Inner Chapter
---
# Slide 2: Three outcomes the research must achieve
[HINT: column-3-centered-a]
[Column 1: Level-set the teams]
- Confirm what's known about each athlete
[Column 2: Capture room content]
- In-home video, voice clips, phone recordings
[Column 3: Deliver for leadership]
- A visceral understanding for senior stakeholders
---
# Slide 3: Why personas are the hard part
[HINT: content-image-right-a]
[Image: assets/persona-diagram.png]
- No world model — pattern-matching only
- Bias toward agreeableness — more positive than real consumers
Typography markers (inline)
| Marker | Result | Marker | Result | |
|---|---|---|---|---|
{bold}text{/bold} | Bold | {bullet:-} | Dash bullet | |
{italic}text{/italic} | Italic | {bullet:1} | Numbered | |
{blue}text{/blue} | Brand color | {level:N} | Indent level |
Then what
Hand slides.md (plus the template + config) to Step 3 — pptx-from-layouts:
python ../pptx-from-layouts/scripts/generate.py slides.md -o deck.pptx \
--template your-template.pptx --config your-template-config.json --validate
For turning raw notes/source docs into a hint-tagged slides.md automatically,
the pptx-outline-architect subagent does the heavy lifting.