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.
npx -y skills add NovateStudioGit/novate-studio-skills --skill analyze-reelAssembled 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
- Parse URL — extract shortcode from
instagram.com/reel/<code>orinstagram.com/p/<code>. Derive slugig-<shortcode>. - Set output dir —
~/Desktop/STUDIO/post-analysis/ig-<shortcode>/. Create it. If it already exists with a populatedanalysis.md, ask Will whether to re-run or skip — never silently overwrite. - Scrape post via Apify — use
mcp__apify__search-actorswith query"instagram post detail"if the actor isn't already known. Preferapify/instagram-scraper(handles single-URL detail scrapes). Callmcp__apify__fetch-actor-detailsto confirm input schema, thenmcp__apify__call-actorwith{ "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. - Save metadata — write the full scrape JSON to
metadata.jsonin the output dir. - Download video —
scripts/download_video.py <videoUrl> <out-dir>/video.mp4. Skip if file already present and >100KB. - Extract frames —
scripts/extract_frames.py <out-dir>/video.mp4 <out-dir>/_frames/. Outputs cover (0s), hook (1s), every 2s thereafter, plus the last frame. Also savescover.png(frame at 0s) at the output root for convenience. - Transcribe audio — reuse
~/Desktop/STUDIO/3-studio-master/skills/post-content/scripts/transcribe.py <out-dir>/video.mp4. Caches asvideo.mp4.transcript.txtalongside the video. Copy/symlink contents totranscript.txtin the output dir for cleanliness. - 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. - Write
analysis.md— see structure below. Save to<out-dir>/analysis.md. - 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 onsearch-actors). - Input shape varies by actor version — always call
fetch-actor-detailsfirst 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-adsor/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-cppand stop. Don't fall back to a stub. - ffmpeg not installed → same — tell Will
brew install ffmpegand stop. - No audio track (rare) → write transcript.txt with
[no audio track]and skip section 4 in the analysis.