Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Generate, edit, and read PowerPoint presentations. Create from scratch with PptxGenJS (cover, TOC, content, section divider, summary slides), edit existing PPTX via XML workflows, or extract text with markitdown. Triggers: PPT, PPTX, PowerPoint, presentation, slide, deck, slides.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-05 | ✗→✓ | ▲ Improved | 110% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 19% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 59% | 0% |
| case-08 | ✗→✓ | ▲ Improved | -5% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 29% | 0% |
This skill handles all PowerPoint tasks: reading/analyzing existing presentations, editing template-based decks via XML manipulation, and creating presentations from scratch using PptxGenJS. It includes a complete design system (color palettes, fonts, style recipes) and detailed guidance for every slide type.
| Task | Approach | |------|----------| | Read/analyze content | python -m markitdown presentation.pptx | | Edit or create from template | See Editing Presentations | | Create from scratch | See Creating from Scratch below |
| Item | Value | |------|-------| | Dimensions | 10" x 5.625" (LAYOUT_16x9) | | Colors | 6-char hex without # (e.g., "FF0000") | | English font | Arial (default), or approved alternatives | | Chinese font | Microsoft YaHei | | Page badge position | x: 9.3", y: 5.1" | | Theme keys | primary, secondary, accent, light, bg | | Shapes | RECTANGLE, OVAL, LINE, ROUNDED_RECTANGLE | | Charts | BAR, LINE, PIE, DOUGHNUT, SCATTER, BUBBLE, RADAR |
| File | Contents | |------|----------| | slide-types.md | 5 slide page types (Cover, TOC, Section Divider, Content, Summary) + additional layout patterns | | design-system.md | Color palettes, font reference, style recipes (Sharp/Soft/Rounded/Pill), typography & spacing | | editing.md | Template-based editing workflow, XML manipulation, formatting rules, common pitfalls | | pitfalls.md | QA process, common mistakes, critical PptxGenJS pitfalls | | pptxgenjs.md | Complete PptxGenJS API reference |
bash# Text extraction python -m markitdown presentation.pptx
Use when no template or reference presentation is available.
Search to understand user requirements — topic, audience, purpose, tone, content depth.
Use the Color Palette Reference to select a palette matching the topic and audience. Use the Font Reference to choose a font pairing.
Use the Style Recipes to choose a visual style (Sharp, Soft, Rounded, or Pill) matching the presentation tone.
Classify every slide as exactly one of the 5 page types. Plan the content and layout for each slide. Ensure visual variety — do NOT repeat the same layout across slides.
Create one JS file per slide in slides/ directory. Each file must export a synchronous createSlide(pres, theme) function. Follow the Slide Output Format and the type-specific guidance in slide-types.md. Generate up to 5 slides concurrently using subagents if available.
Tell each subagent:
slides/slide-01.js, slides/slide-02.js, etc.slides/imgs/slides/output/"FF0000")Create slides/compile.js to combine all slide modules:
javascript// slides/compile.js const pptxgen = require('pptxgenjs'); const pres = new pptxgen(); pres.layout = 'LAYOUT_16x9'; const theme = { primary: "22223b", // dark color for backgrounds/text secondary: "4a4e69", // secondary accent accent: "9a8c98", // highlight color light: "c9ada7", // light accent bg: "f2e9e4" // background color }; for (let i = 1; i <= 12; i++) { // adjust count as needed const num = String(i).padStart(2, '0'); const slideModule = require(`./slide-${num}.js`); slideModule.createSlide(pres, theme); } pres.writeFile({ fileName: './output/presentation.pptx' });
Run with: cd slides && node compile.js
See QA Process.
slides/
├── slide-01.js # Slide modules
├── slide-02.js
├── ...
├── imgs/ # Images used in slides
└── output/ # Final artifacts
└── presentation.pptxEach slide is a complete, runnable JS file:
javascript// slide-01.js const pptxgen = require("pptxgenjs"); const slideConfig = { type: 'cover', index: 1, title: 'Presentation Title' }; // MUST be synchronous (not async) function createSlide(pres, theme) { const slide = pres.addSlide(); slide.background = { color: theme.bg }; slide.addText(slideConfig.title, { x: 0.5, y: 2, w: 9, h: 1.2, fontSize: 48, fontFace: "Arial", color: theme.primary, bold: true, align: "center" }); return slide; } // Standalone preview - use slide-specific filename if (require.main === module) { const pres = new pptxgen(); pres.layout = 'LAYOUT_16x9'; const theme = { primary: "22223b", secondary: "4a4e69", accent: "9a8c98", light: "c9ada7", bg: "f2e9e4" }; createSlide(pres, theme); pres.writeFile({ fileName: "slide-01-preview.pptx" }); } module.exports = { createSlide, slideConfig };
The compile script passes a theme object with these exact keys:
| Key | Purpose | Example | |-----|---------|---------| | theme.primary | Darkest color, titles | "22223b" | | theme.secondary | Dark accent, body text | "4a4e69" | | theme.accent | Mid-tone accent | "9a8c98" | | theme.light | Light accent | "c9ada7" | | theme.bg | Background color | "f2e9e4" |
NEVER use other key names like background, text, muted, darkest, lightest.
All slides except Cover Page MUST include a page number badge in the bottom-right corner.
3 or 03), NOT "3/12"javascriptslide.addShape(pres.shapes.OVAL, { x: 9.3, y: 5.1, w: 0.4, h: 0.4, fill: { color: theme.accent } }); slide.addText("3", { x: 9.3, y: 5.1, w: 0.4, h: 0.4, fontSize: 12, fontFace: "Arial", color: "FFFFFF", bold: true, align: "center", valign: "middle" });
javascriptslide.addShape(pres.shapes.ROUNDED_RECTANGLE, { x: 9.1, y: 5.15, w: 0.6, h: 0.35, fill: { color: theme.accent }, rectRadius: 0.15 }); slide.addText("03", { x: 9.1, y: 5.15, w: 0.6, h: 0.35, fontSize: 11, fontFace: "Arial", color: "FFFFFF", bold: true, align: "center", valign: "middle" });
pip install "markitdown[pptx]" — text extractionnpm install -g pptxgenjs — creating from scratchnpm install -g react-icons react react-dom sharp — icons (optional)Other measured skills in the registry, with their headline benchmark lift.