# PPTX

> Use this skill any time a .pptx file is involved — as input, output, or both. This includes: creating slide decks, pitch decks, or presentations; reading, parsing, or extracting text from any .pptx file; 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.

- Skill: `jr2804/pptx` (Agent Skill, multi-file: 65 files)
- Install (CLI): `npx skillmds@latest add jr2804/pptx`
- Raw SKILL.md: https://api.skillmd.com/api/skills/jr2804/pptx/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Docs & Writing
- License: Proprietary. LICENSE.txt has complete terms
- Author: jr2804 (https://skillmd.com/u/jr2804)
- Updated: 2026-09-10
- Page: https://skillmd.com/skills/jr2804/pptx

---


# PPTX Skill

## Quick Reference

| Task | Guide |
|------|-------|
| Read/analyze content | `python -m markitdown presentation.pptx` |
| Edit or create from template | Read [references/editing.md](references/editing.md) and [references/ooxml.md](references/ooxml.md) |
| Create from scratch (HTML) | Read [references/html2pptx.md](references/html2pptx.md) |
| Create from scratch (PptxGenJS) | Read [references/pptxgenjs.md](references/pptxgenjs.md) |

______________________________________________________________________

## Reading Content

```bash
# Text extraction
python -m markitdown presentation.pptx

# Visual overview
python scripts/thumbnail.py presentation.pptx

# Raw XML
python scripts/unpack.py presentation.pptx unpacked/
```

______________________________________________________________________

## Editing Workflow

**Read [references/editing.md](references/editing.md) for OOXML editing details.**

1. Analyze template with `thumbnail.py`
2. Unpack → manipulate slides → edit content → clean → pack

______________________________________________________________________

## Creating from Scratch

Two approaches:

- **HTML→PPTX** (via html2pptx.js): Read [references/html2pptx.md](references/html2pptx.md)
- **PptxGenJS** (JavaScript library): Read [references/pptxgenjs.md](references/pptxgenjs.md)

______________________________________________________________________

## Creating from a Template

Detailed workflow using `inventory.py`, `rearrange.py`, and `replace.py`:

1. **Extract template text AND create visual thumbnail grid**:

   ```bash
   python -m markitdown template.pptx > template-content.md
   python scripts/thumbnail.py template.pptx
   ```

2. **Analyze template and save inventory**:

   ```bash
   python scripts/inventory.py working.pptx text-inventory.json
   ```

3. **Duplicate, reorder, and delete slides**:

   ```bash
   python scripts/rearrange.py template.pptx working.pptx 0,34,34,50,52
   ```

4. **Apply text replacements**:

   ```bash
   python scripts/replace.py working.pptx replacement-text.json output.pptx
   ```

______________________________________________________________________

## Design Ideas

**Don't create boring slides.** Plain bullets on a white background won't impress anyone. Consider ideas from this list for each slide.

### Before Starting

- **Pick a bold, content-informed color palette**: The palette should feel designed for THIS topic. If swapping your colors into a completely different presentation would still "work," you haven't made specific enough choices.
- **Dominance over equality**: One color should dominate (60-70% visual weight), with 1-2 supporting tones and 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` (white) |
| **Forest & Moss** | `2C5F2D` (forest) | `97BC62` (moss) | `F5F5F5` (cream) |
| **Coral Energy** | `F96167` (coral) | `F9E795` (gold) | `2F3C7E` (navy) |
| **Warm Terracotta** | `B85042` (terracotta) | `E7E8D1` (sand) | `A7BEAE` (sage) |
| **Ocean Gradient** | `065A82` (deep blue) | `1C7293` (teal) | `21295C` (midnight) |
| **Charcoal Minimal** | `36454F` (charcoal) | `F2F2F2` (off-white) | `212121` (black) |
| **Teal Trust** | `028090` (teal) | `00A896` (seafoam) | `02C39A` (mint) |
| **Berry & Cream** | `6D2E46` (berry) | `A26769` (dusty rose) | `ECE2D0` (cream) |

### Typography

| Header Font | Body Font |
|-------------|-----------|
| Georgia | Calibri |
| Arial Black | Arial |
| Trebuchet MS | Calibri |
| Impact | Arial |

| Element | Size |
|---------|------|
| Slide title | 36-44pt bold |
| Section header | 20-24pt bold |
| Body text | 14-16pt |
| Captions | 10-12pt muted |

### Avoid

- **Don't repeat the same layout** — vary columns, cards, and callouts across slides
- **Don't center body text** — left-align paragraphs and lists; center only titles
- **Don't default to blue** — pick colors that reflect the specific topic
- **Don't create text-only slides** — add images, icons, charts, or visual elements
- **NEVER use accent lines under titles** — hallmark of AI-generated slides; use whitespace or background color instead

______________________________________________________________________

## QA (Required)

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

### Content QA

```bash
python -m markitdown output.pptx
```

Check for missing content, typos, wrong order. When using templates, check for leftover placeholder text:

```bash
python -m markitdown output.pptx | grep -iE "xxxx|lorem|ipsum|this.*(page|slide).*layout"
```

### Visual QA

Convert slides to images and inspect for overlapping elements, text overflow, contrast issues, and positioning problems. See [Converting to Images](#converting-to-images).

### Verification Loop

1. Generate slides → Convert to images → Inspect
2. **List issues found** (if none found, look again more critically)
3. Fix issues
4. **Re-verify affected slides** — one fix often creates another problem
5. Repeat until a full pass reveals no new issues

**Do not declare success until you've completed at least one fix-and-verify cycle.**

______________________________________________________________________

## Scripts

| Script | Purpose |
|--------|---------|
| `unpack.py` | Extract and pretty-print PPTX |
| `pack.py` | Repack with validation |
| `validate.py` | Validate PPTX XML against schemas |
| `add_slide.py` | Duplicate slide or create from layout |
| `clean.py` | Remove orphaned files |
| `thumbnail.py` | Create visual grid of slides |
| `inventory.py` | Extract text inventory from presentation |
| `rearrange.py` | Duplicate, reorder, and delete slides |
| `replace.py` | Apply text replacements to shapes |
| `html2pptx.js` | Convert HTML slides to PowerPoint |

______________________________________________________________________

## Converting to Images

Convert presentations to individual slide images for visual inspection:

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

This creates `slide-01.jpg`, `slide-02.jpg`, etc.

To re-render specific slides after fixes:

```bash
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 (PptxGenJS approach)
- `npm install -g playwright` - HTML rendering (html2pptx approach)
- LibreOffice (`soffice`) - PDF conversion (via `scripts/soffice.py`)
- Poppler (`pdftoppm`) - PDF to images
- `pip install defusedxml` - secure XML parsing

