| name | short-form |
| description | Repurpose a long-form YouTube video into short-form clips for Reels, Shorts, and TikTok. Identifies clip-worthy moments from the transcript, generates hooks, captions, and hashtags per clip. Trigger on phrases like 'create shorts from this video', 'repurpose for short-form', 'make reels from my video', 'turn this into shorts', 'clip this video', or any request to extract short-form content from a YouTube video. |
Short-Form Repurposing Engine
Turn a long-form YouTube video into 3-5 short-form clips optimized for Reels, Shorts, and TikTok. Identifies the most clip-worthy moments, generates platform-specific hooks and captions, and provides timestamps for editing.
When This Skill Activates
Activate when the user wants to:
- Create Reels, Shorts, or TikTok clips from a YouTube video
- Repurpose long-form content into short-form
- Identify the best clips from a video
- Generate captions and hooks for short-form content
Example triggers:
- "Create shorts from my latest video"
- "Repurpose this for short-form"
- "What are the best clips from this video?"
/short-form or /short-form <youtube-url>
Pipeline
Step 1 — Get the Transcript
If the user provided a YouTube URL, use it.
If the user said "latest video", auto-detect:
yt-dlp --flat-playlist --playlist-end 1 --print url --print title "https://www.youtube.com/channel/YOUR_CHANNEL_ID/videos"
Confirm with user: "Found your latest video: [TITLE]. Pulling clips from this one."
Fetch transcript using these methods in order:
Method 1 — Apify:
node "${CLAUDE_PLUGIN_ROOT}/skills/content-cascade/scripts/fetch-transcript-apify.js" "<youtube-url>"
Method 2 — youtube-transcript:
node "${CLAUDE_PLUGIN_ROOT}/skills/content-cascade/scripts/fetch-transcript.js" "<youtube-url>"
Method 3 — yt-dlp subtitles:
yt-dlp --write-sub --sub-lang en-orig --skip-download --sub-format json3 -o "$TEMP/yt-transcript" "<youtube-url>"
Fall back to --write-auto-sub --sub-lang en if en-orig unavailable.
Parse json3:
node -e "
const fs = require('fs');
const path = require('path');
const dir = process.env.TEMP;
const file = fs.readdirSync(dir).find(f => f.startsWith('yt-transcript') && f.endsWith('.json3'));
if (!file) { console.error('No subtitle file found'); process.exit(1); }
const data = JSON.parse(fs.readFileSync(path.join(dir, file), 'utf8'));
const text = data.events.filter(e => e.segs).map(e => e.segs.map(s => s.utf8 || '').join('')).join(' ').replace(/\n/g, ' ').replace(/\\s+/g, ' ').trim();
console.log(text);
"
Validation: Sanity-check first 1-2 sentences against video title. Wrong transcript → try next method.
If all methods fail: "Captions aren't available yet — YouTube takes 30-60 minutes after upload. Try again later."
Step 2 — Identify Clip-Worthy Moments
Scan the transcript for 3-5 best short-form moments. Each clip: 30-90 seconds when spoken (~75-225 words).
What makes a clip-worthy moment:
- Self-contained insight — makes sense without the full video
- High shock value — surprising stat, counterintuitive claim, unexpected result (70+ shock score)
- Emotional peak — passion, frustration, excitement, humor in delivery
- Quotable statement — a line worth screenshotting and sharing
- Demo moment — visual reveal or before/after that works vertical
- Contrarian take — bold opinion that sparks comments/debate
NOT clip-worthy:
- Setup/context without payoff
- References to other parts of the video ("as I mentioned earlier...")
- Technical walkthroughs needing wide screen context
- Transitions between topics
Step 3 — Generate Content Per Clip
For each clip:
Clip Title: Working title for internal reference.
Approximate Timestamps: Start → End (from original video). If no json3 timestamps available, estimate at ~150 words per minute.
Transcript Excerpt: The exact words from this segment.
Short-Form Hook (first 1-3 seconds):
The scroll-stopper. Apply Kallaway framework:
- Text overlay: 2-5 words, maximum impact. First frame.
- Spoken opening: First sentence. Immediate curiosity or tension.
- Map to a Horseman desire
- Fifth-grade reading level
Rewritten Script (if needed):
If the transcript segment has tangents or loose pacing for short-form, provide a tightened version. If the original is already tight, skip.
Caption:
Platform-ready. Short, punchy:
- One-line hook (complements, doesn't duplicate the video hook)
- 1-2 lines of context or value tease
- CTA ("Follow for more Claude Code tips" or "Full breakdown linked in bio")
Hashtags:
5-10 relevant. Mix of:
- Broad reach: #ai #claudecode #programming #tech
- Niche: #claudecodetips #aiautomation #ragpipeline
- Trending (if applicable)
Platform Notes:
- Reels: Polished editing, text overlays throughout, trending audio optional
- Shorts: YouTube algorithm favors rewatchability — should make sense on loop
- TikTok: Raw/authentic > polished, conversation-starter hooks, stitch/duet bait
Step 4 — Rank Clips
- Best for reach — highest viral potential (broadest appeal, highest shock)
- Best for conversions — drives traffic to full video or your paid community
- Best for engagement — sparks the most comments/debate
Step 5 — Output
## Video: [Title]
**Source:** [YouTube URL]
**Clips identified:** [N]
---
### Clip 1: [Clip Title] — Best for [reach/conversions/engagement]
**Timestamps:** [MM:SS — MM:SS]
**Duration:** ~[X] seconds
**Hook:**
- Text overlay: "[2-5 words]"
- Spoken: "[First sentence]"
**Transcript excerpt:**
> [Exact words from this segment]
**Rewritten script:** [Tightened version, or "Original is tight — use as-is"]
**Caption:**
[Ready-to-paste]
**Hashtags:** #tag1 #tag2 #tag3 #tag4 #tag5
---
### Clip 2: [Clip Title]
[Same structure...]
Step 6 — Save to Vault (Optional)
Save to YOUR_VAULT_PATH/content/short-form/YYYY-MM-DD-<slug>-shorts.md:
---
title: "Short-Form Clips — [Video Title]"
date: YYYY-MM-DD
youtube_video_id: VIDEO_ID
source_video: "[Video Title]"
clips: [N]
status: draft
---
[Full clip breakdown]
Key Principles
- First frame decides everything. Short-form lives or dies in 1 second. Text overlay + opening words must stop the scroll.
- Self-contained > teaser. Deliver value in the clip itself. "Watch the full video for the answer" kills completion rate. Give value, THEN mention the full video.
- Vertical thinking. Not everything translates to short-form. Only pick moments that genuinely work in the format.
- Comments = algorithm fuel. Contrarian takes, surprising stats, and hot takes drive comments, which drive reach.
- 3-5 clips per video is the sweet spot. More and quality drops. Fewer and you're leaving content on the table.
- Don't over-produce. Captions should sound natural, not copywritten. your voice is direct and conversational.