my-lesson project it made. The starter holds sections 1, 2 and 3,
and this adds a section 4 beside them. Nothing has to be deleted first.
The section is deliberately small. The point is not the slide: it is the loop of writing a section,
letting decktalk check tell you what is missing, and measuring the film afterwards.
How one section ties four files together
A section is one number written in four places, and one moment on a page named in two.cues.json owns when a cue fires and the page owns what a thing looks like and what it means. No
attribute on the page says when a cue fires, and no row in cues.json says what a thing looks like.
An element on a slide has four moments, each naming a cue local to that slide: data-in when it
arrives, data-back when it steps back, data-front when it comes forward again, and data-out
when it leaves. Write the cue name on the page and its cue id in
cues.json: data-in="waits" inside <template data-slide="4.1"> is the cue id 4.1:waits.
Write the section
1
Add the words to script.md
Paste this at the end of Each
script.md.script.md
## N. Title heading opens a section, and the number is what every other file refers to.
The voice does not speak text in square brackets, so the line naming the scene is a note to
yourself. [beat] is a short pause and [pause 3] asks the voice for three seconds of silence.
script.md lists every rule, and Writing for the
ear covers choosing words a picture can land on.2
Add the section to decktalk.toml
Paste this after the last Every script section needs one
[[section]] table.decktalk.toml
[[section]] table with the same number, and the tables are
read in order. page names the file and scene names the scene inside it that this section
plays. chapter is the chapter title in the finished film. decktalk.toml
lists every key.3
Add the scene to deck/index.html
Paste this just before
</body> in deck/index.html. It reuses the starter’s own classes, so it
needs no new CSS.deck/index.html
- A
[data-scene]wrapper is a scene and never draws anything itself.data-nameis what the scene index calls it. - Each
<template data-slide>inside it is one slide, cloned onto the stage when the slide mounts.data-preview-secondsis how long the preview rests on the slide, and no recording reads it. - An element with
data-instays hidden until that cue fires. The cue name is yours to choose, and it has to be unique within the slide. data-describesays in one sentence what the moment shows. It is what the transcript reads and what a reviewer checks a reveal against, and a moment without one is reported.- Every element is placed absolutely on the canvas, so one thing arriving moves nothing else.
[data-scene="4"] wrapper replaces the first.
The page contract covers the whole model, and decktalk schema page
prints every attribute with their values, ranges and warning codes.4
Add one cue row to cues.json
Add a
"4" entry under "sections", with a row for the heading alone. The second moment is left
out on purpose. Put a comma after the closing brace of section "3" first, because JSON
separates one entry from the next with a comma.cues.json
id is the cue id, 4.1:heading here. phrase is a word or
short phrase from that section of script.md, matched with case and punctuation ignored, and
occurrence picks which match when the phrase is said more than once. $start is the section
start, $end is the end of speech, and offset_seconds shifts a cue by seconds.
cues.json lists every key, and Cues explains the
matching.Let check find what is missing
decktalk check judges the written files and the pages before a build. It calls no API, it writes
nothing a stage reads, and it prices what a voiced build would cost. A plain run also draws
build/storyboard.html from the frames it freezes. Run it on the new section.
--section 4 narrows it to the section you just wrote. --no-frames keeps the browser, which is
what reads the moments the page declares, and drops the comparison of frozen frames, which is the
slow part and not what finds a missing row.
4.1:waits and no row gives it a
second, which is CUE_UNLISTED. The finding carries a safe fix, so
--fix applies it.
--fix writes it on one line as
{"id": "4.1:waits", "phrase": ""},, and the block below lays it out like the rows around it:
cues.json
phrase empty, because the phrase is
your line and not DeckTalk’s. The run reads the project again after the fix and reports the empty
phrase as CUE_UNRESOLVED, so it still exits 1. Write the phrase
and the section is complete.
cues.json
Build it and measure it
--no-spend uses estimated word times and a placeholder, so the new section costs nothing to try.
Each placeholder is reported as TAKE_MISSING, a warning, so the
build still exits 0.
Its page records beside the other three, so a fourth section adds little to the time the build
takes.
verify runs as the last stage of a build, and it is also a command, so you can measure one section
without building again.
Spoken is the second the cue phrase is said on the film’s clock. Shown is the second the picture
was measured arriving in the encoded frames. Offset is the difference, and it is the product’s whole
claim written as a number: both moments landed within a few hundredths of a second of their word.
verify reports CUE_OFF and exits 1 when that difference is outside the limit, which is
verify.cue_offset_max_ms. Verify defines every measurement it takes.
Run decktalk verify with no scope to measure every section, every cut and every seam at once.
What to do next with it
- Voice it. With a key in
.env,decktalk check --jsonprices the narration anddecktalk storyboardshows you what you are about to buy. Requirements and costs covers the ceiling. - Make the slide worth watching. Design a slide covers reveal styles, the camera and making a reveal large enough to be measured, and Slide recipes has patterns to copy.
- Change one word and rebuild. Rebuild one section says which edit runs which stage again.