{}OPF
DocsObject referenceView source

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

Definition
#/$defs/Narrative
Type
object
Source
spec/schemas/opf.schema.json

Field index

FieldTypeReq.Description
idstringStable 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…
namestringHuman-readable narrative name.
summarystringOne-sentence description of when and why to use this narrative.
descriptionstringLonger prose describing the narrative arc and ideal use cases. Used by AI-driven generation to seed deck-level direction.
audienceFitarray<string>Audiences this narrative works well for. Free-form strings or 'audiences' catalog ids.
durationRangeobjectTypical talk-length window this narrative suits. Compared by validators against duration.
tagsarray<string>Free-form labels for filtering and search.
previewobjectVisual previews of the narrative, used by picker UIs and inline rendering. All sub-fields are optional.
beatsarray<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

typestringrequirednodefaultpattern^[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.json
{
  "id": "classic-story"
}

name

typestringrequirednodefault

Human-readable narrative name.

name.json
{
  "name": "Classic Story"
}

summary

typestringrequirednodefault

One-sentence description of when and why to use this narrative.

summary.json
{
  "summary": "summary-value"
}

description

typestringrequirednodefault

Longer prose describing the narrative arc and ideal use cases. Used by AI-driven generation to seed deck-level direction.

description.json
{
  "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

typearray<string>requirednodefault

Audiences this narrative works well for. Free-form strings or 'audiences' catalog ids.

audienceFit.json
{
  "audienceFit": [
    "executives",
    "investors",
    "customers"
  ]
}

durationRange

typeobjectrequirednodefault

Typical talk-length window this narrative suits. Compared by validators against duration.

durationRange.json
{
  "durationRange": {}
}

tags

typearray<string>requirednodefault

Free-form labels for filtering and search.

tags.json
{
  "tags": [
    "business",
    "pitch",
    "internal"
  ]
}

preview

typeobjectrequirednodefault

Visual previews of the narrative, used by picker UIs and inline rendering. All sub-fields are optional.

preview.json
{
  "preview": {}
}

beats

typearray<ref:NarrativeBeat>requirednodefault

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.json
{
  "beats": []
}