agentsclimarketplace

Analyze reel

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

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).From its SKILL.md

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.

SKILL.md

6.5 KB, ~1.6k tokens by cl100k_base, 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.

What ships with it: 2 files

4.3 KB alongside SKILL.md, 2 of them executable

scripts/

Keep looking

Skills are one crate of 325,949. 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.