Shorts cut skill

Cut raw talking-head takes down to the usable performance — pick the last COMPLETE attempt of each beat, drop false starts, and remove dead air from inside the kept takes.

by timscheuerai·MIT license·★ 37 Stars on the repo·GitHub ↗

Use now

Inside this skill

SKILL.md · the author's own words
# shorts-cut

Stage 1 of shorts-edit. The judgment-heavy stage.

## The rule

Each recording is ONE short, recorded with many attempts per beat.

> For each beat keep the **LAST** attempt — but only one that actually **finishes**.

Aborted fragments (trailing off into "So…", "and…", a cut-off word like "succes-") are
**not attempts**. Skip them and fall back to the last attempt that completes.

**This matters.** Taking "last" literally ships broken sentences. In the reference session
one clip had **seven** attempts at a beat and the last **three** all failed. A blind
"last attempt" rule would have shipped a garbled step 5.

Word-for-word excerpt, not a result. Read the full SKILL.md ↓

Files of Shorts cut

timscheuerai/main1 file shown
SKILL.md
Show the full text91 lines

shorts-cut

Stage 1 of shorts-edit. The judgment-heavy stage.

The rule

Each recording is ONE short, recorded with many attempts per beat.

For each beat keep the LAST attempt — but only one that actually finishes.

Aborted fragments (trailing off into "So…", "and…", a cut-off word like "succes-") are not attempts. Skip them and fall back to the last attempt that completes.

This matters. Taking "last" literally ships broken sentences. In the reference session one clip had seven attempts at a beat and the last three all failed. A blind "last attempt" rule would have shipped a garbled step 5.

Retakes often happen inside one phrase, separated by a sub-0.5s breath — so cuts must be made at word boundaries from the word-level view, not at phrase boundaries.

How

python $S/words_dump.py        # word-level view with [GAP] markers
# -> spawn one sub-agent per clip, in parallel, with the rule above
# -> each writes edit/edl_parts/<clip>.json
python $S/tighten_edl.py       # pass 2 -> edit/edl_parts_tight/  (SOURCE OF TRUTH)

EDL shape: {"source": "<name>", "ranges": [{"start": s, "end": e, "beat": "...", "reason": "..."}]} Cut mechanics: start = first kept word − 0.06s; end = last kept word + 0.15s.

Pass 2 (tighten_edl.py) removes dead air inside a kept take — the speaker pausing mid-thought. That was 19.1s across 14 clips. It splits each range at acoustic silence (≥0.6s at −60dB), leaving 120ms of air. Cutting inside silence can never clip a word, so this needs no transcript at all.

THE TRAP: ASR word END times are fiction

This is the single most expensive lesson in the whole pipeline.

Scribe pads a word's end deep into the following pause — one word claimed to run 1.3 seconds past where the voice actually stopped. It also emits phantom words over dead-silent audio.

Consequences, all measured:

  • A word-gap scan reported 2.5s of internal silence where the audio had 19.1s.
  • Checking cut edges against the word grid produced 25 "cuts inside a word" alarms. Measuring the audio showed 24 were sitting in silence. Only one was real.

Word STARTs are reliable. Everything about silence comes from the audio. Use word timings only to avoid cutting mid-word — never to find a pause.

The other trap: ASR merges repeated words

The speaker said "X", dragged for 0.8s, then said "X" again. ASR merged both into a single "XX" token — so the take-picker literally could not see the duplicate; it looked like one word.

Two follow-on effects:

  1. The EDL kept a 0.5s segment that was just the first X.
  2. Once that was dropped, the surviving X had no caption, because the merged token's start time now sat outside the segment.

Fix: edit/word_fixes.json supports _insert — put a word back at the time it is actually spoken (in SOURCE seconds), and it flows through the EDL like any other word.

{"<clip>": {"_insert": [{"src_at": 256.68, "word": "X", "dur": 0.30}]}}

The same file corrects mis-hearings for CAPTIONS only (audio is never touched):

{"<clip>": {"mode": "moat"}}

Expect this much waste

55–75% of every raw take is false starts and dead air. If your cut is only removing 20%, you are not looking hard enough at the retakes.

Verify

python $S/verify_cuts.py — no cut edge may land on live speech. It requires both tests to fire: inside a word and voiced. See shorts-qa for why either alone is useless.

1---
2name: shorts-cut
3description: Cut raw talking-head takes down to the usable performance — pick the last COMPLETE attempt of each beat, drop false starts, and remove dead air from inside the kept takes. Use when asked to cut/clip raw recordings, remove retakes or false starts, or tighten pauses in talking-head footage.
4---
5 
6# shorts-cut
7 
8Stage 1 of shorts-edit. The judgment-heavy stage.
9 
10## The rule
11 
12Each recording is ONE short, recorded with many attempts per beat.
13 
14> For each beat keep the **LAST** attempt — but only one that actually **finishes**.
15 
16Aborted fragments (trailing off into "So…", "and…", a cut-off word like "succes-") are
17**not attempts**. Skip them and fall back to the last attempt that completes.
18 
19**This matters.** Taking "last" literally ships broken sentences. In the reference session
20one clip had **seven** attempts at a beat and the last **three** all failed. A blind
21"last attempt" rule would have shipped a garbled step 5.
22 
23Retakes often happen *inside* one phrase, separated by a sub-0.5s breath — so cuts must be
24made at word boundaries from the word-level view, not at phrase boundaries.
25 
26## How
27 
28```bash
29python $S/words_dump.py # word-level view with [GAP] markers
30# -> spawn one sub-agent per clip, in parallel, with the rule above
31# -> each writes edit/edl_parts/<clip>.json
32python $S/tighten_edl.py # pass 2 -> edit/edl_parts_tight/ (SOURCE OF TRUTH)
33```
34 
35EDL shape: `{"source": "<name>", "ranges": [{"start": s, "end": e, "beat": "...", "reason": "..."}]}`
36Cut mechanics: start = first kept word − 0.06s; end = last kept word + 0.15s.
37 
38**Pass 2 (`tighten_edl.py`)** removes dead air *inside* a kept take — the speaker pausing
39mid-thought. That was 19.1s across 14 clips. It splits each range at **acoustic** silence
40(≥0.6s at −60dB), leaving 120ms of air. Cutting inside silence can never clip a word, so
41this needs no transcript at all.
42 
43## THE TRAP: ASR word END times are fiction
44 
45This is the single most expensive lesson in the whole pipeline.
46 
47Scribe pads a word's `end` deep into the following pause — one word claimed to run **1.3
48seconds** past where the voice actually stopped. It also emits **phantom words over
49dead-silent audio**.
50 
51Consequences, all measured:
52- A word-gap scan reported **2.5s** of internal silence where the audio had **19.1s**.
53- Checking cut edges against the word grid produced **25 "cuts inside a word" alarms**.
54 Measuring the audio showed **24 were sitting in silence**. Only **one** was real.
55 
56> **Word STARTs are reliable. Everything about silence comes from the audio.**
57> Use word timings only to avoid cutting mid-word — never to find a pause.
58 
59## The other trap: ASR merges repeated words
60 
61The speaker said "X", dragged for 0.8s, then said "X" again. ASR merged **both** into a
62single `"XX"` token — so the take-picker literally could not see the duplicate; it looked
63like one word.
64 
65Two follow-on effects:
661. The EDL kept a 0.5s segment that was *just* the first X.
672. Once that was dropped, the surviving X had **no caption**, because the merged token's
68 start time now sat outside the segment.
69 
70Fix: `edit/word_fixes.json` supports `_insert` — put a word back at the time it is actually
71spoken (in SOURCE seconds), and it flows through the EDL like any other word.
72 
73```json
74{"<clip>": {"_insert": [{"src_at": 256.68, "word": "X", "dur": 0.30}]}}
75```
76 
77The same file corrects mis-hearings for CAPTIONS only (audio is never touched):
78```json
79{"<clip>": {"mode": "moat"}}
80```
81 
82## Expect this much waste
83 
84**55–75% of every raw take** is false starts and dead air. If your cut is only removing
8520%, you are not looking hard enough at the retakes.
86 
87## Verify
88 
89`python $S/verify_cuts.py` — no cut edge may land on live speech. It requires **both**
90tests to fire: inside a word *and* voiced. See shorts-qa for why either alone is useless.
91 

Discussion