← All articles
a couple of pieces of luggage sitting on top of each other

MeTube: Self-Hosted YouTube and Video Downloader

Media 2026-03-04 · 3 min read metube youtube yt-dlp video downloader self-hosted docker media audio
By Selfhosted Guides Editorial TeamSelf-hosting practitioners covering open source software, home lab infrastructure, and data sovereignty.

yt-dlp is the most capable video downloader available — it handles YouTube, Vimeo, Twitch, SoundCloud, and hundreds of other platforms. But it's a command-line tool, which makes it inconvenient for household use or downloading from a phone.

Photo by Google DeepMind on Unsplash

MeTube wraps yt-dlp in a web interface. Open a browser, paste a URL, click download. The files end up on your server. Your spouse can use it without knowing what a terminal is.

What MeTube Does

MeTube provides a web UI for submitting download jobs to yt-dlp. Core functionality:

Docker Deployment

services:
  metube:
    image: ghcr.io/alexta69/metube:latest
    container_name: metube
    restart: unless-stopped
    ports:
      - "8081:8081"
    volumes:
      - /path/to/downloads:/downloads
    environment:
      UID: 1000
      GID: 1000
      UMASK: 022
      OUTPUT_TEMPLATE: "%(title)s.%(ext)s"
      YTDL_OPTIONS: '{"writesubtitles": false}'

Replace /path/to/downloads with where you want files stored. If you use Jellyfin or Plex, point this at your media library directory.

Start with docker compose up -d and navigate to http://your-server:8081.

Downloading Videos

The interface is minimal:

  1. Paste a YouTube URL (or any yt-dlp-supported URL)
  2. Select format: Video (various quality options) or Audio
  3. Click "Add"
  4. Monitor progress in the queue

The format dropdown shows available options: "best video", "1080p", "720p", "480p", "audio only", etc.

For audio downloads (podcasts, music), select "MP3" or "AAC" from the format dropdown. MeTube extracts audio using ffmpeg and saves as an audio file.

Playlist Downloads

Paste a YouTube playlist URL and all videos in the playlist download. Useful for:

Playlist downloads queue each video individually so you can track progress.

Output Templates

Control how downloaded files are named via the OUTPUT_TEMPLATE environment variable. This uses yt-dlp's output template syntax:

environment:
  # Default: just the title
  OUTPUT_TEMPLATE: "%(title)s.%(ext)s"

  # Include channel name and upload date
  OUTPUT_TEMPLATE: "%(channel)s/%(upload_date)s - %(title)s.%(ext)s"

  # For music organization (artist - title)
  OUTPUT_TEMPLATE: "%(artist)s - %(title)s.%(ext)s"

Subdirectories in the template are created automatically. The channel-based template puts each channel's videos in their own folder.

Advanced yt-dlp Options

Pass any yt-dlp options via YTDL_OPTIONS:

environment:
  YTDL_OPTIONS: >
    {
      "writesubtitles": true,
      "subtitleslangs": ["en"],
      "writeautomaticsub": true,
      "embedsubtitles": true,
      "postprocessors": [{
        "key": "FFmpegEmbedSubtitle",
        "already_have_subtitle": false
      }]
    }

This example downloads English subtitles and embeds them in the video file.

Limit download rate (to avoid throttling or reduce bandwidth):

environment:
  YTDL_OPTIONS: '{"ratelimit": 5000000}'  # 5MB/s limit

Use cookies for members-only content:

volumes:
  - /path/to/cookies.txt:/cookies.txt
environment:
  YTDL_OPTIONS: '{"cookiefile": "/cookies.txt"}'

Export cookies from your browser using a browser extension, then mount the file into the container.

Jellyfin and Plex Integration

Point MeTube's download directory at your Jellyfin or Plex library:

volumes:
  - /media/movies:/downloads

Downloaded videos appear in your media server after a library scan. For automatic organization, use the output template to match your library's folder structure.

For a simple YouTube-to-library workflow:

  1. Download video via MeTube
  2. Jellyfin picks it up in the next library scan
  3. Watch it in Jellyfin from any device

Audio Downloads for Music and Podcasts

MeTube is useful as a podcast-saving tool or music downloader. For audio-only downloads:

  1. Paste a URL
  2. Select "Audio" from the format dropdown
  3. Choose MP3 or best quality audio

For music, Navidrome or Beets can organize your downloaded audio files. Point MeTube downloads at your music directory and let your music manager handle file organization.

Restricting Access

MeTube has no built-in authentication. Don't expose it directly to the internet. Options:

Auth via reverse proxy (Nginx Proxy Manager or Traefik):

# nginx-proxy-manager label-based auth
labels:
  - "nginx-proxy-manager.basic-auth=true"

Restrict to local network: Don't publish port 8081 externally. Access only from your home network.

Authelia or Authentik: Put MeTube behind your SSO provider if you've already set one up for other services.

MeTube vs. Alternatives

Tool Interface yt-dlp Authentication
MeTube Web UI Yes None (proxy required)
TubeArchivist Web UI Yes Built-in
Pinchflat macOS app Yes N/A
Command-line yt-dlp CLI only Yes N/A

MeTube is the simplest option for casual downloading.

TubeArchivist is better if you want a full YouTube archiving system with metadata, subscriptions, and a media library interface. More complex to set up.

MeTube Update Handling

yt-dlp is updated frequently as YouTube and other platforms change their APIs. Keep MeTube updated to avoid broken downloads:

docker compose pull && docker compose up -d

Or use Watchtower for automatic updates (acceptable for non-critical tools like media downloaders).

The MeTube project is at alexta69/metube. The underlying yt-dlp is at yt-dlp/yt-dlp.

Get free weekly tips in your inbox. Subscribe to Self-Hosted Weekly