2bft-video-editor
Skill0 starsChanged 16 days agoMITView on GitHub
The 2BFT video editor for Claude Code - turns raw talking-head, webcam, screen-recording or live-stream footage into finished YouTube videos and vertical Shorts/Reels, with face tracking first - auto-reframe 16:9 to 9:16 so the crop follows the speaker's face, webcam crops that follow the face, energy-reactive camera shake measured from voice and movement, pause and filler tightening measured from the audio, captions, sound effects, meme sounds, music and B-roll sourced with their licences (including songs trending this week on Shorts, Reels and Indian charts), offline noise removal, stem splitting, background removal and slow motion, speaker labels, music ducking, -14 LUFS masters and automatic QC. Use when the user says edit this video, make Shorts or Reels from this, reframe to vertical, follow my face, auto reframe, face tracking, keep me in frame, make it punchy, add captions or shake, cut the pauses, or hands over a recording and wants it finished.
- Installs packages
In this repository13 other files it gives its agents.
- asset-librarySkill
- comedy-editing-timingSkill
- editor-osSkill
- edit-videoSkill
- ffmpeg-edit-toolkitSkill
- local-av-toolsSkill
- long-to-shortsSkill
- motion-graphics-for-videoSkill
- quest-lab-editorSkill
- talking-head-polishSkill
- transcribe-localSkill
- video-editing-craftSkill
- video-sound-and-musicSkill
The file
We split this skill into the rules it gives an agent
3 rules. About 0 are common, 1 is distinctive, and 2 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈1
Distinctive · estimate
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 30
Always look at the result: pull frames at the moments the person moves most (--compare makes this obvious).
- Very specific: line 68
Run the asset-library and local-av-tools scripts by full path (<skills>/<skill>/scripts/<script>.py, with <skills> written out: PowerShell …
- Distinctive: line 80
Track: run face tracking on every region a face appears in.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
2BFT video editor
The entry point for the whole pack. It decides the order of work and calls the right tool or skill. Face tracking comes first because every vertical deliverable depends on it: if the face drifts out of the crop, nothing else matters.
What this pack can and can't do
- Can: track faces (OpenCV YuNet), reframe any video to 9:16 / 4:5 / 1:1 with a smooth face-following crop, measure voice and movement energy, transcribe offline with word timings, cut pauses by measured noise floor, render captions, graphics, SFX and music, master to -14 LUFS, and run automatic QC. Through
asset-libraryit also finds and downloads sound effects, meme sounds and clips, music, B-roll, fonts and overlays from about 400 checked sources with their licences, and checks which songs are trending this week. Withlocal-av-toolsit removes mic noise, splits music from voice, makes karaoke tracks, cuts the speaker out without a green screen, smooths to 60 fps or slow motion, finds every cut in a reference reel, and labels who speaks when. - Can't: hear or watch playback, or feel whether a joke lands. Make the measurable decisions, then ask the user to watch and listen.
- Must not: overwrite the source, invent numbers or quotes, bake commercial songs into an export, or show strangers who did not agree to be filmed (blur them).
Priority 1: face tracking and reframing
Auto-reframe (horizontal to vertical, face-following)
python -I skills/2bft-video-editor/scripts/reframe.py in.mp4 out_9x16.mp4
python -I skills/2bft-video-editor/scripts/reframe.py stream.mp4 cam_9x16.mp4 --region 1476,154,384,768 --zoom 1.7
python -I skills/2bft-video-editor/scripts/reframe.py in.mp4 compare.mp4 --compare --dur 20 # static vs tracked, side by side--region x,y,w,hlimits tracking and cropping to one part of the frame (the webcam box of a stream layout). Measure it from one frame:ffmpeg -ss 60 -i in.mp4 -frames:v 1 frame.png, then check your crop with-vf crop=w:h:x:y.--zoom1.0 is the widest crop of that aspect; 1.5-1.8 is a close-up. Above about 2.5x of the source pixels the picture goes soft: say so rather than push further.--eyes 0.40puts the eye line a little above centre (talking-head convention). Use 0.35 for more headroom, 0.45 for tight close-ups.--track-jsonsaves the smoothed track so other tools (captions that avoid the face, punch-ins) can reuse it.- Always look at the result: pull frames at the moments the person moves most (
--comparemakes this obvious). The script prints the share of samples where a face was found; under about 80 % means a bad region, backlight or a turned head, so check those stretches.
How the "camera operator" behaves: detect at 10 fps, keep the most confident and largest face (posters and photos on the wall are smaller and lose), fill gaps up to 2 s, median filter against false hits, Gaussian smoothing, a deadzone so the crop holds still until the face really moves, then a second smoothing pass. Tune in SMOOTH at the top of the script.
Webcam crops that follow the face inside a full edit
For stream layouts (screen + webcam), quest-lab-editor runs engine/tools/face_track.py on the webcam box during project setup; its build.py turns the face's deviation from the usual seated position into a per-frame offset, so hand-made crops keep their composition and only move when the person moves.
More picture tools
- Smile, mouth-open and blink moments (for punch-ins and laughs), body and hand tracking:
local-av-tools/scripts/track.py. - Cut the speaker out with no green screen (ProRes 4444 alpha or WebM):
local-av-tools/scripts/cutout.py. - Smooth 24/30 fps footage to 60, or slow motion:
local-av-tools/scripts/interpolate.py. - Hand-off to a DaVinci Resolve timeline through Blackmagic's MCP, plus free add-ons:
local-av-tools/references/davinci-resolve.md.
Setup for face tracking
- Python with
numpyandopencv-python>=4.8(pip install numpy opencv-python). - The YuNet model
face_detection_yunet_2023mar.onnxfrom the OpenCV model zoo (MIT): download it once, then setREFRAME_YUNET(forreframe.py) andQL_YUNET(forquest-lab-editor) to its path, or put it in./models/. - ffmpeg and ffprobe on PATH.
Priority 2: energy, pace and sound
| Job | Tool |
| Energy map (voice loudness + movement) driving camera rumble, shake and impacts, with budgets | quest-lab-editor/engine/tools/energy.py, rules in quest-lab-editor/references/energy-shake.md |
| Tighten pauses from the measured noise floor (gap table per format; fillers and retakes listed, never auto-cut) | quest-lab-editor/engine/tools/pauses.py, quest-lab-editor/references/cutting.md |
| Quick automatic jump cuts on any file | ffmpeg-edit-toolkit/scripts/remove_silence.py |
| Pacing numbers (cuts per minute, flat stretches, hook timing, beat-grid fit) | editor-os/scripts/pacing_report.py |
| Sound effects by rule, echo throws, music cut to drops, ducking, -14 LUFS | quest-lab-editor/references/captions-sfx-voicefx.md, video-sound-and-music |
| Find and download SFX, meme sounds, meme clips, music, B-roll, fonts, with licence and credit recorded | asset-library: the asset store first (ASSET_ROOT), then find_assets.py <kind> "<query>" (--ad-safe for client work), fetch_asset.py to download; ask before every download |
| Songs trending this week (YouTube Shorts India, Tamil, Hindi, Spotify, Apple, JioSaavn, global) | asset-library/scripts/trending.py --top 20 (or --lang ta / hi); commercial songs go on in-app, never baked into the master |
| Clean the voice (fan, AC, hum, traffic, keyboard) before transcribing and mixing | local-av-tools/scripts/denoise.py talk.mp4 --strength 18 (listen after: full strength can thin the voice) |
| Pull music out from under a voice, or split a song into stems for beat cuts | local-av-tools/scripts/stems.py stream.mp4 --two (voice + music; --fast for speed); the drums stem gives clean hits for editor-os/scripts/editgrid.py |
| Instrumental / karaoke version (personal use only: the model weights have no licence and the song is still copyrighted) | local-av-tools/scripts/karaoke.py song.mp3 [--keep-backing] [--video] |
| Who speaks when (podcasts, calls, two-person streams) and speaker-labelled captions | local-av-tools/scripts/diarize.py call.mp4 --speakers 2 --srt captions.srt (credit pyannote if published) |
| Cuts per minute of a reference reel, contact sheet of every shot | local-av-tools/scripts/shots.py --sheet |
Run the asset-library and local-av-tools scripts by full path (<skills>/<skill>/scripts/<script>.py, with <skills> written out: PowerShell doesn't expand ~). Their setup is in each skill's own SKILL.md and local-av-tools/references/setup.md.
Priority 3: words on screen
- Offline transcript with word timings:
transcribe-local, orquest-lab-editor/engine/tools/transcribe_words.py(Hindi/Hinglish/English, glossary, hallucination filter). - Shorts captions in short chunks, edited for meaning (deletions fine, additions never). Long-form: only a handful of key-line slams.
- Text behind the speaker and karaoke captions:
talking-head-polish. - Subtitle timing check (Netflix-style gaps, durations, reading speed):
quest-lab-editor/engine/tools/check_srt.py.
The order of work
- Watch: probe, run
denoise.pyfirst on a noisy recording (Whisper reads clean audio better, and the cleaned voice is what you mix;stems.py --twoif music bleeds under the talk), transcribe, contact sheets every 10 s, read all of it. Map the layout (where the face and screen sit). - Track: run face tracking on every region a face appears in; check the hit rate and the stretches where it drops.
- Plan: pick the moments (hook in the first 3 seconds), write a one-screen plan per deliverable (
editor-osstyles,quest-lab-editor/templates/director-pass.md). For Shorts and Reels, runtrending.pyfresh and note candidate songs and where they'd start. List every outside asset the plan needs (SFX, meme sounds or clips, music, B-roll, fonts) with the shot it's for. - Cut: story first on the transcript, then pause tightening.
- Picture: reframe to the delivery aspect with the face track; punch-ins on peaks (max about 1.2x on top of an already-enlarged webcam).
- Words, then sound, then energy as in the tables above. Source sound from the asset store first, then
asset-library: show one shortlist (what, source, licence, credit, size, shot), download only after the user's yes, and make each file edit-ready (trim with handles, -16 LUFS for SFX and meme clips, 48 kHz). - QC:
quest-lab-editor/engine/tools/qa_detect.py(black/frozen/silent stretches, loudness, flashes), frames at the biggest movements,check_srt.pyon every SRT. Then ask a human to watch and listen. - Report: what changed, the numbers (length before/after, face hit rate, LUFS), what is a placeholder, what a human must still check. Copy every credit line from the downloads'
.source.jsonsidecars into the job'sCREDITSfile and the YouTube description or Reel caption, and name any trending song the user should add in-app (and its start point) for the_cleanexport.
Skills in this pack
2bft-video-editor (this) · quest-lab-editor (the full stream-to-video engine and house style) · asset-library (where to get music, SFX, memes, trending songs, B-roll, fonts) · local-av-tools (denoise, stems, karaoke, cutout, slow-mo, shot and speaker detection) · editor-os · edit-video · video-editing-craft · comedy-editing-timing · video-sound-and-music · motion-graphics-for-video · ffmpeg-edit-toolkit · transcribe-local · long-to-shorts · talking-head-polish
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.

