Docs/Skills and code/skill winning-video-teardown
.claude/skills/winning-video-teardown/references/schema.md
Analysis JSON schema: Write one JSON object. Every evidence item is {"ts": "mm:ss", "quote": "<verbatim words from the transcript, in the original language>", "gloss": "<English meaning>"}.
Analysis JSON schema
Write one JSON object. Every evidence item is {"ts": "mm:ss", "quote": "<verbatim words from the transcript, in the original language>", "gloss": "<English meaning>"}. The validator checks that each quote really occurs in the transcript (punctuation and spacing ignored) and that each timestamp falls inside the video, so copy quotes exactly, shortly (4 to 25 words), and never translate inside quote.
{
"video_id": "",
"one_line": "Why this video works, in one sentence.",
"packaging": {
"title": {
"promise": "What exactly does the title promise the viewer will get?",
"specificity": "high | medium | low",
"info_gap": { "type": "question | half-statement | contrarian | reveal | none", "what_is_withheld": "" },
"formula": "The reusable pattern, e.g. 'Why {famous company} failed + stake number'",
"mechanisms": [ { "id": "P-...", "how": "What in the title does this, and why it works on the viewer" } ]
},
"thumbnail": {
"seen": true,
"description": "What is actually in the image (people, expression, text, logos, colours).",
"mechanisms": [ { "id": "T-...", "how": "" } ],
"division_of_labour": "What the thumbnail says that the title does not, and vice versa."
},
"promise_delivery": {
"promise_restated": "",
"delivered_at": "mm:ss or 'never'",
"delivered": "fully | partly | no",
"clickbait_risk": "none | borderline | high",
"why": "How the video earns (or fails to earn) the information asymmetry it implied."
}
},
"script": {
"hook": {
"summary": "What happens in the first 60 seconds, beat by beat.",
"time_to_promise_sec": 0,
"first_payoff_sec": 0,
"figures_in_first_60s": 0,
"destination_hint": { "present": true, "what": "The shape of the answer or end state the opening hints at, without the route; or why there is none.", "evidence": [ {"ts": "", "quote": "", "gloss": ""} ] },
"extra_promises": [ { "promise": "A bigger or stranger payoff than the title states, seeded in the first minute", "seeded_at": "mm:ss", "paid_at": "mm:ss or never" } ],
"moves": [ { "id": "S-...", "how": "", "evidence": [ {"ts": "", "quote": "", "gloss": ""} ] } ]
},
"structure": [ { "from": "mm:ss", "to": "mm:ss", "function": "What this stretch is for", "note": "" } ],
"loops": [ { "opened_at": "mm:ss", "question": "", "closed_at": "mm:ss or null", "how_kept_alive": "" } ],
"junctions": [
{ "at": "mm:ss", "link": "THEREFORE | BUT | AND_THEN | NEW_TOPIC", "from": "what the stretch before it ended on", "to": "what the next stretch starts with",
"evidence": [ {"ts": "", "quote": "the hinge words or the first sentence of the next stretch", "gloss": ""} ] }
],
"numbers": {
"hero_figures": [ { "ts": "mm:ss", "what": "", "anchored_by": "prediction | pair | human_scale | person | question | none", "evidence": [ {"ts": "", "quote": "", "gloss": ""} ] } ],
"naked_examples": [ { "ts": "mm:ss", "quote": "a figure spoken with no stake before it, if any", "why": "" } ],
"densest_30s": { "at": "mm:ss", "figures": 0 },
"load_note": "How the video keeps figures and terms from overloading the viewer, or where it does not."
},
"mechanisms": [
{ "id": "S-...", "how_it_works": "What the script does, mechanically.", "effect_on_viewer": "What it does to the viewer's attention, emotion or belief.", "evidence": [ {"ts": "", "quote": "", "gloss": ""} ] }
],
"voice": "The persona and delivery: who is talking, how they address the viewer, register, quirks.",
"pacing_devices": [ "Concrete devices used to hold attention across the runtime (re-hooks, resets, recaps, tempo changes)." ],
"ending": { "type": "close | lesson | next-video | other", "what_it_does": "" }
},
"doing_well": [
{ "move": "Short name of the thing the video does best.", "how": "The mechanics: what exactly it does, where, and why it works on a viewer.", "evidence": [ {"ts": "", "quote": "", "gloss": ""} ] }
],
"weak_points": [ { "what": "", "where": "mm:ss", "risk": "What it costs." } ],
"transferable_moves": [ "A concrete instruction a new 'Why X died' video could copy, stated as a move, not as a vague principle." ],
"new_mechanisms": [ { "name": "", "definition": "", "evidence": [ {"ts": "", "quote": "", "gloss": ""} ] } ],
"confidence": "high | medium | low",
"transcript_quality_notes": "Garbled captions, missing stretches, language, anything that limits the reading."
}
Requirements enforced by the validator:
doing_wellhas 3 to 6 items; each has at least one evidence item.script.mechanismshas at least 5 items; each has at least one evidence item.script.loopslists every open loop you can find (zero is allowed only if you explain inweak_points).- Every
idis intaxonomy.md(or the item is moved tonew_mechanisms). - At least 85% of quotes must be found in the transcript.
- New in the 2026-10-24 revision (
script.junctions,script.numbers, and the hook'sfirst_payoff_sec,figures_in_first_60s,destination_hint,extra_promises): the validator reports them as warnings by default and as errors with--strict. Task files written byprepare.jsuse--strict.junctionsneeds one entry for each boundary between the stretches inscript.structure(at leaststructure.length - 1, minimum 3), each with a link type fromtaxonomy.mdsection D and a quoted hinge. Count figures honestly: a quantity is a spoken figure of money, share, count or duration; plain dates are not. - Old analyses made before this revision are still valid for their original purpose; do not rewrite them. To get the new counts for old videos, re-run them under the new schema.
Show the raw text
# Analysis JSON schema
Write one JSON object. Every `evidence` item is `{"ts": "mm:ss", "quote": "<verbatim words from the transcript, in the original language>", "gloss": "<English meaning>"}`. The validator checks that each quote really occurs in the transcript (punctuation and spacing ignored) and that each timestamp falls inside the video, so copy quotes exactly, shortly (4 to 25 words), and never translate inside `quote`.
```json
{
"video_id": "",
"one_line": "Why this video works, in one sentence.",
"packaging": {
"title": {
"promise": "What exactly does the title promise the viewer will get?",
"specificity": "high | medium | low",
"info_gap": { "type": "question | half-statement | contrarian | reveal | none", "what_is_withheld": "" },
"formula": "The reusable pattern, e.g. 'Why {famous company} failed + stake number'",
"mechanisms": [ { "id": "P-...", "how": "What in the title does this, and why it works on the viewer" } ]
},
"thumbnail": {
"seen": true,
"description": "What is actually in the image (people, expression, text, logos, colours).",
"mechanisms": [ { "id": "T-...", "how": "" } ],
"division_of_labour": "What the thumbnail says that the title does not, and vice versa."
},
"promise_delivery": {
"promise_restated": "",
"delivered_at": "mm:ss or 'never'",
"delivered": "fully | partly | no",
"clickbait_risk": "none | borderline | high",
"why": "How the video earns (or fails to earn) the information asymmetry it implied."
}
},
"script": {
"hook": {
"summary": "What happens in the first 60 seconds, beat by beat.",
"time_to_promise_sec": 0,
"first_payoff_sec": 0,
"figures_in_first_60s": 0,
"destination_hint": { "present": true, "what": "The shape of the answer or end state the opening hints at, without the route; or why there is none.", "evidence": [ {"ts": "", "quote": "", "gloss": ""} ] },
"extra_promises": [ { "promise": "A bigger or stranger payoff than the title states, seeded in the first minute", "seeded_at": "mm:ss", "paid_at": "mm:ss or never" } ],
"moves": [ { "id": "S-...", "how": "", "evidence": [ {"ts": "", "quote": "", "gloss": ""} ] } ]
},
"structure": [ { "from": "mm:ss", "to": "mm:ss", "function": "What this stretch is for", "note": "" } ],
"loops": [ { "opened_at": "mm:ss", "question": "", "closed_at": "mm:ss or null", "how_kept_alive": "" } ],
"junctions": [
{ "at": "mm:ss", "link": "THEREFORE | BUT | AND_THEN | NEW_TOPIC", "from": "what the stretch before it ended on", "to": "what the next stretch starts with",
"evidence": [ {"ts": "", "quote": "the hinge words or the first sentence of the next stretch", "gloss": ""} ] }
],
"numbers": {
"hero_figures": [ { "ts": "mm:ss", "what": "", "anchored_by": "prediction | pair | human_scale | person | question | none", "evidence": [ {"ts": "", "quote": "", "gloss": ""} ] } ],
"naked_examples": [ { "ts": "mm:ss", "quote": "a figure spoken with no stake before it, if any", "why": "" } ],
"densest_30s": { "at": "mm:ss", "figures": 0 },
"load_note": "How the video keeps figures and terms from overloading the viewer, or where it does not."
},
"mechanisms": [
{ "id": "S-...", "how_it_works": "What the script does, mechanically.", "effect_on_viewer": "What it does to the viewer's attention, emotion or belief.", "evidence": [ {"ts": "", "quote": "", "gloss": ""} ] }
],
"voice": "The persona and delivery: who is talking, how they address the viewer, register, quirks.",
"pacing_devices": [ "Concrete devices used to hold attention across the runtime (re-hooks, resets, recaps, tempo changes)." ],
"ending": { "type": "close | lesson | next-video | other", "what_it_does": "" }
},
"doing_well": [
{ "move": "Short name of the thing the video does best.", "how": "The mechanics: what exactly it does, where, and why it works on a viewer.", "evidence": [ {"ts": "", "quote": "", "gloss": ""} ] }
],
"weak_points": [ { "what": "", "where": "mm:ss", "risk": "What it costs." } ],
"transferable_moves": [ "A concrete instruction a new 'Why X died' video could copy, stated as a move, not as a vague principle." ],
"new_mechanisms": [ { "name": "", "definition": "", "evidence": [ {"ts": "", "quote": "", "gloss": ""} ] } ],
"confidence": "high | medium | low",
"transcript_quality_notes": "Garbled captions, missing stretches, language, anything that limits the reading."
}
```
Requirements enforced by the validator:
- `doing_well` has 3 to 6 items; each has at least one evidence item.
- `script.mechanisms` has at least 5 items; each has at least one evidence item.
- `script.loops` lists every open loop you can find (zero is allowed only if you explain in `weak_points`).
- Every `id` is in `taxonomy.md` (or the item is moved to `new_mechanisms`).
- At least 85% of quotes must be found in the transcript.
- **New in the 2026-10-24 revision** (`script.junctions`, `script.numbers`, and the hook's `first_payoff_sec`, `figures_in_first_60s`, `destination_hint`, `extra_promises`): the validator reports them as warnings by default and as errors with `--strict`. Task files written by `prepare.js` use `--strict`. `junctions` needs one entry for each boundary between the stretches in `script.structure` (at least `structure.length - 1`, minimum 3), each with a link type from `taxonomy.md` section D and a quoted hinge. Count figures honestly: a quantity is a spoken figure of money, share, count or duration; plain dates are not.
- Old analyses made before this revision are still valid for their original purpose; do not rewrite them. To get the new counts for old videos, re-run them under the new schema.
Shown as it is in the repository at build time (2026-11-03); the home directory appears as <home>. If this page and the file differ, the file is right. Back to the catalogue.