video-shorts
Skill0 starsChanged 35 days agoMITView on GitHub
Turn long landscape videos (podcasts, talks, interviews, streams) into vertical 9:16 shorts for TikTok, YouTube Shorts and Instagram Reels. Picks self-contained 20-60 second moments with a hook from the transcript, reframes 16:9 to 9:16 with a smoothed face-tracking crop (OpenCV YuNet, fallback to a fixed speaker position), and burns word-by-word captions. Use when the user asks for shorts, reels, clips, highlights, vertical versions or "the best moments" of a video.
3 other projects use a version of this.
Adopted by
Most recently taken up by
- meshcode-ai/skills-videotheir own version, first seen Oct 20, 2026
- meshcode-ai/skillstheir own version, first seen Oct 8, 2026
- kitcut-hq/kitcuttheir own version, first seen Sep 4, 2026
Other versions3 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 3
- kitcut-hq/kitcut★ 42same name
- meshcode-ai/skills★ 2same name
- meshcode-ai/skills-video★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository4 other files it gives its agents.
- video-captionsSkill
- video-cleanupSkill
- video-editSkill
- video-ffmpegSkill
The file
We split this skill into the rules it gives an agent
2 rules. 0 are common, 0 are distinctive, and 2 are very specific to this project.
0
Common
Most of the 3 edited versions we read keep these.
0
Distinctive
This author's own choices. Worth a look.
2
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 22
Read edits/<name>/transcript.txt and choose moments.
- Very specific: line 55
Default preset pop: 1-3 words at a time, uppercase, active word highlighted, lower-middle of the frame clear of platform UI.
“Common” is measured: kept by at least 6 in 10 of the 3 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
video-shorts
You pick the moments (reading the transcript is the part a script can't do well); the script cuts,
reframes and captions them. Script paths are relative to this skill's folder; run them by full
path from the user's working directory (don't cd into the skill).
Steps
- Transcript:
uv run ../video-edit/scripts/transcribe.py INPUT(skip ifedits/<name>/transcript.words.jsonexists). For a cleaned-up source, run video-cleanup first and usecleanup.mp4as INPUT, with--transcript edits/<name>/cleanup.words.json. - Read
edits/<name>/transcript.txtand choose moments. Criteria in references/picking.md. Short version: 20-60 s, the first sentence hooks on its own, one complete idea, ends on a payoff, no dangling "so..." or references to earlier context. - Write
edits/<name>/shorts.json:
Time ranges are widened to whole words automatically.[ {"title": "Why most edits fail", "segs": "s0041-s0049"}, {"title": "The one rule", "start": "00:12:03.2", "end": "00:12:41.0"}, {"title": "Setup in two parts", "clips": [{"segs": "s0102-s0104"}, {"segs": "s0110-s0113"}]} ]clipsjoins non-adjacent parts. - Present the picks to the user (title, timecodes, the hook line, duration) before rendering many.
- Render:
uv run scripts/shorts.py INPUT edits/<name>/shorts.json [--preset pop|highlight|clean|boxed|minimal]->edits/<name>/shorts/01-why-most-edits-fail.mp4... plus.ass,.edl.json,.words.json,.txt. With--transcript, outputs go toshorts/next to that transcript.--only 2 3re-renders selected items.--loudnormsets -14 LUFS. - Report each output path, duration and the
trackingfield. If tracking sayscenter (no faces found)or the speaker sits off-centre, rerun that item with--x 0.3(0 = left edge, 1 = right).
Reframing details
- Faces are sampled 6x per second; the crop follows the largest face, preferring the one near the previous position (stable on two-person shots until the other face dominates).
- The path is median-filtered, held still inside a dead zone (6% of frame width), speed-limited and eased, so the camera doesn't jitter or chase every head movement.
- Already-vertical or square input is center-cropped/scaled without tracking.
- Standalone:
uv run scripts/reframe.py INPUT [--ass subs.ass] [--x 0.4] [--size 1080x1920]. - Other aspect ratios:
--size 1080x1350(4:5 feed),--size 1080x1080.
Captions
Default preset pop: 1-3 words at a time, uppercase, active word highlighted, lower-middle of
the frame clear of platform UI. highlight shows a full line with the active word coloured.
--no-captions for a clean export. Edit an .ass and rerun reframe.py with --ass to tweak.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

