🏡 Universal Video Downloader for Your Media Server
Download, process, and organize ads-free best-quality videos at Home.
🎬 HomeTube is a simple web UI for downloading single videos and playlists from the internet with the highest quality available and moving them to specific local locations automatically managed and integrated by media server such as Plex or Jellyfin.
A simple friendly solution for easily integrating preferred videos from Youtube and others platforms to local media server:

Automatic integration with self-hosted setup:
Tech/Python/Advanced)Setup your HomeLab integration.
Automatically skip sponsors, ads, and promotional content with built-in SponsorBlock support. Just download your video and sponsors segments are automatically detected and marked.
Learn more about SponsorBlock features.
Cookies authentication should be setup for optimal video downloading experience and to avoid common download failures.
Even for public YouTube videos, cookies are increasingly necessary because of modern protections.
They ensure higher quality, reliability, and access to all formats:
👉 In short: cookies are not just for private content — they’re the key to consistent, best-quality downloads.
We can use Browser cookies if on a machine sharing a browser, otherwise Cookies File in HomeLab setup.
More details about Cookies authentication setup.
Transform your downloads with powerful built-in video processing tools:
Explore all processing options.
Custom yt-dlp arguments support offers full flexibility for advanced users to tailor downloads to specific needs.
--proxy http://proxy.company.com:8080 --retries 5--max-filesize 500M --min-filesize 100M--write-info-json --write-description --write-thumbnail--limit-rate 1M --fragment-retries 10yt-dlp --options variableCustom yt-dlp arguments can be added directly from the UI or set by default for any download with the YTDLP_CUSTOM_ARGS environment variable.
🔀 Smart Conflict Resolution: HomeTube automatically detects and resolves conflicts between base settings and custom arguments, giving priority to your custom preferences while maintaining system stability.
HomeTube uses intelligent quality detection that analyzes each video and automatically selects the best available formats with a simple 2-profile strategy:
🔍 How It Works: - 📊 Real-time Analysis → Detects all available video formats and codecs - 🏆 Smart Ranking → Prioritizes modern codecs (AV1 > VP9 > H.264) and audio quality (Opus > AAC) - 🎯 Optimal Selection → Generates up to 2 best profiles from actual available formats - 🔄 Intelligent Fallback → Tries best quality first, then second-best if needed
Quality Profiles Generated: 1. 🥇 Best Available → Highest resolution with most modern codec (e.g., 4K AV1 + Opus) 2. 🥈 Fallback Option → Next best combination (e.g., 4K VP9 + Opus)
Download Strategies: - 🔄 Auto Best (Default) → Tries up to 2 optimal profiles automatically until success - 🏆 Best Only → Only attempts highest quality, no fallback (stops if unavailable) - 🎯 Choose Profile → Manually select from detected optimal profiles - 📋 Choose Format → Advanced: select specific format IDs from all available formats
🚀 Benefits: - ✅ Always gets the best quality actually available for each video - ✅ No generic fallbacks - uses real format analysis - ✅ Fast downloads with minimal retries (max 2 attempts) - ✅ Supports all modern codecs: AV1, VP9, H.264, Opus, AAC
👉 Full details on quality detection & strategies
Intelligent download system that adapts to your needs:
Learn more about download features.
Powerful playlist synchronization with resilient tracking and perfect source fidelity:
🔄 Smart Synchronization: - 📡 Source of Truth: YouTube playlist is always the reference - local library stays perfectly synchronized - 🔄 Auto-Refresh: Playlist metadata automatically refreshed on each load for accurate status - 📊 Instant Status: See exactly which videos are downloaded, pending, or new at a glance - 🎯 Incremental Downloads: Only download new videos - existing ones are preserved and tracked
📁 Resilient Video Tracking:
- 🆔 ID-Based Tracking: Videos tracked by unique ID - survives title changes on YouTube
- 📝 Pattern-Based Naming: Flexible filename patterns with placeholders ({idx}, {title}, {channel}, etc.)
- 🔄 Smart Rename Detection: Finds renamed files in destination folder automatically
- 📂 Index Preservation: Maintains playlist order even when videos are reordered upstream
🛡️ Robust Change Detection: - ➕ New Videos: Automatically detected and queued for download - 🔢 Reordering: Detect and apply index changes with smart renaming - 📂 Relocation: Move entire playlist to new folder while preserving files - 📦 Archive Mode: Removed videos can be archived instead of deleted - 🗑️ Clean Removal: Optional deletion of videos removed from source playlist
🎨 Customizable Title Patterns:
{idx} - {pretty(title)}.{ext} → 01 - My Video Title.mkv
{pretty(title)} - {channel}.{ext} → My Video - Creator Name.mkv
{i:03d} - {slug(title)} [{id}].{ext} → 001 - my-video-title [abc123].mkv
Supported placeholders:
- {idx} - Smart zero-padded index (01, 02... or 001, 002... based on total)
- {title} / {pretty(title)} / {slug(title)} - Video title variants
- {channel} / {pretty(channel)} / {slug(channel)} - Channel name variants
- {id} - Video ID • {ext} - File extension
📈 Progress Tracking: - Real-time download progress with visual indicators - Detailed sync plan preview before applying changes - Full logging of all operations for transparency
Set PLAYLIST_KEEP_OLD_VIDEOS=true (or enable Keep videos removed from playlist in the UI) to move removed entries into an Archives/ folder instead of deleting them.
1800+ supported platforms - way beyond just YouTube:
📋 HomeTube uses environment variables for all configurations: videos download paths, temporary download folder, authentication, languages, quality profiles, and more.
Depending of the setup, Docker, Docker compose, Portainer, local run, environment variables can be passed to the application in different ways.
.env file from .env.sample can be practical for rapid setup:
```bash
$ claude mcp add hometube \
-- python -m otcore.mcp_server <graph>