{}OPF
DocsReferenceView source

OPF Presentation Schema Reference

This reference documents the author-facing shape of a complete *.opf.json presentation document. It summarizes the canonical schema in spec/schemas/opf.schema.json; the schema remains the source of truth for validators.

Document Contract

  • Schema id: https://openpresentation.org/schema/opf/v1
  • Required top-level fields: slides
  • Additional top-level fields: not allowed

Top-Level Fields

FieldRequiredTypeNotes
$schemanoconst:"https://openpresentation.org/schema/opf/v1"Optional OPF schema version. When omitted, validators and engines should assume the latest supported OPF schema.
namenostringDisplay 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...
descriptionnostringFree-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/co...
filenamenostringOptional 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 pr...
organizationnooneOf: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...
speakernooneOf: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.
authornooneOf: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 wh...
audiencenooneOf:string / array<oneOf: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 arr...
purposenooneOf:string / ref:PurposePrimary 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 Pu...
languagenooneOf:string / ref:LanguageLanguage 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...
tonenooneOf:string / ref:ToneDesired 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...
takeawaynooneOf: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.
durationnointegerTarget 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.
tagsnoarray<string>Free-form labels used for categorization, search, and filtering. Lowercase kebab-case is recommended for consistency across a deck library.
designnoref:DesignOptional 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.
narrativenooneOf:string / ref:NarrativeStructured 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...
slidesyesarray<ref:Slide>Ordered array of slides that make up the presentation.
assetsnoref:AssetsOptional reusable asset registry for images, data files, videos, documents, fonts, and other resources referenced elsewhere in the deck via 'asset:<id>' strings.
catalogsnoref:CatalogsOptional 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...
extensionsnoobjectCustom data passthrough for agent workflows; ignored by the engine but preserved across read/write round-trips.

Object And Type Reference

Composition

  • Type: object
  • Required fields: none
  • Purpose: Portable dynamic composition. Slide fields override the resolved layout. Nested groups arrange their children independently, inheriting only minFontSize and overflow. Explicit promoted regions retain their positions.
FieldRequiredTypeNotes
modenoenum:auto | grid | row | columnauto chooses a grid from available space and content; grid uses columns; row and column use one horizontal or vertical track.
columnsnointegerColumn count for grid. In auto mode this caps the number of columns.
gapnonumberSpace between cells as a fraction of the container short edge (canvas at slide root). Default 0.03333333333333333.
paddingnonumberInset as a fraction of the container short edge. Default 0.08 on a slide, 0 inside a group.
weightsnoarray<number>Relative track sizes: columns for row/grid/auto, rows for column. Omitted tracks have weight 1; extra weights are ignored.
minFontSizenonumberMinimum readable text size in reference pixels at a 720-pixel canvas short edge. Default 16. Overflow is diagnosed when text cannot fit at this size.
overflownoenum:warn | errorwarn returns diagnostics for content that does not fit; error rejects layout. Content is never silently removed. Default warn.

Assets

  • Type: object
  • Required fields: none
  • Purpose: Reusable asset registry for resources used by slides, charts, metadata, and design. Keys are stable asset ids referenced elsewhere as 'asset:<id>'. Each asset can be a source string or an object with src plus optional metadata.

No named properties.

Asset

  • Type: oneOf:string / object
  • Required fields: none
  • Purpose: Reusable or inline resource. A string is shorthand for { "src": value }. Source strings accept 'asset:<id>' references, HTTPS URLs, data URIs, relative paths resolved against the OPF file location, or local filesystem paths. Use object form when metadata such as alt text, title, mediaType, or format matters.

No named properties.

Audience

  • Type: anyOf:schema / schema
  • Required fields: none
  • Purpose: Inline audience metadata for the presentation. Use 'id' to reference an audiences catalog record and override selected fields, or use 'name' for a custom inline audience.
  • Conditional requirement: id or name
FieldRequiredTypeNotes
idnostringOptional audiences catalog id to resolve before applying inline overrides.
namenostringHuman-readable audience name shown in pickers.
summarynostringOne-sentence positioning of the audience.
descriptionnostringLonger prose describing the audience and how to address them.
senioritynoenum:ic | manager | director | vp | c-suite | mixedTypical seniority level of the audience.
technicalFluencynoenum:low | medium | high | mixedTypical technical fluency of the audience.
decisionPowernoenum:informational | advisory | decision-makerWhether the audience is expected to be informed, advise, or decide.
attentionBudgetMinutesnonumberRealistic upper bound on focused attention for a single presentation, in minutes.
recommendedNarrativesnoarray<string>Soft cross-link: narrative-catalog ids that work well for this audience.
recommendedTonesnoarray<string>Soft cross-link: tone-catalog ids that work well for this audience.
tagsnoarray<string>Free-form labels for filtering and search.

Purpose

  • Type: anyOf:schema / schema
  • Required fields: none
  • Purpose: Inline purpose metadata for the presentation. Use 'id' to reference a purposes catalog record and override selected fields, or use 'name' for a custom inline purpose.
  • Conditional requirement: id or name
FieldRequiredTypeNotes
idnostringOptional purposes catalog id to resolve before applying inline overrides.
namenostringHuman-readable purpose name shown in pickers.
summarynostringOne-sentence positioning of the purpose.
descriptionnostringLonger prose describing when to use this purpose and how it should shape a deck.
outcomenostringDesired audience outcome after the presentation.
successCriterianoarray<string>Observable signals that the deck accomplished this purpose.
recommendedNarrativesnoarray<string>Soft cross-link: narrative-catalog ids that work well for this purpose.
recommendedTonesnoarray<string>Soft cross-link: tone-catalog ids that work well for this purpose.
tagsnoarray<string>Free-form labels for filtering and search.

Language

  • Type: anyOf:schema / schema
  • Required fields: none
  • Purpose: Inline language metadata for the presentation. Use 'id' to reference a languages catalog record and override selected fields, or use 'bcp47' for a custom language tag without a catalog record.
  • Conditional requirement: id or bcp47
FieldRequiredTypeNotes
idnostringOptional languages catalog id to resolve before applying inline overrides.
namenostringHuman-readable language name.
bcp47nostringBCP-47 language tag used for locale-aware rendering, proofing, and accessibility metadata. Use 'en-GB' for UK English; 'en-UK' is not a valid BCP-47 region form.
codenostringISO 639-3 or 639-2 language code carried for engines that prefer ISO codes.
directionnoenum:ltr | rtlBase text direction for the language.
scriptnostringISO 15924 script code when the writing system should be explicit.
fontSchemenostringDefault font-scheme id for this language when targeting PowerPoint output.
googleFontSchemenostringDefault font-scheme id for this language when targeting Google Slides output.
summarynostringOne-sentence note about coverage or font defaults.
descriptionnostringLonger prose describing the language record and any font-pairing rationale.
tagsnoarray<string>Free-form labels for filtering and search.

Tone

  • Type: anyOf:schema / schema
  • Required fields: none
  • Purpose: Inline tone metadata for the presentation. Use 'id' to reference a tones catalog record and override selected fields, or use 'name' for a custom inline tone.
  • Conditional requirement: id or name
FieldRequiredTypeNotes
idnostringOptional tones catalog id to resolve before applying inline overrides.
namenostringHuman-readable tone name shown in pickers.
summarynostringOne-sentence positioning of the tone.
descriptionnostringLonger prose describing the tone and the kinds of decks it suits.
voiceCuesnoarray<string>Short directives that shape AI generation toward this tone.
avoidnoarray<string>Anti-patterns that AI generation should not produce when this tone is active.
samplePhrasesnoarray<string>Short example phrases that exemplify this tone.
recommendedNarrativesnoarray<string>Soft cross-link: narrative-catalog ids this tone pairs well with.
tagsnoarray<string>Free-form labels for filtering and search.

Organization

  • Type: object
  • Required fields: id, name
  • Purpose: An organization associated with the presentation typically the presenting company, but also hosts, partners, clients, or sponsors. Surfaced on cover slides, footers, and brand bars; the primary organization's logo is the default deck logo unless overridden by design.logo.
FieldRequiredTypeNotes
idyesstringStable identifier for the organization, used to reference it from Speaker.organizationId. Must be unique within the deck.
nameyesstringDisplay name shown on slides.
legalNamenostringOptional legal entity name when it differs from the display name.
logonoref:AssetSource for the organization's logo image. Accepts an HTTPS URL, data URI, relative path (resolved against the OPF file location), local path, or 'asset:<id>' reference. Common formats are SVG (preferred for vector log...
domainnostringBare internet domain for the organization. Used for footers, contact slides, and engine-driven asset lookups (e.g., favicon-based brand defaults).
emailnostringGeneral contact email for the organization. Used on contact slides and footer attribution.
phonenostringMain contact phone number for the organization. E.164 format is recommended.
taglinenostringShort tagline rendered alongside the organization name on cover slides.
rolenoenum:primary | partner | client | sponsor | hostRole of the organization relative to the presentation. When omitted, the single organization or first organization in array form is treated as primary.
socialsnoref:SocialsOptional social media handles or URLs for the organization.

Speaker

  • Type: object
  • Required fields: id, name
  • Purpose: A person presenting the deck. Used for cover slides, bio/intro slides, footer attribution, and panel formats with multiple presenters.
FieldRequiredTypeNotes
idyesstringStable identifier for the speaker, used for cross-references within the deck. Must be unique within the deck.
nameyesstringDisplay name.
titlenostringRole or title. Often paired with the speaker's organization on cover slides.
photonoref:AssetSource for the speaker's headshot image. Accepts an HTTPS URL, data URI, relative path (resolved against the OPF file location), local path, or 'asset:<id>' reference. Common formats are JPG or PNG; SVG is not appropr...
emailnostringContact email, used on contact slides or footer attribution when appropriate.
phonenostringContact phone number for the speaker. E.164 format is recommended.
bionostringShort biographical paragraph for bio or 'about the speaker' slides.
organizationIdnostringReference to an Organization.id in organization. Lets a speaker be attributed to their org in panel or multi-org decks without repeating organization details.
socialsnoref:SocialsOptional social media handles or URLs for the speaker.

Socials

  • Type: object
  • Required fields: none
  • Purpose: Social media handles or URLs, keyed by platform id from the 'socialPlatforms' catalog. Each value is a string either a full URL or a platform handle (e.g., '@acme'). The catalog record for each platform carries the URL pattern, handle prefix, brand color, and themed icons used by renderers. Keys resolve to the 'id' of a 'socialPlatforms' catalog record. Resolution order: inline catalogs.socialPlatforms.records[] catalogs.socialPlatforms.source default catalog at https://www.pptx.gallery/socia...

No named properties.

Narrative

  • Type: object
  • Required fields: none
  • Purpose: Structured storyline used by AI to shape generated content. Mirrors the OPF Narrative Template record at https://openpresentation.org/schema/opf-narrative/v1 (sans '$schema'), so a library record and an inline narrative are interchangeable. Narrative declares the deck's intended story arc; slides may opt into beats via Slide.beat. The narrative does not constrain slide structure validators warn on drift (orphan slides, unused beats) but never error. Slides are the source of truth; narrative i...
FieldRequiredTypeNotes
idnostringStable slug identifying this narrative. When it matches a record in the resolved 'narratives' catalog, the catalog record's beats and metadata seed this narrative; inline fields override per-key. When it doesn't match...
namenostringHuman-readable narrative name.
summarynostringOne-sentence description of when and why to use this narrative.
descriptionnostringLonger prose describing the narrative arc and ideal use cases. Used by AI-driven generation to seed deck-level direction.
audienceFitnoarray<string>Audiences this narrative works well for. Free-form strings or 'audiences' catalog ids.
durationRangenoobjectTypical talk-length window this narrative suits. Compared by validators against duration.
tagsnoarray<string>Free-form labels for filtering and search.
previewnoobjectVisual previews of the narrative, used by picker UIs and inline rendering. All sub-fields are optional.
beatsnoarray<ref:NarrativeBeat>Ordered list of beats that make up the narrative arc. When 'id' matches a catalog record, beats here override or extend matching catalog beats by their own 'id'. Beat IDs must be unique within the narrative.

NarrativeBeat

  • Type: object
  • Required fields: id, name
  • Purpose: A single narrative beat a labeled segment of the story arc with a specific dramatic purpose (e.g. 'hook', 'problem', 'evidence', 'ask'). Slides reference beats via Slide.beat. Beats may also carry slide-blueprint hints (slideType, layoutHint, thoughtCues, instructions) that guide the assigned slide. Mirrors the Beat definition in narrative.schema.json (https://openpresentation.org/schema/opf-narrative/v1) so library entries and inline OPF beats are interchangeable.
FieldRequiredTypeNotes
idyesstringStable slug used by Slide.beat to reference this beat. Lowercase kebab-case.
nameyesstringHuman-readable beat name.
descriptionnostringCurator-written prose that explains what this beat should accomplish.
instructionsnostringShort author-facing instruction for the beat typically one phrase. Complements 'description' with a concise directive.
slideCountnointegerOptional explicit slide count for this beat. Defaults to 1 when omitted; values >1 are reserved for beats that intentionally span multiple slides. Prefer decomposing a heavy beat into multiple beats over setting a hig...
slideTypenoenum:text | list | image | chart | table | video | code | metric | quote | timelineDefault content kind for the beat's slide. Mirrors ContentPayload.type and helps engines choose a sensible layout when only the beat is specified.
layoutHintnostringSuggested layout id for the beat's opening slide. Resolves the same way as Slide.layout against catalogs.layouts and the default catalog at https://www.pptx.gallery/layouts.
thoughtCuesnoarray<string>Optional speaker or thinking cues attached to the beat. Surfaced in presenter notes.

Design

  • Type: object
  • Required fields: none
  • Purpose: Visual design system applied to the presentation; individual slides may override fields via Slide.design.
FieldRequiredTypeNotes
themenooneOf:string / ref:ThemeTheme for the deck. Accepts two forms: - String shorthand: 'design.theme = "minimal"'. Bare id, HTTPS URL, or 'pkg:' reference resolved as the 'id' of a 'themes' catalog record. - Object form: a Theme with an optional...
colorSchemenooneOf:string / ref:ColorSchemeColor scheme for the presentation. Accepts two forms: - String shorthand: 'design.colorScheme = "cool-horizon"'. Bare id, HTTPS URL, or 'pkg:' reference resolved as the 'id' of a 'colorSchemes' catalog record. - Objec...
fontSchemenooneOf:string / ref:FontSchemeFont scheme for heading, body, accent, and code text. Accepts two forms: - String shorthand: 'design.fontScheme = "aptos"'. Bare id, HTTPS URL, or 'pkg:' reference resolved as the 'id' of a 'fontSchemes' catalog recor...
dimensionsnooneOf:ref:DimensionPreset / ref:DimensionsSlide dimensions and aspect ratio. String shorthand such as 'widescreen' is equivalent to { preset: 'widescreen' }.
backgroundnooneOf:ref:BackgroundShortcut / ref:BackgroundDefault slide background applied across the deck unless overridden on a slide. String shorthand accepts theme slots ('light1', 'light2', 'dark1', 'dark2') or hex colors; object forms support theme, solid, gradient, im...
logonooneOf:ref:Asset / ref:LogoSetDeck logo assets used by layouts, covers, section dividers, headers, and footers. A string is the default logo source; object form provides light/dark, stacked, icon, and wordmark variants. When omitted, the renderer...
watermarknooneOf:const:false / ref:Asset / ref:WatermarkOptional decorative watermark applied across slides. Use false to suppress an inherited watermark in slide-level design; a string is equivalent to { src: value }.
headernooneOf:const:false / ref:HeaderFooterRepeated header furniture rendered outside the main slide content. Use false to suppress an inherited header.
footernooneOf:const:false / ref:HeaderFooterRepeated footer furniture rendered outside the main slide content. Use false to suppress an inherited footer.
titleAlignmentnoenum:left | center | rightDefault horizontal alignment for title placeholders in resolved layouts.
contentAlignmentnoenum:left | center | rightDefault horizontal alignment for body/content regions in resolved layouts.
contentBoxnobooleanWhether body/content regions are rendered inside a visible card or surface.
slideImagenooneOf:ref:Asset / objectOptional slide-level image treatment used by layouts that support a decorative or editorial image separate from content images.
contentDirectionnoenum:horizontal | verticalAxis along which parallel body/content regions are arranged.
chartPrimarynoenum:none | top | bottom | left | rightFor chart layouts, where the primary chart sits relative to supporting content. 'none' means chart regions have equal weight.
imageFillnoenum:crop | fitHow picture placeholders fill their allocated region.
listBulletnoenum:character | imageDefault bullet rendering style for list layouts.

Theme

  • Type: object
  • Required fields: none
  • Purpose: Theme bundle used by the design system. In design.theme, 'id' resolves a themes catalog record as the base; any sibling fields override the resolved theme. The string shorthand on design.theme is equivalent to setting only 'id'.
FieldRequiredTypeNotes
idnostringTheme reference. Resolves to the 'id' of a 'themes' catalog record. Accepts a bare id (lowercase kebab-case, e.g. 'minimal'), an HTTPS URL pointing at a record file, or a 'pkg:' reference. Field overrides on the surro...
namenostringHuman-readable theme name shown in pickers.
summarynostringOne-sentence positioning of the theme - when to reach for it.
descriptionnostringLonger prose describing what the theme looks and feels like and the kinds of decks it suits.
colorSchemenooneOf:string / ref:ColorSchemeDefault color scheme for this theme. A string resolves against catalogs.colorSchemes; an object may provide an 'id' base reference plus overrides.
fontSchemenooneOf:string / ref:FontSchemeDefault font scheme for this theme. A string resolves against catalogs.fontSchemes; an object may provide an 'id' base reference plus overrides.
backgroundnooneOf:ref:BackgroundShortcut / ref:BackgroundDefault background for this theme. String shorthand accepts theme slots ('light1', 'light2', 'dark1', 'dark2') or hex colors.
dimensionsnooneOf:ref:DimensionPreset / ref:DimensionsDefault slide size for this theme. A string preset is equivalent to { preset: value }.
tagsnoarray<string>Free-form labels for filtering and search.

ColorScheme

  • Type: object
  • Required fields: none
  • Purpose: Color palette used by the design system. The slot fields (accent1-accent6, dark1, dark2, light1, light2, hyperlink, followedHyperlink) mirror color-scheme.schema.json (https://openpresentation.org/schema/opf-color-scheme/v1) so library records and inline OPF overrides are interchangeable on those fields. Two parallel models are supported and may be mixed: - OOXML slots - the 12-slot PowerPoint theme model that round-trips directly to OOXML. Use these for full control over the palette as Power...
FieldRequiredTypeNotes
idnostringColor scheme reference. Resolves to the 'id' of a 'colorSchemes' catalog record. Accepts a bare id (lowercase kebab-case, e.g. 'cool-horizon'), an HTTPS URL pointing at a record file, or a 'pkg:' reference. Slot and r...
accent1nostringAccent 1 color (hex). Mirrors the OOXML accent1 slot.
accent2nostringAccent 2 color (hex). Mirrors the OOXML accent2 slot.
accent3nostringAccent 3 color (hex). Mirrors the OOXML accent3 slot.
accent4nostringAccent 4 color (hex). Mirrors the OOXML accent4 slot.
accent5nostringAccent 5 color (hex). Mirrors the OOXML accent5 slot.
accent6nostringAccent 6 color (hex). Mirrors the OOXML accent6 slot.
dark1nostringDark 1 color (hex). Typically the deepest neutral; OOXML dark1.
dark2nostringDark 2 color (hex). Secondary dark; OOXML dark2.
light1nostringLight 1 color (hex). Typically the slide canvas; OOXML lt1.
light2nostringLight 2 color (hex). Secondary light surface; OOXML lt2.
hyperlinknostringHyperlink color (hex). OOXML hlink.
followedHyperlinknostringFollowed-hyperlink color (hex). OOXML folHlink.
primarynostringAbstract role: primary brand color (hex). The engine maps this onto an OOXML accent slot when serializing.
secondarynostringAbstract role: secondary brand color (hex).
accentnostringAbstract role: accent color used for highlights and emphasis (hex).
backgroundnostringAbstract role: default slide background color (hex). The engine maps this to one of light1 / light2 / dark1 / dark2 when serializing.
surfacenostringAbstract role: color for elevated surfaces such as cards and panels (hex).
textnostringAbstract role: primary body text color (hex).
textSecondarynostringAbstract role: secondary or muted text color used for captions and supporting copy (hex).
customnoobjectMap of custom named colors for advanced or theme-specific use.

FontScheme

  • Type: object
  • Required fields: none
  • Purpose: Typography selections used by the design system. The pair fields (major, minor) and refinement fields (type, app, languageFamily) mirror font-scheme.schema.json (https://openpresentation.org/schema/opf-font-scheme/v1) so library records and inline OPF overrides are interchangeable on those fields. Two parallel models are supported and may be mixed: - OOXML pairs (major, minor) - heading and body family names that round-trip directly to PowerPoint majorFont/minorFont entries. - Abstract roles...
FieldRequiredTypeNotes
idnostringFont scheme reference. Resolves to the 'id' of a 'fontSchemes' catalog record. Accepts a bare id (lowercase kebab-case, e.g. 'aptos'), an HTTPS URL pointing at a record file, or a 'pkg:' reference. Field overrides on...
majornostringHeading (major) font family mirrors the OOXML majorFont entry. Pairs with 'minor'.
minornostringBody (minor) font family mirrors the OOXML minorFont entry. Pairs with 'major'.
typenoenum:sans-serif | serif | monospaceHigh-level typographic class of the scheme.
appnoenum:PowerPoint | Google SlidesTarget application this font pairing is intended for.
languageFamilynoenum:latin | ea | csOOXML font-language family this scheme is intended for: 'latin' for Latin-script content, 'ea' for East Asian scripts, 'cs' for Complex Scripts.
headingnoref:FontAbstract role: font used for slide titles and headings. Maps onto the OOXML major slot when serializing.
bodynoref:FontAbstract role: font used for body copy. Maps onto the OOXML minor slot when serializing.
accentnoref:FontAbstract role: font used for accent text such as quotes or callouts. No direct OOXML slot.
codenoref:FontAbstract role: monospaced font used for code blocks. No direct OOXML slot.

Font

  • Type: object
  • Required fields: family
  • Purpose: Specification for a single font role.
FieldRequiredTypeNotes
familyyesstringFont family name.
weightnonumberNumeric font weight (e.g., 400 for regular, 700 for bold).
stylenoenum:normal | italicFont style.
letterSpacingnonumberLetter spacing (tracking) in ems.

DimensionPreset

  • Type: enum:16:9 | 4:3 | 16:10 | letter | a4 | widescreen | standard
  • Required fields: none
  • Purpose: Named dimension preset; chooses both aspect ratio and physical size. 'widescreen' is an alias for 16:9 in PowerPoint widescreen size; 'standard' is an alias for 4:3 in PowerPoint standard size.

No named properties.

Dimensions

  • Type: object
  • Required fields: none
  • Purpose: Slide dimensions; either pick a preset or specify custom inches.
FieldRequiredTypeNotes
presetnoref:DimensionPreset
widthInchesnonumberCustom slide width in inches; overrides the preset width when provided.
heightInchesnonumberCustom slide height in inches; overrides the preset height when provided.

ThemeBackgroundSlot

  • Type: enum:light1 | light2 | dark1 | dark2
  • Required fields: none
  • Purpose: PowerPoint theme-controlled slide background slot from the active color scheme. These are slots, not assumptions about actual colors: light1 is usually white and dark1 is usually black by convention, but the color scheme controls the real values.

No named properties.

HexColor

  • Type: string
  • Required fields: none
  • Purpose: Hex color shorthand accepted by selected string fields.

No named properties.

BackgroundShortcut

  • Type: oneOf:ref:ThemeBackgroundSlot / ref:HexColor
  • Required fields: none
  • Purpose: String shorthand for a background. Theme slots ('light1', 'light2', 'dark1', 'dark2') are equivalent to { type: 'theme', slot: value }; hex colors are equivalent to { type: 'solid', color: value }.

No named properties.

Background

  • Type: oneOf:ref:ThemeBackground / ref:SolidBackground / ref:GradientBackground / ref:ImageBackground / ref:PatternBackground
  • Required fields: none
  • Purpose: Background fill applied to slides. Theme backgrounds preserve PowerPoint's color-scheme background choice; other variants represent fixed background fills.

No named properties.

ThemeBackground

  • Type: object
  • Required fields: type, slot
  • Purpose: Theme-controlled PowerPoint slide background. The slot is resolved through the active color scheme and remains theme-aware.
FieldRequiredTypeNotes
typeyesconst:"theme"Theme-controlled background fill.
slotyesref:ThemeBackgroundSlot

SolidBackground

  • Type: object
  • Required fields: type, color
  • Purpose: Fixed solid slide background fill.
FieldRequiredTypeNotes
typeyesconst:"solid"Fixed solid background fill.
coloryesstringFixed solid fill color, usually a hex string. Use { type: 'theme', slot: ... } for PowerPoint's four theme-controlled background choices.
opacitynonumberBackground opacity from 0 (fully transparent) to 1 (fully opaque).

GradientBackground

  • Type: object
  • Required fields: type, gradient
  • Purpose: Fixed gradient slide background fill.
FieldRequiredTypeNotes
typeyesconst:"gradient"Fixed gradient background fill.
gradientyesobjectGradient fill definition.
opacitynonumberBackground opacity from 0 (fully transparent) to 1 (fully opaque).

ImageBackground

  • Type: object
  • Required fields: type, image
  • Purpose: Fixed image slide background fill.
FieldRequiredTypeNotes
typeyesconst:"image"Fixed image background fill.
imageyesobjectImage fill definition.
opacitynonumberBackground opacity from 0 (fully transparent) to 1 (fully opaque).

PatternBackground

  • Type: object
  • Required fields: type, pattern
  • Purpose: Fixed pattern slide background fill.
FieldRequiredTypeNotes
typeyesconst:"pattern"Fixed pattern background fill.
patternyesobjectPattern fill definition.
opacitynonumberBackground opacity from 0 (fully transparent) to 1 (fully opaque).

LogoSet

  • Type: object
  • Required fields: none
  • Purpose: Deck logo variants surfaced by layouts, covers, section dividers, headers, and footers. Organization identity lives in organization; this object only controls visual rendering assets. Renderer convention: on dark backgrounds prefer the 'light' variant, on light backgrounds prefer the 'dark' variant, and in square/vertical slots prefer the stacked family when present.
FieldRequiredTypeNotes
defaultnoref:AssetDefault full-lockup logo. Used as fallback when no more specific variant is set.
lightnoref:AssetLight-colored full-lockup logo intended for rendering on dark backgrounds.
darknoref:AssetDark-colored full-lockup logo intended for rendering on light backgrounds.
stackednoref:AssetStacked vertical logo lockup, suited to portrait or square brand-mark slots.
stackedLightnoref:AssetLight-colored stacked logo variant intended for rendering on dark backgrounds.
stackedDarknoref:AssetDark-colored stacked logo variant intended for rendering on light backgrounds.
iconnoref:AssetDefault icon, mark, or symbol without wordmark. Useful for tight spaces such as footers, badges, and slide-corner marks.
iconLightnoref:AssetLight-colored icon variant intended for rendering on dark backgrounds.
iconDarknoref:AssetDark-colored icon variant intended for rendering on light backgrounds.
wordmarknoref:AssetDefault wordmark: the organization name set in branded typography, without icon.
wordmarkLightnoref:AssetLight-colored wordmark variant intended for rendering on dark backgrounds.
wordmarkDarknoref:AssetDark-colored wordmark variant intended for rendering on light backgrounds.

Watermark

  • Type: object
  • Required fields: opacity
  • Purpose: Decorative watermark image and rendering options. Use design.watermark = false to disable an inherited watermark.
FieldRequiredTypeNotes
srcnostringSource for the watermark image.
opacityyesnumberWatermark opacity from 0 (fully transparent) to 1 (fully opaque).

HeaderFooter

  • Type: object
  • Required fields: none
  • Purpose: Repeated header or footer content split into left, center, and right zones. Header/footer content is slide furniture, separate from the main slide content payloads.
FieldRequiredTypeNotes
leftnoref:HeaderFooterItemLeft-aligned header/footer content.
centernoref:HeaderFooterItemCentered header/footer content.
rightnoref:HeaderFooterItemRight-aligned header/footer content.

HeaderFooterItem

  • Type: object
  • Required fields: none
  • Purpose: One header/footer zone. Fields may be combined when the renderer supports it; otherwise renderers should prefer image, then text-like generated content.
FieldRequiredTypeNotes
textnostringLiteral text rendered in this zone.
imagenoref:AssetGeneric image rendered in this zone, such as a logo, partner mark, certification badge, or icon.
slideNumbernobooleanWhether to render the current slide number in this zone.
datenooneOf:boolean / stringWhether to render the presentation date, or a literal date string to render.
organizationnobooleanWhether to render the primary organization name from organization.
sectionnobooleanWhether to render the current slide section label.

Slide

  • Type: object
  • Required fields: none
  • Purpose: A single slide. Content can be authored as a full-slide root payload, or inside promoted named region keys such as 'left', 'center+right', and 'top:left'.
FieldRequiredTypeNotes
idnostringOptional stable identifier for the slide within the document. Use when another system needs to reference a slide across edits, comments, generation state, exports, or narrative tooling. Slide order is defined by the s...
typenoenum:text | list | image | chart | table | video | code | metric | quote | timelineOptional full-slide content kind. When omitted, engines infer the kind from root payload fields.
beatnooneOf:string / array<string>Optional reference to one or more narrative beats (each value matches an id from narrative.beats or the resolved template). A single string declares the slide's primary beat; an array declares that one slide covers mu...
compositionnoref:Composition
layoutnostringOptional slide layout reference. Resolves to the 'id' of a 'layouts' catalog record. When omitted, engines infer a layout from the slide's root payload or promoted region keys. Accepts a bare id (lowercase kebab-case,...
titlenostringSlide-level title content. When the resolved layout exposes a 'title' placeholder, the engine renders this value there.
subtitlenostringSlide-level subtitle or supporting line. When the resolved layout exposes a 'subtitle' placeholder, the engine renders this value there.
tagnostringSmall slide-level label or badge. When the resolved layout exposes a 'tag' placeholder, the engine renders this value there.
textnooneOf:string / array<ref:TextRun>Full-slide text payload. Use a string for plain text or TextRun[] for inline rich text. TextRun items may be plain strings or formatted run objects.
itemsnoarray<ref:ListItem>Full-slide generic list payload. Presence of this field infers type 'list'. At slide root, multiple content payload kinds with no explicit type, blocks, or regions are accepted as shorthand for layout-agnostic blocks.
bulletsnoarray<ref:BulletItem>Full-slide text-style bullet payload. Presence of this field infers type 'text'.
imagenoref:AssetFull-slide image source. Presence of this field infers type 'image'.
videonoref:AssetFull-slide video source. Presence of this field infers type 'video'.
chartnoref:ChartFull-slide chart payload. Presence of this field infers type 'chart'.
tablenoref:TableFull-slide table payload. Presence of this field infers type 'table'.
codenooneOf:string / ref:CodeFull-slide code payload. A string is shorthand for { "source": value }; object form carries optional syntax language and filename metadata.
metricnooneOf:string / number / ref:MetricFull-slide metric payload. A string or number is shorthand for { "value": value }; object form carries optional label, description, unit, delta, and trend metadata. Numeric values remain numbers; renderers format them...
quotenooneOf:string / ref:QuoteFull-slide quote payload. A string is shorthand for { "text": value }; object form carries optional attribution and source metadata. Presence of this field infers type 'quote'.
timelinenoref:TimelineFull-slide timeline payload. An array is shorthand for { "events": value }; object form carries optional name and description metadata. Presence of this field infers type 'timeline'.
blocksnoarray<ref:ContentPayload>Layout-agnostic content blocks rendered together as a composed payload when exact placement is unspecified. At slide root, multiple content payload kinds with no explicit type, blocks, or regions are accepted as short...
designnoref:DesignSlide-level design applied on top of the deck-wide design.
leftnoref:ContentPayload
centernoref:ContentPayload
rightnoref:ContentPayload
left+centernoref:ContentPayload
center+rightnoref:ContentPayload
left+center+rightnoref:ContentPayload
topnoref:ContentPayload
middlenoref:ContentPayload
bottomnoref:ContentPayload
top+middlenoref:ContentPayload
middle+bottomnoref:ContentPayload
top+middle+bottomnoref:ContentPayload
top:leftnoref:ContentPayload
top:centernoref:ContentPayload
top:rightnoref:ContentPayload
top:left+centernoref:ContentPayload
top:center+rightnoref:ContentPayload
top:left+center+rightnoref:ContentPayload
middle:leftnoref:ContentPayload
middle:centernoref:ContentPayload
middle:rightnoref:ContentPayload
middle:left+centernoref:ContentPayload
middle:center+rightnoref:ContentPayload
middle:left+center+rightnoref:ContentPayload
bottom:leftnoref:ContentPayload
bottom:centernoref:ContentPayload
bottom:rightnoref:ContentPayload
bottom:left+centernoref:ContentPayload
bottom:center+rightnoref:ContentPayload
bottom:left+center+rightnoref:ContentPayload
top+middle:leftnoref:ContentPayload
top+middle:centernoref:ContentPayload
top+middle:rightnoref:ContentPayload
top+middle:left+centernoref:ContentPayload
top+middle:center+rightnoref:ContentPayload
top+middle:left+center+rightnoref:ContentPayload
middle+bottom:leftnoref:ContentPayload
middle+bottom:centernoref:ContentPayload
middle+bottom:rightnoref:ContentPayload
middle+bottom:left+centernoref:ContentPayload
middle+bottom:center+rightnoref:ContentPayload
middle+bottom:left+center+rightnoref:ContentPayload
top+middle+bottom:leftnoref:ContentPayload
top+middle+bottom:centernoref:ContentPayload
top+middle+bottom:rightnoref:ContentPayload
top+middle+bottom:left+centernoref:ContentPayload
top+middle+bottom:center+rightnoref:ContentPayload
top+middle+bottom:left+center+rightnoref:ContentPayload
notesnostringSpeaker notes shown in presenter view.
sectionnostringPowerPoint-style slide section label. Consecutive slides with the same value belong to the same section in presenter view, outlines, and PowerPoint section-aware exports.
hiddennobooleanWhether the slide is hidden from the presented sequence.

ContentPayload

  • Type: allOf:schema + schema + schema + schema + schema + schema + schema + schema + schema + schema + schema + schema
  • Required fields: none
  • Purpose: A content leaf or recursively composed group. A group contains blocks and optional composition; it cannot mix blocks with leaf payload fields. Groups may nest up to 32 levels.
FieldRequiredTypeNotes
typenoenum:text | list | image | chart | table | video | code | metric | quote | timeline | groupOptional content kind. When omitted, engines infer the kind from the fields present.
textnooneOf:string / array<ref:TextRun>Text payload. Use a string for plain text or TextRun[] for inline rich text. TextRun items may be plain strings or formatted run objects.
itemsnoarray<ref:ListItem>Generic list payload. Each item is either a plain string, a TextRun[] rich text sequence, or a ListItem object. List nesting uses item.level rather than nested content payloads.
bulletsnoarray<ref:BulletItem>Text-style bullet payload. Presence of this field infers type 'text'.
imagenoref:AssetSource for an image item.
videonoref:AssetSource for a video item.
chartnoref:ChartChart payload. Presence of this field infers type 'chart'.
tablenoref:TableTable payload. Presence of this field infers type 'table'.
codenooneOf:string / ref:CodeCode payload. A string is shorthand for { "source": value }; object form carries optional syntax language and filename metadata.
metricnooneOf:string / number / ref:MetricMetric payload. A string or number is shorthand for { "value": value }; object form carries optional label, description, unit, delta, and trend metadata. Numeric values remain numbers; renderers format them for display.
quotenooneOf:string / ref:QuoteQuote payload. A string is shorthand for { "text": value }; object form carries optional attribution and source metadata.
timelinenoref:TimelineTimeline payload ordered by narrative or chronology.
blocksnoarray<ref:ContentPayload>Ordered children of a group. Each child is a leaf or another group.
compositionnoref:CompositionArrangement within this group. Only minFontSize and overflow inherit from the parent; strict overflow cannot be weakened.

Quote

  • Type: object
  • Required fields: text
  • Purpose: Quote content with optional attribution metadata. Use 'text' for the quoted text, 'attribution' for the credited person or organization, and 'source' for a citation or URL. A string value in a quote field is shorthand for { "text": value }.
FieldRequiredTypeNotes
textyesstringQuoted text.
attributionnostringPerson or organization credited for the quote.
sourcenostringOptional quote source, citation, or URL.

Code

  • Type: object
  • Required fields: source
  • Purpose: Code content with optional rendering metadata. Use 'source' for the code text, 'language' for syntax highlighting, and 'filename' when the rendered block should show a file label. A string value in a code field is shorthand for { "source": value }.
FieldRequiredTypeNotes
sourceyesstringSource code text to display.
languagenostringLanguage identifier used for syntax highlighting.
filenamenostringOptional file label shown with the code block.

Metric

  • Type: object
  • Required fields: value
  • Purpose: Metric content with optional display metadata. Use 'value' for the primary value, 'label' for the metric name, 'description' for supporting context, 'unit' for a suffix/currency marker, 'delta' for change, and 'trend' for direction. A string or number value in a metric field is shorthand for { "value": value }; numeric values remain numbers and are formatted by renderers.
FieldRequiredTypeNotes
valueyesoneOf:string / numberPrimary metric value.
labelnostringMetric label.
descriptionnostringOptional supporting context for the metric.
unitnostringMetric unit, suffix, or currency marker.
deltanooneOf:string / numberMetric change value.
trendnoenum:up | down | flatMetric trend direction.

Timeline

  • Type: oneOf:array<ref:TimelineEvent> / object
  • Required fields: none
  • Purpose: Timeline content. An array is shorthand for { "events": value }; object form carries optional name and description metadata.

No named properties.

TimelineEvent

  • Type: object
  • Required fields: what
  • Purpose: A single event inside a timeline content payload.
FieldRequiredTypeNotes
whennostringEvent time, date, or sequence label. Use ISO-like values when possible, but human labels are allowed for quarters, eras, and relative milestones.
whatyesstringShort event label.
descriptionnostringOptional event detail.

ListItem

  • Type: oneOf:string / array<ref:TextRun> / object
  • Required fields: none
  • Purpose: A flat item inside a list. Strings cover the common case, TextRun[] supports inline rich text without an object wrapper, and object form adds description and nesting depth without creating nested slide content payloads.

No named properties.

BulletItem

  • Type: oneOf:string / array<ref:TextRun> / object
  • Required fields: none
  • Purpose: A flat bullet item. Strings cover the common case, TextRun[] supports inline rich text without an object wrapper, and object form adds nesting depth without list-item descriptions.

No named properties.

TextRun

  • Type: oneOf:string / object
  • Required fields: none
  • Purpose: A contiguous run of text. Strings cover unformatted spans; object form adds character formatting.

No named properties.

Chart

  • Type: object
  • Required fields: type, data
  • Purpose: Chart content. The chart object keeps chart-specific fields together so slides and regions do not expose loose chart fields.
FieldRequiredTypeNotes
typeyesstringChart type id. Resolves to the id of a chartTypes catalog record; renderers map that record through mappings.openxml and any renderer-specific mapping they understand.
datayesoneOf:ref:ChartData / ref:ChartDataSourceChart data. Inline data uses a tabular columns/rows shape; renderers convert rows to chart series internally.

Table

  • Type: object
  • Required fields: rows
  • Purpose: Table content. Columns are optional; rows are the only required field.
FieldRequiredTypeNotes
columnsnoarray<string>Optional column labels rendered above table rows.
rowsyesarray<array<ref:TableCell>>Two-dimensional table row data; each row aligns by index with columns when columns are supplied.

ChartData

  • Type: object
  • Required fields: columns, rows
  • Purpose: Inline tabular data driving a chart. The first column usually supplies category/x-axis labels; subsequent columns are plotted measures unless a chart type or renderer maps them differently.
FieldRequiredTypeNotes
columnsyesarray<string>Ordered column labels for the chart data table.
rowsyesarray<array<ref:ChartDataCell>>Tabular chart rows. Each row aligns by index with columns.

ChartDataSource

  • Type: object
  • Required fields: src
  • Purpose: Chart data sourced from an asset reference, URL, data URI, relative path, or local path such as CSV, TSV, JSON, or XLSX. The source is interpreted as a table; optional columns select or order fields from that table.
FieldRequiredTypeNotes
srcyesstringData source. Use 'asset:<id>' to reference the top-level assets registry, or provide an HTTPS URL, data URI, relative path, or local filesystem path.
sheetnostringOptional sheet name or table name for spreadsheet-like assets.
rangenostringOptional A1-style range or engine-defined range selector for spreadsheet-like assets.
columnsnoarray<string>Optional ordered columns or fields to read from the source. When omitted, renderers may use the source's own header row or schema.

ChartDataCell

  • Type: oneOf:string / number / boolean / null
  • Required fields: none
  • Purpose: A cell in inline chart data.

No named properties.

TableCell

  • Type: oneOf:string / number / boolean / null
  • Required fields: none
  • Purpose: A cell in table content.

No named properties.

Catalogs

  • Type: object
  • Required fields: none
  • Purpose: Catalog overrides for the in-document references. Every property is optional. The default catalog for a kind lives at https://www.pptx.gallery/<kind> (e.g. https://www.pptx.gallery/narratives, https://www.pptx.gallery/themes). For each kind, declaring a 'source' replaces the default registry and/or 'records' adds inline records that take precedence over anything fetched from a source. Resolution order for any reference (e.g. narrative, design.theme): inline catalogs.<kind>.records[] catalogs....
FieldRequiredTypeNotes
narrativesnoref:CatalogEntryCatalog of narrative templates. Records validate against https://openpresentation.org/schema/opf-narrative/v1. Default source: https://www.pptx.gallery/narratives.
themesnoref:CatalogEntryCatalog of themes. Records validate against https://openpresentation.org/schema/opf-theme/v1. Default source: https://www.pptx.gallery/themes.
colorSchemesnoref:CatalogEntryCatalog of color schemes. Records validate against https://openpresentation.org/schema/opf-color-scheme/v1. Default source: https://www.pptx.gallery/color-schemes.
fontSchemesnoref:CatalogEntryCatalog of font schemes. Records validate against https://openpresentation.org/schema/opf-font-scheme/v1. Default source: https://www.pptx.gallery/font-schemes.
languagesnoref:CatalogEntryCatalog of languages. Records validate against https://openpresentation.org/schema/opf-language/v1. Default source: https://www.pptx.gallery/languages.
layoutsnoref:CatalogEntryCatalog of slide layouts. Records validate against https://openpresentation.org/schema/opf-layout/v1. Default source: https://www.pptx.gallery/layouts.
chartTypesnoref:CatalogEntryCatalog of chart types. Records validate against https://openpresentation.org/schema/opf-chart-type/v1. Default source: https://www.pptx.gallery/chart-types.
tonesnoref:CatalogEntryCatalog of presentation tones. Records validate against https://openpresentation.org/schema/opf-tone/v1. Default source: https://www.pptx.gallery/tones. Referenced from tone.
purposesnoref:CatalogEntryCatalog of presentation purposes. Records validate against https://openpresentation.org/schema/opf-purpose/v1. Default source: https://www.pptx.gallery/purposes. Referenced from purpose.
audiencesnoref:CatalogEntryCatalog of presentation audiences. Records validate against https://openpresentation.org/schema/opf-audience/v1. Default source: https://www.pptx.gallery/audiences. Referenced from audience.
socialPlatformsnoref:CatalogEntryCatalog of social-media platforms. Records validate against https://openpresentation.org/schema/opf-social-platform/v1. Default source: https://www.pptx.gallery/social-platforms. Referenced via the property keys of an...

CatalogEntry

  • Type: object
  • Required fields: none
  • Purpose: A catalog override for one record kind. 'source' replaces the default registry; 'records' adds inline records that take precedence over anything fetched from a source. Either or both may be provided; both omitted means the kind uses its default catalog.
FieldRequiredTypeNotes
sourcenooneOf:ref:CatalogSource / array<ref:CatalogSource>Single source or an ordered search path of sources. When omitted, the engine falls back to https://www.pptx.gallery/<kind>.
recordsnoarray<object>Inline catalog records embedded in this OPF document. Each record validates against the kind's companion schema (e.g. https://openpresentation.org/schema/opf-narrative/v1 for narratives). Inline records win over anyth...

CatalogSource

  • Type: string
  • Required fields: none
  • Purpose: Catalog source location. Accepts: - A bare URL pointing at a catalog directory (e.g. 'https://acme.com/decks/narratives'); record ids resolve to '<base>/<id>.json'. - A URL pointing at an index file (e.g. 'https://acme.com/decks/narratives/index.json'); records are resolved relative to the index file's directory and the index entries describe what's available. - A package reference of the form 'pkg:<package>[/<subpath>]'; resolved through a locally-installed package on the engine's package path.

No named properties.