MeTube: Self-Hosted YouTube and Video Downloader
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:
- Download videos in multiple quality options (1080p, 4K, 720p, etc.)
- Download audio-only as MP3 or AAC (for podcasts, music, etc.)
- Queue multiple downloads and track progress
- Download entire playlists
- Custom yt-dlp format strings for advanced users
- Automatic filename sanitization and organization
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:
- Paste a YouTube URL (or any yt-dlp-supported URL)
- Select format: Video (various quality options) or Audio
- Click "Add"
- 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:
- Archiving a channel's content
- Downloading a tutorial series for offline use
- Backing up your own uploaded content
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:
- Download video via MeTube
- Jellyfin picks it up in the next library scan
- 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:
- Paste a URL
- Select "Audio" from the format dropdown
- 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.
