Narrative
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…
Metadata
#/$defs/Narrative
object
spec/schemas/opf.schema.json
Fields
| Field | Type | Req | Description |
|---|---|---|---|
| id | string | — | Stable 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, this is a fully custom inline narrative. Lowercase kebab-cas… |
| name | string | — | Human-readable narrative name. |
| summary | string | — | One-sentence description of when and why to use this narrative. |
| description | string | — | Longer prose describing the narrative arc and ideal use cases. Used by AI-driven generation to seed deck-level direction. |
| audienceFit | array<string> | — | Audiences this narrative works well for. Free-form strings or 'audiences' catalog ids. |
| durationRange | object | — | Typical talk-length window this narrative suits. Compared by validators against duration. |
| tags | array<string> | — | Free-form labels for filtering and search. |
| preview | object | — | Visual previews of the narrative, used by picker UIs and inline rendering. All sub-fields are optional. |
| beats | array<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. |
id
Type: string · Optional · Default: — · Pattern: ^[a-z][a-z0-9-]*$
Stable 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, this is a fully custom inline narrative. Lowercase kebab-cas…
{
"id": "classic-story"
}name
Type: string · Optional · Default: —
Human-readable narrative name.
{
"name": "Classic Story"
}summary
Type: string · Optional · Default: —
One-sentence description of when and why to use this narrative.
{
"summary": "summary-value"
}description
Type: string · Optional · Default: —
Longer prose describing the narrative arc and ideal use cases. Used by AI-driven generation to seed deck-level direction.
{
"description": "Open with the cost of slow agentic workflows, contrast with what becomes possible at sub-second latency, then walk through our architecture and benchmark results, ending with a concrete adoption ask."
}audienceFit
Type: array<string> · Optional · Default: —
Audiences this narrative works well for. Free-form strings or 'audiences' catalog ids.
{
"audienceFit": [
"executives",
"investors",
"customers"
]
}durationRange
Type: object · Optional · Default: —
Typical talk-length window this narrative suits. Compared by validators against duration.
{
"durationRange": {}
}preview
Type: object · Optional · Default: —
Visual previews of the narrative, used by picker UIs and inline rendering. All sub-fields are optional.
{
"preview": {}
}beats
Type: array<ref:NarrativeBeat> · Optional · Default: —
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.
{
"beats": []
}