Cut Shortform
The single editorial principle: one coherent argument, source order
preserved. Stitched-together montages of disconnected good lines feel
random; the goal is a clip that earns the next watch by escalating one
idea.
Inputs
transcript.json — required. Read segments first, then go to words
for cut boundaries.
- An editorial brief from the user (target length, tone, subject,
pacing). The brief is the goal; it is not a list of cuts to make.
Procedure
Skim the segments. Identify 3-7 candidate moments where the
speaker says something concrete. Mark the segment id and rough time.
Pick the spine. From the candidates, choose ONE through-line:
cold-open hook → catalyst → escalation → payoff. Discard candidates
that don't serve the spine — even if they're individually strong.
Lock cut points to word boundaries from the words array. The
start of a span = the start of the first kept word; the end = the
end of the last kept word.
Write cuts.json before rendering. Schema:
{
"title": "Brief title for the clip",
"target_duration_seconds": "~30 (28-32 window)",
"keep_spans": [
{ "start": 35.04, "end": 39.26, "reason": "Cold open on …" }
],
"cut_policy": [
"Boundaries on whisper word timestamps, no reordering.",
"Removed dead air, hedges, mid-sentence restarts."
]
}
Render via the render-final skill.
Tail (optional)
If the user asks for the original video to continue after the hook
("then add the main video back," "play the rest after," "append the
source"), record it in cuts.json as a tail block:
{
"title": "...",
"keep_spans": [ ... ],
"tail": {
"from": 98.14,
"to": null,
"music": false
},
"cut_policy": [ ... ]
}
from is a source-time in seconds. Most useful: the end of the
LAST keep-span, so the body picks up exactly where the hook left
off (no jump).
to of null means run to the end of the source.
music: false means the music ducks out before the body starts.
Render order: keep-spans first, then the tail, concatenated. See
render-final/SKILL.md for the filter pattern.
If tail is absent, render only the hook (default behavior).
Pacing rules by target length
| Target |
Bias |
| ≤30s |
Aggressive. One argument. No subordinate clauses unless they pay off the punch. Cut filler ruthlessly. |
| 60s |
Setup → tension → payoff. Some breathing room. Tolerate one clause that earns the next line. |
| 90s+ |
Looser pacing, narrative arc, more context preserved. Still no reordering. |
Things to cut without asking
- Throat-clearing, "you know," "like," "I mean," "umm"
- Mid-sentence restarts ("the — the thing is")
- Attribution wind-up before a quoted line
- Dead air > 0.3s unless it's doing tension/emphasis work
- Self-deprecating hedges ("probably shouldn't say this") — usually the
next clause is the actual point
Things to keep even when slow
- Pauses that land a punchline (rare, but real)
- The breath before a key word (1 word's-worth, not 2)
- The first beat of laughter when it earns the line
Anti-patterns
- Reordering to make a tighter argument. Don't. The viewer will
notice the seam, and source-order discipline is what keeps the cut
honest.
- Stitching the loudest moments instead of building a spine. AI tools
default to this. It's why they don't make good interview cuts.
- Cutting mid-word. Whisper gives you the boundaries. Use them.
1---2name: cut-shortform3description: Shape a 30-90 second editorial cut from a longer interview/talk using a word-timestamped transcript.4---56# Cut Shortform78The single editorial principle: **one coherent argument, source order9preserved**. Stitched-together montages of disconnected good lines feel10random; the goal is a clip that earns the next watch by escalating one11idea.1213## Inputs1415- `transcript.json` — required. Read `segments` first, then go to `words`16 for cut boundaries.17- An editorial brief from the user (target length, tone, subject,18 pacing). The brief is the goal; it is not a list of cuts to make.1920## Procedure21221. **Skim the segments.** Identify 3-7 candidate moments where the23 speaker says something concrete. Mark the segment id and rough time.242. **Pick the spine.** From the candidates, choose ONE through-line:25 *cold-open hook → catalyst → escalation → payoff*. Discard candidates26 that don't serve the spine — even if they're individually strong.273. **Lock cut points** to word boundaries from the `words` array. The28 start of a span = the `start` of the first kept word; the end = the29 `end` of the last kept word.304. **Write `cuts.json`** before rendering. Schema:3132 ```json33 {34 "title": "Brief title for the clip",35 "target_duration_seconds": "~30 (28-32 window)",36 "keep_spans": [37 { "start": 35.04, "end": 39.26, "reason": "Cold open on …" }38 ],39 "cut_policy": [40 "Boundaries on whisper word timestamps, no reordering.",41 "Removed dead air, hedges, mid-sentence restarts."42 ]43 }44 ```45465. **Render** via the `render-final` skill.4748## Tail (optional)4950If the user asks for the original video to continue after the hook51("then add the main video back," "play the rest after," "append the52source"), record it in `cuts.json` as a `tail` block:5354```json55{56 "title": "...",57 "keep_spans": [ ... ],58 "tail": {59 "from": 98.14,60 "to": null,61 "music": false62 },63 "cut_policy": [ ... ]64}65```6667- `from` is a source-time in seconds. Most useful: the `end` of the68 LAST keep-span, so the body picks up exactly where the hook left69 off (no jump).70- `to` of `null` means run to the end of the source.71- `music: false` means the music ducks out before the body starts.7273Render order: keep-spans first, then the tail, concatenated. See74`render-final/SKILL.md` for the filter pattern.7576If `tail` is absent, render only the hook (default behavior).7778## Pacing rules by target length7980| Target | Bias |81|---|---|82| ≤30s | Aggressive. One argument. No subordinate clauses unless they pay off the punch. Cut filler ruthlessly. |83| 60s | Setup → tension → payoff. Some breathing room. Tolerate one clause that earns the next line. |84| 90s+ | Looser pacing, narrative arc, more context preserved. Still no reordering. |8586## Things to cut without asking8788- Throat-clearing, "you know," "like," "I mean," "umm"89- Mid-sentence restarts ("the — the thing is")90- Attribution wind-up before a quoted line91- Dead air > 0.3s unless it's doing tension/emphasis work92- Self-deprecating hedges ("probably shouldn't say this") — usually the93 next clause is the actual point9495## Things to keep even when slow9697- Pauses that land a punchline (rare, but real)98- The breath before a key word (1 word's-worth, not 2)99- The first beat of laughter when it earns the line100101## Anti-patterns102103- **Reordering** to make a tighter argument. Don't. The viewer will104 notice the seam, and source-order discipline is what keeps the cut105 honest.106- **Stitching the loudest moments** instead of building a spine. AI tools107 default to this. It's why they don't make good interview cuts.108- **Cutting mid-word.** Whisper gives you the boundaries. Use them.