Anatomy of a script
A script is two files that must agree: SCRIPT-vN.md, which a person reads, and chain-vN.json, which declares the structure as quotes that must occur word for word in the spoken text. The script is a hook plus 12 to 14 beats. Each beat does Understand, Care, Change, Compel and joins the next by BUT, THEREFORE or BECAUSE. The hook confirms the click, names a person with a want, shows the rise and the fall, and ends on a puzzle about that person's decision. Moser Baer v7 is the worked example for every field.
- Files:
SCRIPT-vN.md,chain-vN.json,HANDOFF-vN.md,STATUS-vN.md,lint/, and oneFACTS.mdper topic. - Rule of declaration: if the chain claims a care line, a pull or a metaphor, the exact words must be in the text. That makes the structure checkable without a human judge.
- Models to copy for form (never for sentences or facts):
.claude/skills/video-script-production/examples/moser-baer-v7/andmoser-baer-v6/.
The files
| File | What it is |
|---|---|
SCRIPT-vN.md | The readable script. Spoken text is every line starting **VO:**. Headings, graphics notes in italic parentheses and the ledger are ignored by the linter. |
chain-vN.json | The declared structure. Every quoted string must occur literally in the spoken text (case-insensitive, whitespace and punctuation collapsed). |
FACTS.md | The fact base for the topic (one file, shared by versions). Five tables. |
HANDOFF-vN.md | The three lines check.js reads, the decisions for the user, open items, what changed. |
STATUS-vN.md, lint/ | Written by check.js: the gate table, measures, lint JSON and Markdown, comparisons. |
Sections of SCRIPT-vN.md (v7 as the model)
- What the notes asked for and what this version does (specific to v7, which answered the user's margin notes; a new script from the scaffold may not have this section).
- Packaging: working title and alternates, thumbnail, the promise, the title tension.
- The spine, the voice, the cast, the rhythm: the thesis, the core loop, the ladder, the persona, the people.
- Script: the beats. Headings must be
### [Bn] Title (m:ss to m:ss)withnconsecutive from 0. Time ranges are written byretime.jsfrom word counts at 150 words a minute. - What changed from the previous version, and why.
- Fact ledger: every figure with source, status and the spoken form (the ledger check finds "14 cents" only if the ledger holds the words as spoken).
- Claims from the YouTube videos you must NOT use.
- Open items before filming (every [CHECK] and [V-search] row).
The beat contract
A beat runs 40 to 105 seconds (90 to 260 words) and does four things in order.
| Step | Job | Declared as | Test |
|---|---|---|---|
| Understand | One idea the viewer can hold. | understand | Can you say it in under 20 words? If it needs two ideas, split the beat. |
| Care | The human reason this matters: whose loss, which belief of the viewer's, what contrast. Comes before the data it justifies. | care, care_type (viewer, person, contrast, scale), care_quote | Delete the care line: would the next number mean less? If not, it is decoration. |
| Change | A different belief at the end than at the start. | change ("before -> after") | If before and after are the same, the beat is information, not progress. |
| Compel | The last two sentences open a question that this beat's answer created and the next beat answers. | compel, compel_quote, link_to_next | Could the question have been asked at the start? Then it is a teaser, not a handoff. |
Junctions
- THEREFORE: because of what just happened, this follows ("Sales had barely moved and profit had gone. So the owners had a choice.").
- BUT: what was set up is reversed or complicated ("A sensible company stops here. That is not what happened."). Plant the expectation first; without it a BUT is a plot twist.
- BECAUSE: the next beat explains the last, read backwards ("The gate stayed shut. Here is why.").
- Not allowed: AND THEN, next, meanwhile, after that, later, a bare dateline.
- Balance: all THEREFORE reads like a proof; all BUT reads like whiplash. Aim for a BUT every second or third junction. The linter checks the share is 0.2 to 0.65.
- Hinge patterns that work: prediction then check; plant then break; choice then pick; the natural objection; unanswered because.
Care patterns, strongest first for this audience
- The viewer's own belief or decision ("If your edge is being cheapest, this is you.").
- A person's concrete loss.
- Contrast (two statements six months apart).
- Scale in human units ("about 7 paise for every rupee claimed"; mark derived figures as derived).
The core driving loop and the first decision
From references/opening-protocol.md. The hook has one job: make the viewer need the answer to one question, prove they clicked the right video, and make them expect more than the title promised.
- Packaging question (Q0). What the title and thumbnail promise, in one sentence.
- Viewer priors. What a typical viewer believes (Moser Baer: "CDs died because pen drives and the cloud arrived"; "the owners must have stolen it"; "diversifying is what you do when your business shrinks").
- Candidate loops, 3 to 5, as "You think X. The record shows Y. So what is Z?" Include the generic one every rival asks, to see why you are not choosing it.
- Score each 0 or 1 on: specific, breaks a prior, lands on the viewer, shape-hintable, unspoiled, deliverable, scalable. Choose the candidate with the most 1s; record the rest as rejected.
- Destination hint: the shape of the answer in under 20 words, naming a category, not a content. Direction (the route) is the causal steps; every intermediate node goes on a withheld list and the linter fails the hook if one appears.
The generic loop ("how did X fail?") scores badly on "breaks a prior" and "lands on the viewer" by construction, which is why every rival opens on it.
CDL: "A man who made his name by moving on whenever something stopped working, and who was right three times, made one more move. Why did the last way out lock the gate?"
Destination hint: "The escape that always saved him is part of why those workers were locked out."
Withheld in the hook: solar, bond, 2008, 2012, FCCB, restructuring, any rupee figure.
The hook
Three rungs in the first minute
| Rung | Seconds | Job |
|---|---|---|
| Confirm | 0 to 30 | Prove the click was right with something concrete and checkable: a scene, a fact, a person. The first payoff. |
| Raise | 25 to 50 | Complicate the promise: the question is stranger or bigger than the title implied. State the CDL and the destination hint. |
| Contract | 45 to 65 | Promise more: one anomaly to come and one use. Then hand off into beat 1. |
Limits: at most one figure in the whole hook (preferably none); no greeting, channel intro, subscribe request, sponsor or "stay till the end"; 60 to 110 seconds.
A longer hook has to carry weight (B8)
Past about 75 seconds the hook must also hold: a named person with a want (not "its founder" and a pronoun), the weight of the rise and of the fall as images, a stake for "you", at least two forward moments as experiences (a cocktail party, a press conference with one sentence that aged badly) and never route terms, and the learning the viewer will take away. It closes on a question about a person's decision, not a place or an object.
Shape after round 7
- The mirror: what the viewer has held or done, including the slightly guilty part ("a blank disc, a pirated movie, a college project").
- The prize: what winning looked like, in the audience's words ("and made serious money doing it").
- The turn: a contrast word, then the scene of the fall ("But one morning in November 2017...").
- The person who pays: named, with the intensifier of the cost.
- The protagonist with a want and his pattern: the named idea defined once in plain words (the pivot).
- The thesis, landing on the people who pay.
- The trailer: three fragments, the strongest last, at most 30 words.
- The takeaway: one short sentence that keeps the "you", at most 14 words.
- The puzzle about a person's act ("the day Deepak Puri walked away from a business that was working. Why would he?").
The v7 hook is 267 words, 107 seconds. The v5 hook ended on "So let's start with the city he left", which asked the viewer to follow someone they had not met.
The promise ladder
- Rung 1: the title promise, paid in the first half (by 60% of runtime).
- Rung 2: the stranger answer, an anomaly the title did not mention, seeded in the hook as a vague specific and paid after the midpoint. Moser Baer: a company that said "we are well-funded" six months before asking bondholders for time.
- Rung 3: the use, a tool or reframing the viewer can carry out, paid in the close (three questions for any company).
- Unannounced bonus: a finding the hook did not mention. Moser Baer: the two fraud cases together are less than a quarter of the creditors' claims. It makes the video feel larger than its promise and cannot be called clickbait because nothing was promised.
Never seed a rung you cannot pay with a verified fact. A seed with no payoff was the most common clickbait failure in the teardown (6 of 7 Moser Baer rivals under-delivered their headline).
Anti-patterns
- Stacked numbers in the hook (v3: four figures in 40 seconds).
- Three equal teases with no spine.
- Spoiling the route by naming the mechanism.
- The hypothetical ("Suppose you work at a big company...") unless it bridges into a real scene.
- A cold collapse summary (rejected in both cohorts).
Stakes and load
- Number tiers. Hero: the figure the argument turns on; needs a stake line before it and a comparator with it; spoken once clearly, then reused by name ("the seven paise"); at most 7. Support: attached to a hero, rounded. Drop: goes to screen or the ledger; not spoken.
- Load windows. No more than four quantities in any 30 seconds; no more than one new concept per beat; at most one figure in the hook.
- Shape of a heavy stretch. Early in a beat after the stake line, ending on a plain-language sentence ("That is what a treadmill looks like from the inside.").
- Jargon. Each term of art is avoided or glossed in plain words at first use, preferably by analogy ("recast = ask the landlord to rewrite the lease"). Avoid FCCB, CDR, IBC, NCLT in voice-over; put them on screen.
- Segment and signal (Mayer). One idea per beat that ends on a full stop; a name for the central idea used every time; cut interesting facts that are off the causal chain (the swap test).
- Citing is a cost. Spend it on quotes, arithmetic and contested numbers. Never trade a verified claim for a snappier unverified one.
Pulls
A pull is something the viewer is waiting for without anyone having asked a question. It needs a signal, at least two touches in the text, and a resolution or an admitted gap.
| Type | The viewer is waiting for | Moser Baer example |
|---|---|---|
clock | a deadline that is coming | The bond falls due on 21 June 2012; later beats say how far off it is. |
irony | the moment the people in the story find out what the viewer already knows | We know the date; the company, in 2007, sells it as ordinary financing. |
jeopardy | what happens to a person or group the viewer has met | The workers introduced in the hook. |
prediction | the verdict on something the script said should be true | "If that is right, sales will barely move and profit will vanish. Check March 2008." |
motif | what a recurring image or claim means | The shut gate; the founder's habit of leaving what stopped working. |
gap | a fact the script says it does not have | "I have not found where the bond's money went." |
pattern | whether a repeated shape repeats or breaks | Prices halve in discs, drop to a chocolate's price in films, fall by two-thirds in solar. |
Place them: walk the beats and write for every minute what is the viewer waiting for right now? If the answer is "the next beat", the minute is uncovered. Declare at least four pulls of at least three kinds. Touches are not announcements ("Remember this date" is script-talk). The v7 chain has 8 pulls of 7 kinds.
Texture: persona, figures, people
Added in v6. The plan is the chain: persona, figures, humans, viewer_stakes, hero_numbers[].landing_quote and cdl.hook_elements.
- The beat as a texture sandwich: a person or picture, a claim, a number, a landing.
- The persona. Earnest about facts and people (follows leads, shows its work, honest about gaps, "I couldn't find..." only where a check was made); aloof about verdicts and heroes (gives the case for and against, does not pick sides, never aloof about the workers, no sarcasm at a person). Contested calls get both sides in the same beat.
- The governing metaphor. Choose by four tests (see
texture.md), introduce it early, return to it at least three times, say where it stops working. Moser Baer: the treadmill ("a treadmill has a stop button; a bond with a date doesn't"). Add glosses by analogy and one parable with no figures in it (the tea lane, the restaurant queue). - People. A protagonist with a want, a counterpart, a witness who pays. Moser Baer: Deepak Puri (protagonist), Ratul Puri (counterpart, tagged "Deepak's son" at every return), Mahesh Sharma (witness, tagged "the union's president").
Voice: the tells to remove
| Tell | Why it reads as machine | Before, then after |
|---|---|---|
| Negation pivot (F1) | Denies something nobody said, then says the thing. | "no crash, no scandal, just a margin so thin..." becomes "From outside it looked fine. The margin was so thin that a 5 percent dip in sales erased a year's profit." |
| Staged run-up, script-talk (F2) | Announces a point instead of making it. | "Think about what that does. A shrinking business has no date." becomes "A shrinking business has no date." |
| Stock depth (F3) | Sounds profound, says nothing. | "Brilliant is the right word." becomes the fact it gestures at. |
| Triad (F4) | Three items because three sounds finished. | "It sells, it shrinks, it protects what is left." becomes the actual number of items. |
| Punch-line closer, fragment drumroll (F4) | Every paragraph the same shape; manufactured emphasis. | One complete sentence. |
| Written English (F5) | No contractions because it was typed. | Read aloud; contract where you would. |
The voice pass: mark (run lint.js, read the F lines, read aloud and mark every stumble); rewrite by pattern, not by sentence (if the sentence carries a fact, keep the fact and drop the frame; if it only announces, cut it; if you cut a hinge, move it into the neighbour and recheck C and D); specificity test (replace each abstract line with a name, number, date or quote). It changes how the script sounds, never what it claims; no fact enters that is not in the ledger. Keep the honest hedges.
The chain file, field by field
Full schema: references/chain-schema.md. Top-level keys in chain-v7.json: version, title, cdl, ladder, bonuses, peak_reveal, hero_numbers, jargon, humans, viewer_stakes, persona, figures, pulls, loops, beats, audience, concepts, counted_sets, not_cast, one_off_names.
| Field | Holds | Checked by |
|---|---|---|
cdl | packaging question, question, viewer prior, destination hint and quote, question quote, first-payoff quote, withheld terms, closed_in, scored candidates, hook_elements (person, rise, fall, viewer, learning, forward moments, turn, tease, takeaway) | B1 to B8, L1, M2 |
ladder, bonuses, peak_reveal | rungs with seed and payoff quotes and beats; the unannounced extra; the biggest reveal | B4, B5, B7 |
hero_numbers | id, beat, value as spoken, stake quote, comparator quote, landing quote | A5, A6, H4 |
jargon | term and the words that gloss it at first use | A7 |
humans | name, role, aliases, want, detail, stake, tags, cost quote | I1 to I6, K1, K2, L2 |
viewer_stakes | beat and a line containing "you" | I5 |
persona | stance, earnest and aloof lines, two-sided calls | G1, G2 |
figures | governing metaphor with touches and its stated limit; glosses; parable | G3, G4 |
pulls, loops | pulls with signal, touches, resolve or left_open; spine and beat loops with open and close quotes | D5 to D8, E1 to E4 |
beats | per beat: id, title, arc, understand, care and care_type and care_quote, change, compel and compel_quote, link_to_next and link_why, next_opens_with, headline_quote | C1 to C5, D1 to D4, J1, J2, M1 |
audience, not_cast, one_off_names, concepts, counted_sets | known terms; names that are not story people; reasons for single-use names; named ideas and their definitions; spoken counts and their items | K3 to K7 |
A chain with none of the K, L, M fields still lints; the rules WARN "not declared" where a declaration is missing and FAIL only when a declaration is wrong. A person is named by name or a name-like alias, never by a role phrase ("the founder"); a re: alias is a raw regular expression.
Worked example: Moser Baer v7
Title (working): Moser Baer: How the Way Out Became the Trap. 14 beats, 3,029 words, 20.2 minutes, hook 107 seconds. Thesis: the founder's playbook (move to the growing market, be bigger and cheaper) worked three times; the fourth was financed with debt that doubled (1,620 to 3,500 crore between 2005 and 2011, sales flat) and a $150 million bond due 21 June 2012, in a market where prices fell about two-thirds.
| Beat | Title | Story part | Link to next |
|---|---|---|---|
| B0 | Hook | hook | THEREFORE |
| B1 | The city he left | origin | THEREFORE |
| B2 | The cocktail party | origin, rise | BUT |
| B3 | Late, and cheaper | rise | BUT |
| B4 | The treadmill | turn | THEREFORE |
| B5 | The sign | turn | THEREFORE |
| B6 | Films at the price of a chocolate | response | BUT |
| B7 | Sunlight and a date | response | BUT |
| B8 | The same game, faster | response | BUT |
| B9 | It did not stop | fall | THEREFORE |
| B10 | The people inside | fall, people | THEREFORE |
| B11 | Seven paise | fall, verdict | BUT |
| B12 | Where is the scam? | blame | THEREFORE |
| B13 | Close | people, lesson | (closes the spine) |
Hero numbers: 2.5 billion discs a year; as little as 14 (cents); lost ₹79 crore; $150 million; $1 billion; ₹334 crore; ₹1,101 crore. Pulls: P1 motif, P2 clock, P3 jeopardy, P4 gap, P5 prediction, P6 pattern, P7 jeopardy, P8 irony. Measures: 2.0 quantities a minute, at most 4 in any 30 seconds, hard windows 25%, quiet windows 40%, longest hard run 2, longest stretch without a person or "you" 58 seconds, contractions 1.65 per 100 words, 5 comparison markers, no more than 4 new people or organisations in a beat. A fuller profile of v6 against 8 English winners is in page 09.
examples/moser-baer-v7/README.md maps each K, L, M chain field to the sentence in the text that carries it.
Written 2026-10-27 from the repository files and the project memory notes. If a page and a file disagree, the file is right: fix the page.