OPF — Open Presentation Format
OPF is an open-source JSON format for describing presentations. It separates content intent from rendering complexity, letting AI agents produce slide decks without wrestling with OOXML.
Document Structure
An OPF document has four required top-level fields:
{
"$schema": "https://pptx.dev/schema/opf/v1",
"version": "1.0",
"meta": { ... }, // Title, audience, narrative, tags
"design": { ... }, // Colors, fonts, dimensions, brand
"slides": [ ... ], // Ordered array of slides
"presenterGuide": "", // Optional global notes
"extensions": {} // Optional custom data
}metarequiredHigh-level presentation metadata. Only `title` is required. Everything else helps the AI engine make better design choices.
title*filenamesubtitleauthorcompanyaudiencepurposenarrativelanguagetagsmeta.narrativeControl the storytelling approach. Reference a named template or describe freely.
templatedescriptionkeyMessagestonedurationMinutesdesignrequiredVisual design system. Reference named schemes from pptx.gallery or define custom values.
themecolorsfontsdimensionsbackgroundbrandlayoutPreferencesSlides
Each slide has an ID, a layout reference, and an array of elements:
{
"id": "revenue-slide",
"layout": "content-with-chart",
"section": "Financial Overview",
"elements": [
{
"id": "title",
"type": "text",
"slot": "title",
"content": { "text": "Revenue Growth" }
},
{
"id": "chart",
"type": "chart",
"slot": "main",
"chartType": "bar",
"data": {
"labels": ["Q1", "Q2", "Q3", "Q4"],
"datasets": [{
"label": "Revenue ($M)",
"values": [12, 19, 24, 31],
"color": "#22c55e"
}]
}
}
],
"notes": "Revenue grew 34% YoY driven by enterprise expansion.",
"transition": { "type": "fade", "duration": 0.5 }
}Element Types
textRich text with formatting runs, markdown, or bullet lists
imageImages with fit, border radius, shadow, and caption
chartBar, line, pie, donut, area, scatter, radar, waterfall, funnel, treemap, combo
tableTabular data with headers, styled rows, and formatting
shapeRectangles, circles, arrows, lines, stars, callouts, custom SVG paths
codeCode blocks with syntax highlighting and line numbers
videoEmbedded video with poster frame and autoplay
groupNested container for grouping multiple elements
placeholderAI instruction — describes what to generate
Three Ways to Provide Design Choices
1. Reference pptx.gallery
Use named schemes from the curated gallery at pptx.gallery. Browse themes, color schemes, font pairings, layouts, and narrative templates.
"colors": { "scheme": "ocean-depth" }2. Custom JSON with validation
Define every color, font, and layout inline. Use the JSON Schema at https://pptx.dev/schema/opf/v1 for IDE autocomplete and CI validation.
"colors": { "primary": "#1a1a2e", "accent": "#e94560" }3. AI-generated from natural language
In the Studio, describe what you want in plain language. The AI agent constructs the OPF JSON from your intent, referencing gallery options when appropriate.
"Clean, modern, dark theme for a tech startup pitch"Markdown DSL
OPF has a Markdown alias designed for humans and LLMs. It is a format, not a new schema: every Markdown document parses to the same JSON, and every OPF JSON document serializes to Markdown. JSON is the canonical form; the Markdown DSL is for editing comfort.
Document metadata lives in YAML frontmatter. Each slide is an h2 heading with an optional attribute block. Element IDs, slots, and layout hints go in {key=value} attribute blocks — the same idea as Pandoc.
---
$schema: https://pptx.dev/schema/opf/v1
version: "1.0"
meta:
title: Board QBR
design:
theme: corporate-minimal
---
## Revenue Growth {id=revenue, layout=content-with-chart, section=Financials}
{id=title, slot=title}
Revenue Growth
{id=summary, slot=body}
We grew 34% YoY driven by enterprise expansion.
- Enterprise ARR up 42%
- Net retention at 128%
Sugar and escape hatches
Common elements have sugar: headings and paragraphs become text, GFM tables become table,  becomes image, and fenced code blocks become code. Anything the sugar cannot express round-trips losslessly through an escape-hatch fence:
```opf-element
id: chart
type: chart
chartType: bar
data:
labels: [Q1, Q2, Q3, Q4]
datasets:
- label: Revenue ($M)
values: [12, 19, 24, 31]
color: "#22c55e"
```
Charts, shapes, videos, groups, and placeholders always use the escape hatch. Text elements with explicit styling and anything else sugar cannot represent also fall back automatically. The playground toggle lets you flip between JSON, YAML, and Markdown on the same document.
JSON Schema
The full JSON Schema is published at https://pptx.dev/schema/opf/v1. Use it for editor autocomplete, CI validation, or building custom tooling.