Viral Videos
Get viral clip suggestions from long form video content - save time and effortFrom the repository description
npx -y skills add michalporat972/Viral-VideosAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
6.8 KB, ~1.8k tokens by cl100k_base, as published. Nobody here has run it
Spot Viral Clips
A Claude Code skill for social media managers and podcast producers. Feed it any video with captions and get a ranked list of viral-ready clip segments with timestamps, hook types, and ready-to-post captions.
Trigger Phrases
Use this skill when the user says any of the following:
- "go through this video and flag the best parts"
- "find the viral moments"
- "what should I cut from this episode"
- "spot the clips"
- "find the reels"
- "which parts should I post"
PART 1 — TRANSCRIPT EXTRACTION
Different platforms expose transcripts differently. Detect which platform the user is working with and use the appropriate method.
YouTube
YouTube's transcript panel is fully rendered — not virtualized. Steps:
- Click the
...menu on the video - Select "Show transcript"
- The panel renders all text — use
get_page_text()or have the user paste it directly
Vimeo (virtualized panel — requires JS extraction)
Vimeo's transcript panel is a virtualized React list. The raw data is in the player config. Use this approach in the browser console:
// STEP 1: Fetch the Vimeo player config page (replace VIDEO_ID and HASH)
fetch('https://player.vimeo.com/video/VIDEO_ID?h=HASH', {credentials: 'include'})
.then(r => r.text())
.then(t => {
// STEP 2: Extract the .vtt caption URL from the player HTML
const match = t.match(/"(https:[^"]*\.vtt[^"]*)"/);
const vttUrl = match ? match[1].replace(/\\u0026/g, '&') : null;
console.log('VTT URL:', vttUrl);
return fetch(vttUrl);
})
.then(r => r.text())
.then(vtt => {
window._vttData = vtt;
console.log('Got', vtt.length, 'chars of transcript');
});
Other Platforms (Brightcove, Wistia, custom players)
Open DevTools → Network tab → filter by "vtt" or "srt". Almost all modern video players load a WebVTT file for captions. Download and paste the file contents.
PART 2 — VTT PARSING
Once you have the raw VTT data, use this parser to consolidate fragmented cues into readable passages:
function parseVTT(vttText) {
const lines = vttText.split('\n');
let segments = [];
let currentStart = '', currentText = '';
for (let line of lines) {
line = line.trim();
if (line.includes(' --> ')) {
currentStart = line.split(' --> ')[0].trim();
currentText = '';
} else if (line && !line.match(/^\d+$/) && line !== 'WEBVTT') {
currentText += (currentText ? ' ' : '') + line;
} else if (line === '' && currentText && currentStart) {
segments.push({ start: currentStart, text: currentText });
currentText = ''; currentStart = '';
}
}
// Merge segments within 4 seconds of each other into passages
let passages = [];
let current = { ...segments[0] };
const toSec = t => t.split(':').reduce((acc, v) => acc * 60 + parseFloat(v), 0);
for (let i = 1; i < segments.length; i++) {
if (toSec(segments[i].start) - toSec(segments[i-1].start) < 4) {
current.text += ' ' + segments[i].text;
} else {
passages.push(current);
current = { ...segments[i] };
}
}
passages.push(current);
return passages;
}
window._passages = parseVTT(window._vttData);
console.log(window._passages.length, 'passages ready');
PART 3 — EDITORIAL ANALYSIS FRAMEWORK
Apply this 5-lens filter to every passage. Think like a journalist and social media manager simultaneously.
The 5 Viral Lenses
Lens 1: The Gut-Punch Personal Story Look for: a speaker's own child, family member, or personal moment that catches them off guard. These feel raw and unscripted even when they're not. Signal words: "my son," "my daughter," "I was so shocked," "I had no idea," "I immediately thought," "my own [relationship]"
Lens 2: The One-Liner That Reframes Everything Look for: a sentence that inverts expectations or makes a familiar thing strange. Usually appears after a long build-up. Signal: short sentences after long stretches, rhetorical contrasts ("not X, but Y"), surprising word choices, quotable standalone phrases
Lens 3: The Uncomfortable Truth No One Says Out Loud Look for: something true that is rarely stated plainly — especially from credentialed voices who "shouldn't" be saying it this bluntly. Signal: "coward," "ignorant," "nobody wants to talk about," "let's be honest," "I'll say what no one will say"
Lens 4: The Breaking / Urgent Moment Look for: real-time information, current events, a speaker describing something happening RIGHT NOW. Signal: "right now," "as we speak," "day 16," "this week," present-tense crisis descriptions, live-situation language
Lens 5: The Hopeful Reversal Look for: a dark topic that ends with an unexpected ray of hope — especially involving children or the next generation. Signal: "but then," "and yet," "I have hope," "I believe," stories of young people doing the right thing
PART 4 — CLIP ARCHITECTURE
Every recommended clip should map to this structure. Check that the flagged segment has each layer:
[HOOK 0–3s] → Say something that makes the viewer stop scrolling
[TENSION 3–30s] → Build the story / argument / emotion
[PAYOFF last 5s] → The punchline, quote, or revelation
[CTA optional] → Natural, not forced
Ideal reel length by platform:
- Instagram Reels / TikTok: 30–60 seconds sweet spot
- YouTube Shorts: up to 60 seconds
- LinkedIn video: 45–90 seconds (longer context performs better)
PART 5 — OUTPUT FORMAT
Deliver results as a numbered clip brief. For each clip:
## Clip [N] — [LENS NAME]
**Timestamp:** [start] → [end]
**Duration:** ~[X] seconds
**Hook:** [one sentence that opens the clip]
**Why it works:** [one sentence explaining the viral mechanism]
**Suggested caption:** [ready-to-post caption using the template below]
**Platform fit:** [Instagram / TikTok / LinkedIn / YouTube Shorts]
Caption Templates by Lens
| Lens | Template |
|---|---|
| Personal Story | "A [credential]. And her own [relationship] left her speechless." |
| One-Liner | "[Quote verbatim]. That's it. That's the post." |
| Uncomfortable Truth | "[Name] on why [common thing] is actually [reframe]." |
| Breaking/Urgent | "She's [dramatic action]. Right now. And she's still talking." |
| Hopeful Reversal | "After everything — here's why [Name] still has hope." |
PART 6 — QUICK-START PROMPT
When a user brings a new video without specifying format, respond with this approach:
I'll go through the transcript like a journalist/social media manager and flag the moments worth cutting. I'll look for: raw personal stories, one-liners that reframe things, uncomfortable truths said plainly, urgent real-time moments, and hopeful reversals.
Just share the transcript (or let me extract it) and I'll return a ranked clip guide with timestamps, hook types, and suggested captions.
What ships with it: 6 files
24.6 KB alongside SKILL.md, 3 of them executable
examples/
- sample-output.md3.9 KB
scripts/
- analyze-clips.jsruns7.5 KB
- extract-vimeo-vtt.jsruns3.0 KB
- parse-vtt.jsruns3.8 KB