Someone on the team pastes a YouTube playlist into a random "save video" site. The tab runs seventeen trackers, the file lands in Downloads with a name like videoplayback (3).mp4, and nobody knows if the clip still exists on a server in Virginia. Meanwhile you already pay for a VPS with disk space and a cron habit.
MeTube (~15k stars, AGPL-3.0) is the boring-good solution: a self-hosted web UI on top of yt-dlp. Paste a URL from YouTube or any of hundreds of supported sites, pick quality, and the file lands in a folder you control — with a queue, subscriptions, and none of the sketchy ad-banner middlemen.
What MeTube actually does
One Docker container, port 8081 by default, volume mounted at /downloads:
- Single videos, playlists, and channels — video, audio-only, subtitles, thumbnails
- Subscriptions — watch channels or playlists and auto-queue new uploads on an interval you set
- Per-job options — quality, format, subfolders; server-wide yt-dlp JSON presets for repeatability
- Queue UI — concurrent download limit, completed history, optional auto-cleanup
Under the hood it is still yt-dlp, which means when sites change their player again, you update yt-dlp (MeTube can pull nightly builds on a schedule via YTDL_NIGHTLY_UPDATE_TIME). The value is the UI, state directory, and subscription engine — not reinventing extractors.
Why self-host instead of bookmarking a downloader site?
Files stay on your box. Training videos for staff, conference talks, B-roll you licensed — they go straight to your NAS mount or VPS volume, not through a stranger's CDN.
Subscriptions without babysitting. Podcast channels, internal webinar series, creator you have permission to archive — MeTube polls and enqueues new items while you sleep.
Consistent naming. Output templates follow yt-dlp's syntax — channel folders, playlist titles, chapter splits — so Plex or Jellyfin does not inherit watch?v=dQw4w9WgXcQ.mp4.
No browser extension roulette. Wiki docs cover bookmarklets and CORS if you want one-click send from a tab; you still control the origin list.
The responsible bit (read this once)
MeTube is a tool, not a permission slip. Download only content you have the right to archive — your own uploads, Creative Commons, explicit client deliverables, material your org licensed. YouTube's Terms of Service restrict how you use their service; copyright law still applies in Canada. We host infrastructure; you own policy. If the use case is "rip entire catalogs we do not own," skip MeTube and call a lawyer instead.
What running it takes
Quick start:
docker run -d -p 8081:8081 -v /path/to/downloads:/downloads ghcr.io/alexta69/metube
Images are multi-arch (amd64 / arm64) on GHCR and Docker Hub (alexta69/metube). Set PUID/PGID so files match your media user. Put STATE_DIR (queue, subscriptions, cookie uploads) on persistent storage — losing it loses your subscription memory.
RAM/CPU: light for the app itself; heavy when ffmpeg is muxing 4K. MAX_CONCURRENT_DOWNLOADS defaults to 3 — lower it on a small VPS or disk will thrash. TEMP_DIR on SSD or tmpfs speeds writes; RAM disks cannot resume interrupted downloads.
Security: do not expose 8081 to the whole internet without auth in front. MeTube has SSRF protections by default (ALLOW_PRIVATE_ADDRESSES=false). Enabling per-download yt-dlp overrides in the UI (ALLOW_YTDL_OPTIONS_OVERRIDES) is effectively code execution for anyone who can log in — keep it off for shared installs. Age-restricted or member-only content often needs cookies exported to STATE_DIR per the wiki.
Reverse proxy with TLS and URL_PREFIX if it lives behind nginx or Caddy on a subpath.
Who it's for (and who should skip it)
Good fit: homelab media collectors with a legal use case, agencies archiving their own webinar replays, schools caching permitted lecture captures, anyone tired of re-running yt-dlp flags from shell history.
Skip it: if you only need one file a year (use yt-dlp locally). If you need YouTube's official API for monetized creator workflows, this is the wrong layer. If you cannot lock down the UI, a public MeTube instance becomes an abuse magnet.
Hosting it in Canada
We run MeTube and similar Docker workloads on Canadian VPS — big download volumes, firewall rules, reverse proxy, and backup scope for /downloads plus .metube state.
Tell us expected volume, subscription count, and whether this sits on VPN-only — we'll size disk and concurrency so the queue does not stall your other containers.