Daunrōdā, ダウンローダー - means downloader in Japanese
Simple self-hosted HTTP API around yt-dlp to download media from links. Has autoupdates, queue, progress, cache, failover capabilities. No third-party Go dependencies.
Stop screenshoting, just daunrodo it!
- 🎨 Media supports videos, audios, playlists
- 🔄 Autoinstall
yt-dlp,ffmpeg,gallery-dlbinaries are managed automatically with SHA256 verification - 🚦 Queue. Requested downloads are enqueued, cached, cleaned (TTL) and progress (%, ETA) is tracked
- 🌐 Proxy Support. SOCKS5h proxy rotation with health checking and failure tracking
- 📊 Prometheus Metrics. Full observability with jobs, downloads, proxy, and HTTP metrics
- ❌ Job Cancellation. Cancel in-progress downloads via API
- 🔀 Failover Failed downloads are tried again with native downloader or other tools like
gallery-dl - 💪 Persistent. Jobs are stored in a simple
.jsonfile for statefulness - 📂 Packaging. Multi-file
.ziparchive packaging
Best used with Docker and Traefik
git clone https://github.com/evan-sm/daunrodo.git && cd daunrodo
sudo docker-compose up -d
sudo docker-compose logs -fEnqueue:
curl -X POST localhost:8080/v1/jobs/enqueue -d '{"url":"youtube.com/watch?v=dQw4w9WgXcQ","preset":"mp4"}'Poll job (is status finished?):
curl -s localhost:8080/v1/jobs/<job-uuid>List jobs:
curl -s localhost:8080/v1/jobs/Download file:
wget localhost:8080/v1/files/<publication-uuid>Cancel job:
curl -X DELETE localhost:8080/v1/jobs/<job-uuid>Metrics (Prometheus):
curl localhost:8080/metricsUnit tests:
go test -v -race -cover ./...Integration tests:
go test -tags=integration -race -cover -v ./...yt-dlp uses terminal UI so using on phones is hard. But iOS Shortcuts can invoke custom user scripts that supports HTTP requests. Just share social media post from your phone, tap daunrodo shortcut and you get back original .mp4 video file that can be saved into gallery. No more screen recordings 🖤
I also use it as an internal microservice for my other projects to make API calls, like blossom, telegram bots, etc to simplify downloads logic.
- Stdlib
net/httpusage with updatedServeMux()patterns in Go 1.22 - Composable HTTP middlewares without frameworks (panics, request IDs, logging)
- Graceful shutdown lifecylce with context timeouts
- UUIDv5 for idempotency and cache reuse
- Worker-pool patterns
- Proper structured logging using
log/slog - In-memory storage with TTL and periodic cleanup including deletion of expired files
- Simple yet flexible unit testing using real filesystems files
(c) 2026 Ivan Smyshlyaev. MIT License