Presentation
Open-source JSON format for describing PowerPoint presentations. Agents describe narratives, content, audience, reusable assets, and design — the engine handles OOXML complexity. Fields that reference catalog…
https://openpresentation.org/schema/opf/v1
spec/schemas/opf.schema.json
Field index
| Field | Type | Req | Default | Description |
|---|---|---|---|---|
| $schema | const | — | — | Optional OPF schema version. When omitted, validators and engines should assume the latest supported OPF schema. |
| name | string | — | — | Display name of the presentation for GUI/TUI lists, library/search indexing, OS-level metadata, and default export filenames. This is deck identity, not slide content. Use slides[].title and slides[].subtitle for text that should appear on presented slides. |
| description | string | — | — | Free-form prose describing what this presentation is about. Used by agents and humans as a deck-level summary; complements purpose (the goal) and narrative (the structured storyline). Round-trips to OOXML 'docProps/core.xml' as '<dc:description>' (PowerPoint surfaces this as the… |
| filename | string | — | — | Optional base filename for exports (without extension). Engine strips a trailing .pptx, .pdf, .png, or .svg (case-insensitive) and appends the target format's extension. When omitted, the engine slugifies name when present. See /docs/opf for full validation rules. |
| organization | ref:Organization | array<ref:Organization> | — | — | Organization associated with the presentation, usually the presenting company. Array form supports hosts, partners, clients, and sponsors. The primary organization (declared via Organization.role or, if no role is set, the first item) drives default branding such as cover-slide… |
| speaker | ref:Speaker | array<ref:Speaker> | — | — | Person presenting the deck. Array form supports panels and multi-speaker decks. Used for cover slides, bio slides, footers, and panel attribution. |
| author | string | array<string> | — | — | Optional credit for the person who authored or contributed to the deck, distinct from speaker. Array form supports multiple contributors. Round-trips to OOXML 'docProps/core.xml' as '<dc:creator>' (semicolon-joined when multiple) and seeds '<cp:lastModifiedBy>' on first write; s… |
| audience | string | array<string | ref:Audience> | — | — | Intended audiences for the presentation. Accepts either: - A single string shorthand: free-form description ('Series B investors'), an audiences catalog id ('executives'), an HTTPS URL, or a 'pkg:' reference. - An array of string shorthands and/or inline Audience objects for cus… |
| purpose | string | ref:Purpose | — | — | Primary goal of the presentation. Accepts either: - A string shorthand: free-form goal ('Raise a Series B round of $30M'), a purposes catalog id ('decide', 'align'), an HTTPS URL, or a 'pkg:' reference. - An inline Purpose object for custom purpose metadata or catalog-backed ove… |
| language | string | ref:Language | — | — | Language for the presentation content. Accepts either: - A string shorthand: a BCP-47 language tag ('en-US', 'en-GB', 'ja-JP', 'fr'), a languages catalog id ('english', 'japanese'), an HTTPS URL, or a 'pkg:' reference. - An inline Language object for custom language metadata or… |
| tone | string | ref:Tone | — | — | Desired tone for the presentation. Accepts either: - A string shorthand: a tones catalog id ('formal'), an HTTPS URL, or a 'pkg:' reference. - An inline Tone object for custom tone metadata or catalog-backed overrides. Object form mirrors https://openpresentation.org/schema/opf-… |
| takeaway | string | array<string> | — | — | Audience-facing takeaway the presentation should leave behind. Array form supports multiple takeaways. Deck-level intent used by AI to seed and pressure-test slide content. |
| duration | integer | — | — | Target presentation duration, as an integer number of minutes. Used by AI to set pace and depth, and to compare against the resolved narrative's durationRange. |
| tags | array<string> | — | — | Free-form labels used for categorization, search, and filtering. Lowercase kebab-case is recommended for consistency across a deck library. |
| design | ref:Design | — | — | Optional design system covering theme, color scheme, font scheme, dimensions, background, logo, watermark, header, and footer applied to the deck. When omitted, engines use their default design configuration. |
| narrative | string | ref:Narrative | — | — | Structured storyline describing the deck's arc and beats. Resolves to the 'id' of a 'narratives' catalog record. Accepts two forms: - String shorthand for the common case: 'narrative = "classic-story"'. Accepts a bare id (lowercase kebab-case), an HTTPS URL pointing at a record… |
| slides | array<ref:Slide> | yes | — | Ordered array of slides that make up the presentation. |
| assets | ref:Assets | — | — | Optional reusable asset registry for images, data files, videos, documents, fonts, and other resources referenced elsewhere in the deck via 'asset:<id>' strings. |
| catalogs | ref:Catalogs | — | — | Optional per-kind catalog overrides. Each kind may declare a non-default 'source' and/or inline 'records' that override or supplement the default catalog at https://www.pptx.gallery/<kind>. References elsewhere in the document (e.g. design.theme, narrative) resolve through this… |
| extensions | object | — | — | Custom data passthrough for agent workflows; ignored by the engine but preserved across read/write round-trips. |
$schema
Type: const · Optional · Default: —
Optional OPF schema version. When omitted, validators and engines should assume the latest supported OPF schema.
{
"$schema": "https://openpresentation.org/schema/opf/v1"
}name
Type: string · Optional · Default: —
Display name of the presentation for GUI/TUI lists, library/search indexing, OS-level metadata, and default export filenames. This is deck identity, not slide content. Use slides[].title and slides[].subtitle for text that should appear on presented slides.
{
"name": "Q4 2026 Business Review"
}description
Type: string · Optional · Default: —
Free-form prose describing what this presentation is about. Used by agents and humans as a deck-level summary; complements purpose (the goal) and narrative (the structured storyline). Round-trips to OOXML 'docProps/core.xml' as '<dc:description>' (PowerPoint surfaces this as the…
{
"description": "Quarterly business review covering revenue, product, and hiring milestones for the executive team."
}filename
Type: string · Optional · Default: —
Optional base filename for exports (without extension). Engine strips a trailing .pptx, .pdf, .png, or .svg (case-insensitive) and appends the target format's extension. When omitted, the engine slugifies name when present. See /docs/opf for full validation rules.
{
"filename": "q4-2026-business-review"
}organization
Type: ref:Organization | array<ref:Organization> · Optional · Default: —
Organization associated with the presentation, usually the presenting company. Array form supports hosts, partners, clients, and sponsors. The primary organization (declared via Organization.role or, if no role is set, the first item) drives default branding such as cover-slide…
{
"organization": "organization-value"
}speaker
Type: ref:Speaker | array<ref:Speaker> · Optional · Default: —
Person presenting the deck. Array form supports panels and multi-speaker decks. Used for cover slides, bio slides, footers, and panel attribution.
{
"speaker": "speaker-value"
}audience
Type: string | array<string | ref:Audience> · Optional · Default: —
Intended audiences for the presentation. Accepts either: - A single string shorthand: free-form description ('Series B investors'), an audiences catalog id ('executives'), an HTTPS URL, or a 'pkg:' reference. - An array of string shorthands and/or inline Audience objects for cus…
{
"audience": "executives"
}purpose
Type: string | ref:Purpose · Optional · Default: —
Primary goal of the presentation. Accepts either: - A string shorthand: free-form goal ('Raise a Series B round of $30M'), a purposes catalog id ('decide', 'align'), an HTTPS URL, or a 'pkg:' reference. - An inline Purpose object for custom purpose metadata or catalog-backed ove…
{
"purpose": "Raise a Series B round of $30M"
}language
Type: string | ref:Language · Optional · Default: —
Language for the presentation content. Accepts either: - A string shorthand: a BCP-47 language tag ('en-US', 'en-GB', 'ja-JP', 'fr'), a languages catalog id ('english', 'japanese'), an HTTPS URL, or a 'pkg:' reference. - An inline Language object for custom language metadata or…
{
"language": "en-US"
}tone
Type: string | ref:Tone · Optional · Default: —
Desired tone for the presentation. Accepts either: - A string shorthand: a tones catalog id ('formal'), an HTTPS URL, or a 'pkg:' reference. - An inline Tone object for custom tone metadata or catalog-backed overrides. Object form mirrors https://openpresentation.org/schema/opf-…
{
"tone": "formal"
}takeaway
Type: string | array<string> · Optional · Default: —
Audience-facing takeaway the presentation should leave behind. Array form supports multiple takeaways. Deck-level intent used by AI to seed and pressure-test slide content.
{
"takeaway": "Agent latency is the new bottleneck for AI products."
}duration
Type: integer · Optional · Default: —
Target presentation duration, as an integer number of minutes. Used by AI to set pace and depth, and to compare against the resolved narrative's durationRange.
{
"duration": 1
}design
Type: ref:Design · Optional · Default: —
Optional design system covering theme, color scheme, font scheme, dimensions, background, logo, watermark, header, and footer applied to the deck. When omitted, engines use their default design configuration.
{
"design": "design-value"
}narrative
Type: string | ref:Narrative · Optional · Default: —
Structured storyline describing the deck's arc and beats. Resolves to the 'id' of a 'narratives' catalog record. Accepts two forms: - String shorthand for the common case: 'narrative = "classic-story"'. Accepts a bare id (lowercase kebab-case), an HTTPS URL pointing at a record…
{
"narrative": "classic-story"
}slides
Type: array<ref:Slide> · Required · Default: —
Ordered array of slides that make up the presentation.
{
"slides": []
}assets
Type: ref:Assets · Optional · Default: —
Optional reusable asset registry for images, data files, videos, documents, fonts, and other resources referenced elsewhere in the deck via 'asset:<id>' strings.
{
"assets": "assets-value"
}catalogs
Type: ref:Catalogs · Optional · Default: —
Optional per-kind catalog overrides. Each kind may declare a non-default 'source' and/or inline 'records' that override or supplement the default catalog at https://www.pptx.gallery/<kind>. References elsewhere in the document (e.g. design.theme, narrative) resolve through this…
{
"catalogs": "catalogs-value"
}extensions
Type: object · Optional · Default: —
Custom data passthrough for agent workflows; ignored by the engine but preserved across read/write round-trips.
{
"extensions": {}
}