Initial commit: Hermes Agent Skills collection
This commit is contained in:
@@ -0,0 +1,180 @@
|
||||
---
|
||||
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 |
|
||||
Reference in New Issue
Block a user