
Slide Creator
- 3.9k installs
- 18 repo stars
- Updated July 27, 2026
- starchild-ai-agent/official-skills
slide-creator is an agent skill for build 16:9 slide decks as html and export to pdf for presentation-ready deliverables.
About
The slide-creator skill Build 16:9 slide decks as HTML and export to PDF for presentation-ready deliverables. Build slide decks as HTML, export to pixel-perfect 16:9 PDF via headless Chromium. Output format: PDF not Microsoft PowerPoint (.pptx). The PDF preserves exact layout, fonts, and colors across all devices. - CSS layout (Grid/Flexbox) is far more flexible than any PPT editor - Full web typography, gradients, SVG, animations (print degrades gracefully) - Git-friendly, reproducible, scriptable - One command → PDF with exact 16:9 page dimensions Before any other step, identify the presentation scenario. Read references/content-scaffolding.md for full templates. Before any other step, identify the presentation scenario. Read references/content-scaffolding.md for full templates. Scenario keyword Template to use ----------------- ---------------- pitch / investor / fundraising pitch-deck conference / keynote / summit / talk conference-keynote product launch / launch event product-launch report / research / analysis research-report (none of the above) ask user which scenario fits best Each template defines: slide count, page titles, required content per page. If the audience is bi.
- CSS layout (Grid/Flexbox) is far more flexible than any PPT editor
- Full web typography, gradients, SVG, animations (print degrades gracefully)
- Git-friendly, reproducible, scriptable
- One command → PDF with exact 16:9 page dimensions
- Use the bilingual layout mode from references/content-scaffolding.md
Slide Creator by the numbers
- 3,913 all-time installs (skills.sh)
- +72 installs in the week ending Jul 28, 2026 (Skillselion tracking)
- Ranked #82 of 690 Office & Documents skills by installs in the Skillselion catalog
- Security screen: MEDIUM risk (skills.sh audit)
- Data as of Jul 28, 2026 (Skillselion catalog sync)
slide-creator capabilities & compatibility
- Capabilities
- css layout (grid/flexbox) is far more flexible t · full web typography, gradients, svg, animations · git friendly, reproducible, scriptable · one command → pdf with exact 16:9 page dimension · use the bilingual layout mode from references/co
- Use cases
- presentations
What slide-creator says it does
Build slide decks as HTML, export to pixel-perfect 16:9 PDF via headless Chromium.
Before any other step, identify the presentation scenario. Read `references/content-scaffolding.md` for full templates.
Each template defines: slide count, page titles, required content per page.
npx skills add https://github.com/starchild-ai-agent/official-skills --skill slide-creatorAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 3.9k |
|---|---|
| repo stars | ★ 18 |
| Security audit | 2 / 3 scanners passed |
| Last updated | July 27, 2026 |
| Repository | starchild-ai-agent/official-skills ↗ |
How do I build 16:9 slide decks as html and export to pdf for presentation-ready deliverables with documented agent guidance?
Build 16:9 slide decks as HTML and export to PDF for presentation-ready deliverables.
Who is it for?
Developers who need office & documents help during build work.
Skip if: Skip when the task falls outside Office & Documents scope described in SKILL.md.
When should I use this skill?
Build 16:9 slide decks as HTML and export to PDF for presentation-ready deliverables.
What you get
Completed office & documents workflow aligned with SKILL.md steps and validation.
- HTML slide markup
- Structural styles.css
- Print-ready page-break rules
By the numbers
- CSS layout (Grid/Flexbox) is far more flexible than any PPT editor
- Full web typography, gradients, SVG, animations (print degrades gracefully)
- Git-friendly, reproducible, scriptable
Files
Slide Creator — HTML → PDF Presentations
Build slide decks as HTML, export to pixel-perfect 16:9 PDF via headless Chromium.
Output format: PDF — not Microsoft PowerPoint (.pptx). The PDF preserves exact layout, fonts, and colors across all devices.
Why HTML → PDF
- CSS layout (Grid/Flexbox) is far more flexible than any PPT editor
- Full web typography, gradients, SVG, animations (print degrades gracefully)
- Git-friendly, reproducible, scriptable
- One command → PDF with exact 16:9 page dimensions
Workflow
0. Identify Scenario (new)
Before any other step, identify the presentation scenario. Read references/content-scaffolding.md for full templates.
| Scenario keyword | Template to use |
|---|---|
| pitch / investor / fundraising | pitch-deck |
| conference / keynote / summit / talk | conference-keynote |
| product launch / launch event | product-launch |
| report / research / analysis | research-report |
| (none of the above) | ask user which scenario fits best |
Each template defines: slide count, page titles, required content per page.
0.5 Bilingual Layout (if needed)
If the audience is bilingual (e.g. HK, Singapore, global Chinese conference), or the user mentions Chinese + English:
- Use the
bilinguallayout mode fromreferences/content-scaffolding.md - Heading: English (large) + Chinese subtitle (smaller, --text-muted)
- Body bullets: Chinese first, English parenthetical optional
- Avoid pure English-only decks for HK/TW/SG audiences
1. Plan the Deck
Define slide count and content per slide based on the scenario template. Each slide = one <section class="slide">.
1.5 Art Direction (run this before building)
Run this step whenever the user hasn't provided a specific visual style.
Read skills/slide-creator/references/art-direction.md for the full style taxonomy,CSS token templates, and style-brief output format.
Step A — Ask 4 questions: 1. Audience & setting: who is this for, and in what context (investors / internal team / public keynote)? 2. Mood keywords: how should the audience feel (authoritative / energetic / friendly / geeky-modern)? 3. Brand constraints: any required brand colors, logo, or fonts? 4. Reference material: any template references to align with (images, web links, existing deck screenshots)?
Step B — Generate a visual style picker page: Do NOT present style options as text descriptions — users can't evaluate styles from words alone.
Reference handling rules:
- If user provides image files/screenshots: sample palette (primary/surface/accent), inspect layout density, corner radius, typography tone from the visual.
- If user provides web URLs: use
web_fetchto extract design cues. Critical — follow this extraction protocol to avoid misreading the style:
1. Ignore the brand name / domain name — never infer visual style from the product's industry or name (e.g. "Neo" does NOT mean neon, "Opera" does NOT mean European luxury). 2. Read copy tone & vocabulary — the words used on the page reveal mood (e.g. "surgical precision", "quiet confidence" → restrained; "unleash", "radically" → bold/aggressive). 3. Extract explicit color vocabulary — look for CSS keywords in the fetched text, or color names mentioned in body text / alt tags. Warm vs cool, light vs dark, muted vs saturated. 4. Infer layout density — count words per section; sparse = editorial/luxury, dense = technical/functional. 5. Identify decorative motifs — mentioned or implied (e.g. geometry, gradients, photography, illustration, line art, brutalism). 6. Cross-check against art-direction.md — find the closest matching template, then describe the delta (e.g. "Style G but warmer, replace blue with burnt orange, add subtle grid lines"). 7. When uncertain: be conservative — under-promise the style match and present 3 options where Option A is your best interpretation, B is safer/cleaner, C is more experimental. Never confidently assert a style that contradicts the actual visual evidence.
- If user provides both: prioritize image cues first, URL cues second.
- If no references are provided: use built-in style taxonomy defaults.
Then: 1. Create output/style-picker/index.html — a single page with 3 side-by-side mini slide previews (16:9 aspect ratio), each fully rendered with real CSS (colors, fonts, layout, decorative elements). Each preview must look like an actual slide, not a color chip. 2. Build these 3 options as: (A) Reference-faithful, (B) Safer corporate variant, (C) Bolder creative variant. 3. preview(action='serve') the directory and show the preview URL. 4. Each card has a label below: style name + one-line description. 5. Add onclick highlight so the user can click to indicate their choice.
User picks by saying "Choose A" / "I want B" / "Blend A+C" etc.
Step C — Generate style-brief.md: Once user selects a style, write a style-brief.md (template in art-direction.md) in the project directory. All subsequent HTML/CSS work must follow this brief.
Step D — Ask for brand assets (logo / colors): After user picks a style, ask:
"Do you have a logo or brand color to include? You can upload an image file, and I’ll embed the logo across the slides."
If logo uploaded: embed as base64 in HTML (use base64.b64encode in bash), place in top-left or top-right corner at ≤60px height. If brand color given: override --accent in CSS token block with user's color.
2. Choose a Theme
If Art Direction was completed, the style-brief.md is the theme spec — skip this table. Otherwise, use as a quick fallback:
| Style | Background | Accent | Font | Mood |
|---|---|---|---|---|
| Dark tech | #000 / #0a0a0a | bright orange/blue/green | Inter, Space Grotesk | Bold, modern |
| Light clean | #fff / #f8f8f8 | navy, teal, coral | Inter, DM Sans | Professional, minimal |
| Gradient | dark gradient | vibrant accent | Any sans-serif | Creative, energetic |
| Corporate | #1a1a2e / white | brand color | system fonts | Trustworthy, formal |
| Playful | soft pastels | warm pop colors | Nunito, Poppins | Friendly, casual |
3. Build HTML + CSS
Create a project directory with index.html + styles.css.
Start from `assets/base.css` — structural skeleton (slide dimensions, print rules, layout helpers) with NO colors or fonts. Layer your theme on top:
/* Example theme layer — customize freely */
body {
font-family: 'Inter', sans-serif;
color: #fff;
background: #000;
}
.slide { background: #0a0a0a; }
.slide-tag { background: rgba(0,120,255,0.15); color: #0078ff; }
.card { background: rgba(255,255,255,0.04); border: 1px solid rgba(255,255,255,0.08); }Mandatory structural rules (in base.css — don't remove):
.slide { width: 1280px; height: 720px; page-break-after: always; overflow: hidden; }
@page { size: 1280px 720px; margin: 0; }Key rules:
- Use
pxunits — nevervh/vw/rem/%for slide dimensions - Google Fonts: use
<link>in<head>, export script waits for network idle - Viewport meta:
<meta name="viewport" content="width=1280"> - Content must fit within 720px height — overflow is clipped
4. Preview (Optional)
Use preview(action='serve') to preview in browser before exporting.
5. Export to PDF
python3 skills/slide-creator/scripts/export_pdf.py --dir <project-dir> --output output/<name>.pdfOptions:
--dir— directory containingindex.html(required)--output/-o— output PDF path (default:<dir>/deck.pdf)--width— slide width in px (default: 1280)--height— slide height in px (default: 720)
6. Verify
The script prints slide count and confirms output path. Extra check:
import fitz
doc = fitz.open("output/deck.pdf")
print(f"Pages: {doc.page_count}")
for p in doc:
r = p.rect
print(f" {r.width*96/72:.0f}x{r.height*96/72:.0f}px")Style Guidelines
- No default brand — every deck gets a theme tailored to its content
- Prefer Art Direction-first workflow (questions → references → user pick →
style-brief.md) - Ask the user for preference: dark/light, accent color, font, mood
- Each slide should have clear visual hierarchy: tag → title → content
- Keep text concise — slides are visual, not documents
- Use
.bg-glowwith theme-colored radial gradients for depth - Do not use
web_searchfor style exploration by default; prioritize user-provided reference images/links plus templates inart-direction.md. - When the user provides reference links, use
web_fetchto extract design cues (color tone / voice / layout), but implement final CSS using local templates and token variables. - When the user asks for "art-direction advice / style advice", always generate a visual style-picker preview page (3 options) — never rely on text-only descriptions.
- Build HTML strictly against chosen style brief, then export PDF (do not skip brief unless user explicitly opts out)
- After style is chosen, always ask about logo / brand assets before building
- For HK/TW/SG/bilingual audiences, default to bilingual layout unless user says English only
Style Microtweaks (after style is chosen)
If user says "change primary color to red" / "switch the font" / "increase corner radius", do NOT restart art direction. Instead, directly patch the --accent / --font-head / --radius CSS variable in styles.css. Only restart art direction if user wants a completely different style.
Gotchas
- Chromium: pre-installed via
workspace/setup.shon container start (~641 MB cached at~/.cache/ms-playwright/). Do NOT runplaywright installon every export — it re-downloads the same browser. Only run it ifexport_pdf.pyfails withExecutable doesn't exist, and in that case also append the command toworkspace/setup.shso it persists. - Fonts: Google Fonts need HTTP — the export script starts a local server automatically
- Emoji rendering: headless Chromium may lack emoji fonts — use SVG icons instead
- Large images: embed as base64 or use relative paths (local server serves the project dir)
- Slide overflow: content exceeding 720px height is clipped — design within bounds
- ⚠️ PDF text not selectable (verified 2026):
filter/backdrop-filterCSS on any ancestor containing text causes Chromium to rasterize that layer to bitmap during PDF export — all child text becomes pixels, not selectable. Fix: NEVER applyfilter/backdrop-filterto containers holding text. Only apply to empty decorative<div>elements (e.g..blur-layer,.glow-overlay) with no text children. Same rule applies tomix-blend-modeon text parents. Pre-export checklist: search HTML forfilter/backdrop-filteron non-decorative elements and strip them. - ⚠️ Footer / source attribution — use standard component + strict bottom-safe-area contract (verified 2026): ad-hoc footer markup causes inconsistent positioning across slides. Always use this
.slide-footerpattern for all source citations, page numbers, and disclaimers.
Hard layout contract (do not skip):
- Every non-cover slide must have a dedicated content wrapper (e.g.
.slide-body) that reserves footer space. - Hard rule:
.slide-bodymust reserve footer space with bottom-safe-area>= 96px(default 96px). Example:.slide-body { padding: 52px 72px 96px; }. - Footer must be outside normal flow:
position: absolute; bottom: 24px, as a sibling of.slide-bodydirectly under.slide. - Never place source/disclaimer text inside
.slide-body. - Cover page can be exception only when it has no
.slide-footer.
This enforces physical separation: body content area ends above a reserved footer lane, and footer stays in the canvas-bottom lane, so they never overlap regardless of content density.
<footer class="slide-footer">
<span class="footer-source">Source: CoinGecko · Coinglass · DefiLlama</span>
<span class="footer-page">03 / 12</span>
</footer> .slide-footer {
position: absolute;
bottom: 24px; left: 48px; right: 48px;
display: flex; justify-content: space-between; align-items: center;
font-size: 11px; color: rgba(255,255,255,0.35);
border-top: 1px solid rgba(255,255,255,0.08);
padding-top: 8px;
z-index: 2;
}
.slide > *:not(.bg-glow):not(.slide-footer) {
position: relative;
z-index: 1;
}
.slide-body { padding-bottom: 96px; }Never use in-flow / position: relative footers — they shift when slide content height changes. Also exclude .slide-footer from generic .slide > * stacking rules, or CSS order can accidentally override footer layering. Validation checklist (required before export): 1) every non-cover slide has .slide-body and .slide-footer as siblings; 2) .slide-body bottom padding is >=96px; 3) source/disclaimer text appears only inside .slide-footer, never in body containers.
- ⚠️ z-index / decorative overlay bug (verified 2026):
.bg-glowand other decorative pseudo-layers MUST be positioned withz-index: 0and all real slide content givenz-index: 1explicitly. If.bg-glowis a sibling of.slide > *(not a::before/::afterpseudo-element), add this rule to ensure content is never visually buried:
.slide > *:not(.bg-glow) { position: relative; z-index: 1; }
.bg-glow { position: absolute; z-index: 0; pointer-events: none; }Failure mode: PDF exports show content pushed to the bottom or invisible, even though browser preview looks fine (browser compositing handles z-order more forgivingly than Chromium's print path).
/* ===== HTML Slides Base CSS =====
Structural foundation for 1280×720 slide decks.
This file is STYLE-NEUTRAL — no colors, fonts, or brand tokens.
Copy into your project's styles.css, then add your own theme on top. */
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
-webkit-font-smoothing: antialiased;
/* Override these in your theme */
font-family: system-ui, -apple-system, sans-serif;
color: #222;
background: #fff;
}
/* === Core Slide Container === */
.slide {
width: 1280px;
height: 720px;
position: relative;
overflow: hidden;
padding: 48px 64px;
page-break-after: always;
page-break-inside: avoid;
}
/* === Print Rules (DO NOT CHANGE) === */
@page {
size: 1280px 720px;
margin: 0;
}
@media print {
body { margin: 0; }
.slide { break-inside: avoid; }
}
/* === Layout Helpers === */
.slide-header {
margin-bottom: 24px;
}
.slide-tag {
display: inline-block;
padding: 6px 16px;
border-radius: 9999px;
font-size: 13px;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.5px;
}
.slide-content {
flex: 1;
}
.slide-content h2 {
font-size: 36px;
font-weight: 800;
margin-bottom: 32px;
line-height: 1.2;
}
.slide-content.center-all {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
height: 100%;
text-align: center;
}
/* === Card Grid === */
.card-grid {
display: grid;
gap: 20px;
}
.card-grid.two-col { grid-template-columns: 1fr 1fr; }
.card-grid.three-col { grid-template-columns: 1fr 1fr 1fr; }
.card {
border-radius: 14px;
padding: 28px;
}
.card h3 {
font-size: 18px;
font-weight: 700;
margin-bottom: 8px;
}
.card p {
font-size: 14px;
line-height: 1.5;
}
/* === Pills === */
.pill {
display: inline-block;
padding: 6px 14px;
border-radius: 9999px;
font-size: 13px;
font-weight: 500;
margin: 4px;
}
/* === Slide Footer === */
.slide-footer {
position: absolute;
bottom: 24px; left: 64px; right: 64px;
display: flex;
justify-content: space-between;
font-size: 12px;
opacity: 0.4;
}
/* === Background Glow (optional — add colors in theme) === */
.bg-glow {
position: absolute;
width: 500px; height: 500px;
border-radius: 50%;
pointer-events: none;
z-index: 0;
}
.glow-center { top: 50%; left: 50%; transform: translate(-50%,-50%); }
.glow-top-right { top: -150px; right: -150px; }
.glow-bottom-left { bottom: -150px; left: -150px; }
.glow-left { top: 20%; left: -200px; }
Art Direction Reference
Detailed visual style vocabulary for building HTML slides.
---
Style Taxonomy
1. Dark Tech Minimal
Mood: Bold, modern, premium Industries: SaaS, AI, developer tools, startups Search keywords: "dark UI presentation" "dark minimal slide deck" site:dribbble.com
Background: #000 / #0a0a0a / #0d0d0d
Surface: rgba(255,255,255,0.04) borders rgba(255,255,255,0.08)
Accent: #3b82f6 (blue) / #10b981 (green) / #f59e0b (amber)
Text: #fff / #e5e7eb / #9ca3af
Font: Inter, Space Grotesk, JetBrains Mono (mono accents)
Radius: 6–12px
Glow: radial-gradient(ellipse at top, rgba(accent,0.15) 0%, transparent 60%)---
2. Light Clean Corporate
Mood: Trustworthy, professional, readable Industries: Finance, consulting, enterprise, legal Search keywords: "clean white presentation" "corporate slide design" site:behance.net
Background: #fff / #f8fafc
Surface: #f1f5f9 border #e2e8f0
Accent: #1e40af (navy) / #0f766e (teal) / #7c3aed (violet)
Text: #0f172a / #374151 / #6b7280
Font: Inter, DM Sans, Plus Jakarta Sans
Radius: 4–8px
Shadow: 0 1px 3px rgba(0,0,0,0.08)---
3. Bold Gradient
Mood: Creative, energetic, expressive Industries: Agencies, design studios, product launches, events Search keywords: "gradient slide deck" "colorful presentation design" site:dribbble.com
Background: linear-gradient(135deg, #1e1b4b 0%, #312e81 50%, #0f172a 100%)
Surface: rgba(255,255,255,0.08) borders rgba(255,255,255,0.12)
Accent: #a855f7 / #ec4899 / #06b6d4 (vivid, high contrast)
Text: #fff / rgba(255,255,255,0.7)
Font: Outfit, Nunito, Sora
Radius: 12–20px
Effect: blurred blobs (filter: blur(80px)) as background deco---
4. Playful Illustration
Mood: Friendly, casual, approachable Industries: Education, consumer apps, HR/culture, NGO Search keywords: "playful presentation design" "illustration slide deck" pastel
Background: #fffbf0 / #f0fdf4 / #fdf4ff (soft warm/cool pastels)
Surface: #fff border #e9d5ff / #bbf7d0
Accent: #f97316 (orange) / #8b5cf6 (violet) / #10b981 (green)
Text: #1f2937 / #4b5563
Font: Nunito, Poppins, Quicksand
Radius: 16–24px
Decoration: wavy SVG dividers, rounded blobs, dashed borders---
5. Newspaper / Editorial
Mood: Authoritative, journalistic, high-information Industries: Media, research, reports, policy Search keywords: "editorial layout presentation" "newspaper style slide" typography
Background: #fafaf9 / #1c1917 (dark variant)
Surface: ruled lines (border-bottom: 1px solid #e7e5e4), column grids
Accent: #dc2626 (red) / #ca8a04 (amber) — used sparingly
Text: #1c1917 / #57534e (body)
Font: Playfair Display (headings), Source Serif 4 (body), mono for data
Radius: 0px (sharp, no rounding)
Layout: multi-column grid, large pull quotes---
6. Glassmorphism
Mood: Modern, layered, premium light Industries: Tech, fintech, luxury, mobile apps Search keywords: "glassmorphism slide" "frosted glass UI presentation"
Background: linear-gradient(135deg, #667eea 0%, #764ba2 100%) or photo
Surface: background: rgba(255,255,255,0.12); backdrop-filter: blur(20px); border: 1px solid rgba(255,255,255,0.2)
Accent: #fff (primary) / #f0f9ff (secondary)
Text: #fff / rgba(255,255,255,0.8)
Font: Inter, Figtree, Geist
Radius: 16–24px
Effect: Multiple glass layers, subtle shadows---
7. Monochrome Technical
Mood: Precise, systematic, data-first Industries: Engineering, research, academic, cybersecurity Search keywords: "monochrome technical presentation" "data report slide design"
Background: #111827 / #030712
Surface: #1f2937 border #374151
Accent: #34d399 (terminal green) / #60a5fa (signal blue) — exactly one accent
Text: #f9fafb / #9ca3af
Font: JetBrains Mono, IBM Plex Mono (code/data), Inter (prose)
Radius: 2–4px
Layout: dense, grid-aligned, data heavy---
8. Warm Startup
Mood: Human, optimistic, narrative Industries: Consumer brands, D2C, social impact, storytelling Search keywords: "warm brand presentation" "human centered slide deck" startup pitch
Background: #fff7ed / #fef3c7 / #1c1917 (dark variant)
Surface: #fff border #fed7aa
Accent: #ea580c (orange) / #16a34a (green) / #b45309 (amber)
Text: #1c1917 / #78350f
Font: Plus Jakarta Sans, Lora (serif headings), DM Sans
Radius: 8–16px
Photo style: warm-toned, human subjects---
Industry → Style Quick Map
| Industry | Recommended style |
|---|---|
| SaaS / Dev tools | Dark Tech Minimal or Monochrome Technical |
| Finance / Legal | Light Clean Corporate or Newspaper Editorial |
| Creative agency | Bold Gradient or Glassmorphism |
| Education / EdTech | Playful Illustration or Warm Startup |
| AI / Research | Monochrome Technical or Dark Tech Minimal |
| Consumer brand | Warm Startup or Playful Illustration |
| Healthcare | Light Clean Corporate |
| Crypto / Web3 | Dark Tech Minimal or Glassmorphism |
| Government / Policy | Newspaper Editorial or Light Clean Corporate |
---
CSS Token Templates
Each style above maps directly to a CSS variables block. When building, open the template for the chosen style and customize accent/font to match user's brand.
Token structure (use in <style> or styles.css)
:root {
--bg-primary: /* main slide bg */
--bg-surface: /* card/panel bg */
--border-color: /* subtle dividers */
--accent: /* primary action color */
--accent-muted: /* 15% opacity version */
--text-primary: /* headings */
--text-muted: /* body/secondary */
--radius: /* border-radius */
--font-head: /* heading font */
--font-body: /* body font */
}---
Art Direction Conversation Guide
3 key questions to ask the user
1. Audience & setting — "Who is this deck for: investors, internal team, or a public keynote?" 2. Mood keyword — "How should the audience feel after viewing it? (authoritative / energetic / friendly / geeky-modern)" 3. Brand constraint — "Any brand colors, required fonts, or logo that must be included?"
Search strategy
Use web_search with these patterns to find visual references:
- Style-specific:
"dark minimal presentation 2024" site:dribbble.com - Industry-specific:
"[industry] pitch deck design" OR "slide design inspiration" - Color-specific:
"[color palette name] UI deck slides"
Presenting options to user
Present exactly 3 style options, each with:
- Style name + 1-line mood description
- 3 color hex swatches (bg / surface / accent)
- Font pairing
- Why it fits their content
style-brief.md output template
# Style Brief: [Project Name]
## Chosen Style: [Style Name]
### Color Palette
- Background: [hex]
- Surface: [hex]
- Accent: [hex]
- Text primary: [hex]
- Text muted: [hex]
### Typography
- Heading font: [name + Google Fonts URL]
- Body font: [name + Google Fonts URL]
### Visual Character
- Border radius: [px]
- Surface treatment: [description]
- Special effects: [glow / blur / grain / none]
- Layout density: [minimal / balanced / dense]
### Mood Reference
[1-2 sentence description of the visual feel]
### Search references found
- [URL or description 1]
- [URL or description 2]---
Extended Styles (Asian / Regional Aesthetics)
Notes on references
- If user provides reference images/screenshots, extract palette + spacing + shape language from images first.
- If user provides web links, use web_fetch to read page content and infer tone/structure, then map into nearest style token template.- Avoid depending on remote CSS/source-code scraping; keep implementation template-driven.
---
9. HK Financial Blue-Gold
Mood: Authoritative, institutional, premium Industries: HKEX-listed companies, HK financial institutions, cross-border finance, Web3 in HK Inspired by: HKEX annual reports, DBS/Hang Seng brand decks
Background: #0a1628 / #0d1f3c (deep navy)
Surface: rgba(212,175,55,0.08) border rgba(212,175,55,0.25) (gold tint)
Accent: #d4af37 (HKEX gold) / #c8a951 (warm gold)
Text: #f5f0e8 (warm white) / #a89a7a (muted gold)
Font: EB Garamond (headings, serif authority) + Inter (body)
Radius: 0–4px (sharp, institutional)
Effect: thin gold horizontal rule as section divider, subtle grid texture
Logo spot: top-right, 40px height---
10. Ink & Paper (Ink-Wash Minimalism)
Mood: Cultural depth, elegant restraint, East-West hybrid Industries: Cultural events, luxury brand, art foundation, Chinese heritage organizations
Background: #faf8f5 (warm paper) / #1a1a18 (ink black)
Surface: #f0ede8 border #d4cfc8
Accent: #c0392b (vermilion red) / #2c5f2e (pine green)
Text: #1a1a18 / #5a5650
Font: Noto Serif SC (Chinese headings) + Cormorant Garamond (English) + Noto Sans SC (body)
Radius: 0px
Effect: thin brush-stroke SVG rule, asymmetric layout, generous white space
Layout: right-aligned text blocks, large negative space---
11. Singapore Tech Hub
Mood: Modern, multicultural, optimistic, government-confident Industries: GovTech, smart city, regional HQ, SEA startup
Background: #fff / #f0f4f8
Surface: #e8f0fe border #c5d5f5
Accent: #e63946 (SG red) / #1d3557 (trusted blue)
Text: #1d3557 / #457b9d
Font: IBM Plex Sans (bilingual-safe, supports Chinese) + IBM Plex Mono (data)
Radius: 6–10px
Effect: subtle diagonal stripe texture, clean card shadows
Note: IBM Plex Sans covers Latin + Chinese glyphs natively---
12. Crypto Neon Underground
Mood: Hype, community, degen, memetic energy Industries: NFT project, DeFi protocol, meme coin, crypto-native community
Background: #000 / #050510
Surface: #0d0d20 border rgba(0,255,200,0.2)
Accent: #00ffcc (neon green) / #ff2d78 (hot pink) — use both freely
Text: #fff / #b0fce9
Font: Rajdhani / Exo 2 (headings) + Space Mono (data/addresses)
Radius: 4px
Effect: animated scanline CSS, glitch text effect (CSS only), neon box-shadow
Layout: asymmetric, rule-breaking, oversized numbers---
13. Silicon Valley Product Minimal
Mood: Product-led, clean, confident, conversion-focused Industries: US B2B SaaS, developer tools, product launches, PLG companies
Background: #f8fafc / #ffffff
Surface: #ffffff border #e5e7eb
Accent: #2563eb (product blue) / #14b8a6 (teal alt)
Text: #0f172a / #475569
Font: Inter (UI-safe) + Geist (headings optional)
Radius: 10–14px
Effect: minimal cards, subtle shadow (0 8px 24px rgba(15,23,42,0.06))
Layout: strong whitespace, tight hierarchy, KPI cards---
14. YC / Stripe Investor Clean
Mood: Rational, credible, metrics-first, founder-friendly Industries: US/EU startup fundraising, seed-series A pitch decks
Background: #ffffff / #f9fafb
Surface: #f3f4f6 border #d1d5db
Accent: #635bff (stripe violet) / #ff5a1f (yc orange, sparing)
Text: #111827 / #6b7280
Font: Inter + IBM Plex Sans
Radius: 6–10px
Effect: no heavy decoration, straight lines, data tables + tiny charts
Layout: investor narrative flow, one chart or one claim per slide---
15. European Editorial Luxury
Mood: Premium, restrained, high-fashion editorial Industries: Luxury brands, fashion, design studios, cultural institutions
Background: #f7f5f2 / #111111
Surface: #ece8e1 border #d6d0c7
Accent: #b08d57 (champagne gold) / #8c7355
Text: #171717 / #5b5b5b
Font: Canela/Playfair Display (headings) + Neue Haas/Inter (body fallback)
Radius: 0–4px
Effect: thin rules, oversized serif titles, magazine-like whitespace
Layout: asymmetric editorial grid, pull quotes, image-led sections---
16. California Lifestyle Gradient
Mood: Optimistic, social, creator-economy friendly Industries: US consumer apps, DTC, creator tools, community products
Background: linear-gradient(135deg, #fff7ed 0%, #ffe4e6 45%, #e0f2fe 100%)
Surface: rgba(255,255,255,0.75) border rgba(255,255,255,0.9)
Accent: #ff6b6b / #6366f1 / #06b6d4
Text: #1f2937 / #6b7280
Font: Sora (head) + Inter (body)
Radius: 14–24px
Effect: soft blob gradients, friendly icons, rounded chips
Layout: benefit-first, social proof blocks, CTA-heavy closing slide---
Updated Industry → Style Map
| Industry / Audience | Primary | Alternative |
|---|---|---|
| HKEX / HK Finance | HK Financial Blue-Gold | Light Clean Corporate |
| HK Web3 Conference | Dark Tech Minimal | Glassmorphism |
| Crypto community / NFT | Crypto Neon Underground | Dark Tech Minimal |
| CN Cultural / Heritage | Ink & Paper (Ink-Wash Minimalism) | Warm Startup |
| Singapore Government | Singapore Tech Hub | Light Clean Corporate |
| SEA Startup | Singapore Tech Hub | Bold Gradient |
| Pan-Asian Luxury | Ink & Paper (Ink-Wash Minimalism) | Glassmorphism |
| SaaS / Dev tools | Dark Tech Minimal | Monochrome Technical |
| Finance / Legal | Light Clean Corporate | Newspaper Editorial |
| Creative agency | Bold Gradient | Glassmorphism |
| Education / EdTech | Playful Illustration | Warm Startup |
| AI / Research | Monochrome Technical | Dark Tech Minimal |
| Consumer brand | Warm Startup | Playful Illustration |
| Healthcare | Light Clean Corporate | — |
| Government / Policy | Newspaper Editorial | Singapore Tech Hub |
| US Big Tech / B2B SaaS | Silicon Valley Product Minimal | Dark Tech Minimal |
| US/EU VC Fundraising | YC / Stripe Investor Clean | Light Clean Corporate |
| European Luxury / Fashion | European Editorial Luxury | Glassmorphism |
| US Consumer Growth / DTC | California Lifestyle Gradient | Warm Startup |
---
Reference Extraction Protocol (from real-world testing)
When a user provides a web URL as a style reference, follow these 7 rules to avoid misreading the style.
These were discovered through trial-and-error (e.g. operaneon.com was misread as "neon" when it was actually warm brutalist).
7 Rules for URL Reference Extraction
1. Ignore the brand name / domain name — Never infer visual style from the product's industry or name. Example: "Neo" does NOT mean neon, "Opera" does NOT mean European luxury. The URL text is a red herring.
2. Read copy tone & vocabulary — The words used on the page reveal mood:
- "surgical precision", "quiet confidence" → restrained, controlled
- "unleash", "radically", "disrupt" → bold, aggressive
- "crafted", "heritage", "timeless" → editorial, luxury
- "fast", "simple", "built for" → product-led, SaaS
3. Extract explicit color vocabulary — Look for CSS keywords in the fetched text, or color names mentioned in body text / alt tags. Warm vs cool, light vs dark, muted vs saturated. The actual words on the page are more reliable than guessing.
4. Infer layout density — Count words per section:
- Sparse (few words, large gaps) → editorial, luxury, confident
- Dense (lots of info, tight spacing) → technical, functional, data-heavy
5. Identify decorative motifs — What visual elements are mentioned or implied:
- Geometric shapes / grid lines → structural, brutalist
- Soft gradients / blobs → lifestyle, friendly
- Photography → editorial, human
- Line art / icons → technical, clean
- Typography-only → editorial, Swiss
6. Find closest template + describe delta — Don't generate from scratch. Match to the nearest template in art-direction.md, then describe what to change (e.g. "Style G but warmer, replace blue with burnt orange, add subtle grid lines").
7. When uncertain, be conservative — Under-promise the style match. Present 3 options:
- Option A = your best interpretation of the reference
- Option B = safer, cleaner variant
- Option C = more experimental variant
---
Style 17. Opera Warm Brutalist (extracted from operaneon.com)
Mood: Controlled tension, architectural precision, warm undertones \nIndustries: Architecture studios, design agencies, creative tech, European creative brands \nExtraction notes: Dark background is warm deep gray/brown (NOT black), accent is burnt orange/amber (NOT neon), typography is large light-weight tight-tracking, decorative elements are thin lines + crosshairs (NOT glow effects).
Background: #1a1814 / #252220 / #1c1a17 (warm dark gray-brown, NOT pure black)
Surface: rgba(255,255,255,0.03) border rgba(255,255,255,0.06) — thin, minimal
Accent: #e07a3a (burnt orange) / #c4622d (deep amber) — warm, NOT neon
Text: #e8e4df (warm white) / #9a9490 (muted warm gray)
Font: Space Grotesk / Helvetica Neue (headings) + Inter (body) — light weight, tight tracking
Radius: 0–2px (almost sharp, architectural)
Decorative: thin grid lines, crosshair marks (+), oversized numbers, generous negative space
Layout: editorial grid, asymmetric, content sparse but type-heavy
NOT: neon glow, cyber effects, rainbow gradients, rounded cards---
Updated Industry → Style Map (with Style 17)
| Industry / Audience | Primary | Alternative |
|---|---|---|
| HKEX / HK Finance | HK Financial Blue-Gold | Light Clean Corporate |
| HK Web3 Conference | Dark Tech Minimal | Glassmorphism |
| Crypto community / NFT | Crypto Neon Underground | Dark Tech Minimal |
| CN Cultural / Heritage | Ink & Paper (Ink-Wash Minimalism) | Warm Startup |
| Singapore Government | Singapore Tech Hub | Light Clean Corporate |
| SEA Startup | Singapore Tech Hub | Bold Gradient |
| Pan-Asian Luxury | Ink & Paper (Ink-Wash Minimalism) | Glassmorphism |
| SaaS / Dev tools | Dark Tech Minimal | Monochrome Technical |
| Finance / Legal | Light Clean Corporate | Newspaper Editorial |
| Creative agency | Bold Gradient | Glassmorphism |
| Education / EdTech | Playful Illustration | Warm Startup |
| AI / Research | Monochrome Technical | Dark Tech Minimal |
| Consumer brand | Warm Startup | Playful Illustration |
| Healthcare | Light Clean Corporate | — |
| Government / Policy | Newspaper Editorial | Singapore Tech Hub |
| US Big Tech / B2B SaaS | Silicon Valley Product Minimal | Dark Tech Minimal |
| US/EU VC Fundraising | YC / Stripe Investor Clean | Light Clean Corporate |
| European Luxury / Fashion | European Editorial Luxury | Glassmorphism |
| US Consumer Growth / DTC | California Lifestyle Gradient | Warm Startup |
| Architecture / Design Studio | Opera Warm Brutalist | European Editorial Luxury |
| Creative Tech | Opera Warm Brutalist | Dark Tech Minimal |
Content Scaffolding — Slide Structure Templates
Standard page structures for common presentation scenarios. Agent picks the matching template in Step 0, then fills content per page.
---
Template: pitch-deck
Target: Investor / VC meetings Slide count: 10–12 Tone: Confident, data-driven, concise
| # | Page Title | Required Content |
|---|---|---|
| 1 | Cover | Company name, tagline, logo, presenter name |
| 2 | Problem | Pain point — 1 headline stat + 2–3 bullets |
| 3 | Solution | Product/offer in one sentence, visual if possible |
| 4 | Market Size | TAM / SAM / SOM with source |
| 5 | Product | Key features — 3 cards max |
| 6 | Traction | GMV / users / growth chart — real numbers |
| 7 | Business Model | How money is made — simple diagram |
| 8 | Competitive Landscape | 2×2 matrix or feature comparison |
| 9 | Team | Photos + name + 1-line credential each |
| 10 | Roadmap | 3–4 milestones on a timeline |
| 11 | Financials | Burn, runway, key projections |
| 12 | Ask | Round size, use of funds, CTA |
---
Template: conference-keynote
Target: Public talk, conference stage, summit Slide count: 8–15 Tone: Engaging, narrative, punchy
| # | Page Title | Required Content |
|---|---|---|
| 1 | Cover | Talk title, speaker name + title, event name |
| 2 | Hook / Opening | Bold statement or question to grab attention |
| 3 | Context | Why this topic matters now — 1 key stat |
| 4–N | Main Points | 3–5 key ideas, each on 1–2 slides |
| N+1 | Case Study / Demo | Real example with outcome |
| N+2 | Takeaways | 3 actionable bullets |
| Last | Thank You / CTA | Next step, QR code, contact info |
Rule: Each slide body ≤ 3 bullets, each bullet ≤ 12 words.
---
Template: product-launch
Target: Press, launch event, social media-ready Slide count: 8–10 Tone: Exciting, visual-first, benefit-led
| # | Page Title | Required Content |
|---|---|---|
| 1 | Cover | Product name, hero visual, launch date |
| 2 | The Problem | What was broken before |
| 3 | Introducing [Product] | Hero feature / one big visual |
| 4–6 | Key Features | One feature per slide, icon + headline + 1 line |
| 7 | Comparison | Before vs After, or vs competitors |
| 8 | Social Proof | Quotes, beta users, partner logos |
| 9 | Pricing / Access | Tiers or access URL |
| 10 | CTA | Sign up / try free / join waitlist |
---
Template: research-report
Target: Internal team, policy makers, analysts Slide count: 12–20 Tone: Authoritative, data-heavy, neutral
| # | Page Title | Required Content |
|---|---|---|
| 1 | Cover | Report title, org/author, date |
| 2 | Executive Summary | 3–5 key findings in bullets |
| 3 | Methodology | Data sources, timeframe, scope |
| 4–N | Findings | One finding per slide — chart + insight sentence |
| N+1 | Implications | What this means — 3 bullets |
| N+2 | Recommendations | Actionable next steps |
| Last | Appendix / Source | Citations, data tables |
Rule: Every data point must have a source label (bottom of slide, small text).
---
Bilingual Layout Guide
Use when audience is bilingual (HK, Singapore, TW, global Chinese events) or user mentions two languages.
Heading structure
<h1 class="slide-title">Main Title in English</h1>
<p class="slide-subtitle">Chinese subtitle or explanation</p>Body bullets
- Primary language: Chinese (larger, --text-primary)
- Secondary: English in parentheses or smaller line below (--text-muted, 0.85em)
CSS for bilingual
.slide-subtitle {
font-size: 18px;
color: var(--text-muted);
margin-top: 4px;
font-weight: 400;
}
.bullet-en {
font-size: 14px;
color: var(--text-muted);
margin-top: 2px;
}When to use each mode
| Signal from user | Layout |
|---|---|
| "Chinese + English" / "bilingual" / "dual-language" | Full bilingual |
| Audience is HK / SG / TW / Chinese-speaking diaspora | Default bilingual unless told otherwise |
| "English only" / explicitly request English only | English only |
| Audience is pure Mainland CN | Chinese only |
| International / Western audience | English only |
#!/usr/bin/env python3
"""
HTML Slide Deck → PDF exporter using Playwright.
Serves the HTML locally, then uses headless Chromium to print exact 16:9 pages.
"""
import argparse
import asyncio
import functools
import http.server
import os
import subprocess
import sys
import threading
from pathlib import Path
def _ensure_chromium() -> None:
"""One-time chromium bootstrap per workspace.
The base image installs chromium into ~/.cache/ms-playwright/, but in some
environments that path is ephemeral across pod restarts. Detect once, install
if missing, then append the install command to workspace/setup.sh so future
container starts pre-install it (zero cost on subsequent runs).
Idempotent: silent no-op when chromium is already present.
"""
cache = Path.home() / ".cache" / "ms-playwright"
have = (
list(cache.glob("chromium-*/chrome-linux/chrome"))
or list(cache.glob("chromium_headless_shell-*/chrome-headless-shell-linux64/chrome-headless-shell"))
)
if have:
return
print("[setup] Chromium not found — installing once for this workspace (~30s)…", flush=True)
r = subprocess.run(
[sys.executable, "-m", "playwright", "install", "chromium"],
check=False,
)
if r.returncode != 0:
print("[setup] playwright install chromium failed — PDF export will fail", file=sys.stderr, flush=True)
return
# Persist to workspace/setup.sh so the next pod start has chromium ready.
setup_sh = Path("/data/workspace/setup.sh")
needle = "playwright install chromium"
existing = setup_sh.read_text() if setup_sh.exists() else "#!/bin/bash\n"
if needle in existing:
return
block = (
"\n# slide-creator: ensure chromium for PDF export (auto-added by export_pdf.py)\n"
"pip install -q playwright PyMuPDF 2>/dev/null && "
"python3 -m playwright install chromium 2>/dev/null\n"
)
try:
setup_sh.write_text(existing.rstrip() + "\n" + block)
print(f"[setup] Appended chromium install to {setup_sh} (persists across restarts)", flush=True)
except Exception as e:
print(f"[setup] Could not write {setup_sh}: {e}", file=sys.stderr, flush=True)
async def export_pdf(html_dir: str, output_path: str, width: int = 1280, height: int = 720):
"""Export all slides in html_dir/index.html to a single PDF."""
from playwright.async_api import async_playwright
# 1. Start a local HTTP server (fonts need http:// not file://)
port = 18923
handler = functools.partial(http.server.SimpleHTTPRequestHandler, directory=html_dir)
httpd = http.server.HTTPServer(("127.0.0.1", port), handler)
server_thread = threading.Thread(target=httpd.serve_forever, daemon=True)
server_thread.start()
try:
async with async_playwright() as p:
browser = await p.chromium.launch()
page = await browser.new_page(viewport={"width": width, "height": height})
# Navigate and wait for fonts + images
await page.goto(f"http://127.0.0.1:{port}/index.html", wait_until="networkidle")
# Extra wait for Google Fonts rendering
await page.wait_for_timeout(1500)
# Count slides
slide_count = await page.eval_on_selector_all(
"section.slide", "els => els.length"
)
print(f"Found {slide_count} slides ({width}x{height})")
# Generate PDF with exact page size
await page.pdf(
path=output_path,
width=f"{width}px",
height=f"{height}px",
margin={"top": "0", "right": "0", "bottom": "0", "left": "0"},
print_background=True,
prefer_css_page_size=False,
)
print(f"✅ PDF saved → {output_path}")
await browser.close()
finally:
httpd.shutdown()
def main():
parser = argparse.ArgumentParser(description="Export HTML slide deck to 16:9 PDF")
parser.add_argument("--dir", default=".", help="Directory containing index.html")
parser.add_argument("--output", "-o", default=None, help="Output PDF path")
parser.add_argument("--width", type=int, default=1280, help="Slide width in px")
parser.add_argument("--height", type=int, default=720, help="Slide height in px")
args = parser.parse_args()
_ensure_chromium()
html_dir = os.path.abspath(args.dir)
if args.output:
output = args.output
else:
output = os.path.join(html_dir, "deck.pdf")
asyncio.run(export_pdf(html_dir, output, args.width, args.height))
if __name__ == "__main__":
main()
Related skills
How it compares
slide-creator is an agent skill for build 16:9 slide decks as html and export to pdf for presentation-ready deliverables, not a generic alternative.
FAQ
Who is slide-creator for?
Developers using Office & Documents workflows with agent-guided SKILL.md steps.
When should I use slide-creator?
Build 16:9 slide decks as HTML and export to PDF for presentation-ready deliverables.
Is slide-creator safe to install?
Review the Security Audits panel on this page before installing in production.