clipify
Find the funniest moments in a video, cut them as standalone clips, optionally reformat 16:9 → 9:16 (face-pan or split-screen), and burn opus-style word-by-word captions. Use when the user mentions "clipify," "cut clips from this video," "make shorts from this," "find funny moments," "reframe to 9:16," "vertical clips," or pastes a video file path and wants social-ready cuts.
Best use case
clipify is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Find the funniest moments in a video, cut them as standalone clips, optionally reformat 16:9 → 9:16 (face-pan or split-screen), and burn opus-style word-by-word captions. Use when the user mentions "clipify," "cut clips from this video," "make shorts from this," "find funny moments," "reframe to 9:16," "vertical clips," or pastes a video file path and wants social-ready cuts.
Teams using clipify should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/clipify/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How clipify Compares
| Feature / Agent | clipify | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Find the funniest moments in a video, cut them as standalone clips, optionally reformat 16:9 → 9:16 (face-pan or split-screen), and burn opus-style word-by-word captions. Use when the user mentions "clipify," "cut clips from this video," "make shorts from this," "find funny moments," "reframe to 9:16," "vertical clips," or pastes a video file path and wants social-ready cuts.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# Clipify Find the funniest moments in a video, cut them as standalone clips, optionally reformat 16:9 → 9:16 (face-pan or split-screen), and burn opus-style word-by-word captions. Source repo: ~/projects/clipify (cloned from github.com/louisedesadeleer/clipify) ## Inputs - A video file path (the user will provide it; otherwise ask) - Optional: requested format (9:16, 16:9, 1:1) - Optional: subtitle style preference ## Tooling - **Whisper:** `whisper --model tiny.en --word_timestamps True --output_format json` (fast; for non-English use `--model base`) - **ffmpeg:** add `-hwaccel videotoolbox` on macOS for decode, `-preset ultrafast` for renders. Final: `-c:v libx264 -crf 20` - **Scripts:** `~/projects/clipify/scripts/` - `analyze.py` — speaker timeline from two ROI motion files - `build_pan.py` — ffmpeg crop x-expression with hard cuts - `build_ass.py` — opus-style ASS captions from whisper JSON - `audio_align.py` — find offset of a sub-clip in a longer source Working dir: `/tmp/clipify/` (mkdir at start) --- ## Workflow ### Step 1 — Find the funniest parts ```bash mkdir -p /tmp/clipify ffmpeg -y -hwaccel videotoolbox -i "$VIDEO" -vn -ac 1 -ar 16000 /tmp/clipify/audio.wav whisper /tmp/clipify/audio.wav --model tiny.en --word_timestamps True --output_format json --output_dir /tmp/clipify --language en ``` Read JSON, pick 3-5 candidates. Funny signals: punchlines/reactions, reversals, awkward pauses, self-roasts, audio peaks. For each: `[start, end, why-it's-funny, suggested title]`. Aim 10-25s. Show list, let user pick. ### Step 2 — Trim ```bash ffmpeg -y -ss "$START" -t "$DURATION" -i "$VIDEO" -c copy /tmp/clipify/clip_$N.mp4 ``` ### Step 3 — Output format Ask: "9:16 (TikTok/Reels), 16:9 (YouTube), or 1:1 (Insta feed)?" ### Step 4 — If 16:9 → 9:16: pan or split-screen #### 4a — Pan-between-faces 1. Sample one frame, eyeball face ROIs (mouth+chin area as x,y,w,h) 2. Extract per-frame motion energy in each ROI via ffmpeg tblend+signalstats 3. Build speaker timeline: `python3 ~/projects/clipify/scripts/analyze.py /tmp/clipify/L.txt /tmp/clipify/R.txt 1.0 > /tmp/clipify/segments.json` 4. Pick pan x-coordinates for vertical strip (crop width = 608 for 1920 source) 5. Generate x expression and render: `python3 ~/projects/clipify/scripts/build_pan.py /tmp/clipify/segments.json $LEFT_X $RIGHT_X` #### 4b — Split-screen Two stacked tiles (1080x960 each), active speaker on top. Build enable expression from segments.json. ### Step 5 — Subtitles Three styles: **opus** (big bold, yellow active-word), **karaoke** (4-word chunks, green highlight), **minimal** (clean Helvetica). ```bash whisper /tmp/clipify/clip_panned.mp4 --model tiny.en --word_timestamps True --output_format json --output_dir /tmp/clipify --language en python3 ~/projects/clipify/scripts/build_ass.py /tmp/clipify/clip_panned.json /tmp/clipify/captions.ass opus ffmpeg -y -i /tmp/clipify/clip_panned.mp4 -vf "subtitles=/tmp/clipify/captions.ass" -c:v libx264 -preset fast -crf 20 -c:a copy "$OUTPUT.mp4" ``` ### Step 6 — Deliver - Save to `<source_dir>/clipify_out/` - Print: name, duration, what was funny, output path - Open first output for review - Offer to iterate ## Pitfalls - Don't over-tune ROIs (2 iterations max) - Check for scene cuts in clip (`select='gt(scene,0.3)'`) - 4K source: downscale to 1080p first or double all coordinates - Whisper the trimmed clip (not full source) for caption timestamps - If source has burned-in subs, use `audio_align.py` to find clean master ## Requirements - ffmpeg with libx264 AND libass (for subtitle burn). Check: `ffmpeg -filters 2>&1 | grep subtitles`. The default Homebrew ffmpeg formula does NOT include libass. Use the homebrew-ffmpeg tap: `brew tap homebrew-ffmpeg/ffmpeg && brew uninstall --ignore-dependencies ffmpeg && brew install homebrew-ffmpeg/ffmpeg/ffmpeg`. If brew complains about outdated CLT, run `softwareupdate --install "Command Line Tools for Xcode <version>"` first (check `softwareupdate --list` for the exact label). - whisper (openai-whisper): `brew install openai-whisper` or `pip install openai-whisper` - Python 3 + numpy - macOS recommended (VideoToolbox), works on Linux without hwaccel flag ## Workaround if no libass If ffmpeg lacks the `subtitles`/`ass` filter, use `drawtext` as a fallback for simple captions (one word at a time, less pretty but functional). Or reinstall ffmpeg with libass.
Related Skills
writer
Write content in Eric's voice — articles, blog posts, tweets, social media posts, marketing copy, newsletter drafts. Loads WRITING-STYLE.md and enforces kill phrases.
positioning-angles
Use when defining product positioning, choosing strategic angles, crafting value propositions, competitive positioning, product messaging, differentiation strategy, or go-to-market angles. Also use for 'how should I position my app', 'what angle should I use', 'painkiller vs vitamin', or 'market positioning'.
outline-generator
Use when generating outlines, article structures, content outlines, blog outlines, planning article sections, structuring posts, breaking down topics into sections, or organizing ideas for long-form content. Also use for 'outline this', 'structure this article', or 'plan the sections'.
last30days-open
Use only when the user explicitly asks for the open variant of last30days, including watchlists, briefings, and history queries. Sources: Reddit, X, YouTube, web.
last30days
Use when researching what happened in the last 30 days on a topic. Also triggered by 'last30'. Sources: Reddit, X, YouTube, web. Produces expert-level summary with copy-paste-ready prompts.
hooks
Use when generating hooks, headlines, titles, and scroll-stopping openers for content. Also use when analyzing viral posts, Reels, TikToks, YouTube Shorts, or successful social examples to extract reusable hook patterns and improve hook guidance.
evaluate-content
Use when judging content quality OR editing/improving existing copy: shareability, readability, voice, cuttability, angle, copy sweeps.
editor-in-chief
Use when a first draft is complete and all Phase 1 gates are done: topic selected (seo-research), title approved (hooks), outline approved (outline-generator), draft written (writer). Runs autonomous diagnosis-prescribe-rewrite loop before Substack.
copywriting
Write or improve marketing copy for any surface: pages, ads, app stores, landing pages, TikTok/Meta scripts, push notifications, UGC. Combines page copy frameworks with direct response principles.
content-strategy
Use when building content strategy: hooks, angles, and ideas from what's trending now. Covers organic and paid creative across TikTok, X, YouTube, Meta, LinkedIn.
content-pipeline
Orchestrator for the 3-article content pipeline — runs research phase, spawns parallel article sub-agents, creates Typefully drafts. Use when running the full content pipeline (usually via cron at 3am).
yt-dlp
Download audio/video from YouTube and other sites using yt-dlp. Use when the user asks to download music, songs, albums, podcasts, or video from YouTube or similar platforms. Triggers on 'download song', 'get mp3', 'yt-dlp', 'youtube download', 'rip audio'.