Narrative Beat
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-blue…
Metadata
#/$defs/NarrativeBeat
object
spec/schemas/opf.schema.json
Fields
| Field | Type | Req | Description |
|---|---|---|---|
| id | string | yes | Stable slug used by Slide.beat to reference this beat. Lowercase kebab-case. |
| name | string | yes | Human-readable beat name. |
| description | string | — | Curator-written prose that explains what this beat should accomplish. |
| instructions | string | — | Short author-facing instruction for the beat — typically one phrase. Complements 'description' with a concise directive. |
| slideCount | integer | — | Optional 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 high slideCount. The validator emits a warning if the deck's actu… |
| slideType | enum | — | Default content kind for the beat's slide. Mirrors ContentPayload.type and helps engines choose a sensible layout when only the beat is specified. |
| layoutHint | string | — | Suggested 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. |
| thoughtCues | array<string> | — | Optional speaker or thinking cues attached to the beat. Surfaced in presenter notes. |
id
Type: string · Required · Default: — · Pattern: ^[a-z][a-z0-9-]*$
Stable slug used by Slide.beat to reference this beat. Lowercase kebab-case.
{
"id": "hook"
}name
Type: string · Required · Default: —
Human-readable beat name.
{
"name": "The Hook"
}description
Type: string · Optional · Default: —
Curator-written prose that explains what this beat should accomplish.
{
"description": "Quantify the pain customers feel today, with one striking stat the audience can repeat afterward."
}instructions
Type: string · Optional · Default: —
Short author-facing instruction for the beat — typically one phrase. Complements 'description' with a concise directive.
{
"instructions": "Capture audience attention"
}slideCount
Type: integer · Optional · Default: —
Optional 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 high slideCount. The validator emits a warning if the deck's actu…
{
"slideCount": 1
}slideType
Type: enum · Optional · Default: —
Default content kind for the beat's slide. Mirrors ContentPayload.type and helps engines choose a sensible layout when only the beat is specified.
{
"slideType": "text"
}layoutHint
Type: string · Optional · Default: —
Suggested 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.
{
"layoutHint": "section-divider"
}thoughtCues
Type: array<string> · Optional · Default: —
Optional speaker or thinking cues attached to the beat. Surfaced in presenter notes.
{
"thoughtCues": [
"What pain is the audience feeling right now?",
"Why hasn't anyone solved this yet?"
]
}