agentsclimarketplace

Analyze reel

Skill NovateStudioGit/novate-studio-skills/creative-production/analyze-reel

57 agent skills for Claude Code — creative production, paid growth, copywriting, ecommerce, email marketing & knowledge ops. By Novate Studio.

Install
npx -y skills add NovateStudioGit/novate-studio-skills --skill analyze-reel

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.

What its author says it does

Copied from the file, not written here

Pull an Instagram reel or post (caption, metadata, video, audio, frames) and return a structured creator's-eye teardown — hook, structure, pacing, what's working, replicable patterns. Use when the user types /analyze-reel <url>, pastes an instagram.com/reel/ or instagram.com/p/ URL, or asks to "analyze this reel", "break this down", "teardown", "what's working here". IG-only — for TikTok/YouTube use a different skill. Read-only on the source (no posting, no API writes).

SKILL.md

6.5 KB, as published. Nobody here has run it

/analyze-reel

One command, IG URL in → full teardown out. Apify pulls the post, ffmpeg pulls frames, whisper.cpp transcribes the audio, the model reads it all and writes a structured breakdown to disk. No FAL, no generation — just analysis.

Flow

  1. Parse URL — extract shortcode from instagram.com/reel/<code> or instagram.com/p/<code>. Derive slug ig-<shortcode>.
  2. Set output dir~/Desktop/STUDIO/post-analysis/ig-<shortcode>/. Create it. If it already exists with a populated analysis.md, ask Will whether to re-run or skip — never silently overwrite.
  3. Scrape post via Apify — use mcp__apify__search-actors with query "instagram post detail" if the actor isn't already known. Prefer apify/instagram-scraper (handles single-URL detail scrapes). Call mcp__apify__fetch-actor-details to confirm input schema, then mcp__apify__call-actor with { "directUrls": [<url>], "resultsType": "details", "addParentData": false }. Wait for the result (sync). Pull: caption, hashtags, ownerUsername, ownerFullName, likesCount, commentsCount, videoViewCount, videoPlayCount, timestamp, videoUrl, displayUrl, productType, dimensions.
  4. Save metadata — write the full scrape JSON to metadata.json in the output dir.
  5. Download videoscripts/download_video.py <videoUrl> <out-dir>/video.mp4. Skip if file already present and >100KB.
  6. Extract framesscripts/extract_frames.py <out-dir>/video.mp4 <out-dir>/_frames/. Outputs cover (0s), hook (1s), every 2s thereafter, plus the last frame. Also saves cover.png (frame at 0s) at the output root for convenience.
  7. Transcribe audio — reuse ~/Desktop/STUDIO/3-studio-master/skills/post-content/scripts/transcribe.py <out-dir>/video.mp4. Caches as video.mp4.transcript.txt alongside the video. Copy/symlink contents to transcript.txt in the output dir for cleanliness.
  8. Read everything back into context — read metadata.json, transcript.txt, and view the frames from _frames/ directly (multimodal). Cap frames read at 12 — if more than 12 exist, sample evenly across duration so the first, last, and pacing transitions are covered.
  9. Write analysis.md — see structure below. Save to <out-dir>/analysis.md.
  10. Print summary to chat — 6-8 lines: hook verdict, structure verdict, top replicable pattern, link to the saved folder. No emojis.

Analysis structure — write this exact skeleton

# IG Reel Teardown — @<owner> · <shortcode>

**Posted:** <date>
**Views:** <n> · **Likes:** <n> · **Comments:** <n>
**Duration:** <seconds>s
**URL:** <original-url>

## 1. Hook (0-3s)
What the viewer sees and hears in the first 3 seconds. Quote the opening line of the transcript. Describe the cover frame. Why it stops the scroll (or doesn't).

## 2. Structure & pacing
Beat-by-beat. Use transcript timestamps if available, else describe the frame transitions. Note cut frequency, energy curve, where attention is reinforced or risked.

## 3. Visual language
Aesthetic, color palette, framing (talking-head / b-roll / text-on-screen / split-screen / etc.), typography if any, motion type. One short paragraph.

## 4. Audio & voice
Voiceover delivery, music presence, cuts in audio, sound design. If music is dominant, name the energy/genre. If voiceover, characterise tone (urgent / dry / conspiratorial / warm).

## 5. Caption strategy
Full caption verbatim in a quote block. Then: what role the caption plays (extends the hook / context-fills / CTA / standalone story). Hashtag count and category mix.

## 6. What's working
3-5 bullets. Specific, not generic. "Cuts every 1.2s on hard consonants" beats "good pacing."

## 7. Replicable patterns
3-5 bullets. Things Will could lift into his own content. Format: **<pattern name>** — <one-line how-to>.

## 8. Verdict (creator POV)
2-3 sentences. Would Will copy this? Where does it lose him? What's the single thing worth stealing?

URL parsing rules

  • instagram.com/reel/<CODE>/ → shortcode = <CODE>
  • instagram.com/p/<CODE>/ → shortcode = <CODE> (treat carousels/single-image posts the same — analysis still useful for caption + cover)
  • Strip query strings (?igsh=...) before extracting.
  • If the URL doesn't match, ask Will to confirm the URL.

Apify actor notes

  • Default actor: apify/instagram-scraper (or whichever surfaces with the best rating on search-actors).
  • Input shape varies by actor version — always call fetch-actor-details first to read the current input schema. Don't guess field names.
  • Cost: a single-URL details run is cheap (~$0.001). Always run sync (async: false).
  • If the scrape returns empty (private account, deleted post, geo-blocked), surface the error to Will and stop — don't proceed with empty metadata.

Frame extraction rules

  • Output PNG (not JPG) — lossless, easier to read fine text overlays.
  • Width: 720px (downscale longer side). Keeps files small without losing legibility.
  • Naming: zero-padded index + timestamp suffix → 01_t0.0s.png, 02_t1.0s.png, 03_t3.0s.png, …
  • Always include t=0 (cover) and t=duration (last frame).

What this skill does NOT do

  • Does not post, repost, save to camera roll, or call any Meta API.
  • Does not analyze TikTok, YouTube, X, or any other platform. (Future skill.)
  • Does not generate new visuals — for that, hand off to /static-ads or /thumbnail.
  • Does not auto-add the post to any tracking sheet or vault. If Will wants it logged, he'll say so — then write a note under ~/Obsidian/Inbox/parked/ or the relevant project.

Failure modes to handle

  • Apify actor fails / times out → retry once. If still fails, surface the actor's error and stop.
  • Video URL expired (IG signed URLs decay) → re-run the Apify scrape, the URL is regenerated each call.
  • whisper-cli not installed → tell Will brew install whisper-cpp and stop. Don't fall back to a stub.
  • ffmpeg not installed → same — tell Will brew install ffmpeg and stop.
  • No audio track (rare) → write transcript.txt with [no audio track] and skip section 4 in the analysis.

Keep looking

Skills are one crate of 328,083. 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.