181 lines
5.7 KiB
Markdown
181 lines
5.7 KiB
Markdown
---
|
|
name: powerpoint
|
|
description: "Create, read, edit .pptx decks, slides, notes, templates. Trigger on 'deck,' 'slides,' 'presentation,' or any .pptx filename."
|
|
license: Adapted from Anthropic skills (commit 9d2f1ae). LICENSE.txt has terms.
|
|
platforms: [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](editing.md) |
|
|
| Create from scratch | Read [pptxgenjs.md](pptxgenjs.md) |
|
|
| Deliver to user | `MEDIA:/path/to/output.pptx` in response |
|
|
|
|
## Reading Content
|
|
|
|
```bash
|
|
# 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](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](pptxgenjs.md) for full details.**
|
|
|
|
Use pptxgenjs (Node.js) when no template exists. Key commands:
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
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`:
|
|
|
|
```bash
|
|
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 |
|