agentsclimarketplace

Viral Videos

Skill michalporat972/Viral-Videos

Get viral clip suggestions from long form video content - save time and effortFrom the repository description

Install
npx -y skills add michalporat972/Viral-Videos

Assembled 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:

  1. Click the ... menu on the video
  2. Select "Show transcript"
  3. 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

LensTemplate
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/

scripts/

Keep looking

Skills are one crate of 326,506. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.