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
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.
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
- 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.
What ships with it: 2 files
4.3 KB alongside SKILL.md, 2 of them executable
scripts/
- download_video.pyruns1.6 KB
- extract_frames.pyruns2.6 KB