uDownloader
A fast, powerful Python application to download YouTube videos or audio. Supports single videos or entire playlists with both CLI and Desktop GUI. Uses yt-dlp for efficiency and modern format handling.
Available as a pip-installable package! Install with pip install udownloader
Features
Core Features
- Download video or audio from YouTube, Instagram, TikTok, Twitter, and more
- Process single content or playlists
- Command-line interface with quality and format options
- Configuration file support with sensible defaults
- Detailed progress reporting during downloads
- Automatic retry logic for failed downloads
- Platform-specific organization (YouTube, Instagram, Twitter, TikTok, etc.)
Desktop Application
- Modern PyQt6 GUI for intuitive downloading
- Async/Concurrent Downloads - download multiple videos simultaneously
- Download History Tracking - view all past downloads with statistics
- Live Progress Monitoring - track active downloads in real-time
- Queue Management - manage multiple downloads at once
- Video Format Selection - choose output container (mp4, mkv, webm) per download
- X/Twitter Support - browser cookie injection for auth-gated content
- Settings Panel - configure quality, format, output, retries, concurrent limits, and cookies
Installation
Option 1: Install via pip (Recommended)
# From PyPI
pip install udownloader
# Or install from source (development mode)
git clone https://github.com/bolablg/uDownloader.git
cd uDownloader
pip install -e .
Option 2: Manual installation from source
git clone https://github.com/bolablg/uDownloader.git
cd uDownloader
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
After installation, you'll have two commands available:
udownloader- CLI versionudownloader-desktop- Desktop GUI version
Technology Stack
| Component | Technology | Purpose |
|---|---|---|
| Language | Python 3.8+ | Core application |
| Video Downloading | yt-dlp 2024.8.2+ | Format detection & download |
| Desktop GUI | PyQt6 6.6.0+ | Modern graphical interface |
| Async Processing | asyncio + ThreadPoolExecutor | Concurrent downloads |
| Configuration | JSON | User settings persistence |
| History Tracking | JSON | Download records database |
| Testing | pytest + pytest-cov | Unit testing & coverage |
| Code Quality | black + flake8 | Formatting & linting |
| Packaging | setuptools + wheel | PyPI distribution |
| CI/CD | GitHub Actions | Automated testing & publishing |
Key Dependencies:
yt-dlp- Video downloading enginePyQt6- Desktop application frameworkpytest- Testing framework (dev only)black- Code formatter (dev only)flake8- Code linter (dev only)
Quick Start
CLI Mode
# Initialize config file (creates ~/.uDownloader/config.json)
udownloader --init-config
# Download best quality video
udownloader --url https://youtube.com/watch?v=VIDEO_ID
# Download as MP3 audio only
udownloader --url https://youtube.com/watch?v=VIDEO_ID --audio
# Download specific quality (best, 1080p, 720p, 480p, 360p)
udownloader --url https://youtube.com/watch?v=VIDEO_ID --quality 720p
# Download in a specific container format (mp4, mkv, webm, original)
udownloader --url https://youtube.com/watch?v=VIDEO_ID --video-format mkv
# Download from X/Twitter using browser cookies for authentication
udownloader --url https://x.com/user/status/POST_ID --cookies-browser chrome
# Download entire playlist to custom location
udownloader --url https://youtube.com/playlist?list=PLAYLIST_ID --output ~/Downloads --retries 5
# Verbose logging for debugging
udownloader --url https://youtube.com/watch?v=VIDEO_ID --verbose
Desktop Application
# Launch desktop app (from installed package)
udownloader-desktop
# Or if running from source directory
python launcher_desktop.py
On first launch, uDownloader automatically registers itself as a native desktop application:
- macOS: Installs to
/Applications— available in Launchpad and Spotlight - Linux: Creates a
.desktopentry — appears in your application menu - Windows: Adds a Start Menu shortcut
After the first launch, you can open uDownloader directly from your OS like any other app.
Features in Desktop App:
- Download Tab: Paste URLs and start downloads with quality and format selection
- Queue Tab: Monitor active downloads in real-time
- History Tab: View all previous downloads with details
- Statistics Tab: See download stats by platform and overall success rate
- Settings: Configure output directory, quality, video format, concurrent limits, retry attempts, and browser cookies for X/Twitter
Screenshots
Configuration
The configuration file is automatically created at ~/.uDownloader/config.json when you run --init-config.
Default Settings:
{
"output_dir": "uDownload",
"audio_only": false,
"video_quality": "best",
"audio_quality": "192",
"format_preference": "mp4",
"max_concurrent_downloads": 1,
"timeout": 300,
"retries": 3,
"verbose": false
}
You can edit this file directly to change defaults, or override with command-line arguments (CLI) or settings dialog (Desktop app).
Command-line Options
--url URL, -u URL YouTube video or playlist URL (required for downloads)
--output OUTPUT, -o OUTPUT Directory to save downloads (default: config or 'uDownload')
--audio, -a Download audio only (mp3)
--quality {best,1080p,720p,480p,360p} Video quality preference
--config CONFIG, -c CONFIG Path to custom config file
--init-config Create default config file and exit
--retries RETRIES, -r RETRIES Number of retries on failure (default: 3)
--verbose, -v Show detailed logging
--help, -h Show help message
Architecture
Modules
cli.py- Command-line interfacedownloader.py- Single download handlerasync_downloader.py- Async/concurrent download managerdesktop.py- PyQt6 desktop GUI applicationhistory.py- Download history tracking and statisticsconfig.py- Configuration management
Key Features in Code
AsyncDownloaderclass handles concurrent downloads using ThreadPoolExecutorDownloadHistoryclass manages download records in JSON formatuDownloaderAppis the main desktop application with multi-tab interfaceDownloadWorkerruns downloads in separate thread to keep UI responsive
Documentation
Comprehensive documentation is available in the docs folder:
- Installation Guide - Platform-specific installation instructions
- Quick Reference - Commands, workflows, and FAQ
- Contributing Guide - Development setup and contribution guidelines
- CI/CD Setup - GitHub Actions and testing infrastructure
- Changelog - Version history and planned features
- Security Policy - Vulnerability reporting and security practices
License
uDownloader is licensed under the MIT License - see LICENSE file for details.
Made with ❤️ for video downloaders everywhere
Metadata
Release files for uDownloader 0.2.5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| udownloader-0.2.5.tar.gz | 376.9 kB | Without provenance | Details for udownloader-0.2.5.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| udownloader-0.2.5-py3-none-any.whl | Python 3 | none | any | Details for udownloader-0.2.5-py3-none-any.whl |
Total release size: 749.1 kB
Release files / udownloader-0.2.5.tar.gz
| Download URL | udownloader-0.2.5.tar.gz |
|---|---|
| Size | 376.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f569e9f8e1df6eccee1a9330e483b4dae534d26f355482ec23c9daf4d628d424
|
|
BLAKE2b-256 checksum How to use checksums |
5d5446868ba440b8a0f6bb00f0c6364cbb51761dff423ae8a9930cfb280440a5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.13
|
Release files / udownloader-0.2.5-py3-none-any.whl
| Download URL | udownloader-0.2.5-py3-none-any.whl |
|---|---|
| Size | 372.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
140e9a033a8b516408d7cee9909d986c18c57b057b157268522723f9eb01afc4
|
|
BLAKE2b-256 checksum How to use checksums |
9ca6752154c8b0d12f6466131cf75399e8b409d3b299c10aa916c124405d6ac7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.13
|
Security for uDownloader 0.2.5
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.