Write script
This script is the single source for everything that follows: shoot plan, cut list,
subtitles, and caption are derived from it. That's why the output format is binding
and must not vary.
Process
- Load context.
BRAND.md for the voice, FORMATS.md for the structure of the
chosen format, LEARNINGS.md for what's worked most recently.
- Clarify the framework. Platform, target length, pillar, and format. Derive
whatever wasn't specified from the project knowledge and make the assumption
visible above the script — don't ask, as long as a reasonable assumption is
possible.
- Set the promise. One sentence: what does the viewer get out of it after 30
seconds? Sits as a comment line above the script and is the touchstone for every
beat.
- Build beats. Every beat carries exactly one thought. A beat that wants two
things at once gets split.
- Calculate speaking duration (see below) and derive the timecodes from it —
don't estimate.
- Run the self-check and output the result below it.
Speaking duration
Calculate with 2.7 spoken words per second. That's a brisk pace, typical for
social video.
- Count the word count per beat, divide by 2.7, round to half seconds.
- Add 0.3 seconds of buffer per beat for breathing and cutting.
- Set beats without a spoken line (pure visual moments) at the planned hold time, at
least 0.8 seconds.
If the total deviates from the target length by more than 15 percent, shorten or
extend the content — never by speaking faster.
Calibration: after the first three videos are shot, compare the actual
speaking duration to the calculated one and correct the value 2.7 in this file to
your own pace. After that, the lengths will be accurate to the second.
Output format
Exactly this structure, with no additional headings or body text in between:
# SCRIPT · <working title>
PROMISE: <one sentence>
META: platform=<reel|tiktok> · target=<seconds>s · calculated=<seconds>s · pillar=<name> · format=<name>
## BEAT 1 · HOOK · 00:00–00:02
VO: "<spoken text, verbatim>"
TEXT: <overlay, in caps as it should appear, or ->
SHOT: <framing, movement, what's visible>
SOUND: <music change, effect, or ->
## BEAT 2 · <LABEL> · 00:02–00:09
VO: "..."
TEXT: ...
SHOT: ...
SOUND: ...
## BEAT n · CTA · 00:xx–00:xx
VO: "..."
TEXT: ...
SHOT: ...
SOUND: ...
Field rules:
- VO is verbatim and speakable. Read it aloud in your head: what can't be said
in one breath gets split. No written-register phrasing, no nested clauses, no
words that trip you up.
- TEXT is the on-screen overlay. Short, in caps, never identical to what's
spoken – it complements or anchors it. Empty is better than redundant, then
-.
- SHOT describes framing, movement, and subject concretely enough to shoot from
without having to ask.
- SOUND only gets an entry when something happens at that point: music change,
beat drop, effect, silence. Otherwise
-.
- LABEL names the beat's function: HOOK, PROBLEM, MISTAKE 1, TWIST, PROOF,
RESOLUTION, CTA.
Format-specific fields
If FORMATS.md describes a text carrier in the shot – a sign, a card, a
printed document, an object with lettering –, then that's a field of its own in
the beat, not an aside under SHOT:
SIGN: <exact text, as it should appear on the carrier>
The text has to fit the surface and work without sound. A script that only
describes it instead of spelling it out forces reinvention later.
Check in FORMATS.md whether the carrier exists on set or only gets created in
editing. A physical prop has to be made before the shoot; an overlaid card is
created in post and can be changed until the last moment. Don't treat it as a
shoot task if it isn't one.
The same applies to any other recurring element that FORMATS.md names as part of
the base format. Carry it over into the schema as a named field.
Self-check
Output after the script, each marked met or not:
- Hook under twelve words and with its own visual idea
- All format-specific fields from
FORMATS.md are filled in, not paraphrased
- Every beat carries exactly one thought
- No TEXT field repeats its VO field verbatim
- Calculated length within 15 percent of the target
- The promise is actually delivered by the end
- The CTA matches the promise and is a single, concrete action
- Sounds like
BRAND.md – no phrasing that could sit on just any account
- If
FORMATS.md defines a check formula, it's satisfied point by point – it beats
all the general rules in this instruction
Whatever isn't met gets named and fixed, not glossed over.
1---2name: script3description: Writes a shoot-ready script for a Reel or TikTok from an idea, in a fixed beat format with timecodes, spoken line, on-screen text, and B-roll. Use when a video script, a screenplay, a script for a Reel, a TikTok, or a Short is needed. Foundation for /shotlist, /cut, and /caption.4---56# Write script78This script is the single source for everything that follows: shoot plan, cut list,9subtitles, and caption are derived from it. That's why the output format is binding10and must not vary.1112## Process13141. **Load context.** `BRAND.md` for the voice, `FORMATS.md` for the structure of the15 chosen format, `LEARNINGS.md` for what's worked most recently.162. **Clarify the framework.** Platform, target length, pillar, and format. Derive17 whatever wasn't specified from the project knowledge and make the assumption18 visible above the script — don't ask, as long as a reasonable assumption is19 possible.203. **Set the promise.** One sentence: what does the viewer get out of it after 3021 seconds? Sits as a comment line above the script and is the touchstone for every22 beat.234. **Build beats.** Every beat carries exactly one thought. A beat that wants two24 things at once gets split.255. **Calculate speaking duration** (see below) and derive the timecodes from it —26 don't estimate.276. **Run the self-check** and output the result below it.2829## Speaking duration3031Calculate with **2.7 spoken words per second**. That's a brisk pace, typical for32social video.3334- Count the word count per beat, divide by 2.7, round to half seconds.35- Add **0.3 seconds of buffer** per beat for breathing and cutting.36- Set beats without a spoken line (pure visual moments) at the planned hold time, at37 least 0.8 seconds.3839If the total deviates from the target length by more than 15 percent, shorten or40extend **the content** — never by speaking faster.4142> **Calibration:** after the first three videos are shot, compare the actual43> speaking duration to the calculated one and correct the value 2.7 in this file to44> your own pace. After that, the lengths will be accurate to the second.4546## Output format4748Exactly this structure, with no additional headings or body text in between:4950```51# SCRIPT · <working title>52PROMISE: <one sentence>53META: platform=<reel|tiktok> · target=<seconds>s · calculated=<seconds>s · pillar=<name> · format=<name>5455## BEAT 1 · HOOK · 00:00–00:0256VO: "<spoken text, verbatim>"57TEXT: <overlay, in caps as it should appear, or ->58SHOT: <framing, movement, what's visible>59SOUND: <music change, effect, or ->6061## BEAT 2 · <LABEL> · 00:02–00:0962VO: "..."63TEXT: ...64SHOT: ...65SOUND: ...6667## BEAT n · CTA · 00:xx–00:xx68VO: "..."69TEXT: ...70SHOT: ...71SOUND: ...72```7374Field rules:7576- **VO** is verbatim and speakable. Read it aloud in your head: what can't be said77 in one breath gets split. No written-register phrasing, no nested clauses, no78 words that trip you up.79- **TEXT** is the on-screen overlay. Short, in caps, never identical to what's80 spoken – it complements or anchors it. Empty is better than redundant, then `-`.81- **SHOT** describes framing, movement, and subject concretely enough to shoot from82 without having to ask.83- **SOUND** only gets an entry when something happens at that point: music change,84 beat drop, effect, silence. Otherwise `-`.85- **LABEL** names the beat's function: HOOK, PROBLEM, MISTAKE 1, TWIST, PROOF,86 RESOLUTION, CTA.8788### Format-specific fields8990**If `FORMATS.md` describes a text carrier in the shot** – a sign, a card, a91printed document, an object with lettering –, then that's a **field of its own in92the beat**, not an aside under SHOT:9394```95SIGN: <exact text, as it should appear on the carrier>96```9798The text has to fit the surface and work without sound. A script that only99describes it instead of spelling it out forces reinvention later.100101**Check in `FORMATS.md` whether the carrier exists on set or only gets created in102editing.** A physical prop has to be made before the shoot; an overlaid card is103created in post and can be changed until the last moment. Don't treat it as a104shoot task if it isn't one.105106The same applies to any other recurring element that `FORMATS.md` names as part of107the base format. Carry it over into the schema as a named field.108109## Self-check110111Output after the script, each marked met or not:112113- Hook under twelve words and with its own visual idea114- All format-specific fields from `FORMATS.md` are filled in, not paraphrased115- Every beat carries exactly one thought116- No TEXT field repeats its VO field verbatim117- Calculated length within 15 percent of the target118- The promise is actually delivered by the end119- The CTA matches the promise and is a single, concrete action120- Sounds like `BRAND.md` – no phrasing that could sit on just any account121- If `FORMATS.md` defines a check formula, it's satisfied point by point – it beats122 all the general rules in this instruction123124Whatever isn't met gets named and fixed, not glossed over.