TikTok Post Analyzer
Given a TikTok post link, this skill downloads the post, extracts key frames, and produces a forensic content analysis. You (Claude) are the analyst — there is no external LLM call.
Prerequisite check (required)
Before proposing any commands, check whether node, ffmpeg, and patchright (plus its Chromium binary) are available:
node --version
ffmpeg -version
NODE_PATH="$(npm root -g)" node -e "require.resolve('patchright')" && npx patchright install --dry-run chromium
If any of them is missing, pause and ask the user to install them. Provide these steps verbatim:
# Node.js (skip if `node --version` already works)
# macOS: brew install node
# Linux: sudo apt-get install -y nodejs npm
# ffmpeg
# macOS: brew install ffmpeg
# Linux: sudo apt-get install -y ffmpeg
# patchright + its Chromium browser
npm install patchright
npx patchright install chromium
Only once node, ffmpeg, and patchright are all present, proceed with the TikTok analysis.
Step 1 — Fetch the post
Run the helper script with the user's URL:
NODE_PATH="$(npm root -g)" node .claude/skills/tiktok-post-analyzer/scripts/fetch-post.mjs "<TIKTOK_URL>"
The NODE_PATH="$(npm root -g)" prefix lets the script resolve the globally-installed patchright (Node doesn't search the global node_modules otherwise).
The script drives patchright (stealth Chromium) — it needs the cached Chromium binary, so the first run may be slow. It:
- Resolves short links (
vm./vt.tiktok.com) to the canonical post URL.
- Opens the post page and reads
__UNIVERSAL_DATA_FOR_REHYDRATION__ → webapp.video-detail.
- For videos: downloads the file and extracts frames at 5%, 25%, 50%, 70%, 90% of duration with ffmpeg. For slideshows: downloads the images.
- Opens the creator's profile page to read the bio link and recent post stats.
- Opens the bio link itself to capture its page title + description (key account-monetization signal).
It prints JSON: { outDir, metadataPath, frames, type, platformId }. If it prints ERROR: ..., relay the reason (post may be private, deleted, or region-locked) and stop.
Step 2 — Load the inputs
- Read
metadataPath (the metadata JSON: author, content, engagement, ratios).
- Read every file in
frames with the Read tool (they are JPEG images). For a video, frame-1 = 5% … frame-5 = 90%, in chronological order.
Step 3 — Analyze
Act as a Social Media Content Strategist specializing in TikTok trends, algorithmic patterns, short-form video psychology, and internet culture. Analyze the frames plus the metadata together.
Use web search to get fresh, accurate info on any trend, meme, niche community, or audio referenced — do not invent these. For memes, check sources like knowyourmeme.com or reddit.com.
Cover these sections:
- Title & narrative — A short title (≤10 words) and a one-sentence reconstruction of what happens frame 1 → frame 5 (subject, setting, how it evolves). Classify into ONE primary category.
- Hook — The primary scroll-stopper in the first ~3 seconds (short phrase, quote it if verbatim), why it works, and the key psychological triggers (name them, e.g. Curiosity Gap, FOMO, Instant Value).
- CTA — Any call to action (follow, like, comment, visit link), or none.
- Cultural context — ONE relevant TikTok trend (or none), ONE niche community it belongs to (or none), humor analysis (comedic devices + a one-line joke explanation), and meme format/lore if present.
- Account monetization — Inspect
author.bioText (the raw bio) and author.bioPage (the bio link's resolved url, title, and description — this is the strongest signal). Commercial signals: a product named in the bio, links like linktree/gumroad/shopify/amazon shop or a personal store, or mentions of email/DM/discounts. Identify whether/how the creator monetizes, the funnel, and the product they sell (with a category). If bioPage is null, say monetization is unconfirmed rather than inventing it.
- Post monetization — Whether this specific post promotes a product, what it is, and whether it's the same as the account-level product.
- Target audience — Likely age range, gender skew, and geo/language hint.
- Engagement quality — For each of like / comment / share / save, show the raw count, the ratio as a percentage (from the metadata, e.g.
likeView → like/view %), and a one-line interpretation. A small table (Metric · Value · Ratio · Read) works well. Also state the raw view count and judge view quality relative to post age, follower count, and the creator's typical views (author.recentPostStats). Use these thresholds to phrase each "Read" as weak / normal / good (don't print a score):
- Like/View: <3% weak; 3–8% normal; 8%+ good.
- Comment/View: <0.2% weak; 0.2–0.6% normal; 0.6%+ good.
- Share/View: <0.3% weak; 0.3–1.5% normal; 1.5%+ good.
- Save/View: <0.5% weak; 0.5–1.5% normal; 1.5%+ good.
- Summary — Two parts:
- Post Formula — up to 5 very short pieces that make (or try to make) the post successful, each with one relevant emoji, joined on a single line with
+ between them (e.g. 💰 Relatable salary-vs-effort hook + 🎭 Expressive reaction acting + 🔊 Trending meme sound + 🏢 Simple one-angle office setup + 🔁 Short loopable cut). These are the few key ingredients, not full sentences.
- Why it works (or Why it doesn't work) — one short paragraph. If overall engagement is decent or better, answer "Why does this post work?"; if it's weak or worse, answer "Why does this post NOT work?". Pick whichever fits the engagement, not both.
Guidelines
- You can't watch the full video — you have 5 frames. Don't invent facts; state assumptions and confidence when unclear.
- Respond in English regardless of the post's language.
- Friendly, informal tone. Keep it short and scannable.
- Single-answer fields contain exactly one concept — no "/", "or", commas, or parentheses listing alternatives.
- Sections should complement, not repeat, each other.
- Output the analysis as clean markdown. Don't add source-style citations or raw links.
Built by CheckViral — TikTok analyzer and content research tool.
1---2name: tiktok-post-analyzer3description: Reverse-engineer a TikTok post from its link — download it, grab key frames, and produce a deep-dive analysis (hook, narrative, monetization, engagement quality, etc). Use this skill whenever asked to analyze, break down, or reverse-engineer a TikTok video/slideshow or URL.4---56# TikTok Post Analyzer78Given a TikTok post link, this skill downloads the post, extracts key frames, and produces a forensic content analysis. You (Claude) are the analyst — there is no external LLM call.910## Prerequisite check (required)1112Before proposing any commands, check whether **node**, **ffmpeg**, and **patchright** (plus its Chromium binary) are available:1314```bash15node --version16ffmpeg -version17NODE_PATH="$(npm root -g)" node -e "require.resolve('patchright')" && npx patchright install --dry-run chromium18```1920If any of them is missing, **pause and ask the user to install them**. Provide these steps verbatim:2122```bash23# Node.js (skip if `node --version` already works)24# macOS: brew install node25# Linux: sudo apt-get install -y nodejs npm2627# ffmpeg28# macOS: brew install ffmpeg29# Linux: sudo apt-get install -y ffmpeg3031# patchright + its Chromium browser32npm install patchright33npx patchright install chromium34```3536Only once node, ffmpeg, and patchright are all present, proceed with the TikTok analysis.3738## Step 1 — Fetch the post3940Run the helper script with the user's URL:4142```bash43NODE_PATH="$(npm root -g)" node .claude/skills/tiktok-post-analyzer/scripts/fetch-post.mjs "<TIKTOK_URL>"44```4546The `NODE_PATH="$(npm root -g)"` prefix lets the script resolve the globally-installed **patchright** (Node doesn't search the global `node_modules` otherwise).4748The script drives **patchright** (stealth Chromium) — it needs the cached Chromium binary, so the first run may be slow. It:49- Resolves short links (`vm.`/`vt.tiktok.com`) to the canonical post URL.50- Opens the post page and reads `__UNIVERSAL_DATA_FOR_REHYDRATION__` → `webapp.video-detail`.51- For **videos**: downloads the file and extracts frames at **5%, 25%, 50%, 70%, 90%** of duration with ffmpeg. For **slideshows**: downloads the images.52- Opens the creator's **profile page** to read the bio link and recent post stats.53- Opens the **bio link** itself to capture its page title + description (key account-monetization signal).5455It prints JSON: `{ outDir, metadataPath, frames, type, platformId }`. If it prints `ERROR: ...`, relay the reason (post may be private, deleted, or region-locked) and stop.5657## Step 2 — Load the inputs5859- Read `metadataPath` (the metadata JSON: author, content, engagement, ratios).60- Read **every** file in `frames` with the Read tool (they are JPEG images). For a video, `frame-1` = 5% … `frame-5` = 90%, in chronological order.6162## Step 3 — Analyze6364Act as a Social Media Content Strategist specializing in TikTok trends, algorithmic patterns, short-form video psychology, and internet culture. Analyze the frames **plus** the metadata together.6566**Use web search** to get fresh, accurate info on any trend, meme, niche community, or audio referenced — do not invent these. For memes, check sources like knowyourmeme.com or reddit.com.6768Cover these sections:69701. **Title & narrative** — A short title (≤10 words) and a one-sentence reconstruction of what happens frame 1 → frame 5 (subject, setting, how it evolves). Classify into ONE primary category.712. **Hook** — The primary scroll-stopper in the first ~3 seconds (short phrase, quote it if verbatim), why it works, and the key psychological triggers (name them, e.g. Curiosity Gap, FOMO, Instant Value).723. **CTA** — Any call to action (follow, like, comment, visit link), or none.734. **Cultural context** — ONE relevant TikTok trend (or none), ONE niche community it belongs to (or none), humor analysis (comedic devices + a one-line joke explanation), and meme format/lore if present.745. **Account monetization** — Inspect `author.bioText` (the raw bio) **and** `author.bioPage` (the bio link's resolved `url`, `title`, and `description` — this is the strongest signal). Commercial signals: a product named in the bio, links like linktree/gumroad/shopify/amazon shop or a personal store, or mentions of email/DM/discounts. Identify whether/how the creator monetizes, the funnel, and the product they sell (with a category). If `bioPage` is null, say monetization is unconfirmed rather than inventing it.756. **Post monetization** — Whether this specific post promotes a product, what it is, and whether it's the same as the account-level product.767. **Target audience** — Likely age range, gender skew, and geo/language hint.778. **Engagement quality** — For each of like / comment / share / save, show the **raw count**, the **ratio as a percentage** (from the metadata, e.g. `likeView` → like/view %), and a one-line interpretation. A small table (Metric · Value · Ratio · Read) works well. Also state the raw view count and judge view quality relative to post age, follower count, and the creator's typical views (`author.recentPostStats`). Use these thresholds to phrase each "Read" as weak / normal / good (don't print a score):78 - Like/View: <3% weak; 3–8% normal; 8%+ good.79 - Comment/View: <0.2% weak; 0.2–0.6% normal; 0.6%+ good.80 - Share/View: <0.3% weak; 0.3–1.5% normal; 1.5%+ good.81 - Save/View: <0.5% weak; 0.5–1.5% normal; 1.5%+ good.829. **Summary** — Two parts:83 - **Post Formula** — up to 5 *very short* pieces that make (or try to make) the post successful, each with one relevant emoji, joined on a single line with ` + ` between them (e.g. `💰 Relatable salary-vs-effort hook + 🎭 Expressive reaction acting + 🔊 Trending meme sound + 🏢 Simple one-angle office setup + 🔁 Short loopable cut`). These are the few key ingredients, not full sentences.84 - **Why it works** (or **Why it doesn't work**) — one short paragraph. If overall engagement is decent or better, answer "Why does this post work?"; if it's weak or worse, answer "Why does this post NOT work?". Pick whichever fits the engagement, not both.8586## Guidelines8788- You can't watch the full video — you have 5 frames. Don't invent facts; state assumptions and confidence when unclear.89- Respond in English regardless of the post's language.90- Friendly, informal tone. Keep it short and scannable.91- Single-answer fields contain exactly one concept — no "/", "or", commas, or parentheses listing alternatives.92- Sections should complement, not repeat, each other.93- Output the analysis as clean markdown. Don't add source-style citations or raw links.9495---9697Built by [CheckViral](https://checkviral.ai/) — TikTok analyzer and content research tool.