pptx
Use when creating, editing, or reading PowerPoint files.
Files1
View on GitHubSKILL.mdskills/pptx/SKILL.md
GitHubPPTX Creation, Editing, and Analysis
A .pptx file is a ZIP archive of XML files. Choose your approach by task:
| Task | Approach |
|---|---|
| Create a new deck | Write a pptxgenjs script |
| Edit an existing deck | unzip → edit XML → zip |
| Read content | markitdown deck.pptx |
Creating with pptxgenjs
pptxgenjs is preinstalled — write the script and require('pptxgenjs') directly.
Critical Gotchas
- Set
pres.layoutbefore adding slides. Default isLAYOUT_16x9= 10" × 5.625" - Hex colors: never
#, never 8 digits. Use"FF0000"format - pptxgenjs mutates option objects in place — build fresh objects per call
- Shadow
offsetmust be ≥ 0 — negative offsets corrupt the file letterSpacingis ignored; usecharSpacinginstead- Lists:
bullet: trueon each item,breakLine: trueon all but last - Speaker notes go in
slide.addNotes("...")(plain text) - After
writeFile(), run validation:python scripts/office/validate.py deck.pptx
const pptxgen = require('pptxgenjs');
const pres = new pptxgen();
pres.layout = 'LAYOUT_16x9';
const slide = pres.addSlide();
slide.addText('Hello World', {
x: 0.5, y: 0.5, w: 9, h: 1,
fontSize: 44, bold: true,
color: '141413',
fontFace: 'Poppins',
});
pres.writeFile({ fileName: 'output.pptx' });
Editing Existing Decks
# Unpack
python3 -c "import sys,zipfile; zipfile.ZipFile(sys.argv[1]).extractall('unpacked')" deck.pptx
# Duplicate a slide
python scripts/add_slide.py unpacked/ slide2.xml --after slide2.xml
# Reorder/delete slides = edit <p:sldIdLst> in ppt/presentation.xml
# Clean orphans after deletion
python scripts/clean.py unpacked/
# Repack
(cd unpacked && rm -f ../out.pptx && zip -Xr ../out.pptx .)
# Validate
python scripts/office/validate.py out.pptx --original deck.pptx
Design Ideas
- Pick a bold, content-informed color palette
- One color dominates (60-70%), with 1-2 supporting tones and one accent
- Dark/light contrast for sandwich structure
- Commit to a visual motif — repeat it across every slide
- Every slide needs a visual element (image, chart, icon, shape)
Typography Safe Fonts
Arial, Calibri, Cambria, Times New Roman, Courier New
| Element | Size |
|---|---|
| Slide title | 36-44pt bold |
| Section header | 20-24pt bold |
| Body text | 14-16pt |
| Captions | 10-12pt |
Common Pitfalls
- ❌ Hex colors with
#prefix — Corrupts the file - ❌ Sharing option objects across add calls* — pptxgenjs mutates in place
- ❌ Text-only slides — Every slide needs a visual element
- ❌ Accent lines under titles — Hallmark of AI-generated slides
- ❌ Aptos font — Not available in all environments
Verification Checklist
-
python scripts/office/validate.py output.pptxpasses - No placeholder text remains (grep for xxx, lorem, ipsum, TODO)
- Visual QA: no text overflow, no overlapping elements
- Charts render correctly with proper axis configuration
- Speaker notes are plain text (not text boxes)
- Colors use proper hex format (no
#, no 8-digit)