Fast, async YouTube/Instagram/TikTok downloader with desktop GUI and CLI
Project description
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
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 ❤️ with CodeX 5.3 for video downloaders everywhere
Project details
Release history Release notifications | RSS feed
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 udownloader-0.1.4.tar.gz.
File metadata
- Download URL: udownloader-0.1.4.tar.gz
- Upload date:
- Size: 19.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8296453acabf0f38cac298ceb29d6eee9bb804fe9196c80b86dbd86a3729325f
|
|
| MD5 |
335f9896ea25363b16c5f92bc47b07fb
|
|
| BLAKE2b-256 |
e0bdb689c448d0e1865b4311f60f4a0de6220d015c38a12683f23bb1362248a1
|
File details
Details for the file udownloader-0.1.4-py3-none-any.whl.
File metadata
- Download URL: udownloader-0.1.4-py3-none-any.whl
- Upload date:
- Size: 20.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f9ba5e9f82b9161a79014d48ef34315aef05c9b936eeb71ba98516f44934a275
|
|
| MD5 |
7e2d1b1ac2bf393ad40899acf43f832d
|
|
| BLAKE2b-256 |
7684b66f51a7ecf71b8d1d45bf5d5ae08923ede5484fea98e7e25d85c6352394
|