Video Downloader
Download single videos from user-provided URLs with predictable quality, format, and output paths.
Setup
On first use, read setup.md for integration guidelines.
When to Use
Use this skill when the user asks to download a video or extract audio from a video URL. It is optimized for one-off downloads with explicit quality and format requirements.
Architecture
Memory lives in ~/video-downloader/. See memory-template.md for structure.
~/video-downloader/
├── memory.md # Status + user preferences
├── downloads-log.md # Optional history of completed downloads
└── failed-downloads.md # Optional retries and failure reasons
Quick Reference
Load only what you need to keep context small during execution.
| Topic | File |
|---|---|
| Setup flow | setup.md |
| Memory template | memory-template.md |
| Command recipes | commands.md |
| Download script | download_video.py |
Core Rules
1. Confirm Rights and Target First
- Ask for the exact URL and intended use when unclear.
- If the request implies unauthorized copying, refuse and suggest legal alternatives.
2. Inspect Metadata Before Downloading
- Run metadata check first to confirm title, duration, and available formats.
- If metadata fetch fails, stop and report the exact error instead of retrying blindly.
3. Match Quality to User Intent
- Use
bestwhen user says "highest quality". - Use capped quality (
1080p,720p, etc.) for smaller files or device limits. - Use audio-only mode only when they explicitly want audio extraction.
4. Use Deterministic Output Names
- Save files as
%(title)s [%(id)s].%(ext)sto reduce collisions. - Keep downloads in a user-approved directory and never write outside it.
5. Prefer the Local Wrapper Script
- Use
python3 download_video.py "<url>" ...for consistent behavior. - Fall back to raw
yt-dlpcommands only if the user asks for custom flags not covered by the script.
6. Verify Output Before Declaring Success
- Confirm file exists, extension matches request, and size is non-zero.
- For audio-only downloads, confirm output is
.mp3.
Common Traps
- Downloading playlists accidentally -> use
--no-playlistby default. - Choosing
bestfor limited storage -> oversized files and slow transfers. - Re-trying blocked URLs repeatedly -> temporary ban risk and no progress.
- Saving with title only -> filename collisions across similar uploads.
- Skipping metadata check -> wrong media downloaded from redirected links.
External Endpoints
The downloader only contacts domains implied by the user-provided URL.
| Endpoint | Data Sent | Purpose |
|---|---|---|
User-provided video host URL domains (via yt-dlp) | Requested media URL and standard downloader headers | Fetch metadata and media streams |
No other data is sent externally.
Security & Privacy
Data that leaves your machine:
- Only the target media URL and standard downloader request headers sent by
yt-dlp.
Data that stays local:
- Downloaded files in the selected output folder.
- Optional memory notes under
~/video-downloader/.
This skill does NOT:
- Store credentials in plain text.
- Access files outside user-approved output paths.
- Download playlists unless the user explicitly asks.
- Make undeclared network requests outside the target media host.
Trust
By using this skill, requests are sent to the video host domains behind the provided URL. Only install if you trust those services with your request metadata.
Related Skills
Install with clawhub install <slug> if user confirms:
video— video processing workflowsffmpeg— codec conversion tasksaudio— audio cleanup workflowsyoutube-video-transcript— transcript extraction
Feedback
- If useful:
clawhub star video-downloader - Stay updated:
clawhub sync