Casper-Studios

youtube-tools

Free YouTube video downloading, transcript extraction, and metadata retrieval using yt-dlp. Use this skill for downloading YouTube videos (single or bulk), extracting transcripts/subtitles, getting video metadata, or downloading audio-only. This is FREE (no API keys) unlike Apify. Triggers on YouTube download requests, transcript extraction, video metadata, or bulk video downloads.

Casper-Studios 14 4 Updated 8mo ago

Resources

2
GitHub

Install

npx skillscat add casper-studios/casper-marketplace/youtube-tools

Install via the SkillsCat registry.

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

# 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

python scripts/download_video.py "https://www.youtube.com/watch?v=VIDEO_ID"

Download with Specific Quality

python scripts/download_video.py "https://youtu.be/VIDEO_ID" --quality 1080p

Download Audio Only (MP3)

python scripts/download_video.py "https://youtube.com/watch?v=VIDEO_ID" --audio-only

Download Entire Playlist

python scripts/download_video.py "https://youtube.com/playlist?list=PLAYLIST_ID" --output-dir ./videos

Bulk Download from File

# Create urls.txt with one URL per line
python scripts/download_video.py --urls-file urls.txt --output-dir ./downloads

Get Transcript

python scripts/get_transcript.py "https://youtube.com/watch?v=VIDEO_ID"

Get Transcript in Specific Language

python scripts/get_transcript.py "https://youtu.be/VIDEO_ID" --lang es

Get Video Metadata

python scripts/get_video_info.py "https://youtube.com/watch?v=VIDEO_ID"

Get Metadata for Multiple Videos

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

# 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

# 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

# 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