PowerPoint Slides Skill

March 14, 2026 · View on GitHub

An AI coding assistant skill for creating visually rich PowerPoint (.pptx) presentations from academic papers, research notes, or any structured content.

Built on PptxGenJS (Node.js) with native OMML math + LaTeX image rendering, Graphviz/Mermaid/TikZ diagram pipelines, and 5 built-in color themes.

Supports Claude Code natively. Adaptable to other AI coding assistants.

Features

ActionDescription
create [topic/paper]Full lifecycle: material analysis → interview → structure plan → formula/diagram prep → script generation → QA loop
compile [file.js]Execute PptxGenJS script to generate .pptx
review [file.pptx]Read-only proofreading report (grammar, typos, consistency, academic quality)
audit [file.pptx]Visual layout audit via PDF→image inspection
visual-check [file.pptx]PDF-based systematic visual review with parallel subagents
validate [file.pptx]Structural validation against skill constraints
extract-figures [pdf]Extract figures from paper PDFs for slide inclusion

Highlights

  • 5 color themes — Academic Light (default), Midnight, Ocean, Forest, Sandwich (dark title + light content)
  • OMML math (native) — display/inline formulas rendered as native PowerPoint math via pandoc, editable after generation
  • LaTeX image fallback — paragraph-mode formulas rendered at 600 DPI via XeLaTeX pipeline
  • 5-layer diagram pipeline — Graphviz (structural) → Mermaid (behavioral) → TikZ (math) → PptxGenJS shapes (native) → PDF extraction
  • Theme color injection — diagrams automatically use the slide theme's color palette
  • Quality scoring — automated rubric (start at 100, deduct per issue) with visual QA via parallel subagents
  • 29 hard rules — covering content density, layout diversity, typography, math rendering, boundary validation, overflow prevention
  • Mathematical slide patterns — 5 structural templates (Definition, Construction, Comparison, Theorem-Proof, Insight)
  • Content density guards — both upper bounds (7 bullets, 2 formulas, 5 symbols/slide) and lower bounds (every slide earns its place)
  • Visual-first planning — "10-second test" ensures diagrams/tables/charts where text alone fails
  • Pacing control — talk-type tips, timing allocation, max 3-4 consecutive theory slides before a visual break
  • 16:9 layout with precise positioning via layout constants (SW/SH/M/CW/CY/CH)
  • 17 helper functionssTitle, sectionSlide, addBullets, addCard, addTable, addNumCard, addFlow, addChart, addFormula, addDiagram, cols2, etc.
  • 9 layout code patterns — two-column, three-card, process flow, formula-centered, striped table, stat callout, text+diagram, full-diagram, chart-centered

Prerequisites

Required

# Node.js (PptxGenJS runtime)
brew install node

# pandoc (OMML formula conversion)
brew install pandoc

# TeX distribution (LaTeX image formulas + TikZ diagrams)
brew install --cask mactex

# Graphviz (diagram rendering)
brew install graphviz

# Python packages (image processing, OMML injection)
pip install Pillow lxml

# LibreOffice (PPT→PDF for visual QA)
brew install --cask libreoffice

# markitdown (text extraction for content verification)
pip install "markitdown[pptx]"
# Mermaid CLI (sequence/Gantt/pie/state/ER diagrams)
# Without it, Mermaid diagrams fall back to Graphviz or PptxGenJS shapes
npm install -g @mermaid-js/mermaid-cli

Optional

# Ghostscript (SVG formula output via dvisvgm)
brew install ghostscript

Install pdf-mcp (fork with file-based image extraction — avoids base64 token bloat) so the AI assistant can read papers and extract figures:

pip install git+https://github.com/Noi1r/pdf-mcp.git
claude mcp add pdf-mcp --scope user pdf-mcp

Installation

Clone the repo:

git clone https://github.com/Noi1r/powerpoint-skill.git

Claude Code

Copy the skill directory into your Claude Code skills folder:

mkdir -p ~/.claude/skills
cp -r powerpoint-skill/powerpoint-slides ~/.claude/skills/

Restart Claude Code. The skill triggers automatically when you mention powerpoint, pptx, PPT, slides, or related keywords.

Usage

Create slides from a paper:

Help me make a PPT based on this paper: /path/to/paper.pdf

Create slides with specific theme:

Make a presentation about X using the Midnight theme

Compile an existing script:

Compile generate_slides.js

Review a presentation:

Review my slides: output.pptx

Extract figures from a paper:

Extract figures from /path/to/paper.pdf pages 3-5

How It Works

Creation Pipeline

Phase 0: Paper Analysis (extract key concepts, prerequisites, notation)

Phase 1: Requirements Interview (duration, audience, scope, theme)

Phase 2: Structure Plan (GATE — user approval required)

Phase 3: Formula Preparation (LaTeX → OMML metadata + PNG@600DPI)

Phase 3.5: Diagram Preparation (DOT/Mermaid/TikZ → SVG/PNG)

Phase 4: Generate JS Script (PptxGenJS with helpers + self-review)

Phase 5: QA Loop (execute → PDF → visual inspection → score → fix)

Post-Creation Checklist (final gate)

Formula Pipeline

formulas.json → render_latex.py → formulas/manifest.json

                              image entries: PNG@600DPI
                              omml entries: metadata only

              generate_slides.js → .pptx (with {{MATH:id}} placeholders)

              inject_omml.py → .pptx (native OMML math injected)

Diagram Pipeline

diagrams.json → render_diagrams.py → diagrams/manifest.json

            Graphviz → SVG (structural diagrams)
            Mermaid  → SVG (behavioral diagrams)
            TikZ     → SVG/PNG (math diagrams)
            Extract  → PNG@300DPI (paper figures)

Color Themes

ThemeStyleBest For
Academic LightWhite/light gray, cleanResearch talks, seminars
MidnightDark throughoutTech, premium feel
OceanBlue tonesProfessional academic
ForestGreen natural tonesBiology, environmental
SandwichDark title/conclusion + light contentConference talks

File Structure

powerpoint-skill/
├── powerpoint-slides/
│   ├── SKILL.md                    # Main skill definition (29 rules, 9 actions)
│   ├── formula-rendering.md        # OMML + LaTeX image pipeline docs
│   ├── diagram-rendering.md        # 5-layer diagram pipeline docs
│   ├── pptxgenjs-reference.md      # PptxGenJS API + 9 layout code patterns
│   ├── references/
│   │   └── themes.md               # Theme JSON, script template, 17 helpers
│   └── scripts/
│       ├── render_latex.py          # Batch formula renderer (600 DPI + SVG)
│       ├── render_diagrams.py       # Batch diagram renderer (Graphviz/Mermaid/TikZ)
│       ├── inject_omml.py           # OMML post-processor (pandoc → OMML XML)
│       ├── check_overlaps.py         # Card-aware overlap & boundary checker
│       ├── soffice.py               # LibreOffice PPT→PDF wrapper
│       └── thumbnail.py             # Slide thumbnail grid generator
├── example/
│   ├── Bünz et al. - Linear-Time Permutation Check.pdf
│   └── linear_perm_slides/
│       ├── generate_slides.js       # Generated PptxGenJS script
│       ├── formulas.json            # 23 formulas (15 OMML + 8 image)
│       ├── diagrams.json            # 2 Graphviz diagrams
│       └── linear_perm_slides.pptx  # Output presentation (25 slides)
├── .gitignore
├── LICENSE
└── README.md

Known Limitation: LibreOffice & OMML

OMML (Office MathML) is PowerPoint's native math format. LibreOffice does not fully support OMML rendering — when converting .pptx to PDF via LibreOffice (soffice), OMML formulas may appear blank or distorted. This is a LibreOffice limitation, not a bug in the generated file. The formulas display correctly in Microsoft PowerPoint and WPS Office.

The QA visual-check step uses LibreOffice for PDF conversion, so OMML formulas are expected to look wrong in the QA preview. Only image-rendered formulas (LaTeX → PNG) are checked for visual clarity during QA.

Example

The example/ directory contains a complete real-world example:

Linear-Time Permutation Check (Bünz, Chen, DeStefano, NYU 2025)

  • 25-slide Academic Light theme presentation
  • 23 formulas (15 native OMML + 8 LaTeX image)
  • 2 Graphviz diagrams with theme color injection
  • Source paper PDF included

License

MIT