self-hosted yt-dlp downloader with a web ui: paste a url, download it as mp4/mp3/m4a, stream it back in-browser. postgres-backed, docker-first.
![]() dashboard |
![]() library |
![]() watch |
![]() downloads |
![]() settings |
- any source yt-dlp supports, not just youtube
- mp4 / mp3 / m4a, playlists and bulk paste
- stream straight from the library, no re-download
- rescan or import an existing folder of media
- optional single-password auth for exposing it beyond localhost
docker compose up -dapp's on http://localhost:3000, reachable on your lan too. postgres and ./library both persist across restarts/rebuilds.
for a shared password, drop an .env next to docker-compose.yml:
echo "AUTH_PASSWORD=your-password-here" > .env
docker compose up -dunset it to leave the instance open.
settings → import folder indexes media from any folder without moving it. that folder has to be mounted into the container:
dlnator:
volumes:
- ./library:/app/library
- /path/to/old/downloads:/app/import:rothen point the import box at /app/import. it stays indexed in place, so keep the mount around.
- re-adding a url reuses the existing job instead of duplicating it
- deleting a job deletes its files too
- retry a failed download by clicking its format button again
- subtitle downloads
PRs welcome — bug fixes, roadmap items, or anything else you think belongs here.




