--- id: Casper-Studios/casper-marketplace/youtube-tools version: "cd27c42d" license: MIT install: manual updated: 2026-07-27 --- # youtube-tools — YouTube Tools harnesses yt-dlp to download videos, playlists, and audio directly to your machine at zero cost. Extract transcripts in multiple languages, pull video metadata, or convert to MP3—all without authentication or subscription fees. Ideal for bulk research, course archiving, and offline access. Publisher: Casper-Studios · Stars: 11 · Updated: 2026-07-27 Install (manual): `git clone https://github.com/Casper-Studios/casper-marketplace` ## SKILL.md # YouTube Tools (yt-dlp) ## Overview Free, local YouTube operations using yt-dlp. No API keys required, no per-video costs. Works offline after installation. ## When to Use This vs Apify ``` ┌─────────────────────────────────────────────────────────────────┐ │ DECISION: YouTube Tools (yt-dlp) vs Apify │ ├─────────────────────────────────────────────────────────────────┤ │ │ │ Use youtube-tools (FREE) when: │ │ ├── Downloading videos to local storage │ │ ├── Extracting transcripts/subtitles │ │ ├── Getting video metadata (title, duration, views, etc.) │ │ ├── Bulk downloading playlists or channels │ │ ├── Converting to audio-only (MP3) │ │ └── You want zero API costs │ │ │ │ Use apify-scrapers when: │ │ ├── Scraping YouTube SEARCH results │ │ ├── Getting comments at scale │ │ ├── Channel analytics and statistics │ │ ├── Trending video discovery │ │ └── You need cloud-based processing │ │ │ └─────────────────────────────────────────────────────────────────┘ ``` ## Quick Decision Tree ``` What do you need? │ ├── Download video(s) │ ├── Single video → scripts/download_video.py URL │ ├── Multiple videos → scripts/download_video.py --urls-file list.txt │ ├── Playlist → scripts/download_video.py "playlist_url" │ ├── Audio only → scripts/download_video.py URL --audio-only │ └── Specific quality → scripts/download_video.py URL --quality 720p │ ├── Get transcript/subtitles │ ├── Auto-generated captions → scripts/get_transcript.py URL │ ├── Manual subtitles → scripts/get_transcript.py URL --manual-only │ ├── Specific language → scripts/get_transcript.py URL --lang es │ └── All available → scripts/get_transcript.py URL --all-langs │ ├── Get video metadata │ ├── Single video → scripts/get_video_info.py URL │ ├── Multiple videos → scripts/get_video_info.py --urls-file list.txt │ └── Playlist info → scripts/get_video_info.py "playlist_url" │ └── Advanced ├── Age-restricted → scripts/download_video.py URL --cookies-from-browser chrome ├── Private videos → Requires authentication (see references/yt-dlp-guide.md) └── Live streams → scripts/download_video.py URL --live-from-start ``` ## Environment Setup ```bash # Install yt-dlp (required) pip install yt-dlp # Optional: Install ffmpeg for format conversion # macOS brew install ffmpeg # Ubuntu/Debian sudo apt install ffmpeg # Windows winget install ffmpeg ``` **No API keys required!** This is completely free. ## Common Usage ### Download Single Video ```bash python scripts/download_video.py "https://www.youtube.com/watch?v=VIDEO_ID" ``` ### Download with Specific Quality ```bash python scripts/download_video.py "https://youtu.be/VIDEO_ID" --quality 1080p ``` ### Download Audio Only (MP3) ```bash python scripts/download_video.py "https://youtube.com/watch?v=VIDEO_ID" --audio-only ``` ### Download Entire Playlist ```bash python scripts/download_video.py "https://youtube.com/playlist?list=PLAYLIST_ID" --output-dir ./videos ``` ### Bulk Download from File ```bash # Create urls.txt with one URL per line python scripts/download_video.py --urls-file urls.txt --output-dir ./downloads ``` ### Get Transcript ```bash python scripts/get_transcript.py "https://youtube.com/watch?v=VIDEO_ID" ``` ### Get Transcript in Specific Language ```bash python scripts/get_transcript.py "https://youtu.be/VIDEO_ID" --lang es ``` ### Get Video Metadata ```bash python scripts/get_video_info.py "https://youtube.com/watch?v=VIDEO_ID" ``` ### Get Metadata for Multiple Videos ```bash python scripts/get_video_info.py --urls-file videos.txt --output metadata.json ``` ## Output Location All outputs save to `.tmp/youtube/` by default: - Videos: `.tmp/youtube/videos/` - Audio: `.tmp/youtube/audio/` - Transcripts: `.tmp/youtube/transcripts/` - Metadata: `.tmp/youtube/metadata/` ## Cost **FREE** - No API keys, no per-video costs, no subscriptions. ## Security Notes ### Safe by Design - URL validation: Only accepts YouTube URLs (youtube.com, youtu.be) - Filename sanitization: Removes dangerous characters - Output restriction: Only writes to `.tmp/` directory - No shell injection: Uses subprocess with argument lists, not string concatenation - No stored credentials: Cookies only used when explicitly requested ### Copyright Warning - Only download content you have rights to access - Respect YouTube's Terms of Service - Do not redistribute copyrighted content - Use for personal/educational purposes ### Rate Limiting - yt-dlp has built-in rate limiting - For bulk downloads, use `--sleep-interval 5` to avoid throttling - YouTube may temporarily block IPs with excessive requests ## Troubleshooting ### Issue: "Video unavailable" **Cause:** Video is private, age-restricted, or region-locked **Solution:** Use `--cookies-from-browser chrome` for age-restricted content ### Issue: "Unable to extract video data" **Cause:** YouTube changed their page structure **Solution:** Update yt-dlp: `pip install -U yt-dlp` ### Issue: No subtitles found **Cause:** Video has no captions (auto or manual) **Solution:** Use `--list-subs` to see available subtitles first ### Issue: Slow downloads **Cause:** YouTube throttling or network issues **Solution:** Try `--concurrent-fragments 4` for faster downloads ### Issue: Format conversion failed **Cause:** ffmpeg not installed **Solution:** Install ffmpeg (see Environment Setup) ## Integration Patterns ### Download + Transcribe + Summarize ```bash # 1. Download video python scripts/download_video.py "URL" --output-dir .tmp/video # 2. Get transcript python scripts/get_transcript.py "URL" --output .tmp/transcript.txt # 3. Use content-generation to summarize # (transcript file is now ready for summarization) ``` ### Bulk Research Workflow ```bash # 1. Get metadata for research videos python scripts/get_video_info.py --urls-file research_videos.txt --output .tmp/metadata.json # 2. Download transcripts for text analysis python scripts/get_transcript.py --urls-file research_videos.txt --output-dir .tmp/transcripts # 3. Use parallel-research to analyze content ``` ### Course Content Download ```bash # Download entire playlist as course modules python scripts/download_video.py "PLAYLIST_URL" --output-dir .tmp/course --quality 720p # Get all transcripts for notes python scripts/get_transcript.py "PLAYLIST_URL" --output-dir .tmp/course/transcripts ``` ## Resources - **references/yt-dlp-guide.md** - Complete yt-dlp reference with all options - **yt-dlp documentation**: https://github.com/yt-dlp/yt-dlp#readme [View on SkillFed](https://skillfed.io/Casper-Studios/casper-marketplace/youtube-tools) · [View on GitHub](https://github.com/Casper-Studios/casper-marketplace)