
Utility Slideshow Creator
- 486 installs
- 518 repo stars
- Updated August 4, 2026
- product-on-purpose/pm-skills
utility-slideshow-creator is an agent skill that generates professional .pptx and .pdf presentations from JSON deck specifications with eighteen slide types for developers and PMs who need consistent stakeholder decks wi
About
utility-slideshow-creator is a product-on-purpose/pm-skills utility skill (version 1.0.1) that produces professional presentations from a JSON deck specification using pptxgenjs with zero design decisions at generation time. Claude selects among eighteen slide types—title_dark, bullets, stat, timeline, two_col, table, closing, and others—via content-pattern decision logic, writes a JSON spec with calibrated character limits, then runs local scripts: node scripts/generate-deck.js for .pptx and node scripts/export-pdf.mjs for optional PDF. Both outputs derive from the same spec so formats always match. Developers reach for utility-slideshow-creator for stakeholder updates, product reviews, and team presentations—not for editing existing PowerPoint files or building interactive HTML decks.
- utility-slideshow-creator
- AI & Agent Building
- AI-coding skill
Utility Slideshow Creator by the numbers
- 486 all-time installs (skills.sh)
- +24 installs in the week ending Aug 4, 2026 (Skillselion tracking)
- Ranked #1,799 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/product-on-purpose/pm-skills --skill utility-slideshow-creatorAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 486 |
|---|---|
| repo stars | ★ 518 |
| Last updated | August 4, 2026 |
| Repository | product-on-purpose/pm-skills ↗ |
How do you generate a professional slide deck from a brief?
Helps with ai & agent building tasks.
Who is it for?
Product managers and engineers who need repeatable, theme-consistent slide decks for reviews and updates without hand-formatting every slide in PowerPoint.
Skip if: Teams needing complex interactive charts, web-based presentations, or in-place edits to an existing .pptx file rather than generating a new deck from scratch.
When should I use this skill?
The user wants a slide deck for a stakeholder update, product review, or team presentation generated from a written content brief.
What you get
JSON deck specification plus locally generated .pptx file and optional matching .pdf export.
- JSON deck specification
- .pptx presentation
- .pdf export
By the numbers
- Version 1.0.1 documented in skill frontmatter
- Supports eighteen defined slide types with dark/light variants
- Timeline slides accept up to six milestones; process_flow up to five steps
Files
<!-- PM-Skills | https://github.com/product-on-purpose/pm-skills | Apache 2.0 -->
Slideshow Creator
Generate professional presentations (.pptx and .pdf) from a JSON deck specification. Zero design decisions at generation time - Claude selects slide types and fills content slots; all visual properties are pre-decided by the theme.
When to Use
- Creating slide decks for stakeholder updates, product reviews, team presentations
- Generating professional .pptx files from content briefs
- Producing consistent presentations without manual formatting
- Exporting presentations to PDF for sharing or archiving
When NOT to Use
- Creating complex data visualizations (use dedicated charting tools)
- Building interactive web presentations (this produces .pptx, not HTML)
- Editing existing PowerPoint files (this creates new decks from scratch)
How It Works
Two-phase architecture:
1. Spec phase (Claude) - Read the content brief, select slide types using decision logic, write a JSON deck specification. Content slots have character limits calibrated to prevent overflow. This is the only phase that costs tokens. 2. Generation phase (Local script) - Run node scripts/generate-deck.js deck-spec.json to produce .pptx. Optionally run node scripts/export-pdf.mjs deck-spec.json for PDF. Deterministic rendering, zero token cost.
Both outputs come from the same JSON spec, so .pptx and .pdf always match.
18 Slide Types
| # | Type Key | Purpose | Default Variant |
|---|---|---|---|
| 1 | title_dark | Opening slide (bold) | dark only |
| 2 | title_light | Opening slide (internal/lighter) | light only |
| 3 | section | Section divider | dark |
| 4 | content | Paragraph explanation | light |
| 5 | bullets | 3-6 key points | light |
| 6 | two_col | Side-by-side comparison | light |
| 7 | stat | Single key metric | light |
| 8 | dual_stat | Two metrics compared | dark |
| 9 | quote | Testimonial or pull quote | dark |
| 10 | three_card | Three parallel concepts | dark |
| 11 | four_grid | Four concepts in 2x2 grid | dark |
| 12 | timeline | Dates or milestones (max 6) | light |
| 13 | process_flow | Sequential workflow (max 5) | light |
| 14 | agenda | Meeting agenda (max 7) | light |
| 15 | highlight | Key finding or executive summary | light |
| 16 | table | Tabular data | light |
| 17 | icon_rows | Feature list with markers (max 4) | light |
| 18 | closing | End slide | dark only |
Full slot definitions and character limits: references/slide-types.md
Decision Logic (Quick Reference)
| Content Pattern | Use |
|---|---|
| Opening the deck (bold) | title_dark |
| Opening the deck (internal) | title_light |
| Transitioning between topics | section |
| Paragraph explanation | content |
| List of 3-6 points | bullets |
| Side-by-side comparison | two_col |
| Single key metric | stat |
| Two metrics compared | dual_stat |
| Testimonial or pull quote | quote |
| Three parallel concepts | three_card |
| Four concepts in a grid | four_grid |
| Dates or milestones | timeline |
| Sequential workflow | process_flow |
| Meeting agenda | agenda |
| Key finding or summary | highlight |
| Tabular data | table |
| Feature list with markers | icon_rows |
| Ending the deck | closing |
Full decision logic with variant strategy: references/decision-logic.md
JSON Deck Spec Format
{
"title": "Q3 Product Update",
"author": "Product Team",
"footerText": "Internal . Q3 Review",
"slides": [
{ "type": "title_dark", "title": "Q3 Product Update", "subtitle": "October 2026" },
{ "type": "stat", "stat": "94%", "label": "Customer satisfaction score", "accentColor": "secondary" },
{ "type": "bullets", "title": "What Shipped", "bullets": ["Feature A", "Feature B", "Feature C"] },
{ "type": "closing" }
]
}Colors accept theme token names ("accent", "secondary", "tertiary", "warm") or 6-character hex strings ("2563EB").
Full schema and workflow: references/TEMPLATE.md and references/platform-rules.md
Instructions
1. Read the content brief - Understand topic, audience, length, specific requirements 2. Plan the deck - Select slide types using the decision logic table. Assign dark/light variants for visual rhythm (alternate to avoid monotony). 3. Write the JSON deck specification - Fill content slots, respecting character limits from references/slide-types.md 4. Run the generation script - node scripts/generate-deck.js deck-spec.json 5. Optionally export PDF - node scripts/export-pdf.mjs deck-spec.json output.pdf 6. Report the output - Tell the user where the file(s) are
Output Contract
- Planning artifact: JSON deck specification (the file Claude writes)
- Final output: .pptx file (+ optional .pdf), generated locally from the spec
- Quality gate: All items in the quality checklist pass
Quality Checklist
- [ ] Every slide has a valid type key (one of the 18 defined types)
- [ ] All content slots respect character limits from
references/slide-types.md - [ ] Dark/light variants alternate for visual rhythm (no 3+ consecutive same-variant slides)
- [ ] Deck has a title slide (first) and a closing slide (last)
- [ ] Section dividers separate distinct topics in decks > 6 slides
- [ ] Speaker notes included for key slides (stats, highlights, transitions)
- [ ] JSON is valid (no trailing commas, proper quoting, correct nesting)
- [ ] Color values are valid theme tokens or 6-character hex strings (no
#prefix)
References
| File | Purpose |
|---|---|
references/TEMPLATE.md | JSON deck specification template with field documentation |
references/EXAMPLE.md | Worked example: Q3 Product Update deck (9 slides) |
references/slide-types.md | All 18 slide types: content slots, character limits, variants |
references/decision-logic.md | Content pattern → slide type mapping, variant strategy, deck sizing |
references/platform-rules.md | pptxgenjs requirements, Google Slides compatibility, output format |
utility-slideshow-creator - Version History
| Version | Date | Release | Effort | Type | Summary |
|---|---|---|---|---|---|
| 1.0.1 | 2026-06-10 | v2.26.0 | F-12-batch-0 | patch | Description rewrite removing the phantom utility-slideshow-themer reference (2026-06-09 audit, v2.26.0 Batch 0) |
| 1.0.0 | 2026-04-08 | - | - | baseline | Prior published version |
1.0.1 (2026-06-10)
Description-only patch (F-12 Batch 0, from the 2026-06-09 repo audit): removed the promise of custom themes via utility-slideshow-themer, a skill that has never existed; the references document theme tokens on the default theme only. No body, template, or behavior changes.
1.0.0 (2026-04-08)
Baseline row for the prior published version; see git history for its changes.
Decision Logic
How to select slide types for content and when to use dark vs. light variants.
Content Pattern to Slide Type
| Content Pattern | Slide Type | Why This Type |
|---|---|---|
| Opening the deck (bold, external) | title_dark | Sets authoritative tone with dark impact |
| Opening the deck (internal, lighter) | title_light | Softer opener for team and internal decks |
| Transitioning between major topics | section | Clear visual break, resets audience focus |
| Explaining something in paragraphs | content | Title + body text, no bullet overhead |
| List of 3-6 key points | bullets | Clean bullet rendering with colored markers |
| Side-by-side comparison | two_col | Vertical divider makes contrast obvious |
| Single key metric | stat | Large number on colored card draws attention |
| Two metrics that gain meaning from comparison | dual_stat | Side-by-side cards invite comparison |
| Testimonial or pull quote | quote | Large quote marks and attribution styling |
| Three parallel concepts or pillars | three_card | Colored cards with equal visual weight |
| Four concepts in a grid | four_grid | 2x2 layout for balanced coverage |
| Dates or milestones over time | timeline | Horizontal dots with chronological flow |
| Sequential workflow or process | process_flow | Numbered circles show action sequence |
| Meeting agenda or event schedule | agenda | Time-topic pairs with optional intro |
| Key finding or executive summary | highlight | Prominent colored box demands attention |
| Tabular data or comparison matrix | table | Styled header row, clean grid |
| Feature list with visual markers | icon_rows | Colored circles give each point identity |
| Ending the deck | closing | Clean ending with optional tagline and URL |
When Two Types Could Work
- Single metric with context: Use
statif the number is the star. Usehighlightif the insight matters more than the number. - List of items: Use
bulletsfor 3-6 plain points. Useicon_rowswhen each item deserves its own visual identity (max 4). Usethree_cardwhen items have sub-bullets (exactly 3). - Sequential information: Use
timelinefor dates and milestones (chronological). Useprocess_flowfor workflows (action-oriented). - Two things compared: Use
two_colfor lists. Usedual_statfor numbers.
Dark/Light Variant Strategy
Alternate variants for visual rhythm. A monotone deck causes slide fatigue.
General rules:
- Section dividers and quotes default dark
- Content, data, tables, and highlights default light
- Alternate within a section to prevent visual monotony
- Title and closing are always dark (or title_light for internal decks)
Suggested rhythm pattern:
TITLE (dark) > SECTION (dark) > CONTENT (light) > STAT (light) >
BULLETS (dark) > HIGHLIGHT (light) > CLOSING (dark)Override the defaults when:
- Two consecutive slides would have the same variant - flip one
- A stat or highlight needs extra emphasis - use the non-default variant
- The deck is short (< 6 slides) - defaults are usually fine as-is
Deck Length Guidelines
| Deck Size | Typical Structure |
|---|---|
| 3-5 slides | Title + 2-3 content slides + Closing |
| 6-10 slides | Title + Section + mixed content + Closing |
| 11-20 slides | Title + 2-3 sections with 3-5 slides each + Closing |
| 20+ slides | Consider splitting into two decks |
Always include a title slide and a closing slide. Use section dividers when the deck has distinct topics.
Example: Q3 Product Update Deck
This example walks through creating a 9-slide product update deck for an engineering all-hands meeting, demonstrating the spec-writing workflow from content brief to JSON output.
Content Brief
The product team needs a deck for the Q3 engineering all-hands covering:
- Customer satisfaction hit a record high (94%)
- Three major features shipped (real-time analytics dashboard, API rate limiting, bulk data import)
- Revenue grew 18% quarter-over-quarter
- Roadmap preview for Q4 (3 milestones)
- Key insight: teams using the analytics dashboard have 2.4x faster incident response times
Deck Planning
Slide Type Selection
| # | Content | Type | Variant | Rationale |
|---|---|---|---|---|
| 1 | Opening | title_dark | dark | Bold external opener |
| 2 | Section: Metrics | section | dark | Topic transition |
| 3 | CSAT record | stat | light | Single metric spotlight |
| 4 | Revenue comparison | dual_stat | dark | Two numbers gain from comparison |
| 5 | Features shipped | bullets | light | 3-6 point list |
| 6 | Feature details | three_card | dark | Three parallel concepts |
| 7 | Key insight | highlight | light | Executive takeaway |
| 8 | Q4 roadmap | timeline | light | Chronological milestones |
| 9 | Close | closing | dark | Standard ending |
Variant Check
Dark-light alternation: D, D, L, D, L, D, L, L, D -- slight imbalance at slides 7-8 (both light) but acceptable because highlight and timeline are visually distinct types.
JSON Deck Specification
{
"title": "Q3 Product Update",
"author": "Product Team",
"footerText": "Internal -- Engineering All-Hands",
"outputFileName": "q3-product-update.pptx",
"slides": [
{
"type": "title_dark",
"title": "Q3 Product\nUpdate",
"subtitle": "Engineering All-Hands -- October 2026",
"notes": "Welcome everyone. Quick overview of what shipped and what's ahead."
},
{
"type": "section",
"title": "Key\nMetrics",
"variant": "dark",
"notes": "Starting with our headline performance numbers."
},
{
"type": "stat",
"stat": "94%",
"label": "Customer satisfaction -- highest score this year",
"accentColor": "secondary",
"variant": "light",
"notes": "Up from 88% in Q2. Primary driver: faster support response times from the new dashboard."
},
{
"type": "dual_stat",
"title": "Revenue Growth",
"leftStat": "$3.2M",
"leftLabel": "Q2 recurring revenue",
"leftColor": "muted",
"rightStat": "$3.8M",
"rightLabel": "Q3 recurring revenue",
"rightColor": "accent",
"variant": "dark",
"notes": "18% QoQ growth. Bulk import feature drove 40% of new contract value."
},
{
"type": "bullets",
"title": "What Shipped in Q3",
"bullets": [
"Real-time analytics dashboard with customizable widgets",
"API rate limiting with per-client quotas and alerting",
"Bulk data import supporting CSV, JSON, and XML formats",
"SSO integration for enterprise customers"
],
"variant": "light",
"notes": "Four major features. Each had full rollout with zero critical incidents."
},
{
"type": "three_card",
"title": "Feature Highlights",
"cards": [
{
"title": "Analytics Dashboard",
"bullets": ["Real-time metrics", "Custom widgets", "Export to PDF"],
"color": "accent"
},
{
"title": "API Rate Limiting",
"bullets": ["Per-client quotas", "Automatic alerting", "Usage dashboard"],
"color": "secondary"
},
{
"title": "Bulk Import",
"bullets": ["CSV, JSON, XML", "Validation preview", "Async processing"],
"color": "tertiary"
}
],
"variant": "dark",
"notes": "Deeper dive on the three headline features."
},
{
"type": "highlight",
"title": "Key Insight",
"highlight": "Teams using the analytics dashboard resolve incidents 2.4x faster than teams using manual monitoring.",
"context": "Based on analysis of 180 incidents across 45 teams during August-September. The effect is strongest for teams with 3+ custom dashboard widgets configured.",
"accentColor": "accent",
"variant": "light",
"notes": "This is our strongest product-market signal this quarter."
},
{
"type": "timeline",
"title": "Q4 Roadmap",
"milestones": [
{ "label": "OCT", "description": "Advanced filtering and saved views" },
{ "label": "NOV", "description": "Webhook integrations and event streaming" },
{ "label": "DEC", "description": "SOC 2 Type II certification complete" },
{ "label": "JAN", "description": "Public API v2 general availability" }
],
"variant": "light",
"notes": "Four milestones across the quarter. SOC 2 is the compliance gate for enterprise expansion."
},
{
"type": "closing",
"notes": "Thank you. Questions?"
}
]
}What This Deck Demonstrates
- Line break control: Title slide uses
\nto split "Q3 Product" and "Update" onto separate lines for deliberate text wrapping - Section dividers: The section slide creates a clear visual break before the metrics block, signaling a topic change to the audience
- Single vs comparative metrics:
statspotlights one number (CSAT score) whiledual_statplaces two numbers side-by-side for direct comparison (Q2 vs Q3 revenue) - Parallel structure:
three_cardgives equal visual weight to three shipped features, avoiding the implicit ranking that a bullet list creates - Highlight restraint:
highlightis used exactly once for the strongest finding -- overuse dilutes its impact - Chronological milestones:
timelinepresents Q4 roadmap items in calendar order, making sequencing and dependencies visible - Speaker notes on every slide: Notes provide presenter context without cluttering the slide surface -- especially useful for stakeholder decks that get forwarded without the presenter
- Dark/light rhythm: Variants alternate to maintain visual energy; the consecutive light slides (7-8) work because highlight and timeline have distinct visual structures
- Character-limit compliance: All content respects the limits defined in slide-types.md -- titles stay concise, bullets stay scannable, and the highlight sentence remains under the maximum length
Platform Rules
pptxgenjs technical requirements and Google Slides compatibility constraints. Violating these rules produces corrupted files or broken rendering.
pptxgenjs Rules (Mandatory)
1. Never use `#` in hex colors. Write "2563EB", not "#2563EB". The generation engine handles this internally, but raw pptxgenjs code with # causes silent corruption.
2. Never encode opacity in hex strings. Write { color: "000000", opacity: 0.12 }, not "00000020". Eight-character hex with alpha channel is not supported.
3. Never reuse option objects across addShape/addText calls. pptxgenjs mutates option objects internally. Always create fresh objects for each call.
4. Use `bullet: true` for bullet points. Never use unicode bullet characters like \u2022 - that creates double bullets.
5. Use `breakLine: true` between items in text arrays to force line breaks between entries.
6. Each presentation needs `new pptxgen()`. Never reuse a presentation instance across files or generation runs.
Google Slides Compatibility
The default theme deliberately avoids features that degrade in .pptx-to-Google-Slides conversion:
| Feature | Status | Why Avoided |
|---|---|---|
| Gradient fills | Avoided | Convert to solid blocks or disappear |
| Custom fonts (non-Google) | Avoided | Substituted with defaults, breaking layout |
| Overlapping semi-transparent shapes | Avoided | Transparency renders incorrectly |
| Embedded charts | Avoided | Convert to static images, lose interactivity |
| Complex shadow effects | Avoided | Render differently or disappear |
| SmartArt | Avoided | Converts to ungrouped shapes |
What works reliably across platforms:
- Solid color fills
- Google Fonts (the default theme uses Lexend Deca)
- Simple shapes (rectangles, circles, lines)
- Text boxes with formatting
- Tables with cell formatting
- Speaker notes
Expected after conversion: Minor 1-2 pixel spacing differences are normal and do not affect readability or layout integrity.
Output Format
- File format: .pptx (Office Open XML Presentation)
- Layout: LAYOUT_16x9 (10" x 5.625")
- Output directory:
output-slideshow-creator/by default (gitignored). Override with--output <dir>. - Naming: From
outputFileNamein spec, or slugifiedtitle, ordeck.pptx
PDF Export (Optional)
PDF rendering uses Puppeteer (headless Chromium) with the theme font loaded from Google Fonts. It reads the same JSON spec as the .pptx engine, so both outputs match.
node scripts/export-pdf.mjs deck-spec.json output.pdfIf no output path is given, the PDF is written alongside the spec file. Puppeteer is an optional dependency - the .pptx generation works without it.
Node.js Requirements
- Minimum: Node.js 18
- Dependencies: pptxgenjs (bundled or installed via npm)
- Optional: Puppeteer (for PDF export only)
- Run from any directory; output path is relative to CWD
Slide Types
All 18 slide types with content slots, character limits, and variant support. Each type maps to a JSON type key used in the deck spec.
Variant Support
15 types support variant: "dark" and variant: "light". 3 types are fixed: title_dark (dark only), title_light (light only), closing (dark only).
Type Reference
1. title_dark
Opening slide with dark background and large white title text.
| Slot | Type | Max Chars | Required | Notes |
|---|---|---|---|---|
| title | string | ~50 | yes | Supports \n for line breaks |
| subtitle | string | ~80 | no |
Variant: dark only.
2. title_light
Opening slide with light background for a softer tone.
| Slot | Type | Max Chars | Required | Notes |
|---|---|---|---|---|
| title | string | ~50 | yes | Supports \n for line breaks |
| subtitle | string | ~80 | no |
Variant: light only. Use for internal decks or lighter tone.
3. section
Section divider between major topics. Dark uses two-tone split; light uses clean background.
| Slot | Type | Max Chars | Required | Notes |
|---|---|---|---|---|
| title | string | ~30 | yes | Supports \n for line breaks |
| variant | string | -- | no |
Variant: "dark" (default) or "light".
4. content
Paragraph content slide for detailed explanations.
| Slot | Type | Max Chars | Required | Notes |
|---|---|---|---|---|
| title | string | ~60 | yes | |
| body | string | ~400 | yes | |
| variant | string | -- | no |
Variant: "light" (default) or "dark".
5. bullets
Bullet list slide for key points.
| Slot | Type | Max Chars | Required | Notes |
|---|---|---|---|---|
| title | string | ~60 | yes | |
| bullets | string[] | ~120 each | yes | 3-6 items |
| variant | string | -- | no |
Variant: "light" (default) or "dark".
6. two_col
Two-column comparison layout with vertical divider.
| Slot | Type | Max Chars | Required | Notes |
|---|---|---|---|---|
| title | string | ~60 | yes | |
| leftTitle | string | ~25 | yes | |
| leftItems | string[] | ~80 each | yes | |
| rightTitle | string | ~25 | yes | |
| rightItems | string[] | ~80 each | yes | |
| variant | string | -- | no |
Variant: "light" (default) or "dark".
7. stat
Single statistic displayed on a colored card.
| Slot | Type | Max Chars | Required | Notes |
|---|---|---|---|---|
| stat | string | ~8 | yes | e.g. "87%", "$2.6M" |
| label | string | ~60 | yes | |
| accentColor | string | -- | no | Theme token or hex; default: secondary |
| variant | string | -- | no |
Variant: "light" (default) or "dark".
8. dual_stat
Two stat cards side by side for comparative metrics.
| Slot | Type | Max Chars | Required | Notes |
|---|---|---|---|---|
| title | string | ~50 | no | |
| leftStat | string | ~8 | yes | |
| leftLabel | string | ~60 | yes | |
| leftColor | string | -- | no | Default: secondary |
| rightStat | string | ~8 | yes | |
| rightLabel | string | ~60 | yes | |
| rightColor | string | -- | no | Default: accent |
| variant | string | -- | no |
Variant: "dark" (default) or "light".
Use instead of stat when two metrics gain meaning from comparison.
9. quote
Testimonial slide with decorative quote marks and attribution line.
| Slot | Type | Max Chars | Required | Notes |
|---|---|---|---|---|
| quote | string | ~200 | yes | |
| attribution | string | ~60 | no | |
| variant | string | -- | no |
Variant: "dark" (default) or "light".
10. three_card
Three colored cards, each with a title and bullet list.
| Slot | Type | Max Chars | Required | Notes |
|---|---|---|---|---|
| title | string | ~50 | no | |
| cards | array | -- | yes | Exactly 3 items |
| cards[].title | string | ~25 | yes | |
| cards[].bullets | string[] | ~50 each | yes | |
| cards[].color | string | -- | no | Defaults: secondary, accent, tertiary |
| variant | string | -- | no |
Variant: "dark" (default) or "light".
11. four_grid
2x2 grid of colored cards, each with a title and body paragraph.
| Slot | Type | Max Chars | Required | Notes |
|---|---|---|---|---|
| title | string | ~50 | no | |
| cards | array | -- | yes | Exactly 4 items |
| cards[].title | string | ~25 | yes | |
| cards[].body | string | ~120 | yes | |
| cards[].color | string | -- | no | Defaults: accent, secondary, tertiary, warm |
| variant | string | -- | no |
Variant: "dark" (default) or "light".
12. timeline
Horizontal timeline with dots and labels for milestones.
| Slot | Type | Max Chars | Required | Notes |
|---|---|---|---|---|
| title | string | ~50 | yes | |
| milestones | array | -- | yes | Max 6 items |
| milestones[].label | string | ~10 | yes | e.g. "JAN", "Phase 1" |
| milestones[].description | string | ~80 | yes | |
| variant | string | -- | no |
Variant: "light" (default) or "dark".
13. process_flow
Numbered circles connected by lines showing a sequential workflow.
| Slot | Type | Max Chars | Required | Notes |
|---|---|---|---|---|
| title | string | ~50 | yes | |
| steps | array | -- | yes | Max 5 items |
| steps[].label | string | ~15 | yes | |
| steps[].description | string | ~80 | yes | |
| variant | string | -- | no |
Variant: "light" (default) or "dark".
Use instead of timeline when content is a workflow (action-oriented) rather than dates.
14. agenda
Meeting agenda with a timeline panel on the right side.
| Slot | Type | Max Chars | Required | Notes |
|---|---|---|---|---|
| title | string | ~30 | no | Default: "Agenda" |
| intro | string | ~200 | no | Left-side paragraph |
| items | array | -- | yes | Max 7 items |
| items[].time | string | ~10 | yes | e.g. "10:00 AM" |
| items[].topic | string | ~30 | yes | |
| variant | string | -- | no |
Variant: "light" (default) or "dark".
15. highlight
Key takeaway displayed in a prominent colored box with supporting context below.
| Slot | Type | Max Chars | Required | Notes |
|---|---|---|---|---|
| title | string | ~50 | yes | |
| highlight | string | ~150 | yes | The key message in the box |
| context | string | ~300 | no | Supporting detail below |
| accentColor | string | -- | no | Default: accent |
| variant | string | -- | no |
Variant: "light" (default) or "dark".
Use sparingly -- 1-2 per deck for impact.
16. table
Styled data table with colored header row.
| Slot | Type | Max Chars | Required | Notes |
|---|---|---|---|---|
| title | string | ~50 | yes | |
| headers | string[] | ~20 each | yes | |
| rows | string[][] | ~20 each cell | yes | |
| variant | string | -- | no |
Variant: "light" (default) or "dark".
Best practice: 3-6 columns, 4-8 rows.
17. icon_rows
Feature rows with colored circle markers for visual distinction.
| Slot | Type | Max Chars | Required | Notes |
|---|---|---|---|---|
| title | string | ~50 | yes | |
| items | array | -- | yes | Max 4 items |
| items[].label | string | ~25 | yes | |
| items[].description | string | ~100 | yes | |
| items[].color | string | -- | no | Defaults: accent, secondary, tertiary, warm |
| variant | string | -- | no |
Variant: "light" (default) or "dark".
Use instead of bullets when each point deserves its own visual identity.
18. closing
End slide with dark background.
| Slot | Type | Max Chars | Required | Notes |
|---|---|---|---|---|
| tagline | string | ~50 | no | Empty by default |
| url | string | -- | no |
Variant: dark only.
Common Fields
All slide types accept these optional fields:
variant-- "dark" or "light" (see defaults above)notes-- Speaker notes for presenter view (string, no character limit)footer-- Override the deck-level footer text for this slideslideNum-- Override the auto-incremented slide number
Color Values
Color fields (accentColor, leftColor, rightColor, card/item color) accept:
- Theme token names:
"accent","secondary","tertiary","warm","primary","primaryDark","muted" - 6-character hex strings:
"2563EB","0891B2"(no#prefix -- pptxgenjs requirement)
JSON Deck Specification Template
<!-- Use this template as a starting point for your deck specification. Fill in the content fields, respecting the character limits documented in slide-types.md. -->
Deck Metadata
{
"title": "",
"author": "",
"footerText": "",
"outputFileName": "",
"slides": []
}Field Reference
| Field | Type | Required | Notes |
|---|---|---|---|
| title | string | yes | Presentation title, used as .pptx metadata |
| author | string | no | Author name for .pptx metadata |
| footerText | string | no | Default footer text for all slides |
| outputFileName | string | no | Output filename. Default: title slugified + .pptx |
| slides | array | yes | Array of slide objects |
Slide Object Structure
Every slide object has type (required) plus content slots defined in slide-types.md.
Common Optional Fields
| Field | Type | Notes |
|---|---|---|
| variant | string | "dark" or "light" -- see defaults per type in slide-types.md |
| notes | string | Speaker notes for presenter view (no character limit) |
| footer | string | Override deck-level footerText for this slide |
| slideNum | string | Override auto-incremented slide number |
Color Values
Color fields (accentColor, leftColor, rightColor, card/item color) accept:
- Theme token names:
"accent","secondary","tertiary","warm","primary","primaryDark","muted" - 6-character hex strings:
"2563EB","0891B2"(no#prefix)
Slide Type Quick Reference
| Type Key | Required Slots | Optional Slots |
|---|---|---|
| title_dark | title | subtitle |
| title_light | title | subtitle |
| section | title | variant |
| content | title, body | variant |
| bullets | title, bullets[] | variant |
| two_col | title, leftTitle, leftItems[], rightTitle, rightItems[] | variant |
| stat | stat, label | accentColor, variant |
| dual_stat | leftStat, leftLabel, rightStat, rightLabel | title, leftColor, rightColor, variant |
| quote | quote | attribution, variant |
| three_card | cards[3] | title, variant |
| four_grid | cards[4] | title, variant |
| timeline | title, milestones[] | variant |
| process_flow | title, steps[] | variant |
| agenda | items[] | title, intro, variant |
| highlight | title, highlight | context, accentColor, variant |
| table | title, headers[], rows[][] | variant |
| icon_rows | title, items[] | variant |
| closing | (none) | tagline, url |
See slide-types.md for character limits and detailed slot definitions.
Related skills
How it compares
Use utility-slideshow-creator for new themed decks from briefs; use dedicated charting tools when slides require complex custom data visualizations.
FAQ
How many slide types does utility-slideshow-creator support?
utility-slideshow-creator supports eighteen slide types—including title, section, bullets, stat, timeline, table, and closing—with dark and light variants selected by content-pattern decision logic documented in references/slide-types.md.
What files does utility-slideshow-creator produce?
utility-slideshow-creator produces a JSON deck specification as the planning artifact, then local scripts generate a .pptx via generate-deck.js and an optional matching .pdf via export-pdf.mjs from the same spec.