Install
openclaw skills install @xuya227939/youtube-research-kitExtract 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.
openclaw skills install @xuya227939/youtube-research-kitExtract 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.
# macOS
brew install yt-dlp
# pip
pip install yt-dlp
# Verify
yt-dlp --version
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.
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:
^\d+$)^\d{2}:\d{2}:\d{2})<[^>]+>)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.
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.
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.
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.
= 1,000,000 →
{n/1M:.1f}M(e.g. 1754100000 → "1754.1M")
= 1,000 →
{n/1K:.1f}K(e.g. 18900 → "18.9K")
When user provides a YouTube URL:
When user asks to analyze a video:
When user asks to download a video:
--list to check available languages, or try auto-generated captionsYouTube Research Kit is an open-source project by SnapVee.