Files

5.7 KiB

name, description, license, platforms
name description license platforms
powerpoint Create, read, edit .pptx decks, slides, notes, templates. Trigger on 'deck,' 'slides,' 'presentation,' or any .pptx filename. Adapted from Anthropic skills (commit 9d2f1ae). LICENSE.txt has terms.
linux
macos
windows

PowerPoint Skill

Quick Reference

Task Method
Read/extract text python -m markitdown presentation.pptx
Visual overview python scripts/thumbnail.py presentation.pptx
Edit existing template Read editing.md
Create from scratch Read pptxgenjs.md
Deliver to user MEDIA:/path/to/output.pptx in response

Reading Content

# Text extraction
python -m markitdown presentation.pptx

# Visual overview (grid of slide thumbnails)
python scripts/thumbnail.py presentation.pptx

# Raw XML for deep inspection
python scripts/office/unpack.py presentation.pptx unpacked/

Editing Workflow

Read editing.md for full details.

  1. Analyze template: python scripts/thumbnail.py template.pptx + python -m markitdown template.pptx
  2. Unpack: python scripts/office/unpack.py template.pptx unpacked/
  3. Structural changes (delete/duplicate/reorder slides in ppt/presentation.xml)
  4. Edit content in each slide{N}.xml — use patch tool (not sed)
  5. Clean: python scripts/clean.py unpacked/
  6. Pack: python scripts/office/pack.py unpacked/ output.pptx --original template.pptx
  7. QA: Convert to images, inspect visually

Creating from Scratch

Read pptxgenjs.md for full details.

Use pptxgenjs (Node.js) when no template exists. Key commands:

# Write a .js file, then:
node create_deck.js

Design Guidelines

Don't create boring slides. Every slide needs a visual element.

Color Palettes

Pick colors for the topic — don't default to blue.

Theme Primary Secondary Accent
Midnight Executive 1E2761 CADCFC FFFFFF
Forest & Moss 2C5F2D 97BC62 F5F5F5
Coral Energy F96167 F9E795 2F3C7E
Charcoal Minimal 36454F F2F2F2 212121
Teal Trust 028090 00A896 02C39A

Typography

Header Font Body Font
Georgia Calibri
Arial Black Arial
Cambria Calibri
Trebuchet MS Calibri
Element Size
Slide title 36-44pt bold
Section header 20-24pt bold
Body text 14-16pt
Captions 10-12pt muted

Layout Principles

  • Dominance: one color 60-70%, 1-2 supporting, one accent
  • Dark/light sandwich: dark title/conclusion, light content
  • Commit to ONE visual motif (rounded frames, icons in circles, thick borders)
  • 0.5" minimum margins, 0.3-0.5" between blocks
  • Vary layouts across slides — don't repeat

Avoid

  • Text-only slides (add images, icons, charts, shapes)
  • Centered body text (left-align; center only titles)
  • Accent lines under titles (AI-generated hallmark)
  • Same layout repeated
  • Low-contrast elements

QA (Required)

Assume there are problems. Your job is to find them.

Content QA

python -m markitdown output.pptx
# Check for leftover placeholders:
python -m markitdown output.pptx | grep -iE "xxxx|lorem|ipsum|placeholder"

Visual QA

Convert to images, then inspect with vision_analyze or browser_vision:

python scripts/office/soffice.py --headless --convert-to pdf output.pptx
pdftoppm -jpeg -r 150 output.pdf slide

Creates slide-01.jpg, slide-02.jpg, etc.

Use vision_analyze on each slide image — fresh eyes catch what you miss.

⚠️ Vision model requirement: vision_analyze needs a vision-capable model. If the active model is text-only (e.g. glm-5-2, gemma-4-31b-it), visual QA falls back to content QA only (markitdown text extraction). For full visual QA, switch to a vision model or use browser_vision as alternative.

Visual QA Checklist

  • Overlapping elements (text through shapes, stacked elements)
  • Text overflow or cutoff
  • Footer/source collisions
  • Elements too close (< 0.3" gaps)
  • Insufficient margins (< 0.5")
  • Misaligned columns
  • Low-contrast text or icons
  • Leftover placeholder content

Verification Loop

  1. Generate → Convert to images → Inspect
  2. List issues (look harder if none found)
  3. Fix → Re-verify affected slides
  4. Repeat until clean pass

Do not declare success without at least one fix-and-verify cycle.

Hermes Integration

  • Deliver files: Include MEDIA:/absolute/path/to/output.pptx in response
  • Visual QA: Use vision_analyze tool on slide JPEGs
  • Parallel editing: Use delegate_task for multi-slide XML editing
  • Patch tool: Use patch (not sed) for XML edits
  • Working dir: Scripts run from skill dir; use absolute paths for I/O

Dependencies

Dependency Install Purpose
markitdown[pptx] pip install "markitdown[pptx]" Text extraction
Pillow pip install Pillow Thumbnail grids
defusedxml pip install defusedxml Safe XML parsing
pptxgenjs npm install -g pptxgenjs Create from scratch
LibreOffice apt install libreoffice-impress PDF conversion
Poppler apt install poppler-utils PDF to images

Scripts

Script Purpose
scripts/thumbnail.py Grid of slide thumbnails for analysis
scripts/office/unpack.py Extract + pretty-print PPTX XML
scripts/office/pack.py Repack with validation
scripts/add_slide.py Duplicate or create slide from layout
scripts/clean.py Remove orphaned files
scripts/office/soffice.py LibreOffice wrapper for sandboxed envs
scripts/office/validate.py Validate OOXML structure