Better than yt-dlp. Multi-threaded download manager for Linux with Chrome extension, native Rust engine, and Tauri GUI.
Status: β Native CLI ready Β· π Tauri GUI in progress
# Download anything
darkdm descargar "https://example.com/file.zip"
# YouTube, MediaFire, any site
darkdm descargar "https://www.youtube.com/watch?v=..."
darkdm descargar "https://www.mediafire.com/file/XXXX/video.rar"
# Multi-threaded (8 workers)
darkdm descargar "https://cdn.example.com/large.iso" --threads 8
# Probe without downloading
darkdm info "https://example.com/file.zip"
# View logs
darkdm logs
darkdm logs --follow- Multi-threaded downloads β Dynamic piece-splitting (XDM algorithm), 8 workers default
- Smart resume β Crash-safe state with atomic writes, resume from any interruption
- Site extractors β YouTube (yt-dlp), MediaFire, generic HTML analyzer
- HLS/DASH support β Automatic ffmpeg integration for streaming protocols
- Progress tracking β ILoveCandy Pac-Man progress bar
- Logging system β Structured logs (console + rotating files),
darkdm logscommand - Auto-rename β Never overwrites files (
file.mp4βfile (1).mp4) - Disk space check β Fails fast if insufficient space
- Tauri GUI β Desktop app with real-time progress
- Queue manager β Multiple concurrent downloads
- Browser integration β Chrome extension auto-capture
# Arch Linux
sudo pacman -S rust cargo ffmpeg
# Ubuntu/Debian
sudo apt install rustc cargo ffmpeg
# YouTube support (optional)
pip install yt-dlpgit clone https://github.com/JDis03/darkdm.git
cd darkdm
./init.sh
# Build CLI
cd src-tauri
cargo build --release --bin darkdm
# Install
sudo cp target/release/darkdm /usr/local/bin/darkdm --help
darkdm info "https://httpbin.org/bytes/1024"# Download any file
darkdm descargar "https://example.com/file.zip"
# Custom output directory
darkdm descargar "https://example.com/file.zip" --output ~/Downloads
# More workers (faster for large files)
darkdm descargar "https://example.com/file.zip" --threads 16
# Disable resume
darkdm descargar "https://example.com/file.zip" --no-resume# YouTube (uses yt-dlp)
darkdm descargar "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
# MediaFire (auto-extracts direct link)
darkdm descargar "https://www.mediafire.com/file/XXXX/file.rar"
# HLS streams (uses ffmpeg)
darkdm descargar "https://cdn.example.com/stream.m3u8"# Verbose logging (DEBUG level)
darkdm descargar "https://example.com/file.zip" --verbose
# Custom log level
RUST_LOG=trace darkdm descargar "https://example.com/file.zip"
# View logs
darkdm logs -n 50
darkdm logs --follow
# Probe URL (no download)
darkdm info "https://example.com/file.zip"βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β darkdm CLI β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β 1. Probe URL β
β ββ HEAD request β size, resumable, content-type β
β ββ Detect HTML β trigger extraction β
β β
β 2. Extract (if needed) β
β ββ YouTube β yt-dlp (HLS manifest) β
β ββ MediaFire β scrape HTML β
β ββ Generic β <video>, <audio>, <a href> tags β
β β
β 3. Download β
β ββ Multi-threaded (8 workers, dynamic piece-split) β
β ββ Range requests (HTTP 206 Partial Content) β
β ββ TransactedIO (crash-safe state, atomic writes) β
β ββ Progress bar (ILoveCandy Pac-Man) β
β ββ Auto-resume on interruption β
β β
β 4. Post-process β
β ββ HLS/DASH β ffmpeg merge β
β ββ Auto-rename if file exists β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
~/Descargas/DarkDM/file.mp4
- Dynamic piece-splitting β Work-stealing, not static N-parts
- TransactedIO β 3-file rotation, atomic
rename(2)for crash safety - ContinueAdjacentPiece β Reuse TCP connections between pieces
- Accept-Encoding: identity β Critical for accurate Range calculations
- Architecture Spec β 2700+ lines, 8 design patterns, XDM algorithms
- Logging Guide β Structured logging, debugging, log rotation
| Feature | Status | Notes |
|---|---|---|
| Multi-threaded download | β Done | 8 workers, dynamic piece-splitting |
| Resume support | β Done | Crash-safe TransactedIO |
| Site extractors | β Done | YouTube, MediaFire, generic HTML |
| HLS/DASH support | β Done | ffmpeg integration |
| Progress bar | β Done | ILoveCandy Pac-Man |
| Logging system | β Done | tracing + rotating files |
| CLI interface | β Done | clap, descargar/info/logs |
| Tauri GUI | π Next | Desktop app with real-time progress |
| Queue manager | π Next | Multiple concurrent downloads |
| Browser extension | π Next | Auto-capture from Chrome |
Tests: 38/38 passing Β· Build: ./init.sh passes
- Rust β Core engine (reqwest, tokio, async-trait)
- tracing β Structured logging with file rotation
- clap β CLI argument parsing
- scraper β HTML parsing for site extractors
- yt-dlp β YouTube extraction (external)
- ffmpeg β HLS/DASH merging (external)
- Tauri β Desktop GUI (coming soon)
- Fork the repo
- Create a feature branch (
git checkout -b feat/amazing) - Run tests (
cargo test --lib) - Commit (
git commit -m 'feat: add amazing feature') - Push (
git push origin feat/amazing) - Open a Pull Request
Development:
# Run tests
cargo test --lib
# Build CLI
cargo build --release --bin darkdm
# Verify
./init.shMIT β See LICENSE for details.
- XDM β Algorithms for dynamic piece-splitting and crash-safe state
- yt-dlp β YouTube extraction backend
Built with β€οΈ for Linux power users