mcpField
P
pptx-author

pptx-author

github.com/tristan-mcinnisDocuments4088 installsUpdated 9w ago
Repository

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

  1. 01Write slides in Markdown
  2. 02Specify template layout hints
  3. 03Structure text, images, and tables by layout
  4. 04Validate hints and content with scripts

Use cases

  1. 01Author slides for a presentation template
  2. 02Match slide content to layouts
  3. 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-author

After installing, type/pptx-authorin Claude Code to confirm it loaded.

Bundled filesscripts/lint_hints.py

Details

From the project README

Step 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

  1. Slides are separated by ---. Each begins with a title and (optionally) a hint.
  2. # Slide N: Title or ## Title — the title. Make it a claim, not a label ("Three briefs, one foundation" — not "Overview").
  3. [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.
  4. 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 withWhy
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)

MarkerResultMarkerResult
{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.

Comments

Markdown supported