Help us improve
Share bugs, ideas, or general feedback.
From slides-ai-plugin
Generates editable PowerPoint presentations via PptxGenJS with precise layout, text measurement, and overlap validation. Includes theme presets and component builders.
npx claudepluginhub proyecto26/slides-ai-plugin --plugin slides-ai-pluginHow this skill is triggered — by the user, by Claude, or both
Slash command
/slides-ai-plugin:pptx-slidesThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Generate professional, editable PowerPoint presentations using PptxGenJS (Node.js). Produces OOXML-compliant `.pptx` files with precise layout, text measurement, and overlap validation.
Reads, extracts text from, edits, and generates .pptx presentations using Python scripts and pptxgenjs. Handles templates, thumbnails, XML unpacking.
Generate, edit, and read PowerPoint presentations: create with PptxGenJS (cover/TOC/content/summary slides), edit via XML, extract text with markitdown.
Creates, edits, extracts content from .pptx files using Python scripts for text/thumbnails/XML and pptxgenjs for generation from scratch or templates.
Share bugs, ideas, or general feedback.
Generate professional, editable PowerPoint presentations using PptxGenJS (Node.js). Produces OOXML-compliant .pptx files with precise layout, text measurement, and overlap validation.
Every PPTX generation script imports the bundled TypeScript helper modules via bun:
import pptxgen from 'pptxgenjs';
import * as h from '${CLAUDE_PLUGIN_ROOT}/skills/pptx-slides/scripts/main.ts';
const pptx = new pptxgen();
pptx.layout = 'LAYOUT_16x9'; // 10" × 5.625"
Run generation scripts with bun (no build step needed):
npx -y bun ${CLAUDE_PLUGIN_ROOT}/skills/pptx-slides/scripts/main.ts theme list
Dependencies (skia-canvas, fontkit, linebreak, prismjs) are auto-installed by bun on first run — no manual install step needed.
| Module | Key Exports | Purpose |
|---|---|---|
| text | autoFontSize(), calcTextBoxHeightSimple(), scale() | Font-aware text measurement via skia-canvas, adaptive sizing |
| theme | createTheme(), PRESETS, sectionBackground() | Design token system with 12 curated presets |
| layout | warnIfSlideHasOverlaps(), alignSlideElements(), distributeSlideElements() | Overlap detection, bounds checking, positioning |
| layout_builders | addFeatureGrid(), addCardRow(), addTimeline(), addMetricsRow(), addComparisonTable() | High-level component builders |
| decorative | addStaircase(), addSectionBadge(), addProgressBar(), addSlideNumber() | Visual personality elements |
| validation | validateDeck() | Consolidated pre-save quality validation |
| code | codeToRuns() | Prism.js syntax highlighting to PptxGenJS text runs |
| image | getImageDimensions(), imageSizingCrop(), imageSizingContain() | Binary dimension detection and aspect-ratio sizing |
| svg | svgToDataUri() | SVG sanitization and base64 data URI encoding |
| util | safeOuterShadow(), normalizeColor(), inchesToEmu() | Shadow effects, color/unit conversion |
Pick a curated preset or create a custom theme:
// Use a preset
const theme = h.createTheme(h.PRESETS.darkMonospace);
// Or customize
const theme = h.createTheme({
accent: 'ff6b35',
font: { heading: 'Poppins', body: 'Inter' },
});
Available presets: darkMonospace, swissModern, boldSignal, darkBotanical, cleanCorporate, neonCyber, warmMinimal, vintageEditorial, terminalGreen, gradientWave, midnightBlue, paperInk.
For mixed-background decks, define a section map:
const sectionMap = { '0': 'brand', '1-3': 'light', '4-8': 'default' };
const colors = { brand: theme.accent, light: theme.bg.secondary, default: theme.bg.primary };
slide.background = { color: h.sectionBackground(slideIndex, sectionMap, colors) };
Use scale() instead of hardcoded font sizes — the PPTX equivalent of CSS clamp():
const titleSize = h.scale(theme.size.title.min, theme.size.title.max, { bullets: 0, textLength: title.length });
const bodySize = h.scale(theme.size.body.min, theme.size.body.max, { bullets: 5, textLength: 800 });
For precise text box fitting, use autoFontSize() with skia-canvas measurement:
const opts = h.autoFontSize('Long paragraph text...', 'Arial', { w: 8, h: 3, minFontSize: 14, maxFontSize: 28 });
slide.addText(text, { x: 1, y: 1.5, ...opts });
references/slide-patterns.mdaddFeatureGrid(), addCardRow(), etc.h.validateDeck(pptx) before saving.pptx file with speaker notes on every content slidescale() for adaptive sizing.h.resolveFont(theme, 'heading') for proper fallback chainstheme.spacing.margin)h.alignSlideElements() and h.distributeSlideElements() for precisiontheme.text.primary, theme.accent — never hardcode colorsRun h.validateDeck(pptx) before saving every deck. It checks:
scale() or autoFontSize()validateDeck() before savingfit or autoFit instead of h.autoFontSize()Design for editability — recipients must be able to modify the deck:
slide.addNotes('...') on every content slide.Build architecture diagrams using PptxGenJS native shapes rather than images:
slide.addShape('rect', { ... })slide.addShape('line', { ... })theme.accent for active components, theme.text.secondary for inactivereferences/pptxgenjs-helpers.md — Full API reference for bundled helper modulesreferences/slide-patterns.md — Detailed slide type patterns with dimensions and positioningscripts/main.ts — TypeScript CLI entry point and library re-exports (run via npx -y bun)scripts/types.ts — Shared TypeScript interfaces for all helper modulesscripts/theme.ts — 12 curated theme presets with createTheme() and resolveFont()scripts/text.ts — Font-aware text measurement via skia-canvas, autoFontSize(), scale()scripts/layout.ts — Overlap detection, element alignment, bounds checkingscripts/layout_builders.ts — addFeatureGrid(), addCardRow(), addTimeline(), etc.scripts/decorative.ts — addStaircase(), addSectionBadge(), addProgressBar()scripts/validation.ts — validateDeck() pre-save quality validationscripts/code.ts — Prism.js syntax highlighting to PptxGenJS text runsscripts/image.ts — Binary dimension detection and aspect-ratio sizingscripts/svg.ts — SVG sanitization and base64 data URI encodingscripts/util.ts — Shadow effects, color normalization, unit conversion