youtube-research-kit
by @xuya227939
Extract and analyze YouTube video content using yt-dlp. Supports metadata extraction, transcript/subtitle download, comment retrieval, playlist analysis, and...
clawhub install youtube-research-kitπ About This Skill
name: youtube-research-kit description: > Extract and analyze YouTube video content using yt-dlp. Supports metadata extraction, transcript/subtitle download, comment retrieval, playlist analysis, and channel overview. Use when user mentions "YouTube research", "YouTube extract", "YouTube transcript", "YouTube metadata", "YouTube comments", "YouTube analysis", "video research", "analyze YouTube", or provides a YouTube/youtu.be URL for content extraction.
YouTube Research Kit
Extract structured data from YouTube videos, channels, and playlists for content research. Powered by yt-dlp β no API key required.
Version: 1.2.0 Prerequisite: yt-dlp >= 2024.01.01, jq (optional, for JSON formatting)
When user provides a YouTube URL or asks about YouTube content research, use this skill.
Prerequisites
# macOS
brew install yt-dlppip
pip install yt-dlpVerify
yt-dlp --version
Operations
1. Video Metadata
Extract title, channel, stats, description, tags, and available formats.
yt-dlp --dump-json --no-playlist --skip-download "URL"
Parse key fields from JSON output:
| Field | JSON path |
|-------|-----------|
| Title | .title |
| Channel | .channel / .uploader |
| Channel URL | .channel_url |
| Upload date | .upload_date (YYYYMMDD β reformat to YYYY-MM-DD) |
| Duration | .duration (seconds β convert to H:MM:SS) |
| Views | .view_count |
| Likes | .like_count |
| Comment count | .comment_count |
| Description | .description |
| Tags | .tags[] |
| Categories | .categories[] |
| Thumbnail | .thumbnail |
| Available heights | .formats[].height (deduplicate, filter where .vcodec != "none") |
Output format: Present as a Markdown table with key stats, followed by description and tags sections.
2. Transcript / Subtitles
List available languages:
yt-dlp --list-subs --no-playlist --skip-download "URL"
Download subtitles as SRT:
yt-dlp --skip-download --no-playlist \
--write-sub --write-auto-sub \
--sub-lang en \
--sub-format vtt --convert-subs srt \
-o "/tmp/yt-sub-%(id)s.%(ext)s" "URL"
After download, read the .srt file and clean it:
1. Remove sequence numbers (lines matching ^\d+$)
2. Extract timestamps from timing lines (^\d{2}:\d{2}:\d{2})
3. Strip HTML tags (<[^>]+>)
4. Deduplicate consecutive identical lines
Output format: [HH:MM:SS] subtitle text β one line per caption segment.
Replace en with user's requested language code. Common codes: en, zh-Hans, zh-Hant, ja, ko, es, fr, de, pt, ru.
3. Comments
yt-dlp --dump-json --no-playlist --skip-download \
--write-comments \
--extractor-args "youtube:max_comments=20,all,100,0" "URL"
Parse comments from JSON: .comments[] array, each with:
| Field | JSON path |
|-------|-----------|
| Author | .author |
| Text | .text |
| Likes | .like_count |
| Pinned | .is_pinned |
| Hearted | .is_favorited |
Sort by .like_count descending. Adjust max_comments=N for custom count.
Output format: Numbered list with author, like count, and quoted text.
4. Playlist Analysis
yt-dlp --flat-playlist --dump-json "PLAYLIST_URL"
Output is one JSON object per line. Parse each for:
.title, .duration, .view_count, .url (or .id).url is just an ID, prefix with https://www.youtube.com/watch?v=Output format: Table with columns: #, Title, Duration, Views.
5. Channel Overview
yt-dlp --flat-playlist --dump-json --playlist-end 20 "CHANNEL_URL/videos"
Append /videos to channel URL if not present. Parse same fields as playlist.
Output format: Table with columns: #, Title, Duration, Views, Date.
Number Formatting
{n/1M:.1f}M (e.g. 1754100000 β "1754.1M"){n/1K:.1f}K (e.g. 18900 β "18.9K")Workflow Guide
When user provides a YouTube URL:
1. Determine URL type (video, playlist, channel, or shorts) 2. Infer what they want or ask if ambiguous 3. Run the appropriate yt-dlp command 4. Parse JSON and present formatted Markdown 5. Offer follow-ups: "Want me to summarize this transcript?" / "Need the comments too?"
When user asks to analyze a video:
1. Extract metadata + transcript in sequence 2. Summarize key points from transcript 3. Present metadata overview + content summary
When user asks to download a video:
Error Handling
--list to check available languages, or try auto-generated captionsAbout
YouTube Research Kit is an open-source project by SnapVee.
βοΈ Configuration
# macOS
brew install yt-dlppip
pip install yt-dlpVerify
yt-dlp --version