Areas we serve

Self-Hosted MeTube: A Web UI for yt-dlp That Keeps Downloads on Your Server

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.

Tags:
  • MeTube
  • yt-dlp
  • YouTube
  • Self-Hosted
  • Docker
  • Media

Need Help With Your Hosting?

Tell us about your application — we respond within 1 hour with honest recommendations.