Skip to content

rl0ve/deck-builder

v1.0.1MIT

Build and quality-check PowerPoint decks on top of any corporate template, with the brand supplied as configuration rather than baked into the skill.

Deck Builder

Build PowerPoint decks with python-pptx, then verify them by rendering slides and running automated checks rather than by re-reading the build script.

The value here is the checking. A build script that reads correctly produces broken decks all the time: text that overflows, a panel covering the words underneath it, a package PowerPoint refuses to open, a condensed deck missing the one statistic that mattered. Eleven of those failures are detected automatically, with an explanation of each in references/failure-catalog.md.

The brand is configuration, not code. This plugin ships no palette, no logo, and no template; a generator reads your own corporate template and writes the pack the checks use.

Install

# Claude Code
claude plugin marketplace add rl0ve/agent-skills
claude plugin install deck-builder@rl0ve-agent-skills

# Codex
codex plugin marketplace add rl0ve/agent-skills
codex plugin add deck-builder@rl0ve-agent-skills

Requires python-pptx and lxml. Optional: pywin32 (Windows screenshots), pypdf (macOS screenshots).

Start here

python3 scripts/make_brand_pack.py corporate.pptx --list-layouts
python3 scripts/make_brand_pack.py corporate.pptx \
  --grid-from "NAME OF A PLAIN ONE-COLUMN CONTENT LAYOUT" --out brand/brand.json

That reports every slide master and layout, the slide size, the theme palette and fonts, which layouts carry a decorated background, and a measured alignment grid and logo zone. Run against a real corporate template it reproduced, to the thousandth of an inch, a set of constants that had until then been maintained by hand, and found several times as many decorated layouts as the hand-written list knew about.

The problems it actually solves

Half your template is invisible. prs.slide_layouts returns only the first slide master. Templates routinely put dark-mode and alternate layouts on a second one, so any code that iterates prs.slide_layouts raises Layout not found on layouts that are plainly there. The skill carries the multi-master lookup.

Setting a background deletes the design. Decorated layouts carry a full-bleed picture. Override the slide background and the decoration silently disappears. The brand pack lists exactly which layouts this applies to, so you never have to guess.

The repair dialog. python-pptx cannot always drop a slide part from the package zip, so a stale slide1.xml and your new one can both end up in the archive, and PowerPoint reports a corrupt file on every open. dedupe_pptx_zip.py --check tells you in one second whether your deck has it. (It depends on your python-pptx version and how the stub slide was removed. On 1.0.2 with drop_rel it does not happen, so the tool checks rather than assuming.)

macOS screenshot export lies. AppleScript save as picture reports success and writes nothing. The skill documents the PDF-split-and-convert pipeline that works, so nobody spends an afternoon debugging a silent no-op.

Condensing a deck drops content. Rebuilding for a new structure silently loses whatever was not explicitly coded into the new script: stats, proof points, framing language. Step 11 is a slide-by-slide content audit against the original.

Every slide looks the same. references/layout-repertoire.md has eleven patterns, a hard rule of at least four per deck, and the graphic elements that break up text without becoming decoration.

What is in it

check_deck.pyThe check suite. Eleven checks, severity-ranked, --json, useful exit codes
diff_deck_content.pyWhat a rebuild dropped: numbers, names, and whole sentences
dedupe_pptx_zip.pyDetect and fix the duplicate-entry repair dialog
make_brand_pack.pyRead any corporate template, emit brand.json
inspect_template_layouts.pyExact layout names, placeholder types, and bounds
start_template_deck.pyA deterministic template-backed starting deck
validate_template_deck.pyLayout discipline against the brand template
report_pptx_weight.pyWhich package parts are making the file large
ooxml_effects.pyGradients, shadows, glows, rounded corners via lxml
export_powerpoint_screenshots_{mac,win32}.pyGround-truth renders from real PowerPoint
references/failure-catalog.mdEvery failure: how it looks, why, how to detect, what to do
references/layout-repertoire.mdEleven layout patterns, and alignment discipline
references/brand-pack.mdThe brand.json schema and its limits
references/slide-spec-format.mdPlan the deck before placing objects
references/deck-archetypes.mdPick a repeatable deck shape
references/visual-complexity-modes.mdPick a level of visual ambition

License

MIT.