Agency OS Skill Library

Auto Editor

Turns raw camera and screen recordings into a tight, branded, captioned cut using a scripted command-line pipeline.

Video First result: a full afternoon for the first job auto-editor
Back to all skills

What it does

Takes a raw talking-head recording, optionally plus a screen recording, and returns a finished video file: double-takes and dead space cut, camera and screen composed, graded, levelled to -16 LUFS, and for vertical, karaoke captions and a white hook title burned in. It ships three profiles (course, youtube, vertical) that set crop math, box positions, caption style, B-roll density and pace. It is the orchestration layer over ffmpeg, whisper and a Node render pipeline, so the value sits in the cutting rules and the verification loop rather than in the tools themselves. Output is delivered versioned as <name> - EDITED vN.mp4, never overwriting a previous cut.

Say this to start

This skill has no button. You start it by saying what you want. Any of these will do it:

> edit my video
> edit this footage
> cut the dead space
> cut the double-takes
> turn this into a reel
> make a YouTube cut

When to reach for it

When NOT to use it

If you actually wantUse this instead
slicing an already-finished long video into short clipsvideo-repurposer
turning a finished video into threads, posts or summariescontent-repurposer
writing the feed caption that ships alongside the exportsocial-caption-writer
generating footage that does not exist yetvideo-prompt-builder
the visual direction behind generated footagecreative-director

Before you start

What you needWhy
ffmpeg and ffprobe on your PATHevery measurement, cut, grade and render runs through them, so nothing starts without bothRequired
whisper-cli plus at least one whisper model file, for example small.enno transcript means no take detection, no word-level cut boundaries and no verification gateRequired
Node.js with hyperframes runnableit builds the motion-graphic B-roll cards and is the primary path for vertical karaoke captionsRequired
Your own Gemini API key on a paid tier, set as GEMINI_API_KEYit powers the optional step 8b listening gate at roughly $0.10 per 13-minute video; the analyzer script it calls is bundled with the plugin, so a paid key is the only thing you supply. Without it you get a structurally checked render that may still contain audible stuttersOptional
The raw camera file, plus the screen recording if the video is a demothe skill edits your footage; it never generates anyRequired
A local scratch folder outside any synced cloud driveworking inside Drive, Dropbox or iCloud causes sync churn on every intermediate renderRequired
An active workspace with brand files for colours, fonts and verified claimshook titles, B-roll cards and any authored on-screen text are claim-checked and brand-styled before renderingRequired

Installing what it needs

This skill drives a real command-line toolchain, so there is a genuine setup step. On a Mac it is about fifteen minutes. It refuses to start rather than half-edit your video if anything mandatory is missing.

Read this before you install anything

"Whisper" is at least six different products, and picking the wrong one is the most common setup failure. The wrong one installs perfectly and the skill still refuses to start.

This skill looks for a command called whisper-cli, and only whisper.cpp provides it. OpenAI's Whisper (openai-whisper on pip) gives you a command called whisper, which will not satisfy the check. Neither will faster-whisper, WhisperX, MacWhisper or Whisper Transcribe. If you installed Whisper and the skill still says it is missing, this is why.

1. ffmpeg

All measuring, cutting, grading and rendering. Mandatory.

brew install ffmpeg

2. whisper.cpp

Transcription, take detection, and the free verification gate. This is the package that gives you whisper-cli.

brew install whisper-cpp

3. A real Whisper model

Homebrew ships only a 562KB test fixture, which cannot transcribe anything usable. This step is the one people skip.

mkdir -p ~/whisper-models && curl -L -o ~/whisper-models/ggml-small.en.bin https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-small.en.bin

4. Node and HyperFrames

Needed for motion-graphic B-roll and karaoke captions. Not needed for a plain cut, so you can skip this and still get most of the value.

brew install node
npx hyperframes@latest --version

5. Optional: the listening gate

Only if you want the paid gate that catches audible stutters. Use a paid tier: a free key dies partway through a gate, quietly. Get one at aistudio.google.com/apikey.

pip3 install --user --break-system-packages google-genai
echo 'export GEMINI_API_KEY=your_key_here' >> ~/.zshrc && source ~/.zshrc

Check it worked

One command. Every line should print something. If whisper-cli is the line that fails, re-read the box above.

ffmpeg -version | head -1 && ffprobe -version | head -1 && whisper-cli --help | head -1 && node --version

How it runs

  1. Toolchain preflightBefore touching your footage it checks ffmpeg, ffprobe, whisper-cli with a model, node and hyperframes. If anything is missing it stops and names the missing pieces rather than half-starting an edit. This is deliberate: a partial toolchain produces a broken render, not a smaller one.
  2. Pick the profileIt auto-detects the aspect from your camera file and confirms the profile with you: course, youtube or vertical. The profile sets crop math, box positions, caption style, B-roll density and pace.
  3. Measure, do not assumeIt probes the real width, height and fps of both files and pulls sample frames to see where your face sits and how tall the screen recording's menu bar is. The published crop values are starting points from one reference rig, so they get recomputed for your setup.
  4. Transcribe and detect takesIt extracts a 16k mono wav, runs silence detection at -30dB and transcribes with word-level timing. A bundled script then proposes drop ranges for back-to-back repeated takes, keeping the last complete one.
  5. Plan the cutYou review the auto-detected take drops, then it adds false starts, dead space and your own spoken editor cues such as 'leave that part out'. Every boundary lands in the silence between words, never inside one.
  6. Compose, grade and add B-rollKept spans get tagged camera, screen, picture-in-picture or split. Camera gets a grade and the voice chain; the screen is never graded so its colours stay accurate. For youtube and vertical it proposes generated or stock cutaway moments and waits for your OK before spending any credits.
  7. Assemble and renderOne ffmpeg pass handles trim, concat, grade, layout and format, with B-roll and captions composited as alpha overlays over the graded base.
  8. Verify the render, then deliver versionedA free structural gate re-transcribes the output and flags leftover blanks and doubles. It then stops and asks whether to run the optional paid listening gate. Delivery is a new vN file plus a report stating source and final duration, cut counts, and explicitly whether the listening gate ran.

What you get

Honest limits

Read this before you rely on it

Where people go wrong

The mistakeDo this instead
Checking the cut plan and calling it doneVerify the rendered output, not the plan. Whisper hallucinates missing words when transcribing the source, so a clipped word looks fine in planning and only shows up once you re-transcribe the render.
Pushing the silence threshold to -35dB or -40dB to catch moreStay at -30dB. More sensitive settings grab room tone and leave long dead air in the output. If genuinely soft speech is being dropped, go to -33dB and verify.
Overwriting the previous cut with the new oneEvery revision is a new vN file. Keep the prior cut so you can compare or revert.
Reporting a render as 'verified' when only the free gate ranSay 'structurally checked (not listened to)' and warn that audible stutters may remain. Reserve 'verified' for a render where the paid listening gate actually passed.
Pasting the documented crop and position values straight inProbe your own files and pull sample frames first. Those values were tuned to one specific camera and screen setup and will be wrong for a different rig.
Worth knowing

On pause-heavy speech, whisper word timestamps drift by seconds because whisper stretches words across silence, so never place a surgical retake cut from them there. Use the bundled energy profile script instead and put the boundary in a sustained low pocket, at least 60ms away from any rise in energy.