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