Unified Local Downloader - A single CLI for torrents, magnet links, videos, and direct downloads
Project description
ULD - Unified Local Downloader
A single CLI tool for downloading content from multiple sources: torrents, magnet links, video platforms, and direct URLs.
Why ULD?
I got tired of switching between different tools every time I needed to download something:
- Need a YouTube video? Fire up
yt-dlpwith its flags - Downloading a torrent? Open
qBittorrentor uselibtorrent - Just a zip file? Back to
wgetorcurl - An ISO from a mirror? Different command again
Each tool has its own syntax, options, and quirks to remember. I wanted one command that just works for everything.
So I built ULD - paste any URL, and it figures out the rest.
| Before | After |
|---|---|
yt-dlp "https://youtube.com/..." |
uld <url> |
qbittorrent magnet:?xt=... |
uld <url> |
wget https://example.com/file.zip |
uld <url> |
curl -O https://... |
uld <url> |
ULD auto-detects the URL type and uses the right engine automatically.
Installation
pip install uld-cli
That's it! Both video (yt-dlp) and torrent (libtorrent) support are included.
Using uv (faster):
uv add uld-cli
Quick Start
Step 1: Download anything
# YouTube video
uld "https://youtube.com/watch?v=dQw4w9WgXcQ"
# Magnet link
uld "magnet:?xt=urn:btih:..."
# Torrent file
uld ./ubuntu-24.04.torrent
Step 2: Watch the progress
Press q or Ctrl+C to stop or exit
⠋ Downloading [████████████░░░░░░░░] 60% 125.0 MB 5.2 MB/s 0:02:30
Step 3: Done!
✓ Download complete! Saved to: ~/Downloads/video.mp4
Downloaded: 208.5 MB | Duration: 1m 23s | Avg speed: 2.5 MB/s
Usage Examples
Videos
# Best quality (default)
uld "https://youtube.com/watch?v=..."
# Specific quality
uld "https://youtube.com/watch?v=..." -Q 720p
# Download entire playlist
uld "https://youtube.com/playlist?list=..."
# Just get info (no download)
uld info "https://youtube.com/watch?v=..."
Playlist Progress:
✓ [1/5] First Video Title 45.2 MB
✓ [2/5] Second Video Title 32.1 MB
⠋ [3/5] Third Video Title [████████░░░░] 45% 5.2 MB/s
Resume Support: If you stop a playlist download (q or Ctrl+C) and run the same command again, it automatically skips already downloaded videos and continues from where it left off.
Torrents
# Magnet link
uld "magnet:?xt=urn:btih:..."
# Torrent file
uld ./file.torrent
# Download without seeding
uld "magnet:..." --no-seed
# Custom seed ratio
uld "magnet:..." --seed-ratio 2.0
# Just get torrent info
uld info "magnet:?xt=urn:btih:..."
Output Options
# Custom output directory
uld "https://youtube.com/watch?v=..." -o ~/Videos
# Quiet mode (errors only)
uld "magnet:..." -q
# Verbose mode (debug info)
uld "magnet:..." -v
Commands Reference
| Command | Description |
|---|---|
uld <url> |
Download from URL (auto-detects type) |
uld download <url> |
Same as above (explicit) |
uld info <url> |
Show metadata without downloading |
uld engines |
List available engines and status |
uld config |
Show current configuration |
uld --help |
Show help |
Download Options
| Option | Short | Description |
|---|---|---|
--output |
-o |
Output directory |
--quality |
-Q |
Video quality (best, 1080p, 720p, 480p, 360p, worst) |
--playlist |
-P |
Force playlist download |
--seed-ratio |
-r |
Torrent seed ratio (default: 1.0) |
--no-seed |
Don't seed after torrent download | |
--quiet |
-q |
Minimal output |
--verbose |
-v |
Verbose output |
Controls
While downloading, you can:
| Key | Action |
|---|---|
q |
Stop download and exit |
Ctrl+C |
Stop download and exit |
Configuration
Set defaults via environment variables:
# Default download directory
export ULD_DOWNLOAD_DIR=~/Downloads/uld
# Default seed ratio (0 = no seeding)
export ULD_SEED_RATIO=1.0
# Rate limits in KB/s
export ULD_DOWNLOAD_RATE_LIMIT=1000
export ULD_UPLOAD_RATE_LIMIT=500
All Settings
| Variable | Default | Description |
|---|---|---|
ULD_DOWNLOAD_DIR |
~/Downloads |
Default download directory |
ULD_SEED_RATIO |
1.0 |
Seed ratio (0 = no seeding) |
ULD_SEED_TIME |
0 |
Seed time in minutes |
ULD_MAX_CONNECTIONS |
200 |
Max peer connections |
ULD_DOWNLOAD_RATE_LIMIT |
0 |
Download limit KB/s (0 = unlimited) |
ULD_UPLOAD_RATE_LIMIT |
0 |
Upload limit KB/s (0 = unlimited) |
ULD_ENABLE_DHT |
true |
Enable DHT for torrents |
ULD_ENABLE_UPNP |
true |
Enable UPnP |
Supported Platforms
Video Sites (1000+ supported)
- YouTube (videos & playlists)
- Vimeo
- Twitter/X
- TikTok
- Twitch
- And many more... (powered by yt-dlp)
Torrent
- Magnet links
- .torrent files (local or HTTP URLs)
Development
# Clone
git clone https://github.com/jd-co/uld.git
cd uld
# Install with dev dependencies
uv sync --all-extras
# Run tests
uv run pytest
# Run linter
uv run ruff check src tests
# Format code
uv run ruff format src tests
Contributing
Contributions are welcome! Here's how to get started:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Make your changes
- Run tests and linting:
uv run pytest uv run ruff check src tests uv run ruff format src tests
- Commit your changes (
git commit -m 'Add amazing feature') - Push to your branch (
git push origin feature/amazing-feature) - Open a Pull Request
Guidelines
- Follow existing code style (enforced by ruff)
- Add tests for new features
- Update documentation as needed
- Keep PRs focused on a single change
Ideas for Contributions
- Bug fixes and improvements
- Support for new download sources
- Documentation improvements
- Performance optimizations
License
MIT License - see LICENSE for details.
Acknowledgments
Built with these amazing projects:
- libtorrent - Torrent engine
- yt-dlp - Video engine
- Rich - Terminal UI
- Typer - CLI framework
- Pydantic - Data validation
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 uld_cli-1.1.0.tar.gz.
File metadata
- Download URL: uld_cli-1.1.0.tar.gz
- Upload date:
- Size: 110.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
23edc3b2ef455c37eb5b0310d41114e99ac22de377e699d4e74421270201796f
|
|
| MD5 |
910939b7cfad78cb5e69bf024f5a75b2
|
|
| BLAKE2b-256 |
aa8435303f5a17fe393a06ff0d04fe3150867092ee45fedf0894f55ffed1263a
|
File details
Details for the file uld_cli-1.1.0-py3-none-any.whl.
File metadata
- Download URL: uld_cli-1.1.0-py3-none-any.whl
- Upload date:
- Size: 31.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4a20015bd3a859d24befbe7c234ba7c47c5ec43a78d3c87041042dafa93c9bd3
|
|
| MD5 |
fbc04d5d28c71e5eccb12f973f08be32
|
|
| BLAKE2b-256 |
b5aa55759250f6b31c02727fd500b054ef51a8f004199a6bbaf28b33a432eb94
|