Authenticated yt-dlp queue with mobile sharing, history, and NAS file management.
5M+
An authenticated, NAS-friendly yt-dlp download queue for video, audio, and subtitles. Run it on Synology, another NAS, or any Docker host and manage downloads from a responsive web dashboard.
Current release: 26.1012 · Architectures: linux/amd64, linux/arm64
New in this release: safe filename choices for new downloads, less crowded mobile controls, and direct cookies/profile recovery with privacy-safe diagnostic copying. Existing files keep their names and duplicate detection stays enabled. Keep both volumes when upgrading; no new configuration or database is required.

Captured from 26.1012 with synthetic demo media.
docker run -d \
--name youtube-dl-nas \
--restart unless-stopped \
-e MY_ID=nas-user \
-e MY_PW=change-this-password \
-e TZ=Asia/Seoul \
-v /volume2/youtube-dl:/downfolder \
-v /volume2/docker/youtube-dl-nas:/usr/src/app/metadata \
-p 8080:8080 \
modenaf360/youtube-dl-nas:latest
Open http://YOUR_NAS:8080, sign in with MY_ID and MY_PW, accept the Terms of Use on first launch, and submit a URL.
The second volume is strongly recommended. It preserves the restart-safe queue, download history, terms acceptance, and signed-session state across container recreation.
/downfolder, including files without saved metadata.nlptutti CER/WER/CRR metrics and keyword preservation.yt-dlp, yt-dlp-ejs, and Deno updates at startup and every hour by default.nlptutti installation or upgrade whenever a new container starts.Release 26.0906 adds topic collections and AI Connect alongside the existing
Downloads screen. Preview researched direct URLs, check dates and duplicates,
and approve one idempotent batch. New media is grouped in safe nested collection
folders; existing files can be linked without copying or moving them.
Create and revoke named connection tokens from the dashboard. The official
Python MCP SDK runs in the normal container behind nginx at
/youtube-dl/mcp, sharing the existing external port and preserving WebSocket
and PWA routes. No companion image or MCP enable flag is required.
Follow the MCP guide and compatibility notes for client setup and the actual validation scope. Six native-client end-to-end certification is not claimed. Use HTTPS or a VPN for remote MCP access; bearer tokens are not encrypted by plain HTTP.
The 26.0906 Linux/AMD64 preflight measured about 157 MB total idle process RSS,
including the always-on MCP service. Allow additional memory for downloads and
Subtitle QA. The footprint review
documents the increase over 26.0830; it is not a claim that ARM64 or
download-time memory was measured. See the
26.0922 validation record
for the previous release's checks and native-client coverage.
| Container path | Purpose |
|---|---|
/downfolder | Downloaded and pre-existing media files |
/usr/src/app/metadata | Restart-safe queue, history, terms acceptance, and session state |
| Variable | Required | Default | Purpose |
|---|---|---|---|
MY_ID | Yes | - | Dashboard and REST login ID |
MY_PW | Yes | - | Dashboard and REST password |
MY_ID_FILE / MY_PW_FILE | No | Empty | Advanced mounted-secret alternatives; direct variables take precedence |
TZ | No | System default | Container time zone, such as Asia/Seoul |
APP_PORT | No | 8080 | App port when using host networking |
PUID / PGID | No | 0 | Owner for new download and state files |
UMASK | No | 022 | File creation mask |
PROXY | No | Empty | Proxy passed to yt-dlp |
YTDLP_COOKIES_FILE | No | Empty | Mounted Netscape-format cookie file |
YTDLP_EXTRA_ARGS | No | Empty | Administrator-controlled extra yt-dlp arguments |
YDLNAS_ALLOW_PRIVATE_SOURCES | No | false | Explicitly allow trusted private or local source URLs |
YDLNAS_STORAGE_WARNING_GB | No | 10 | Free-space warning threshold in GiB; 0 disables it |
YDLNAS_STORAGE_CRITICAL_GB | No | 2 | Pause new queue additions below this free space; 0 disables it |
YDLNAS_MCP_BATCH_LIMIT | No | 25 | Candidates per collection preview, clamped to 1–100 |
NLPTUTTI_AUTO_UPDATE | No | true | Install or upgrade nlptutti at new-container startup for Subtitle QA |
NLPTUTTI_UPDATE_TIMEOUT | No | 180 | Runtime package-update timeout in seconds |
YDLNAS_API_TOKEN | No | Empty | Optional Bearer token; ID/password remains supported |
YDLNAS_API_TOKEN_FILE | No | Empty | Advanced mounted-secret alternative; the direct token takes precedence |
COOKIE_SECURE | No | false | Set true behind an HTTPS-only reverse proxy |
See the complete Docker options for updater controls and deployment examples.
git clone https://github.com/hyeonsangjeon/youtube-dl-nas.git
cd youtube-dl-nas
cp .env.example .env
# Set MY_ID and MY_PW in .env
docker compose up -d
Open the English/Korean mobile setup guide for direct installation links. GitHub Pages hosts only the guide and import files; shared URLs and credentials travel directly between the phone and the NAS.
| Tag | Use |
|---|---|
latest | Current verified stable release |
26.1012 | Current pinned release |
sha-<commit> | Immutable build for a specific Git commit |
v0_1 | Historical versioned Docker release from November 2018 |
Both current tags publish OCI manifests for AMD64 and ARM64. Pin 26.1012 when reproducibility matters; use latest to follow the current stable release.
docker pull modenaf360/youtube-dl-nas:26.1012
curl http://YOUR_NAS:8080/health
A healthy container returns HTTP 200 with queue, updater, and path-free storage-capacity status. The image also includes a Docker HEALTHCHECK, and every published build must first pass a live container smoke test.
Use this project only for content you are authorized to download. Users are responsible for following applicable laws and the terms of the source service. See the project's legal disclaimer.
MIT License · Maintained since 2018
Content type
Image
Digest
sha256:7442a58f3…
Size
286.3 MB
Last updated
3 days ago
docker pull modenaf360/youtube-dl-nas