youtube-transcript
Download YouTube video transcripts when user provides a YouTube URL or asks to download/get/fetch a transcript from YouTube. Also use when user wants to transcribe or get captions/subtitles from a YouTube video.
By michalparkola · 802 installs
npx skills add michalparkola/tapestry-skills --skill youtube-transcript
Source repository · Upstream listing
YouTube Transcript Downloader
This skill helps download transcripts (subtitles/captions) from YouTube videos using yt dlp.
When to Use This Skill
Activate this skill when the user:
Provides a YouTube URL and wants the transcript
Asks to "download transcript from YouTube"
Wants to "get captions" or "get subtitles" from a video
Asks to "transcribe a YouTube video"
Needs text content from a YouTube video
How It Works
Priority Order:
1. Check if yt dlp is installed install if needed
2. List available subtitles see what's actually available
3. Try manual subtitles first ( write sub ) highest quality
4. Fallback to auto generated ( write auto sub ) usually available
5. Last resort: Whisper transcription if no subtitles exist (requires user confirmation)
6. Confirm the download and show the user where the file is saved
7. Optionally clean up the VTT format if the user wants plain text
Installation Check
IMPORTANT : Always check if yt dlp is installed first:
If Not Installed
Attempt automatic installation based on the system:
macOS (Homebrew) :
Linux (apt/Debian/Ubuntu) :
Alternative (pip works on all systems) :
If installation fails : Inform the user they need to install yt dlp manually and provide them with installation instructions from https://github.com/yt dlp/yt dlp installation
Check Available Subtitles
ALWAYS do this first before attempting to download:
This shows what subtitle types are available without downloading anything. Look for:
Manual subtitles (better quality)
Auto generated subtitles (usually available)
Available languages
Download Strategy
Option 1: Manual Subtitles (Preferred)
Try this first highest quality, human created:
Option 2: Auto Generated Subtitles (Fallback)
If manual subtitles aren't available:
Both commands create a .vtt file (WebVTT subtitle format).
Option 3: Whisper Transcription (Last Resort)
ONLY use this if both manual and auto generated subtitles are unavailable.
Step 1: Show File Size and Ask for Confirmation
IMPORTANT : Display the file size to the user and ask: "No subtitles are available. I can download the audio (approximately X MB) and transcribe it using Whisper. Would you like to proceed?"
Wait for user confirmation before continuing.
Step 2: Check for Whisper Installation
If not installed, ask user: "Whisper is not installed. Install it with pip install openai whisper (requires ~1 3GB for models)? This is a one time installation."
Wait for user confirmation before installing.
Install if approved:
Step 3: Download Audio Only
Step 4: Transcribe with Whisper
Model Options (stick to base for now):
tiny fastest, least accurate (~1GB)
base good balance (~1GB) ← USE THIS
small better accuracy (~2GB)
medium very good (~5GB)
large best accuracy (~10GB)
Step 5: Cleanup
After transcription completes, ask user: "Transcription complete! Would you like me to delete the audio file to save space?"
If yes:
Getting Video Information
Extract Video Title (for filename)
Use this to create meaningful filenames based on the video title. Clean the title for filesystem compatibility:
Replace / with
Replace special characters that might cause issues
Consider using sanitized version: $(yt dlp print "%(title)s" "URL" tr '/' ' ' tr ':' ' ')
Post Processing
Convert to Plain Text (Recommended)
YouTube's auto generated VTT files contain duplicate lines because captions are shown progressively with overlapping timestamps. Always deduplicate when converting to plain text while preserving the original speaking order.
Complete Post Processing with Video Title
Output Formats
VTT format ( .vtt ): Includes timestamps and formatting, good for video players
Plain text ( .txt ): Just the text content, good for reading or analysis
Tips
The filename will be {output name}.{language code}.vtt (e.g., transcript.en.vtt )
Most YouTube videos have auto generated English subtitles
Some videos may have multiple language options
If auto subtitles aren't available, try write sub instead for manual subtitles
Complete Workflow Example
Note : This complete workflow handles all scenarios with proper error checking and user prompts at each decision point.
Error Handling
Common Issues and Solutions:
1. yt dlp not installed
Attempt automatic installation based on system (Homebrew/apt/pip)
If installation fails, provide manual installation link
Verify installation before proceeding
2. No subtitles available
List available subtitles first to confirm
Try both write sub and write auto sub
If both fail, offer Whisper transcription option
Show file size and ask for user confirmation before downloading audio
3. Invalid or private video
Check if URL is correct format: https://www.youtube.com/watch?v=VIDEO ID
Some videos may be private, age restricted, or geo blocked
Inform user of the specific error from yt dlp
4. Whisper installation fails
May require system dependencies (ffmpeg, rust)
Provide fallback: "Install manually with: pip3 install openai whisper "
Check available disk space (models require 1 10GB depending on size)
5. Download interrupted or failed
Check internet connection
Verify sufficient disk space
Try again with no check certificate if SSL issues occur
6. Multiple subtitle languages
By default, yt dlp downloads all available languages
Can specify with sub langs en for English only
List available with list subs first
Best Practices:
✅ Always check what's available before attempting download ( list subs )
✅ Verify success at each step before proceeding to next
✅ Ask user before large downloads (audio files, Whisper models)
✅ Clean up temporary files after processing
✅ Provide clear feedback about what's happening at each stage
✅ Handle errors gracefully with helpful messages