vdl
A fast, interactive terminal video downloader
Download videos from YouTube, TikTok, Instagram, Twitter, and Spotify from your terminal — with interactive search, quality selection, metadata preview, and real-time progress bars.
Features
- Interactive search — search YouTube by keyword and pick from results with arrow keys, no URL needed
- Quality control — choose 1080p, 720p, 480p, audio-only, or video-only per download
- Metadata preview — see title, uploader, duration, and views before committing to a download
- Real-time progress — animated spinner and byte-level progress bar for every download
- Five platforms — YouTube, TikTok, Instagram, Twitter/X, and Spotify in one tool
- Sandboxed binaries — yt-dlp and ffmpeg are stored in
~/.local/share/vdl/binsand never touch your system PATH - Zero config to start — sensible defaults, with a YAML config file for everything customisable
Installation
That's it. On first run, vdl creates a config file at
~/.config/vdl/config.yaml. The first download or update command then
downloads yt-dlp and ffmpeg automatically into
~/.local/share/vdl/bins/.
On Termux, vdl auto-detects the environment, applies the certificate
bundle path for HTTPS downloads, and falls back to plain progress lines
instead of animated spinners.
Prerequisites: Rust 1.75 or newer. Install from https://rustup.rs.
Quick Start
# Download a YouTube video at 1080p
# Search YouTube interactively — no URL needed
# Audio only (saves as .mp3)
# Download from TikTok
# Download from Twitter/X
# Download from Instagram
# Download audio from Spotify
# Skip the confirmation prompt
Commands
| Command | Alias | Description |
|---|---|---|
vdl yt |
youtube |
Download from YouTube |
vdl tk |
tiktok |
Download from TikTok |
vdl ig |
instagram |
Download from Instagram |
vdl tw |
twitter |
Download from Twitter/X |
vdl sp |
spotify |
Download audio from Spotify |
vdl update |
— | Update sandboxed yt-dlp and ffmpeg |
vdl config |
— | Show config file path and contents |
Flags (yt, tk, ig, tw)
| Flag | Short | Description |
|---|---|---|
--url <URL> |
-u |
Direct URL to download |
--search <QUERY> |
-s |
Search and select interactively (YouTube only) |
--quality <Q> |
-q |
best | 1080 | 720 | 480 | 360 | worst |
--audio-only |
-a |
Download audio stream only (.mp3) |
--video-only |
-v |
Download video stream only (no audio) |
--format <FMT> |
-f |
mp4 | mkv | webm | mp3 | m4a | opus |
--output <PATH> |
-o |
Override output directory for this run |
--yes |
-y |
Skip the confirmation prompt |
Configuration
The config file lives at ~/.config/vdl/config.yaml.
Run vdl config to see the current path and contents.
# Where downloaded files are saved
download_path: ~/Downloads/vdl
# Default container format: mp4 | mkv | webm | mp3 | m4a | opus
default_format: mp4
# Default video quality: best | 1080 | 720 | 480 | 360 | worst
default_video_quality: 1080
# Per-platform quality overrides
platform_quality:
youtube: 1080
tiktok: 720
instagram: 720
twitter: 720
spotify: best
# Path where yt-dlp and ffmpeg are stored (sandboxed)
bins_dir: ~/.local/share/vdl/bins
# Optional Netscape cookies file for authenticated downloads
cookies_file: null
# Optional browser to import cookies from: chrome | firefox | brave | edge
cookies_from_browser: null
# Show metadata and prompt before every download
confirm_before_download: true
# Number of search results to display
search_results_count: 8
# Auto-detected on Android / Termux
termux_mode: false
# Forced on automatically when termux_mode is true
no_progress: false
For Instagram, Spotify, and login-gated YouTube videos, set either
cookies_file or cookies_from_browser before downloading.
License
Copyright (C) 2026 oraclevs
Licensed under the GNU General Public License v3.0 or later. See LICENSE for details.
This project uses yt-dlp and ffmpeg, which are downloaded automatically and stored in a local sandbox directory.