pptx-generator · minimax-ai — Claude Code skill: what it does, how to install
A skill to read, edit, and build PowerPoint decks from scratch using PptxGenJS and XML workflows. Useful when generating presentations from code or extracting slide text.
npx skills add MiniMax-AI/skills --skill pptx-generator -a claude-codeWhat pptx-generator does
This skill covers three presentation workflows. It parses existing decks using the Python utility markitdown, modifies template-based presentations by manipulating XML files, and generates decks from scratch using the pptxgenjs Node.js library. For fresh presentations, it divides slides into separate JavaScript modules inside a slides/ directory.
Presentations follow a strict design contract. Slides default to a 10" x 5.625" 16:9 layout with Arial typography. Hex colors must omit the # symbol. The theme object contract strictly requires five keys: primary, secondary, accent, light, and bg.
Running this workflow requires both Python and Node.js environments. The build process will fail if a slide module uses asynchronous functions or invalid theme keys like background or text. The compile.js runner expects a strictly synchronous createSlide export in each slide file.
What it helps with
- generate full PowerPoint decks from modular JavaScript files using PptxGenJS
- extract plain text from existing PPTX presentations using markitdown
- modify existing slide decks through XML manipulation
- enforce consistent 16:9 layouts and five-color palette themes across all slides
Example prompts for the agent
- Generate a 10-slide deck about annual performance using PptxGenJS and save it to slides/output/presentation.pptx
- Extract text from quarterly-review.pptx using markitdown and summarize the takeaways
- Set up slide modules in the slides/ directory with primary color 22223b and background f2e9e4
How to install pptx-generator
1Skills CLI (Vercel)
npx skills add MiniMax-AI/skills --skill pptx-generator -a claude-code2Manually: put the files in place
~/.claude/skills/pptx-generator/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/pptx-generator/
1Skills CLI (Vercel)
npx skills add MiniMax-AI/skills --skill pptx-generator -a codex2Manually: put the files in place
.agents/skills/pptx-generator/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add MiniMax-AI/skills --skill pptx-generator -a cursor2Manually: put the files in place
.cursor/skills/pptx-generator/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install MiniMax-AI/skills pptx-generator2Manually: put the files in place
.github/skills/pptx-generator/SKILL.md1Skills CLI (Vercel)
npx skills add MiniMax-AI/skills --skill pptx-generator -a gemini-cli2Platform CLI
gemini skills install https://github.com/MiniMax-AI/skills --path skills/pptx-generatorManually: put the files in place
.devin/skills/pptx-generator/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add MiniMax-AI/skills --skill pptx-generator -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
From the same set17
The whole set →Other versions of pptx-generator
Similar
Questions about pptx-generator
How to install pptx-generator in Claude Code?
Run npx skills add MiniMax-AI/skills --skill pptx-generator -a claude-code. The skill file will be placed in ~/.claude/skills/pptx-generator/SKILL.md.
What does pptx-generator do?
It handles PowerPoint automation. The skill extracts slide text via markitdown, adjusts deck templates using XML manipulation, and compiles new 16:9 slide decks with PptxGenJS.
What dependencies are required to create presentations?
Reading presentations requires Python with the markitdown package. Building presentations from scratch requires Node.js with pptxgenjs to execute compile.js.
Source text
SKILL.md · MIT
---
name: pptx-generator
description: "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."
license: MIT
metadata:
version: "1.0"
category: productivity
sources:
- https://gitbrent.github.io/PptxGenJS/
- https://github.com/microsoft/markitdown
---
# PPTX Generator & Editor
## Overview
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.
## Quick Reference
| Task | Approach |
|------|----------|
| Read/analyze content | `python -m markitdown presentation.pptx` |
| Edit or create from template | See [Editing Presentations](references/editing.md) |
| Create from scratch | See [Creating from Scratch](#creating-from-scratch-workflow) 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 |
## Reference Files
| File | Contents |
|------|----------|
| [slide-types.md](references/slide-types.md) | 5 slide page types (Cover, TOC, Section Divider, Content, Summary) + additional layout patterns |
| [design-system.md](references/design-system.md) | Color palettes, font reference, style recipes (Sharp/Soft/Rounded/Pill), typography & spacing |
| [editing.md](references/editing.md) | Template-based editing workflow, XML manipulation, formatting rules, common pitfalls |
| [pitfalls.md](references/pitfalls.md) | QA process, common mistakes, critical PptxGenJS pitfalls |
| [pptxgenjs.md](references/pptxgenjs.md) | Complete PptxGenJS API reference |
---
## Reading Content
```bash
# Text extraction
python -m markitdown presentation.pptx
```
---
## Creating from Scratch — Workflow
**Use when no template or reference presentation is available.**
### Step 1: Research & Requirements
Search to understand user requirements — topic, audience, purpose, tone, content depth.
### Step 2: Select Color Palette & Fonts
Use the [Color Palette Reference](references/design-system.md#color-palette-reference) to select a palette matching the topic and audience. Use the [Font Reference](references/design-system.md#font-reference) to choose a font pairing.
### Step 3: Select Design Style
Use the [Style Recipes](references/design-system.md#style-recipes) to choose a visual style (Sharp, Soft, Rounded, or Pill) matching the presentation tone.
### Step 4: Plan Slide Outline
Classify **every slide** as exactly one of the [5 page types](references/slide-types.md). Plan the content and layout for each slide. Ensure visual variety — do NOT repeat the same layout across slides.
### Step 5: Generate Slide JS Files
Create one JS file per slide in `slides/` directory. Each file must export a synchronous `createSlide(pres, theme)` function. Follow the [Slide Output Format](#slide-output-format) and the type-specific guidance in [slide-types.md](references/slide-types.md). Generate up to 5 slides concurrently using subagents if available.
**Tell each subagent:**
1. File naming: `slides/slide-01.js`, `slides/slide-02.js`, etc.
2. Images go in: `slides/imgs/`
3. Final PPTX goes in: `slides/output/`
4. Dimensions: 10" x 5.625" (LAYOUT_16x9)
5. Fonts: Chinese = Microsoft YaHei, English = Arial (or approved alternative)
6. Colors: 6-char hex without # (e.g. `"FF0000"`)
7. Must use the theme object contract (see [Theme Object Contract](#theme-object-contract))
8. Must follow the [PptxGenJS API reference](references/pptxgenjs.md)
### Step 6: Compile into Final PPTX
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`
### Step 7: QA (Required)
See [QA Process](references/pitfalls.md#qa-process).
### Output Structure
```
slides/
├── slide-01.js # Slide modules
├── slide-02.js
├── ...
├── imgs/ # Images used in slides
└── output/ # Final artifacts
└── presentation.pptx
```
---
## Slide Output Format
Each 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 };
```
---
## Theme Object Contract (MANDATORY)
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`.
---
## Page Number Badge (REQUIRED)
All slides **except Cover Page** MUST include a page number badge in the bottom-right corner.
- **Position**: x: 9.3", y: 5.1"
- Show current number only (e.g. `3` or `03`), NOT "3/12"
- Use palette colors, keep subtle
### Circle Badge (Default)
```javascript
slide.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"
});
```
### Pill Badge
```javascript
slide.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"
});
```
---
## Dependencies
- `pip install "markitdown[pptx]"` — text extraction
- `npm install -g pptxgenjs` — creating from scratch
- `npm install -g react-icons react react-dom sharp` — icons (optional)
© MiniMax-AI · MIT · MiniMax-AI/skills