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 ↗
npx degit timscheuerai/content-vault/skills/shorts-cut#main ~/.claude/skills/shorts-cutChecked ·commit main
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
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:
- The EDL kept a 0.5s segment that was just the first X.
- 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 | |
| 2 | name shorts-cut |
| 3 | description 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 | |
| 8 | Stage 1 of shorts-edit. The judgment-heavy stage. |
| 9 | |
| 10 | ## The rule |
| 11 | |
| 12 | Each 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 | |
| 16 | Aborted 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 |
| 20 | one 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 | |
| 23 | Retakes often happen *inside* one phrase, separated by a sub-0.5s breath — so cuts must be |
| 24 | made at word boundaries from the word-level view, not at phrase boundaries. |
| 25 | |
| 26 | ## How |
| 27 | |
| 28 | |
| 29 | python $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 |
| 32 | python $S/tighten_edl.py # pass 2 -> edit/edl_parts_tight/ (SOURCE OF TRUTH) |
| 33 | |
| 34 | |
| 35 | EDL shape: `{"source": "<name>", "ranges": [{"start": s, "end": e, "beat": "...", "reason": "..."}]}` |
| 36 | Cut 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 |
| 39 | mid-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 |
| 41 | this needs no transcript at all. |
| 42 | |
| 43 | ## THE TRAP: ASR word END times are fiction |
| 44 | |
| 45 | This is the single most expensive lesson in the whole pipeline. |
| 46 | |
| 47 | Scribe pads a word's `end` deep into the following pause — one word claimed to run **1.3 |
| 48 | seconds** past where the voice actually stopped. It also emits **phantom words over |
| 49 | dead-silent audio**. |
| 50 | |
| 51 | Consequences, 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 | |
| 61 | The speaker said "X", dragged for 0.8s, then said "X" again. ASR merged **both** into a |
| 62 | single `"XX"` token — so the take-picker literally could not see the duplicate; it looked |
| 63 | like one word. |
| 64 | |
| 65 | Two follow-on effects: |
| 66 | The EDL kept a 0.5s segment that was *just* the first X. |
| 67 | Once that was dropped, the surviving X had **no caption**, because the merged token's |
| 68 | start time now sat outside the segment. |
| 69 | |
| 70 | Fix: `edit/word_fixes.json` supports `_insert` — put a word back at the time it is actually |
| 71 | spoken (in SOURCE seconds), and it flows through the EDL like any other word. |
| 72 | |
| 73 | |
| 74 | {"<clip>": {"_insert": [{"src_at": 256.68, "word": "X", "dur": 0.30}]}} |
| 75 | |
| 76 | |
| 77 | The same file corrects mis-hearings for CAPTIONS only (audio is never touched): |
| 78 | |
| 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 |
| 85 | 20%, 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** |
| 90 | tests to fire: inside a word *and* voiced. See shorts-qa for why either alone is useless. |
| 91 |
Discussion
Browse more free Claude skills.