Creating Presentations That Don't Look AI-Generated: The PPTX Skill
- John Doe
- Agent Skills , Presentation
- 08 May, 2026
AI can write a presentation in seconds. The problem is it looks like it did — generic blue theme, bullet-point overload, accent lines under every title. The PPTX Agent Skill from Anthropic takes a different approach: treat slide generation like software engineering, with scripts, templates, and a proper QA loop.
What Makes It Different
Most AI-generated slides fail on three fronts: repetitive layouts, forgettable design, and broken output. The PPTX skill addresses each with a specific mechanism.
Two creation paths. Start from scratch with PptxGenJS when you have no template. Use the unpack-edit-pack workflow when you do. The skill doesn’t force one approach — it picks the right one based on what you give it.
Design system baked in. Instead of vague “make it look good” instructions, the skill ships explicit color palettes (10 curated themes), font pairings, spacing rules, and a list of layout types to vary across slides. This is the difference between “add some color” and “use Coral Energy palette — F96167 primary, F9E795 accent, 2F3C7E navy for headers.”
Verification-first QA. The skill mandates a fix-and-verify cycle: generate, convert to images, inspect with a subagent, fix issues, re-verify. It assumes the first render is wrong and treats QA as a bug hunt, not a confirmation step.
When to Use It
Pitch decks and client presentations. The template workflow shines here — use your existing branded template, unpack it, replace content at the XML level, and repack with validation. Layout fidelity is preserved because you’re editing the actual slide XML, not a PDF or image export.
Conference talks and internal training. The create-from-scratch path gives full control over every element — charts, tables, icons, custom backgrounds. The design rules in the skill prevent the “default PPT look” without requiring a designer.
Automated report generation. The script-based workflow (PptxGenJS + Node.js) means you can generate 50 standardized slides programmatically with consistent styling, data from APIs, and proper chart rendering.
Constraints and Prerequisites
Dependencies are non-trivial. You need Node.js (for pptxgenjs), Python (for markitdown and scripts), LibreOffice (for PDF conversion), and Poppler (for pdftoppm). The skill auto-configures LibreOffice for sandboxed environments via scripts/office/soffice.py, but the full toolchain is a significant install.
The template workflow is XML-level editing. You edit slide{N}.xml files directly. This gives precise control but means you’re reading PowerPoint’s XML schema. Subagents can handle the per-slide edits, but the unpack-edit-pack pipeline needs a human to set up.
PptxGenJS has sharp edges. Hex colors without #, opacity via properties not color strings, fresh shadow objects per shape call, no gradient fills — the skill documents these explicitly because they cause silent file corruption.
File format is strict. PPTX is a ZIP archive of XML files. The pack script validates and repairs, but certain operations (like reusing option objects across PptxGenJS calls) corrupt the output without obvious errors.
Installation
# Python dependencies (markitdown for text extraction, Pillow for thumbnails)
pip install "markitdown[pptx]" Pillow
# Node.js dependency (PptxGenJS for creating from scratch)
npm install -g pptxgenjs
# System tools (PDF conversion and image rendering)
# LibreOffice: https://www.libreoffice.org/download/
# Poppler: https://poppler.freedesktop.org/
On macOS: brew install libreoffice poppler
The skill scripts are included in the skill directory — no separate install needed for them.
Quick Start
Read and Analyze an Existing Presentation
# Extract all text
python -m markitdown input.pptx
# Generate visual thumbnail grid
python scripts/thumbnail.py input.pptx
Create a Presentation from Scratch
const pptxgen = require("pptxgenjs");
let pres = new pptxgen();
pres.layout = "LAYOUT_16x9";
pres.author = "Your Name";
pres.title = "My Presentation";
let slide = pres.addSlide();
slide.background = { color: "1E2761" }; // Navy background
slide.addText("Hello World", {
x: 1, y: 2, w: 8, h: 1.5,
fontSize: 44, fontFace: "Georgia",
color: "FFFFFF", bold: true, align: "center"
});
pres.writeFile({ fileName: "output.pptx" });
Edit from a Template
# Step 1: Analyze the template
python scripts/thumbnail.py template.pptx
python -m markitdown template.pptx
# Step 2: Unpack
python scripts/office/unpack.py template.pptx unpacked/
# Step 3: Edit slides (edit XML in unpacked/slides/slide1.xml, etc.)
# Step 4: Run QA
python -m markitdown output.pptx
# Convert to images and inspect visually
# Step 5: Pack
python scripts/office/pack.py unpacked/ output.pptx --original template.pptx
Iteration Workflow
The skill enforces a specific loop for getting slides right:
- Generate or edit the presentation
- Convert to images for visual inspection
python scripts/office/soffice.py --headless --convert-to pdf output.pptx pdftoppm -jpeg -r 150 output.pdf slide - Inspect with a subagent — use a subagent with fresh eyes to find overlapping elements, text overflow, alignment issues, low contrast
- Fix issues in the source code or XML
- Re-verify affected slides — one fix often creates another problem
- Repeat until a full pass reveals no new issues
The QA prompt for subagents is included in the skill’s SKILL.md — it’s a detailed checklist covering overlapping elements, text cutoff, spacing violations, and more.
Design Rules Worth Stealing
The skill ships with design guidelines that apply beyond PPTX:
Pick a color palette that reflects the topic, not your brand guidelines. The skill provides 10 palettes — Forest & Moss, Coral Energy, Warm Terracotta, Charcoal Minimal — and the instruction to choose one that fits the content. If your palette works for any topic, it’s too generic.
Vary layouts across slides. The single biggest mistake is repeating the same layout. Two-column, icon grid, full-bleed image, stat callout, quote slide — each slide should look structurally different from the one before it.
Never use accent lines under titles. The skill explicitly bans this as a hallmark of AI-generated slides. Use whitespace or background color instead.
Typography pairings matter. Georgia + Calibri, Arial Black + Arial, Cambria + Calibri — the skill provides 8 curated pairings with specific size rules (36-44pt titles, 14-16pt body, 10-12pt captions).
Pain Points
PptxGenJS object mutation. The library mutates option objects in-place. Reusing a shadow configuration across two shapes corrupts the second one. The fix is a factory function that returns a fresh object each time.
XML-level editing is verbose. A simple text replacement in the template workflow means navigating PowerPoint’s XML schema — <a:p>, <a:r>, <a:rPr>, <a:t> chains for every paragraph. Subagents help, but the complexity is real.
No gradient fills in PptxGenJS. If you need gradients, you must create a gradient image and use it as a background. Natively, the library only supports solid fills.
LibreOffice rendering differs from PowerPoint. The QA images come from LibreOffice, but the actual rendering in PowerPoint (especially on Windows) can differ. Text overflow and font fallback are the most common discrepancies.
Conclusion
The PPTX skill is an antidote to AI-generated slide fatigue. It replaces “generate some slides” with a structured engineering workflow — code, templates, design system, QA loop — that produces presentations that look intentional rather than procedurally generated.
If you’re generating more than one presentation a month, the toolchain investment pays for itself in the first deck.
Reference: anthropics/skills/skills/pptx on GitHub