A cross-platform GUI application for downloading videos from YouTube, Vimeo, Twitter/X, Reddit, and 1800+ sites using yt-dlp.
Works on Windows, Linux, and macOS.
- Bulk download — Add multiple URLs and download them all in one click
- 7 download modes — Best quality, audio-only (MP3/native), video-only, 720p/1080p/4K caps
- Per-URL progress — See real-time download percentage for each URL
- Overall progress bar — Track how many URLs have been processed
- Color-coded status — Green (done), red (failed), yellow (downloading)
- Live output log — See yt-dlp output in real-time with color-coded messages
- Auto-retry — Failed downloads retry automatically (configurable attempts)
- Download archive — Skip already-downloaded videos on re-runs
- URL deduplication — Duplicate URLs are detected and skipped
- Import from file — Load URLs from a text file (supports comments with
#) - Paste from clipboard — Paste multiple URLs at once
- Configurable settings — Rate limit, proxy, subtitle language, container format, and more
- Settings persistence — All settings saved to
config.json - Update yt-dlp — One-click update button built in
- Save logs — Export the output log to a file
- Native UI — Uses system theme (Windows native on Windows, clean look on Linux/macOS)
| Tool | Version | Purpose |
|---|---|---|
| Python | 3.8+ | Runtime |
| yt-dlp | Latest | Video downloading engine |
| ffmpeg | Latest | Merging video+audio, post-processing |
| ffprobe | Latest | Media info (usually comes with ffmpeg) |
- Windows: Download from python.org — check "Add to PATH" during install
- Linux: Usually pre-installed. If not:
sudo apt install python3 python3-tk - macOS:
brew install pythonor download from python.org
pip install yt-dlpOr with pipx (recommended for isolation):
pipx install yt-dlp- Windows: Download from ffmpeg.org or use:
winget install ffmpeg - Linux:
sudo apt install ffmpeg
- macOS:
brew install ffmpeg
Most systems have it pre-installed. If you get a ModuleNotFoundError:
sudo apt install python3-tk# Linux / macOS
python3 bulk_video_downloader.py
# Windows
python bulk_video_downloader.pyYou have 3 ways to add URLs:
- + Add URL — Type or paste a single URL
- Paste URLs — Paste multiple URLs from your clipboard (one per line)
- Import File — Load URLs from a
.txtfile
# My video list (lines starting with # are comments)
https://www.youtube.com/watch?v=dQw4w9WgXcQ
https://vimeo.com/123456789
https://twitter.com/user/status/123456789
# JSON array format is also supported:
[
"https://www.youtube.com/watch?v=abc123",
"https://www.youtube.com/watch?v=def456"
]
- Add your URLs
- Select a Mode (download quality/format)
- Choose an Output folder (defaults to
./downloads) - Click Start Download
- Watch the progress in the URL list and Live Output panel
| Mode | Description |
|---|---|
| Best video + audio | Highest quality video + audio merged (default) |
| Audio only (MP3) | Extracts audio and converts to MP3 (320kbps) |
| Audio only (native codec) | Keeps original audio codec (opus/m4a), no re-encoding |
| Video only (no audio) | Downloads video stream only |
| 720p max | Best quality up to 720p |
| 1080p max | Best quality up to 1080p |
| 4K max | Best quality up to 2160p |
Click the Settings tab to configure. Settings are saved to config.json when you click "Save Settings".
| Setting | Description | Default |
|---|---|---|
| Retries | Number of retry attempts per URL on failure | 3 |
| Rate limit | Bandwidth cap (e.g. 5M = 5 MB/s, 500K = 500 KB/s) |
unlimited |
| Container format | Output format for merged video (mp4, mkv, webm) | mp4 |
| Setting | Description | Default |
|---|---|---|
| Proxy | HTTP/SOCKS proxy (e.g. socks5://127.0.0.1:1080) |
none |
| Setting | Description | Default |
|---|---|---|
| Embed subtitles | Download and embed subtitles into the file | On |
| Subtitle languages | Language codes (e.g. en, en,es,fr) |
en |
| Embed thumbnail | Embed video thumbnail as cover art | On |
| Embed metadata | Embed title, artist, date, etc. | On |
| Embed chapters | Embed video chapters if available | On |
| Setting | Description | Default |
|---|---|---|
| Use download archive | Track downloaded IDs to skip on re-runs | On |
| Single video only | Ignore playlists, download single video | On |
| Setting | Description | Default |
|---|---|---|
| Extra yt-dlp arguments | Any additional yt-dlp flags (space-separated) | empty |
| File | Purpose |
|---|---|
config.json |
Your saved settings |
download_archive.txt |
List of already-downloaded video IDs (prevents re-downloading) |
downloads/ |
Default output folder for downloaded videos |
- Export cookies from your browser using a browser extension (e.g. "Get cookies.txt LOCALLY")
- Save as
cookies.txtin the same folder - In Settings > Advanced > Extra yt-dlp arguments, add:
--cookies cookies.txt
Add to Extra yt-dlp arguments:
--geo-bypass
Change "Subtitle languages" in Settings to:
en,es,fr,ja
This downloads English, Spanish, French, and Japanese subtitles.
- Uncheck "Single video only (no playlists)" in Settings
- Paste the playlist URL
Set the proxy in Settings > Network:
socks5://127.0.0.1:1080
http://user:pass@proxy.example.com:8080
Set rate limit in Settings > Download:
5M → 5 megabytes/second
500K → 500 kilobytes/second
2.5M → 2.5 megabytes/second
Make sure yt-dlp is installed and in your PATH:
pip install yt-dlp
yt-dlp --versionInstall ffmpeg and ensure it's in your PATH:
ffmpeg -versionTry updating yt-dlp (click "Update yt-dlp" button) or use cookies.
sudo apt install python3-tkThe app uses native system theme. On Linux it uses the "clam" ttk theme which provides a clean cross-platform appearance.
Click the "Update yt-dlp" button in the Downloads tab, or run manually:
pip install -U yt-dlpKeep yt-dlp updated — sites frequently change their APIs.
yt-dlp supports 1800+ sites including:
- YouTube (videos, shorts, playlists, channels)
- Vimeo
- Twitter/X
- TikTok
- Twitch (VODs, clips)
- Dailymotion
- SoundCloud
- Bandcamp
- And many more...
Full list: yt-dlp supported sites
This project is provided as-is for personal use. Please respect copyright laws and the terms of service of the websites you download from.