A native desktop media downloader built with PyQt6 and yt-dlp. Hacker-terminal themed GUI focused on music extraction with full video download support.
- 5 audio formats: MP3, FLAC (lossless), WAV, OGG, M4A
- 4 bitrate options: 320kbps, 256kbps, 192kbps, 128kbps
- Batch downloads: Paste multiple URLs for bulk extraction
- Playlist support: Download entire playlists as individual tracks
- Quality selection: 360p, 480p, 720p, 1080p, 1440p, 4K (2160p)
- Best available: Auto-select highest quality option
- MP4 output: Merged video+audio in MP4 container
- Multiple concurrent downloads (configurable 1-10)
- Real-time progress: Per-item speed, ETA, and progress bar
- Cancel individual items or cancel all at once
- Clear completed downloads from the queue
- Hacker/terminal theme: Green-on-black monospace aesthetic
- 3-tab layout: Download, Queue, Settings
- Keyboard shortcuts: Ctrl+V (paste+scan), Ctrl+D (download), Ctrl+Q (quit)
- Batch mode: Paste multiple URLs, one per line
- URL scanning: Preview metadata before downloading
YTDownload/
├── main.py # Application entry point
├── requirements.txt # Python dependencies
├── pyproject.toml # Project config + pytest settings
├── src/
│ ├── app.py # QApplication setup and theme application
│ ├── main_window.py # Main window with tabs and all UI
│ ├── download_engine.py # Core yt-dlp wrapper (formats, options, execution)
│ ├── download_manager.py # Queue manager with concurrency control
│ ├── widgets.py # Custom widgets (download items, stats bar)
│ └── theme.py # Hacker-style dark theme stylesheet
├── tests/
│ ├── conftest.py # Shared fixtures (offscreen Qt platform)
│ ├── test_download_engine.py # 60 tests: formats, options, progress, downloads
│ ├── test_download_manager.py # 27 tests: queue, batch, cancel, concurrency
│ ├── test_widgets.py # 28 tests: formatting, widget state, signals
│ └── test_main_window.py # 29 tests: UI, fetching, downloads, shortcuts
└── backend/ # (Legacy web app - retained for reference)
- Python 3.10+
- FFmpeg (for audio extraction)
# Install dependencies
pip install -r requirements.txt
# Run the application
python main.py# Run all 164 tests
QT_QPA_PLATFORM=offscreen python -m pytest tests/ -v- Launch with
python main.py - Paste a YouTube URL in the target field
- Click SCAN to preview metadata
- Select format (Audio/Video) and quality/bitrate
- Click START DOWNLOAD
- Monitor progress in the QUEUE tab
- Files save to
~/YTDownloads/(configurable in Settings)
Click + BATCH MODE to paste multiple URLs (one per line) for bulk downloads.
| Key | Action |
|---|---|
| Ctrl+V | Paste URL and auto-scan |
| Ctrl+D | Start download |
| Ctrl+Q | Quit application |
Powered by yt-dlp, supporting 1000+ sites including YouTube, SoundCloud, Bandcamp, Vimeo, and more.
This project is provided for educational purposes. Please respect content creators' rights and applicable copyright laws.
Disclaimer: This tool is for personal use only. Users are responsible for ensuring they have the right to download any content.