PPTX Skill
Quick Reference
| Task |
Guide |
| Read/analyze content |
python -m markitdown presentation.pptx |
| Edit or create from template |
Read editing.md |
| Create from scratch |
Read pptxgenjs.md |
Reading Content
python -m markitdown presentation.pptx # text extraction
python scripts/thumbnail.py presentation.pptx # visual overview
python scripts/office/unpack.py presentation.pptx unpacked/ # raw XML
Editing Workflow
Read editing.md for full details.
- Analyze template with
thumbnail.py
- Unpack → manipulate slides → edit content → clean → pack
Creating from Scratch
Read pptxgenjs.md for full details. Use when no template or reference presentation is available.
Design Principles
Before Starting
- Pick a bold, content-informed color palette: if swapping your colors into a different presentation would still "work," your choices aren't specific enough
- Dominance over equality: one color dominates (60–70%), 1–2 supporting tones, one sharp accent
- Dark/light contrast: dark backgrounds for title + conclusion slides, light for content ("sandwich" structure)
- Commit to a visual motif: pick one distinctive element and repeat it (rounded image frames, icons in colored circles, thick single-side borders)
Color Palettes
| Theme |
Primary |
Secondary |
Accent |
| Midnight Executive |
1E2761 (navy) |
CADCFC (ice blue) |
FFFFFF |
| Forest & Moss |
2C5F2D (forest) |
97BC62 (moss) |
F5F5F5 |
| Coral Energy |
F96167 (coral) |
F9E795 (gold) |
2F3C7E |
| Warm Terracotta |
B85042 (terracotta) |
E7E8D1 (sand) |
A7BEAE |
| Ocean Gradient |
065A82 (deep blue) |
1C7293 (teal) |
21295C |
| Charcoal Minimal |
36454F (charcoal) |
F2F2F2 (off-white) |
212121 |
| Teal Trust |
028090 (teal) |
00A896 (seafoam) |
02C39A |
| Berry & Cream |
6D2E46 (berry) |
A26769 (dusty rose) |
ECE2D0 |
| Sage Calm |
84B59F (sage) |
69A297 (eucalyptus) |
50808E |
| Cherry Bold |
990011 (cherry) |
FCF6F5 (off-white) |
2F3C7E |
Per-Slide Guidelines
Every slide needs a visual element — image, chart, icon, or shape.
Layout options:
- Two-column (text left, illustration right)
- Icon + text rows (icon in colored circle, bold header, description below)
- 2×2 or 2×3 grid with content blocks
- Half-bleed image with content overlay
Data display:
- Large stat callouts (60–72pt numbers with small labels)
- Comparison columns (before/after, pros/cons)
- Timeline or process flow (numbered steps, arrows)
Typography
Choose a header font with personality paired with a clean body font:
| Header |
Body |
| Georgia |
Calibri |
| Arial Black |
Arial |
| Cambria |
Calibri |
| Trebuchet MS |
Calibri |
| Palatino |
Garamond |
| Element |
Size |
| Slide title |
36–44pt bold |
| Section header |
20–24pt bold |
| Body text |
14–16pt |
| Captions |
10–12pt muted |
Spacing
- 0.5" minimum margins
- 0.3–0.5" between content blocks
- Leave breathing room
Common Mistakes to Avoid
- Repeating the same layout across slides — vary columns, cards, and callouts
- Centering body text — left-align paragraphs and lists; center only titles
- Insufficient size contrast — titles need 36pt+ to stand out from 14–16pt body
- Defaulting to blue — pick colors reflecting the specific topic
- Inconsistent spacing — choose 0.3" or 0.5" gaps and use consistently
- Styling one slide but leaving the rest plain — commit fully or keep it simple throughout
- Text-only slides — add images, icons, charts, or visual elements
- Missing text box padding — when aligning lines/shapes with text edges, set
margin: 0 or offset to account for padding
- Low-contrast elements — icons and text both need strong contrast against background
- Accent lines under titles — these read as AI-generated; use whitespace or background color instead
QA (Required)
Approach QA as a bug hunt. Your first render is almost never correct.
Content QA
python -m markitdown output.pptx
python -m markitdown output.pptx | grep -iE "xxxx|lorem|ipsum|this.*(page|slide).*layout"
Fix any leftover placeholder text before declaring success.
Visual QA
Use subagents for visual inspection — even for 2–3 slides. Fresh eyes catch what you miss after staring at code.
Convert slides to images (see below), then have the subagent inspect with this prompt:
Visually inspect these slides. Assume there are issues — find them.
Look for:
- Overlapping elements (text through shapes, stacked elements)
- Text overflow or cut off at edges/box boundaries
- Elements too close (< 0.3" gaps) or uneven spacing
- Insufficient margin from slide edges (< 0.5")
- Low-contrast text or icons
- Text boxes too narrow causing excessive wrapping
- Leftover placeholder content
For each slide, list issues found.
Verification Loop
- Generate slides → convert to images → inspect
- List issues found
- Fix issues
- Re-verify affected slides — one fix often creates another problem
- Repeat until a full pass reveals no new issues
Complete at least one fix-and-verify cycle before declaring success.
Converting to Images
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.
# Re-render specific slide after fix:
pdftoppm -jpeg -r 150 -f N -l N output.pdf slide-fixed
Dependencies
pip install "markitdown[pptx]" — text extraction
pip install Pillow — thumbnail grids
npm install -g pptxgenjs — creating from scratch
- LibreOffice (
soffice) — PDF conversion (auto-configured via scripts/office/soffice.py)
- Poppler (
pdftoppm) — PDF to images
1---2name: pptx-original3description: Use this skill any time a .pptx file is involved in any way — as input, output, or both. This includes: creating slide decks, pitch decks, or presentations; reading, parsing, or extracting text from any .pptx file (even if the extracted content will be used elsewhere, like in an email or summary); editing, modifying, or updating existing presentations; combining or splitting slide files; working with templates, layouts, speaker notes, or comments. Trigger whenever the user mentions "deck," "slides," "presentation," or references a .pptx filename, regardless of what they plan to do with the content afterward. If a .pptx file needs to be opened, created, or touched, use this skill.4license: Proprietary. LICENSE.txt has complete terms5---67# PPTX Skill89## Quick Reference1011| Task | Guide |12|------|-------|13| Read/analyze content | `python -m markitdown presentation.pptx` |14| Edit or create from template | Read [editing.md](editing.md) |15| Create from scratch | Read [pptxgenjs.md](pptxgenjs.md) |1617---1819## Reading Content2021```bash22python -m markitdown presentation.pptx # text extraction23python scripts/thumbnail.py presentation.pptx # visual overview24python scripts/office/unpack.py presentation.pptx unpacked/ # raw XML25```2627---2829## Editing Workflow3031Read [editing.md](editing.md) for full details.32331. Analyze template with `thumbnail.py`342. Unpack → manipulate slides → edit content → clean → pack3536---3738## Creating from Scratch3940Read [pptxgenjs.md](pptxgenjs.md) for full details. Use when no template or reference presentation is available.4142---4344## Design Principles4546### Before Starting4748- **Pick a bold, content-informed color palette**: if swapping your colors into a different presentation would still "work," your choices aren't specific enough49- **Dominance over equality**: one color dominates (60–70%), 1–2 supporting tones, one sharp accent50- **Dark/light contrast**: dark backgrounds for title + conclusion slides, light for content ("sandwich" structure)51- **Commit to a visual motif**: pick one distinctive element and repeat it (rounded image frames, icons in colored circles, thick single-side borders)5253### Color Palettes5455| Theme | Primary | Secondary | Accent |56|-------|---------|-----------|--------|57| Midnight Executive | `1E2761` (navy) | `CADCFC` (ice blue) | `FFFFFF` |58| Forest & Moss | `2C5F2D` (forest) | `97BC62` (moss) | `F5F5F5` |59| Coral Energy | `F96167` (coral) | `F9E795` (gold) | `2F3C7E` |60| Warm Terracotta | `B85042` (terracotta) | `E7E8D1` (sand) | `A7BEAE` |61| Ocean Gradient | `065A82` (deep blue) | `1C7293` (teal) | `21295C` |62| Charcoal Minimal | `36454F` (charcoal) | `F2F2F2` (off-white) | `212121` |63| Teal Trust | `028090` (teal) | `00A896` (seafoam) | `02C39A` |64| Berry & Cream | `6D2E46` (berry) | `A26769` (dusty rose) | `ECE2D0` |65| Sage Calm | `84B59F` (sage) | `69A297` (eucalyptus) | `50808E` |66| Cherry Bold | `990011` (cherry) | `FCF6F5` (off-white) | `2F3C7E` |6768### Per-Slide Guidelines6970**Every slide needs a visual element** — image, chart, icon, or shape.7172**Layout options:**73- Two-column (text left, illustration right)74- Icon + text rows (icon in colored circle, bold header, description below)75- 2×2 or 2×3 grid with content blocks76- Half-bleed image with content overlay7778**Data display:**79- Large stat callouts (60–72pt numbers with small labels)80- Comparison columns (before/after, pros/cons)81- Timeline or process flow (numbered steps, arrows)8283### Typography8485Choose a header font with personality paired with a clean body font:8687| Header | Body |88|--------|------|89| Georgia | Calibri |90| Arial Black | Arial |91| Cambria | Calibri |92| Trebuchet MS | Calibri |93| Palatino | Garamond |9495| Element | Size |96|---------|------|97| Slide title | 36–44pt bold |98| Section header | 20–24pt bold |99| Body text | 14–16pt |100| Captions | 10–12pt muted |101102### Spacing103104- 0.5" minimum margins105- 0.3–0.5" between content blocks106- Leave breathing room107108### Common Mistakes to Avoid109110- Repeating the same layout across slides — vary columns, cards, and callouts111- Centering body text — left-align paragraphs and lists; center only titles112- Insufficient size contrast — titles need 36pt+ to stand out from 14–16pt body113- Defaulting to blue — pick colors reflecting the specific topic114- Inconsistent spacing — choose 0.3" or 0.5" gaps and use consistently115- Styling one slide but leaving the rest plain — commit fully or keep it simple throughout116- Text-only slides — add images, icons, charts, or visual elements117- Missing text box padding — when aligning lines/shapes with text edges, set `margin: 0` or offset to account for padding118- Low-contrast elements — icons and text both need strong contrast against background119- Accent lines under titles — these read as AI-generated; use whitespace or background color instead120121---122123## QA (Required)124125Approach QA as a bug hunt. Your first render is almost never correct.126127### Content QA128129```bash130python -m markitdown output.pptx131python -m markitdown output.pptx | grep -iE "xxxx|lorem|ipsum|this.*(page|slide).*layout"132```133134Fix any leftover placeholder text before declaring success.135136### Visual QA137138Use subagents for visual inspection — even for 2–3 slides. Fresh eyes catch what you miss after staring at code.139140Convert slides to images (see below), then have the subagent inspect with this prompt:141142```143Visually inspect these slides. Assume there are issues — find them.144145Look for:146- Overlapping elements (text through shapes, stacked elements)147- Text overflow or cut off at edges/box boundaries148- Elements too close (< 0.3" gaps) or uneven spacing149- Insufficient margin from slide edges (< 0.5")150- Low-contrast text or icons151- Text boxes too narrow causing excessive wrapping152- Leftover placeholder content153154For each slide, list issues found.155```156157### Verification Loop1581591. Generate slides → convert to images → inspect1602. List issues found1613. Fix issues1624. Re-verify affected slides — one fix often creates another problem1635. Repeat until a full pass reveals no new issues164165Complete at least one fix-and-verify cycle before declaring success.166167---168169## Converting to Images170171```bash172python scripts/office/soffice.py --headless --convert-to pdf output.pptx173pdftoppm -jpeg -r 150 output.pdf slide174# Creates slide-01.jpg, slide-02.jpg, etc.175176# Re-render specific slide after fix:177pdftoppm -jpeg -r 150 -f N -l N output.pdf slide-fixed178```179180---181182## Dependencies183184- `pip install "markitdown[pptx]"` — text extraction185- `pip install Pillow` — thumbnail grids186- `npm install -g pptxgenjs` — creating from scratch187- LibreOffice (`soffice`) — PDF conversion (auto-configured via `scripts/office/soffice.py`)188- Poppler (`pdftoppm`) — PDF to images