📈 GH Trending Explorer 🎲 Surprise me

← all repos

alexta69 / metube

git clone https://github.com/alexta69/metube.git 2026.10.20 · 2d ago

Self-hosted video downloader for YouTube and other sites (web UI for yt-dlp)

+13
stars, 24h · #2,781
+~68
stars, 7 days · #3,078
+~290
stars, 30 days · #2,806
15k
★ total · +0% this week
1.1k
forks · 11 open issues

Star history (as recorded here)

2026-10-20 · 15,048 ★ 2026-10-23 · 15,077 ★
LanguagePython
LicenseAGPL-3.0
Created2019-11-29 (6y ago)
Last push1d ago
Watchers52
OwnerUser

GitHub topics

Links

README excerpt
# MeTube
MeTube is a self-hosted web UI for yt-dlp. Paste a link from YouTube or hundreds of other sites, and it downloads to your server:
* Video, audio, subtitles and thumbnails — from single videos, whole playlists or entire channels.
* Subscriptions to channels and playlists, which queue new uploads as they appear.
* Per-download choices of quality, format and folder, plus server-wide yt-dlp options and presets.
📖 **Guides, recipes and a troubleshooting FAQ live in the wiki** — many feature requests are already a recipe there, so check it before filing one.
## Quick start
 [code] 
Or with Docker Compose:
 [code] 
Then open `http:// :8081` in your browser. Images are multi-arch (amd64/arm64), and also published on Docker Hub as `alexta69/metube`.
## Configuration
MeTube is configured with environment variables: `-e NAME=value` on the `docker run` command line, or the `environment:` section in Compose. Defaults are the Docker image's; outside Docker, the directories default to the working directory.
### Runtime and permissions
| Variable | Default | Description |
| :--- | :--- | :--- |
| `PUID` / `PGID` | `1000` | User and group MeTube runs as and writes files with. Legacy `UID`/`GID` also work. |
| `UMASK` | `022` | Umask for the files MeTube creates. |
| `CHOWN_DIRS` | `true` | Make `PUID:PGID` the owner of the download, state and temp directories at startup. With `false`, MeTube's user must already have access. |
| `LOGLEVEL` | `INFO` | `DEBUG`, `INFO`, `WARNING`, `ERROR`, `CRITICAL` or `NONE`. |
| `ENABLE_ACCESSLOG` | `false` | Log every HTTP request. |
| `DEFAULT_THEME` | `auto` | UI theme: `light`, `dark`, or `auto` to follow the system. |
### Downloads
| Variable | Default | Description |
| :--- | :--- | :--- |
| `MAX_CONCURRENT_DOWNLOADS` | `3` | Downloads that run at once; the rest wait their turn. |
| `DEFAULT_OPTION_PLAYLIST_ITEM_LIMIT` | `0` | Default for the **Items Limit** field: how many entries of a playlist or channel to download (`0` = all). |
| `CLEAR_COMPLETED_AFTER` | `0` | Seconds before finished and failed downloads leave the Completed list (`0` = never). |
| `DELETE_FILE_ON_TRASHCAN` | `false` | Also delete the file from disk when its entry is removed from Completed. `ask` prompts each time. |
| `SUBSCRIPTION_DEFAULT_CHECK_INTERVAL` | `60` | Default minutes between checks of a subscription. |
| `SUBSCRIPTION_SCAN_PLAYLIST_END` | `50` | Newest entries fetched each time a subscription is checked. |
| `SUBSCRIPTION_MAX_SEEN_IDS` | `50000` | Video IDs remembered per subscription, to bound the state file's size. |
### Directories
| Variable | Default | Description |
| :--- | :--- | :--- |
| `DOWNLOAD_DIR` | `/downloads` | Where downloads are saved. |
| `AUDIO_DOWNLOAD_DIR` | same as `DOWNLOAD_DIR` | Where audio-only downloads are saved, to keep them apart from video. |
| `TEMP_DIR` | `/downloads` | Where files are written while downloading. An SSD or `tmpfs` is faster, but on a RAM disk interrupted downloads can't resume. |
|