Single Video Deep Analysis (Advanced)
Diagnose why a video underperforms and produce a paste-ready fix kit.
Retention and CTR are the primary levers; metadata is secondary. Always
ask for the Studio CSV export if the user wants retention diagnosis —
never guess Tier 1 numbers.
Data Collection (in order)
- WebFetch the watch URL → title, description (partial), view/like,
duration, upload date, channel, visible chapters
- yt-dlp (
scripts/fetch_video.py or direct call) → full JSON
metadata, tags, full description, chapters, thumbnails, captions
- YouTube Data API (if key) →
videos.list?part=snippet,statistics, contentDetails,topicDetails,status,player,liveStreamingDetails and
captions.list + captions.download (if OAuth)
- Transcript: prefer manual captions > auto-captions > Whisper
transcription from audio stream
- Studio CSV (user-provided): retention curve, traffic sources, CTR
by source, impressions, audience tab, real-time first-24h curve
- Audio loudness:
ffmpeg -i audio.m4a -af loudnorm=print_format=json -f null - → integrated LUFS, true peak
- Thumbnail file: download for analysis via
scripts/analyze_thumbnail.py
- SERP grid: fetch top-10 for primary keyword, save competitor
thumbnails and titles for differentiation scoring
Analysis Dimensions
1. Retention Curve (highest weight when Studio data provided)
Diagnose from the Studio retention curve:
- 0-15s intro: target ≥70% still watching. Below → hook problem.
Diagnose: weak first sentence, no payoff preview, long logo animation,
re-introducing yourself ("Hey guys welcome back..."), asking to subscribe
before value delivery.
- 15-60s premise: target ≥60%. Below → premise unclear or mismatch
with title/thumbnail.
- Retention cliffs: any drop >10% in <5s is a structural issue. Map
cliffs to transcript timestamps and identify:
- Tangent / digression
- Ad or sponsor break placed badly
- Pacing death (long, slow exposition)
- Promise broken (title said X, video now does Y)
- Visual monotony (static shot >20s without B-roll)
- Mid-video sustain: target curve slope ≥-0.3%/sec. Steeper = boring
middle.
- Ending: the last 30s often rises (re-watchers, end-screen hover).
If it drops hard, end-screen is poorly placed or content feels done
before the promise delivered.
- Spike detection: peaks = rewatched moments = high-value moments.
Reuse as chapter titles, thumbnails, Shorts clips.
- APV vs niche median: score video as ×median. Flag anything <0.8×.
If the curve is not provided, state explicitly that retention diagnosis
is unavailable and score only metadata, thumbnail, and engagement proxies.
2. Title (target: 60-70 chars, max 100)
- Length (flag >70 truncation risk, critical >100)
- Keyword placement: primary keyword in first 40 chars for Search;
emotional driver in first 40 chars for Browse (which surface matters?)
- Hook type: curiosity, number, contrarian, benefit, authority, fear.
A video should commit to one dominant hook type that matches surface.
- Emotional intensity: rate 1-5. Below 3 = passive titles that lose
Browse impressions.
- Clickability vs. deliverability: can the video content back up the
title? If no, score down (long-term CTR decay).
- Front-load uniqueness: avoid "My thoughts on", "A quick video about"
- Case consistency with channel brand
3. Description
- Above-the-fold (first 150 chars): MUST include primary keyword,
restate title intent, give a click-for-more reason
- Full length: 1,500-4,000 chars ideal. Flag <500 thin, >6,000 bloated
- Entity coverage: list 8-15 Knowledge Graph entities the video
should mention for topic classification. Check transcript + description
for coverage. Missing entities = missed semantic relevance.
- Secondary keywords: 3-5 naturally placed in lines 2-10
- Chapters block: present, first =
0:00, ≥3, each ≥10s, descriptive
- Links: grouped and labeled (affiliate, social, related, resource)
- CTA: subscribe + next-video suggestion + lead magnet
- Hashtags: 3 meaningful at the bottom, first is strongest
- FTC disclosure: flag missing if affiliate/sponsored
- Timestamps for Key Moments rich result: correctly formatted
(
M:SS - label or MM:SS label), eligible for Google Search carousel
4. Tags
- Count: 5-15 (flag <5 or >20)
- Tag 1 = exact primary keyword
- Mix: 1-3 broad + 5-8 specific long-tail + 2-3 brand/channel tags
- Total chars <500
- Entity overlap: tags should reference the same entities present in
description and transcript (consistency strengthens classification)
- No tag spam (unrelated popular terms)
5. Thumbnail
Delegate to youtube-seo-thumbnail for full treatment. Include a quick
score here:
- Resolution 1280x720, <2MB
- Readable at 120px wide (mobile test)
- Face + strong emotion present (niche-appropriate)
- Text ≤4 words, ≥80pt effective
- SERP differentiation (pattern-break vs top-10)
- Consistency with channel grid
- No title-thumbnail redundancy
6. Chapters & Key Moments
- ≥3 chapters
- First is
0:00
- Each ≥10s
- Descriptive, keyword-rich labels (not "Intro / Main / Outro")
- Matches actual structure
- Schema check: propose
VideoObject with hasPart[].Clip and
SeekToAction entries so the embed/page unlocks Google "Key Moments"
rich result (see optimize skill for code)
7. Captions & Transcript
- Manual captions present (flag auto-only)
- Language tag correct
- Translated captions for top 3 audience countries (from Studio → Audience)
- Transcript contains primary keyword in first 60s and final 60s
- Transcript contains ≥5 Knowledge Graph entities from the topic cluster
8. Audio Loudness
Run FFmpeg loudnorm analysis. Flag:
- Integrated loudness outside -14 to -13 LUFS (quiet = retention drag)
- True peak > -1 dBTP (clipping risk)
- Loudness range >15 LU (inconsistent — causes volume hunting)
9. End-screens & Cards
- End-screen uses all 4 slots (best related, playlist, subscribe, channel)
- Cards at moments of attention (peaks in retention curve if available,
else 60-70% mark)
- Pinned comment: CTA that drives replies (question prompt)
- Pinned comment reply rate (from Studio if available)
10. Engagement Signals
- Like-to-view ratio vs channel median
- Comment velocity (comments / views / day since upload)
- Creator reply rate in first 24h
- Shares, saves-to-playlist visible
- Subscribe-per-1000-views (from Studio)
- Pinned-comment replies
11. Technical & Safety
- Resolution ≥1080p
- Made-for-Kids flag matches content (flag mismatch)
- Altered/synthetic content disclosure if AI-generated
- Copyright claims present? (from Studio)
- Embedding enabled
- Comments enabled with moderation
- Default language + audio language tags set
12. Shorts (if applicable, <60s vertical)
If the video is a Short, apply Shorts-specific rules INSTEAD of the long-
form retention analysis:
- 0-1s hook (swipe-away rate)
- Loopability (does the end tie back to the start?)
- Caption overlay for muted viewing
- Audio: trending library audio or original remixable?
- Title ≤40 chars, front-loaded emotion
#Shorts present
- Length sweet spot: 15-30s for loop rate, 45-60s for watch time
- CTA to long-form via pinned comment or end card
Output
Video Score Card
Overall Score: XX/100 (vs niche median: X.Xx)
Retention: XX/100 ████████░░ [requires Studio CSV]
Title: XX/100 ██████████
Description: XX/100 ███████░░░
Tags: XX/100 █████░░░░░
Thumbnail: XX/100 ████████░░
Chapters: XX/100 ██████░░░░
Captions: XX/100 ███████░░░
Audio Loudness: XX/100 ████████░░
Engagement: XX/100 ███████░░░
Technical/Safety: XX/100 █████████░
Root-Cause Ranking
Rank the 3 largest drags on performance in order, each with estimated
impact (e.g., "Hook problem — fixing 0:15 retention from 55% → 70% adds
~20% AVD, estimated +30% impressions").
Issues Found
Critical → High → Medium → Low with one-line fixes and Tier reference.
Paste-Ready Rewrites
Hand off to youtube-seo-optimize for full rewrites OR inline:
- 5 title alternatives (tagged Browse-primary / Search-primary)
- New description body (with chapters, entities, hashtags)
- Tag list
VideoObject + Clip + SeekToAction JSON-LD schema block
- Pinned comment CTA
Measurement Plan
| Change |
Metric to watch |
Window |
Success threshold |
| New title |
Browse CTR |
7 days |
+15% vs baseline |
| New thumbnail |
Impressions CTR |
14 days |
+1 absolute pt |
| Fixed intro |
0:30 retention |
next upload |
≥70% |
| Key Moments schema |
Google Search video clicks |
30 days |
first rich result |
Error Handling
| Scenario |
Action |
| No Studio CSV |
Score retention as "unknown"; do not fabricate a curve |
| Tags not visible |
Use API or ask; never invent a tag list |
| Video <48h old |
Flag that velocity and CTR data are too early to judge |
| Private/unlisted |
Ask for unlisted-shareable link or metadata paste |
| Shorts video |
Use Shorts ruleset; skip long-form retention checks |
| Live stream VOD |
Analyze the VOD as long-form but flag that chat spikes distort retention |
1---2name: youtube-seo-video3description: Advanced single-video SEO analysis covering retention curve diagnosis, intro hook strength, APV vs niche benchmark, entity/semantic coverage, title/description/tags, chapters with Key Moments schema, thumbnail, captions, audio loudness, end-screens, and engagement signals. Use when user says "analyze this video", "why isn't my video ranking", or provides a single video URL.4---56# Single Video Deep Analysis (Advanced)78Diagnose **why** a video underperforms and produce a paste-ready fix kit.9Retention and CTR are the primary levers; metadata is secondary. Always10ask for the Studio CSV export if the user wants retention diagnosis —11never guess Tier 1 numbers.1213## Data Collection (in order)14151. **WebFetch** the watch URL → title, description (partial), view/like,16 duration, upload date, channel, visible chapters172. **yt-dlp** (`scripts/fetch_video.py` or direct call) → full JSON18 metadata, tags, full description, chapters, thumbnails, captions193. **YouTube Data API** (if key) → `videos.list?part=snippet,statistics,20 contentDetails,topicDetails,status,player,liveStreamingDetails` and21 `captions.list` + `captions.download` (if OAuth)224. **Transcript**: prefer manual captions > auto-captions > Whisper23 transcription from audio stream245. **Studio CSV** (user-provided): retention curve, traffic sources, CTR25 by source, impressions, audience tab, real-time first-24h curve266. **Audio loudness**: `ffmpeg -i audio.m4a -af loudnorm=print_format=json27 -f null -` → integrated LUFS, true peak287. **Thumbnail file**: download for analysis via `scripts/analyze_thumbnail.py`298. **SERP grid**: fetch top-10 for primary keyword, save competitor30 thumbnails and titles for differentiation scoring3132## Analysis Dimensions3334### 1. Retention Curve (highest weight when Studio data provided)3536Diagnose from the Studio retention curve:3738- **0-15s intro**: target ≥70% still watching. Below → hook problem.39 Diagnose: weak first sentence, no payoff preview, long logo animation,40 re-introducing yourself ("Hey guys welcome back..."), asking to subscribe41 before value delivery.42- **15-60s premise**: target ≥60%. Below → premise unclear or mismatch43 with title/thumbnail.44- **Retention cliffs**: any drop >10% in <5s is a structural issue. Map45 cliffs to transcript timestamps and identify:46 - Tangent / digression47 - Ad or sponsor break placed badly48 - Pacing death (long, slow exposition)49 - Promise broken (title said X, video now does Y)50 - Visual monotony (static shot >20s without B-roll)51- **Mid-video sustain**: target curve slope ≥-0.3%/sec. Steeper = boring52 middle.53- **Ending**: the last 30s often rises (re-watchers, end-screen hover).54 If it drops hard, end-screen is poorly placed or content feels done55 before the promise delivered.56- **Spike detection**: peaks = rewatched moments = high-value moments.57 Reuse as chapter titles, thumbnails, Shorts clips.58- **APV vs niche median**: score video as ×median. Flag anything <0.8×.5960If the curve is not provided, state explicitly that retention diagnosis61is unavailable and score only metadata, thumbnail, and engagement proxies.6263### 2. Title (target: 60-70 chars, max 100)6465- **Length** (flag >70 truncation risk, critical >100)66- **Keyword placement**: primary keyword in first 40 chars for Search;67 emotional driver in first 40 chars for Browse (which surface matters?)68- **Hook type**: curiosity, number, contrarian, benefit, authority, fear.69 A video should commit to one dominant hook type that matches surface.70- **Emotional intensity**: rate 1-5. Below 3 = passive titles that lose71 Browse impressions.72- **Clickability vs. deliverability**: can the video content back up the73 title? If no, score down (long-term CTR decay).74- **Front-load uniqueness**: avoid "My thoughts on", "A quick video about"75- **Case consistency** with channel brand7677### 3. Description7879- **Above-the-fold (first 150 chars)**: MUST include primary keyword,80 restate title intent, give a click-for-more reason81- **Full length**: 1,500-4,000 chars ideal. Flag <500 thin, >6,000 bloated82- **Entity coverage**: list 8-15 Knowledge Graph entities the video83 should mention for topic classification. Check transcript + description84 for coverage. Missing entities = missed semantic relevance.85- **Secondary keywords**: 3-5 naturally placed in lines 2-1086- **Chapters block**: present, first = `0:00`, ≥3, each ≥10s, descriptive87- **Links**: grouped and labeled (affiliate, social, related, resource)88- **CTA**: subscribe + next-video suggestion + lead magnet89- **Hashtags**: 3 meaningful at the bottom, first is strongest90- **FTC disclosure**: flag missing if affiliate/sponsored91- **Timestamps for Key Moments rich result**: correctly formatted92 (`M:SS - label` or `MM:SS label`), eligible for Google Search carousel9394### 4. Tags9596- **Count**: 5-15 (flag <5 or >20)97- **Tag 1 = exact primary keyword**98- **Mix**: 1-3 broad + 5-8 specific long-tail + 2-3 brand/channel tags99- **Total chars** <500100- **Entity overlap**: tags should reference the same entities present in101 description and transcript (consistency strengthens classification)102- **No tag spam** (unrelated popular terms)103104### 5. Thumbnail105106Delegate to `youtube-seo-thumbnail` for full treatment. Include a quick107score here:108- Resolution 1280x720, <2MB109- Readable at 120px wide (mobile test)110- Face + strong emotion present (niche-appropriate)111- Text ≤4 words, ≥80pt effective112- SERP differentiation (pattern-break vs top-10)113- Consistency with channel grid114- No title-thumbnail redundancy115116### 6. Chapters & Key Moments117118- ≥3 chapters119- First is `0:00`120- Each ≥10s121- Descriptive, keyword-rich labels (not "Intro / Main / Outro")122- Matches actual structure123- **Schema check**: propose `VideoObject` with `hasPart[].Clip` and124 `SeekToAction` entries so the embed/page unlocks Google "Key Moments"125 rich result (see optimize skill for code)126127### 7. Captions & Transcript128129- Manual captions present (flag auto-only)130- Language tag correct131- Translated captions for top 3 audience countries (from Studio → Audience)132- Transcript contains primary keyword in first 60s and final 60s133- Transcript contains ≥5 Knowledge Graph entities from the topic cluster134135### 8. Audio Loudness136137Run FFmpeg loudnorm analysis. Flag:138- Integrated loudness outside -14 to -13 LUFS (quiet = retention drag)139- True peak > -1 dBTP (clipping risk)140- Loudness range >15 LU (inconsistent — causes volume hunting)141142### 9. End-screens & Cards143144- End-screen uses all 4 slots (best related, playlist, subscribe, channel)145- Cards at moments of attention (peaks in retention curve if available,146 else 60-70% mark)147- Pinned comment: CTA that drives replies (question prompt)148- Pinned comment reply rate (from Studio if available)149150### 10. Engagement Signals151152- Like-to-view ratio vs channel median153- Comment velocity (comments / views / day since upload)154- Creator reply rate in first 24h155- Shares, saves-to-playlist visible156- Subscribe-per-1000-views (from Studio)157- Pinned-comment replies158159### 11. Technical & Safety160161- Resolution ≥1080p162- Made-for-Kids flag matches content (flag mismatch)163- Altered/synthetic content disclosure if AI-generated164- Copyright claims present? (from Studio)165- Embedding enabled166- Comments enabled with moderation167- Default language + audio language tags set168169### 12. Shorts (if applicable, <60s vertical)170171If the video is a Short, apply Shorts-specific rules INSTEAD of the long-172form retention analysis:173- **0-1s hook** (swipe-away rate)174- **Loopability** (does the end tie back to the start?)175- **Caption overlay** for muted viewing176- **Audio**: trending library audio or original remixable?177- **Title ≤40 chars**, front-loaded emotion178- **`#Shorts`** present179- **Length sweet spot**: 15-30s for loop rate, 45-60s for watch time180- **CTA to long-form** via pinned comment or end card181182## Output183184### Video Score Card185```186Overall Score: XX/100 (vs niche median: X.Xx)187188Retention: XX/100 ████████░░ [requires Studio CSV]189Title: XX/100 ██████████190Description: XX/100 ███████░░░191Tags: XX/100 █████░░░░░192Thumbnail: XX/100 ████████░░193Chapters: XX/100 ██████░░░░194Captions: XX/100 ███████░░░195Audio Loudness: XX/100 ████████░░196Engagement: XX/100 ███████░░░197Technical/Safety: XX/100 █████████░198```199200### Root-Cause Ranking201Rank the 3 largest drags on performance in order, each with estimated202impact (e.g., "Hook problem — fixing 0:15 retention from 55% → 70% adds203~20% AVD, estimated +30% impressions").204205### Issues Found206Critical → High → Medium → Low with one-line fixes and Tier reference.207208### Paste-Ready Rewrites209Hand off to `youtube-seo-optimize` for full rewrites OR inline:210- 5 title alternatives (tagged Browse-primary / Search-primary)211- New description body (with chapters, entities, hashtags)212- Tag list213- `VideoObject` + `Clip` + `SeekToAction` JSON-LD schema block214- Pinned comment CTA215216### Measurement Plan217| Change | Metric to watch | Window | Success threshold |218|--------|----------------|--------|-------------------|219| New title | Browse CTR | 7 days | +15% vs baseline |220| New thumbnail | Impressions CTR | 14 days | +1 absolute pt |221| Fixed intro | 0:30 retention | next upload | ≥70% |222| Key Moments schema | Google Search video clicks | 30 days | first rich result |223224## Error Handling225226| Scenario | Action |227|----------|--------|228| No Studio CSV | Score retention as "unknown"; do not fabricate a curve |229| Tags not visible | Use API or ask; never invent a tag list |230| Video <48h old | Flag that velocity and CTR data are too early to judge |231| Private/unlisted | Ask for unlisted-shareable link or metadata paste |232| Shorts video | Use Shorts ruleset; skip long-form retention checks |233| Live stream VOD | Analyze the VOD as long-form but flag that chat spikes distort retention |