{}OPF
DocsObject referenceEdit on GitHub

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

Fields

FieldTypeReqDescription
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

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

name

Type: string · Optional · Default:

Human-readable narrative name.

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

summary

Type: string · Optional · Default:

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

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

Type: array<string> · Optional · Default:

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

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

durationRange

Type: object · Optional · Default:

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

durationRange.json
{
  "durationRange": {}
}

tags

Type: array<string> · Optional · Default:

Free-form labels for filtering and search.

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

preview

Type: object · Optional · Default:

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

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