Raw Video Cutter

Shorts cut

by timscheuerai · MIT license · ★ 37 on GitHub

Shorts cut cover

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…

---
name: shorts-cut
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.
---

# 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.

Overview

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

Manual install (npx, ZIP)
Claude Codenpx skills add timscheuerai/content-vault --skill shorts-cut -g -a claude-code
Claude Code (degit)npx degit timscheuerai/content-vault/skills/shorts-cut#main ~/.claude/skills/shorts-cut
Claude.ai / desktopZip the folder and upload it under Settings → Capabilities → Skills.
Codex, Cursor, other agentsPoint them at SKILL.md. The other files are plain text.

Connects with Agent Alley MCP · agentalley.io/mcp

Files included

  • SKILL.md3.8 KB
Read SKILL.md here
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 
View all files on GitHub →

Details

License
MIT
Stars on the repo
★ 37
Checked
Source
timscheuerai/content-vault ↗
Creator
timscheuerai · 15 listings
View creator

Similar skills

See all →

More from timscheuerai

SkillLaunch Video Creatortimscheuerai/content-vault · by timscheueraiBuild a 30-60s motion-graphics launch video for a <YOUR_BRAND> product or feature. Remotion 4 React composition + ElevenLabs AI narration + sound effects + background music, beat-anchored timing, brand-aligned design system. Use when asked to "create a launch video", "make a product video", "video for X feature", "launch a new feature", or "/launch-video".★ 37 GitHub starsSkillLinkedIn Voice Copywritertimscheuerai/content-vault · by timscheueraiDraft LinkedIn posts in YOUR voice. Pulls hook frameworks, structural patterns, and CTA shapes from your real top-performing posts (corpus.md), runs the draft through a strict AI-slop blacklist, and outputs a post that reads like you wrote it. Use when asked to "write a linkedin post", "draft a post about X", "linkedin copy", "post idea", or "/linkedin-copywriter".★ 37 GitHub starsSkillLong-Form Draftertimscheuerai/content-vault · by timscheueraiDraft written long-form content (newsletter issue, blog post, Substack issue) in your voice. 800-2000 words, structured intro + body + CTA, paragraph-by-paragraph not list-by-list. Pulls voice from /linkedin-copywriter's corpus (same author, same register · longer arc). Runs the brand-doc skill checklist before output. Logs the row in the Notion Content DB and (for newsletters) drafts a separate punchy subject line. Use when asked to "write a newsletter", "draft a blog post", "long-form X", "Substack issue about Y", "weekly newsletter", or "/long-form". For spoken video scripts (YouTube longs / shorts) use /youtube-script instead · the cadence is fundamentally different.★ 37 GitHub starsSkillMathematical Animation Pipelinetimscheuerai/content-vault · by timscheueraiProduction pipeline for mathematical and technical animations using Manim Community Edition. Creates 3Blue1Brown-style explainer videos, algorithm visualizations, equation derivations, architecture diagrams, and data stories. Use when users request: animated explanations, math animations, concept visualizations, algorithm walkthroughs, technical explainers, 3Blue1Brown style videos, or any programmatic animation with geometric/mathematical content.★ 37 GitHub starsSkillContent Repurposertimscheuerai/content-vault · by timscheueraiTake one master content piece (Notion row, transcript, video, paragraph, URL) and spin off variants across channels. Hub-and-spoke repurposing engine. Reads the source, identifies key insights / hooks / quotable moments, then creates child rows in the Notion Content DB with drafts already written by calling sub-skills (linkedin-copywriter, x-copywriter, lead-magnet-creator, etc.). Use when asked to "repurpose this", "spin off variants", "turn this into LinkedIn + X + ...", "make derivatives of this webinar / video / post", or "/repurpose".★ 37 GitHub starsSkillContent Idea Pipelinetimscheuerai/content-vault · by timscheueraiThe single idea-generation pipeline for marketing content. Three input modes converging on Notion Status=Idea rows. Trend scan (X + LinkedIn creators + topic search) finds what's hot in the world. Performance scan (your own published rows + their engagement metrics) finds what's working for you so you can double down. Customer scan (HUMAN NOTES DB user-interview transcripts) finds the words, pains, and themes from real customer conversations. Hybrid mode runs all three, dedupes, and outputs a balanced backlog. Use when asked to "find content ideas", "what's working", "what's hot", "what are customers saying", "research", "scan trends", "give me ideas for the week", "/researcher", or proactively when the Notion Idea queue is empty.★ 37 GitHub stars