{}OPF
DocsSchema referenceEdit on GitHub

Narrative Template

Schema for narrative template files in the openpresentation.org catalog. Each template describes a named story arc (e.g. 'problem-solution', 'scqa') as an ordered list of beats. Templates are referenced from O…

Schema $id

https://openpresentation.org/schema/opf-narrative/v1

Source

spec/schemas/narrative.schema.json

Field index

FieldTypeReqDefaultDescription
$schemaconstyes
idstringyesStable slug used by OPF documents to reference this template, e.g. 'problem-solution'. Lowercase kebab-case.
namestringyesHuman-readable template name, e.g. 'Problem → Solution'.
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, e.g. ['executives', 'investors', 'customers'].
durationRangeobjectTypical talk-length window this narrative suits.
tagsarray<string>Free-form labels for filtering and search, e.g. ['business', 'pitch', 'internal'].
previewobjectVisual previews of the record, used by picker UIs and inline rendering. All sub-fields are optional; engines fall back gracefully when previews aren't available.
beatsarray<ref:Beat>yesOrdered list of beats that make up the narrative arc.

$schema

Type: const · Required · Default:

$schema.json
{
  "$schema": "https://openpresentation.org/schema/opf-narrative/v1"
}

id

Type: string · Required · Default: · Pattern: ^[a-z][a-z0-9-]*$

Stable slug used by OPF documents to reference this template, e.g. 'problem-solution'. Lowercase kebab-case.

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

name

Type: string · Required · Default:

Human-readable template name, e.g. 'Problem → Solution'.

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

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, e.g. ['executives', 'investors', 'customers'].

audienceFit.json
{
  "audienceFit": []
}

durationRange

Type: object · Optional · Default:

Typical talk-length window this narrative suits.

durationRange.json
{
  "durationRange": {}
}

tags

Type: array<string> · Optional · Default:

Free-form labels for filtering and search, e.g. ['business', 'pitch', 'internal'].

tags.json
{
  "tags": []
}

preview

Type: object · Optional · Default:

Visual previews of the record, used by picker UIs and inline rendering. All sub-fields are optional; engines fall back gracefully when previews aren't available.

preview.json
{
  "preview": {}
}

beats

Type: array<ref:Beat> · Required · Default:

Ordered list of beats that make up the narrative arc.

beats.json
{
  "beats": []
}