Loading...
Loading...
Build professional slide decks from YAML and export to HTML or PDF. Use when users want to create presentations, slide decks, board decks, pitch decks, or quarterly reviews. Also use when users want to modify an existing Lucida deck, add slides, change themes, add logos, or export slides to PDF. Triggers on "create a deck", "make slides", "build a presentation", "quarterly review deck", "board deck", "pitch deck", "export slides to PDF", "lucida", or any task involving structured slide content.
npx skill4agent add pengelbrecht/lucida lucida.slides.yamlnpx lucida-slides build deck.slides.yaml # → deck-slides.html
npx lucida-slides pdf deck.slides.yaml # → deck-slides.html + deck-slides.pdf
npx lucida-slides pdf deck.slides.yaml --open # build + open PDF
npx lucida-slides build content/*.slides.yaml # batch buildnpx playwright install chromiumreferences/slide-craft.mdreferences/slide-craft.mdreferences/themes.mdexamples/starter-deck.mdmeta:
title: "Deck Title"
theme: aurora # theme name (resolves to themes/<name>.yaml)
footer: "Company · Q4 2025"
lang: en
slides:
- variant: hero
title: "Welcome"
# ... slide content| Field | Required | Description |
|---|---|---|
| yes | HTML |
| yes | Theme file name (without |
| no | Text shown in bottom nav bar |
| no | HTML lang attribute (default: |
| no | Raw CSS injected after all theme/component styles |
slides- variant: hero # optional: hero, dark, warm, alert
label: "Section Name" # small uppercase label above title
title: "Slide Title" # main heading
title_style: "font-size:52px;" # optional inline CSS
subtitle: "Explanatory text"
subtitle_style: "..."
# ... then components (kpis, table, bullets, etc.)
# ... or layout with columns| Variant | Typical use |
|---|---|
| (none) | Default light background |
| Title/opening slides — bold gradient, white text |
| Closing/summary slides — dark gradient, white text |
| Soft tinted background for variety |
| Light red/pink for risk or warning slides |
| Syntax | Result |
|---|---|
| bold text |
| Colored text using theme CSS variable |
| en-dash (–) |
| em-dash (—) |
| HTML entities passed through ( |
kpis:
- value: "$10.2M"
label: "ARR"
- value: "130%"
label: "net dollar retention"
- value: "94%"
label: "gross margin"table:
headers: ["Segment", "ARR", "Growth"]
rows:
- ["Enterprise", "$5.8M", "+68%"] # simple row
- row: ["Mid-Market", "$2.9M", "+41%"] # row with options
highlight: green # tints row background
style: "border-top:2px solid var(--border);" # custom CSS
- ["SMB", {text: "$1.5M", color: red, bold: true}, "+12%"] # formatted celltextvaluecolorgreenredprimaryboldstylebullets:
- text: "Main point"
sub: "Supporting detail"
- text: "Another point"callout:
color: green # primary, green, gold, red, amber, navy
title: "Key insight"
text: "Explanation here."
style: "margin-top:16px;" # optionalstat_boxes:
- value: "$10.2M"
label: "total ARR"
color: green # optional: colors the value
- value: "528"
label: "customers"bar_chart:
bars:
- label: "Q1"
width: "32%"
value: "$3.2M"
color: "var(--primary-light)"
- label: "Q4"
width: "100%"
value: "$10.2M"
color: "var(--primary)"ghost - label: "Product A"
width: "65%"
value: "65%"
color: green
ghost:
width: "80%"
color: amberdonut_chart:
size: 120 # optional, px (default 120)
segments:
- value: 57
color: green
label: "Enterprise"
- value: 28
color: primary
label: "Mid-Market"
- value: 15
color: amber
label: "SMB"displaydisplay: "$5.8M""57%"line_chart:
height: 120 # optional, px (default 120)
lines:
- label: "Revenue"
color: green
points: [3.2, 4.8, 6.8, 10.2]
- label: "Costs"
color: red
points: [2.8, 3.4, 4.1, 5.2]
x_labels: ["Q1", "Q2", "Q3", "Q4"]fill: falsesummary_grid:
items:
- value: "$10.2M"
label: "ARR"
color: green
- value: "130%"
label: "NRR"
color: gold
- value: "5.2x"
label: "LTV:CAC"
total: # optional bottom row
label: "Near break-even"
value: "$40K net burn"quadrant_grid:
- title: "Strengths"
bg: "#ecfdf5"
border: "#a7f3d0"
title_color: "var(--green-dark)"
items:
- "**Feature A** — 9-month head start"
- "**API flexibility** — developers choose us 3:1"
- title: "Weaknesses"
bg: "#fff1f2"
border: "#fecaca"
title_color: "var(--red)"
items:
- "**Mobile** — no native app yet"actions:
- num: 1
text: "**Ship the Growth tier** to reduce churn"
impact: "Target: cut churn from 4.2% to 2.5%"
- num: 2
text: "**Double enterprise pipeline**"
impact: "Target: $8M qualified pipeline"html: |
<div style="display:grid;grid-template-columns:1fr 1fr 1fr;gap:20px;">
<div style="padding:16px;border-radius:8px;background:rgba(255,255,255,0.06);">
<div style="font-weight:600;">Custom content</div>
</div>
</div>- title: "Revenue Breakdown"
layout: cols # or cols-3
layout_style: "grid-template-columns: 3fr 2fr;" # optional custom widths
columns:
- card: "Left Card"
table: { ... }
- content:
- callout: { ... }
- callout: { ... }cardcontent- card: "Card Title" # title shown as small uppercase label
style: "..." # optional card CSS
table: { ... } # any component(s)
content: # or a content array
- callout: { ... }
- stat_boxes: [...]themes/meta.themeauroranavyterracottawinedemo-tealreferences/themes.mdcurrentColor# Icon logo with company name text:
logo:
svg: '<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">...</svg>'
text: "Company Name"
# Wordmark logo (wide text-based logo):
logo:
style: "height:16px;"
svg: '<svg viewBox="0 0 252 27" xmlns="http://www.w3.org/2000/svg">...</svg>'stylenpx lucida-slides pdf deck.slides.yaml --opennpx playwright install chromium