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. |
|
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.
- Analyze template:
python scripts/thumbnail.py template.pptx+python -m markitdown template.pptx - Unpack:
python scripts/office/unpack.py template.pptx unpacked/ - Structural changes (delete/duplicate/reorder slides in
ppt/presentation.xml) - Edit content in each
slide{N}.xml— usepatchtool (not sed) - Clean:
python scripts/clean.py unpacked/ - Pack:
python scripts/office/pack.py unpacked/ output.pptx --original template.pptx - 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_analyzeneeds 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 usebrowser_visionas 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
- Generate → Convert to images → Inspect
- List issues (look harder if none found)
- Fix → Re-verify affected slides
- 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.pptxin response - Visual QA: Use
vision_analyzetool on slide JPEGs - Parallel editing: Use
delegate_taskfor 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 |