본문으로 건너뛰기
cccskills
무료GitHub에 공개

pptx-slides

Used when the user asks to "create a PowerPoint", "generate PPTX slides", "make a PowerPoint presentation", "build a .pptx deck", "create editable slides", "PptxGenJS", "editable presentation", "corporate deck", "slide deck for sharing", or when the output format is PPTX for any presentation task. Also triggers on "export to PowerPoint", "pitch deck PPTX", "offline presentation", or when the context implies an editable/corporate format. Generates OOXML-compliant .pptx files with PptxGenJS, precise layout, text measurement, and overlap validation.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

연동 도구PowerPoint
설치 방법 보기

포함된 파일(17)

  • SKILL.md8.1 KB
  • references/pptxgenjs-helpers.md11.7 KB
  • references/slide-patterns.md10.6 KB
  • scripts/.gitignore12 B
  • scripts/code.ts2.5 KB
  • scripts/decorative.ts2.9 KB
  • scripts/image.ts9.1 KB
  • scripts/layout_builders.ts14.6 KB
  • scripts/layout.ts18.1 KB
  • scripts/main.ts3.3 KB
  • scripts/svg.ts877 B
  • scripts/text.ts21.2 KB
  • scripts/theme.ts5.8 KB
  • scripts/tsconfig.json324 B
  • scripts/types.ts7.2 KB
  • scripts/util.ts954 B
  • scripts/validation.ts2.9 KB

SKILL.md(원문)

설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.

PPTX Slides — Programmatic PowerPoint Generation

Generate professional, editable PowerPoint presentations using PptxGenJS (Node.js). Produces OOXML-compliant .pptx files with precise layout, text measurement, and overlap validation.

Bundled Helpers

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 Summary

ModuleKey ExportsPurpose
textautoFontSize(), calcTextBoxHeightSimple(), scale()Font-aware text measurement via skia-canvas, adaptive sizing
themecreateTheme(), PRESETS, sectionBackground()Design token system with 12 curated presets
layoutwarnIfSlideHasOverlaps(), alignSlideElements(), distributeSlideElements()Overlap detection, bounds checking, positioning
layout_buildersaddFeatureGrid(), addCardRow(), addTimeline(), addMetricsRow(), addComparisonTable()High-level component builders
decorativeaddStaircase(), addSectionBadge(), addProgressBar(), addSlideNumber()Visual personality elements
validationvalidateDeck()Consolidated pre-save quality validation
codecodeToRuns()Prism.js syntax highlighting to PptxGenJS text runs
imagegetImageDimensions(), imageSizingCrop(), imageSizingContain()Binary dimension detection and aspect-ratio sizing
svgsvgToDataUri()SVG sanitization and base64 data URI encoding
utilsafeOuterShadow(), normalizeColor(), inchesToEmu()Shadow effects, color/unit conversion

Theme Selection

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) };

Adaptive Font Sizing

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 });

Generation Workflow

  1. Plan layout — Map content outline to slide types from references/slide-patterns.md
  2. Select theme — Pick preset or define custom theme tokens
  3. Generate slides — Build with helpers: addFeatureGrid(), addCardRow(), etc.
  4. Validate — Run h.validateDeck(pptx) before saving
  5. Fix issues — Adjust based on validation report, re-validate
  6. Deliver — Provide .pptx file with speaker notes on every content slide

Core Design Rules

Typography

  • Minimum body text: 18pt (24-28pt preferred). Use scale() for adaptive sizing.
  • Title text: 36-44pt
  • Caption/footnote: 14-16pt minimum (absolute floor: 14pt)
  • Font families: Use h.resolveFont(theme, 'heading') for proper fallback chains

Layout

  • Slide dimensions: 10" × 5.625" (widescreen 16:9)
  • Safe margins: 0.5" from all edges (theme.spacing.margin)
  • White space: Target 40-50% empty space per slide
  • Alignment: Use h.alignSlideElements() and h.distributeSlideElements() for precision

Color & Accessibility

  • Contrast ratio: WCAG AA minimum (4.5:1 body, 3:1 large text)
  • Color-blind safe: Wong or IBM palettes for data visualization
  • Theme tokens: Always use theme.text.primary, theme.accent — never hardcode colors

Validation Workflow

Run h.validateDeck(pptx) before saving every deck. It checks:

  • Element overlaps on every slide
  • Elements within slide boundaries
  • Font sizes above 14pt minimum
  • Bullet count per slide (max 6)
  • Speaker notes presence

Anti-Patterns

  • Text smaller than 14pt anywhere
  • More than 6 bullets per slide
  • Elements extending beyond slide boundaries
  • Hardcoded colors instead of theme tokens
  • Hardcoded font sizes instead of scale() or autoFontSize()
  • Skipping validateDeck() before saving
  • Missing speaker notes on content slides
  • Using PptxGenJS fit or autoFit instead of h.autoFontSize()

Editability Guidance

Design for editability — recipients must be able to modify the deck:

  • Native text boxes — Click and edit directly. Never flatten text into images.
  • Group related elements — Card layouts move as a unit.
  • Native shapes — Use rounded rectangles, circles, lines instead of embedded SVG where possible.
  • Speaker notes — Add talking points via slide.addNotes('...') on every content slide.
  • Master layouts — For template decks, define slide layouts for consistent new slides.

Architecture Diagrams with Shapes

Build architecture diagrams using PptxGenJS native shapes rather than images:

  • Rectangles for services/components: slide.addShape('rect', { ... })
  • Lines and arrows for connections: slide.addShape('line', { ... })
  • Color coding: Use theme.accent for active components, theme.text.secondary for inactive
  • Progressive revelation: Build the same diagram across 2-3 slides, adding complexity

Reference Files

  • references/pptxgenjs-helpers.md — Full API reference for bundled helper modules
  • references/slide-patterns.md — Detailed slide type patterns with dimensions and positioning

Script Files

  • scripts/main.ts — TypeScript CLI entry point and library re-exports (run via npx -y bun)
  • scripts/types.ts — Shared TypeScript interfaces for all helper modules
  • scripts/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 checking
  • scripts/layout_builders.ts — addFeatureGrid(), addCardRow(), addTimeline(), etc.
  • scripts/decorative.ts — addStaircase(), addSectionBadge(), addProgressBar()
  • scripts/validation.ts — validateDeck() pre-save quality validation
  • scripts/code.ts — Prism.js syntax highlighting to PptxGenJS text runs
  • scripts/image.ts — Binary dimension detection and aspect-ratio sizing
  • scripts/svg.ts — SVG sanitization and base64 data URI encoding
  • scripts/util.ts — Shadow effects, color normalization, unit conversion

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

Used when the user asks to "create HTML slides", "generate an HTML presentation", "make animated slides", "build interactive slides", "create web slides", "GSAP presentation", "browser-based slides", "convert PPTX to HTML", "animated deck", "reveal.js slides", or when the output format is HTML for any presentation task. Also triggers on "single-file presentation", "CSS animations in slides", "scroll-based slides", or "web presentation". Generates self-contained, single-file HTML with viewport fitting, CSS/GSAP animations, and curated style presets.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

proyecto26/slides-ai-plugin412026년 4월 13일 업데이트

Used when the user asks to "create slides", "make a presentation", "build a deck", "design slides", "generate a pitch deck", "create a conference talk", "make a keynote", "presentation design", "slide layout", "slide template", "presentation structure", or mentions slides, presentations, decks, or talks in any context. Also triggers when the user wants to plan the content and visual direction of a presentation before generating it. This is the entry-point orchestrator that drives the full slide creation workflow across both HTML and PPTX formats. Examples: "I need to create slides for my conference talk about AI adoption", "can you turn this markdown into a presentation?", "I have a product demo tomorrow and need visual materials", "convert my existing PowerPoint to interactive HTML slides".

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

proyecto26/slides-ai-plugin412026년 4월 13일 업데이트

proyecto26의 스킬 모두 보기

이 스킬의 문제 신고