snagvid (vdl)
Download videos from YouTube, X/Twitter, Instagram, Facebook, or almost any website — straight from your terminal, no browser extensions, no sketchy websites.
Features
- 🧙 Interactive CLI Wizard: Simply type
vdlto get guided prompts for URL, resolution, and output folder. - 📊 Smart Resolution & Size Detection: Shows available resolutions with accurate combined video + audio download size estimates.
- 🎵 Audio Extraction: Easily extract high-quality audio tracks (e.g. MP3) directly.
- 🎨 Clean Live Progress: Real-time progress display with speed, ETA, and spinner animations powered by
rich. - 🌐 1800+ Supported Sites: Powered by
yt-dlpfor unmatched platform compatibility. - ⚡ Scripting Ready: Pass URLs and flags directly (
vdl "<url>" -q 720p) for automation. - 🛡️ Long Title Protection: Automatic title truncation and ID tagging to prevent filesystem errors on long post captions.
Prerequisites
- Python: 3.9 or higher
- FFmpeg: Required for stream merging and audio extraction.
- Linux:
sudo apt install ffmpeg/sudo pacman -S ffmpeg - macOS:
brew install ffmpeg
- Linux:
Installation
pip install snagvid
# or with pipx for isolated global installation:
pipx install snagvid
Local Development Install
git clone https://github.com/WaqasAhmad313/snagvid.git
cd snagvid
python3 -m venv .venv
source .venv/bin/activate
pip install -e .
Usage
Interactive Mode (Recommended)
Run vdl with no arguments to start the interactive wizard:
vdl
Direct / Scripted Usage
Pass arguments directly to bypass the interactive prompts:
# Direct download best quality
vdl "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
# Download audio-only (MP3)
vdl "https://www.youtube.com/watch?v=dQw4w9WgXcQ" --audio
# Download specific quality to custom directory
vdl "https://www.youtube.com/watch?v=dQw4w9WgXcQ" -q 720p -o ~/Videos
Configuration (~/.vdlrc)
You can save your default preferences in ~/.vdlrc (INI format):
[defaults]
output = ~/Videos
quality = 1080p
audio_format = mp3
retries = 5
Supported Sites
vdl inherits complete extractor support from yt-dlp, covering 1800+ websites including YouTube, X/Twitter, Instagram, Facebook, TikTok, Twitch, Reddit, Vimeo, and SoundCloud.
For a full list of supported extractors, see the yt-dlp supported sites documentation.
Responsible Use
This tool is intended for downloading content you own, have explicit permission to use, or that is otherwise legally accessible to you — e.g. personal backups, offline access to your own posts, content licensed for reuse. Respect the terms of service of the platform you're downloading from and applicable copyright law. The maintainers are not responsible for misuse.
Contributing
Contributions are welcome!
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
License
Distributed under the MIT License. See LICENSE for details.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file snagvid-0.1.0.tar.gz.
File metadata
- Download URL: snagvid-0.1.0.tar.gz
- Upload date:
- Size: 14.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c0623d1c52226bccc6a81a321da8037dae970f00bb6c36cff2adc68d579b7c4d
|
|
| MD5 |
042514880eb7f7f6c621b0c0d9c934c2
|
|
| BLAKE2b-256 |
cc45eac4b602285258435adef70c9c2bf900514f73af05dc1bb3cd598f2453df
|
Provenance
The following attestation bundles were made for snagvid-0.1.0.tar.gz:
Publisher:
publish.yml on WaqasAhmad313/snagvid
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
snagvid-0.1.0.tar.gz -
Subject digest:
c0623d1c52226bccc6a81a321da8037dae970f00bb6c36cff2adc68d579b7c4d - Sigstore transparency entry: 2597268193
- Sigstore integration time:
-
Permalink:
WaqasAhmad313/snagvid@9b6f5da184d3acccad86a469134c5c9e8ebfd6d3 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/WaqasAhmad313
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@9b6f5da184d3acccad86a469134c5c9e8ebfd6d3 -
Trigger Event:
release
-
Statement type:
File details
Details for the file snagvid-0.1.0-py3-none-any.whl.
File metadata
- Download URL: snagvid-0.1.0-py3-none-any.whl
- Upload date:
- Size: 14.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dac6ba858f9abb3e164655d1172637d3c7b44583658762f1d3bbf1bfbcde3f11
|
|
| MD5 |
64443936b2cac88f8a1cc15b814e0dce
|
|
| BLAKE2b-256 |
cb5ce80775cca80ec779681fc8583530d00f881e20ed9add5aaa70f938c1c394
|
Provenance
The following attestation bundles were made for snagvid-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on WaqasAhmad313/snagvid
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
snagvid-0.1.0-py3-none-any.whl -
Subject digest:
dac6ba858f9abb3e164655d1172637d3c7b44583658762f1d3bbf1bfbcde3f11 - Sigstore transparency entry: 2597268699
- Sigstore integration time:
-
Permalink:
WaqasAhmad313/snagvid@9b6f5da184d3acccad86a469134c5c9e8ebfd6d3 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/WaqasAhmad313
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@9b6f5da184d3acccad86a469134c5c9e8ebfd6d3 -
Trigger Event:
release
-
Statement type: