Skip to main content

uDownloader

uDownloader Logo

Python 3.9+ Version 0.2.4 License MIT GitHub CI/CD

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

# 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 version
  • udownloader-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 engine
  • PyQt6 - Desktop application framework
  • pytest - 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 .desktop entry — 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

uDownloader GUI uDownloader Settings

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 interface
  • downloader.py - Single download handler
  • async_downloader.py - Async/concurrent download manager
  • desktop.py - PyQt6 desktop GUI application
  • history.py - Download history tracking and statistics
  • config.py - Configuration management

Key Features in Code

  • AsyncDownloader class handles concurrent downloads using ThreadPoolExecutor
  • DownloadHistory class manages download records in JSON format
  • uDownloaderApp is the main desktop application with multi-tab interface
  • DownloadWorker runs downloads in separate thread to keep UI responsive

Documentation

Comprehensive documentation is available in the docs folder:

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)

Source distribution for uDownloader 0.2.5
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)

Table of built distributions (wheels) for uDownloader 0.2.5
File Interpreter ABI Platform Actions
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.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page