Agency OS Skill Library

Video Repurposer

Turns one finished long video into five to ten branded vertical clips plus a multi-platform caption set.

Video First result: a full afternoon for the first approved clip set video-repurposer
Back to all skills

What it does

Takes one existing finished long video, a podcast, interview, webinar or keynote, and harvests it into 5 to 10 branded 9:16 clips at 1080x1920, each with a hook card, synced burned-in captions, an optional stat slam, a lower-third and a source credit. It then calls social-caption-writer for a full caption set per clip across TikTok, Instagram, YouTube Shorts, LinkedIn and Facebook, and packages the lot for delivery. Clips are reframed either letterboxed, keeping both speakers in frame, or full-bleed with face-centred cropping. It only cuts and reframes footage that already exists in the source; it never generates new footage.

Say this to start

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

> repurpose this podcast
> clip this video
> make shorts from this
> turn this long video into clips
> harvest clips from this episode
> social clips from an episode

When to reach for it

When NOT to use it

If you actually wantUse this instead
turning a video into carousels, threads, blog posts or other text assetscontent-repurposer
finishing raw footage you recorded yourselfauto-editor
writing only the post captions with no video worksocial-caption-writer
planning new generated footage shot by shotvideo-prompt-builder

Before you start

What you needWhy
ffmpeg and ffprobe on your PATHthey do every cut, reframe and probe, so the pipeline stops without themRequired
Node.js with hyperframes runnable, which also provides the whisper transcription stepit produces the word-level caption timing and renders every branded compositionRequired
A licence, written permission or clear ownership of the source videofor any third-party source the rights gate blocks building, not just publishing. Nothing gets cut or rendered until the rights basis is confirmedRequired
Workspace brand files with colours, fonts, name, credentials and handlehook cards, lower-thirds and source credits are built from them before any visual is renderedRequired
yt-dlp installedonly needed if you are giving it a URL rather than a local fileOptional
opencv-python-headless installedpowers face-centred cropping for full-bleed clips. Without it, full-bleed falls back to a centred crop that you check by hand; letterbox clips do not need it at allOptional
Your own Gemini API key on a paid tier, set as GEMINI_API_KEY, plus the operator's video-analyzer toolingit auto-finds and ranks the strongest moments. Without it you transcribe the source and pick clip timestamps by hand, and every downstream stage runs identicallyOptional
A cloud drive or doc tool the workspace has approvedused only for the optional final packaging stage. The local clips folder is already the deliverableOptional

Installing what it needs

This skill runs shell scripts, ffmpeg, whisper and a Node render pipeline. Expect to run commands. On a Mac the setup is about fifteen minutes.

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

Cut, reframe and probe. Mandatory.

brew install ffmpeg

2. whisper.cpp and a real model

Word timing for captions. Homebrew's bundled model is a test fixture, so download a real one.

brew install whisper-cpp
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

3. Node and HyperFrames

Branded compositions and captions.

brew install node
npx hyperframes@latest --version

4. yt-dlp

Only needed if your source is a URL to download. Skip it if you already have the video file.

brew install yt-dlp

5. Optional: OpenCV

Face-centering when reframing to vertical. Without it the skill falls back to a centred crop that you check by hand.

pip3 install --user --break-system-packages opencv-python

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. Setup gate and brand loadIt reads your workspace brand and confirms four things with you: aspect ratio, clip length, how heavy the treatment should be, and how the source gets credited. Defaults are 9:16 vertical, 20 to 45 seconds, captions plus light motion, and an on-clip credit.
  2. Rights checkFor any third-party source it identifies the copyright holder of the recording, which is usually the show, producer or publisher rather than the person speaking. It will not cut or render until you confirm a licence, written permission or clear ownership. A guest approving their own appearance does not license the show's footage.
  3. Acquire and probe the sourceIt downloads from a URL or copies your file in, then probes it and flags where the defaults degrade for this specific video: unusual aspect, more or fewer than two speakers, hard cuts, non-English audio. It names the breakage instead of failing silently later.
  4. Mine the video for momentsIt stops and asks before using the paid clip-mining path, which returns a speaker-labelled transcript plus 12 to 15 ranked candidates with hooks, timestamps and a hook-strength score. If you decline or have no key, it transcribes the source and you pick candidate timestamps together from the transcript.
  5. Shortlist gateIt presents the ranked candidates with hooks, durations, themes and sensitivity flags. You pick the 5 to 10 you want and assign each a reframe style, letterbox or full-bleed. Nothing gets cut before this is approved.
  6. Cut and reframe each clipEach clip's working window is transcribed to word level so the in and out points are exact and any internal filler or sensitive line can be removed. Letterbox sits the full frame over a blurred fill of itself with no cropping; full-bleed auto-detects shots, face-centres each one and gives you a QA sheet to verify before rendering.
  7. Template gate, then batchIt builds and renders clip 1 completely and shows it to you. The batch script refuses to run the rest until that approval flag is set. Re-rendering one clip is cheap; re-rendering seven wrong ones is not. After batching it extracts frames and checks face framing, caption sync and safe zones.
  8. Captions and packagingIt calls social-caption-writer for a per-clip caption set across TikTok, Instagram, YouTube Shorts, LinkedIn and Facebook, written in the speaker's voice. It then packages the final clips, the caption file and the rights provenance record. Uploading to a cloud drive is an optional last step, not a requirement.

What you get

Honest limits

Read this before you rely on it

Where people go wrong

The mistakeDo this instead
Treating the guest's permission as clearance for the footageIdentify the copyright holder of the recording, normally the show, producer or publisher, and get a licence or written permission from them before anything is built.
Batching all the clips before looking at oneApprove clip 1 fully first. The composition script blocks batching until that flag is set, precisely because a wrong look multiplied by seven is expensive.
Asking a non-technical client to pick timestamps and cropsRun the non-technical path instead: top clips by hook strength, one house reframe style for the whole set, and hand back a draft set they simply approve or reject. The rights gate still applies in full.
Letting a platform-risky moment through because it is a strong hookSelf-harm, graphic or platform-risky lines get cut or flagged for your explicit decision. They never ship silently.
Re-rendering the clips because the cloud upload failedThe local clips folder plus the caption file is already the deliverable. Hand that over and retry packaging later.
Worth knowing

Keep every hook card, caption line and stat slam inside the centre band of the frame. The top roughly 15 percent and the bottom roughly 25 percent get covered by platform UI, so text that looks perfectly placed in your render is unreadable in the feed.