Service auto-hébergé
alexta69/metube avatar
alexta69/metube

MeTube : une interface web pour yt-dlp, des abonnements aux options en couches

Téléchargeur de vidéos auto-hébergé pour YouTube et d'autres sites (interface utilisateur Web pour yt-dlp).

14 745 étoiles1 084 forksPythonAGPL-3.0
GitHub

En bref

De quoi s’agit-il ?
Un téléchargeur auto-hébergé qui met yt-dlp derrière une page navigateur, gère playlists, chaînes et abonnements périodiques, et empile ses réglages de sécurité derrière des variables d'environnement documentées.
À qui s’adresse-t-il ?
Publié sous AGPL-3.0, MeTube se prête à un hébergement personnel sans formalité ; modifier le code et l'offrir en service réseau impose en revanche de partager les sources sous la même licence.
Puis-je l’utiliser commercialement ?
Oui, sous conditions strictes. AGPL-3.0 est une licence à copyleft réseau : si des personnes utilisent une version modifiée via un réseau, par exemple comme service hébergé, vous devez leur proposer son code source sous la même licence.
Est-il encore maintenu ?
Oui. Les derniers commits datent d’il y a 6 jours.
En quel langage est-il écrit ?
Principalement Python, d’après les statistiques de langage de GitHub.

Ces réponses reposent sur les données GitHub du projet (dernière synchronisation le 15 septembre 2026) et sur notre analyse. Elles ne constituent pas un avis juridique.

ANALYSE OPEN SOURCE APPROFONDIE

Un yt-dlp qui vit dans le navigateur

MeTube est une interface web auto-hébergée pour yt-dlp : on colle une URL dans une page, et le fichier atterrit dans le dossier de téléchargement du serveur. Le périmètre couvre vidéos, audio, sous-titres et vignettes depuis YouTube et les dizaines de sites que yt-dlp prend en charge, avec gestion des playlists et des chaînes et options de téléchargement configurables.

La fonction qui sort du lot est l'abonnement : s'inscrire à une chaîne ou à une playlist, laisser l'outil vérifier périodiquement les nouveautés et mettre les nouveaux dépôts en file automatiquement. Le projet, écrit en Python sous licence AGPL-3.0, affiche au 29 août 2026 environ 14 500 étoiles, 1 071 forks et 11 tickets ouverts, avec des images Docker multi-architectures amd64 et arm64.

Une commande Docker et une montagne de variables

Le lancement minimal tient en une ligne : docker run -d -p 8081:8081 -v /path/to/downloads:/downloads ghcr.io/alexta69/metube, la variante Compose ajoutant restart: unless-stopped. Tout le reste se règle par variables d'environnement, chacune documentée avec sa valeur par défaut : PUID et PGID à 1000, UMASK à 022, DEFAULT_THEME en light, dark ou auto, LOGLEVEL à INFO, MAX_CONCURRENT_DOWNLOADS à 3 téléchargements simultanés, CLEAR_COMPLETED_AFTER à 0, c'est-à-dire désactivé.

Le stockage retient l'attention. STATE_DIR, à /downloads/.metube par défaut, abrite queue.json, pending.json, completed.json et subscriptions.json, l'état persistant de l'outil. TEMP_DIR accueille les fichiers intermédiaires ; le README conseille de le poser sur un SSD ou un tmpfs pour la performance, tout en avertissant qu'un système de fichiers en RAM peut empêcher la reprise d'un téléchargement interrompu. CHOWN_DIRS à false évite le chown des répertoires au démarrage du conteneur, à condition que l'utilisateur ait déjà les accès.

Templates de nommage et options yt-dlp en trois couches

Les noms de fichiers suivent la spécification de template de yt-dlp. OUTPUT_TEMPLATE vaut %(title)s.%(ext)s par défaut, la variante playlist ajoute un dossier %(playlist_title)s, la variante chaîne un dossier %(channel)s, et le découpage par chapitres insère numéro et titre de section. Assigner une chaîne vide à un template spécial le fait retomber sur le template général.

Les options yt-dlp s'empilent sur trois niveaux : les options globales de YTDL_OPTIONS, objet JSON appliqué à chaque téléchargement ; des préréglages nommés, choisis par téléchargement dans l'interface ; et des remplacements par téléchargement, champ libre désactivé par défaut. Au départ d'un téléchargement, les couches se combinent de la plus générale à la plus spécifique, la plus spécifique l'emportant en cas de conflit. YTDL_OPTIONS_FILE et YTDL_OPTIONS_PRESETS_FILE pointent vers des fichiers JSON rechargés automatiquement à chaque modification.

Deux interrupteurs à ne pas basculer à la légère

ALLOW_PRIVATE_ADDRESSES reste à false par défaut : les URL qui se résolvent vers des adresses internes sont refusées, ce qui bloque les tentatives de falsification de requête côté serveur. Le README indique qu'activer cette variable supprime la protection et n'a de sens que dans un environnement de confiance.

ALLOW_YTDL_OPTIONS_OVERRIDES va plus loin : il autorise quiconque accède à l'interface à passer des options arbitraires de l'API yt-dlp, ce qui, selon le README lui-même, peut permettre l'exécution arbitraire de commandes dans le conteneur. Entre les deux, CORS_ALLOWED_ORIGINS contrôle les requêtes inter-origines et conditionne le fonctionnement des extensions de navigateur et des bookmarklets. Sur une instance exposée, ces trois variables dessinent la frontière entre outil personnel et porte d'entrée.

Abonnements : la veille calibrée par trois compteurs

Le mécanisme d'abonnement se règle par des variables aux défauts parlants. SUBSCRIPTION_DEFAULT_CHECK_INTERVAL fixe à 60 minutes l'intervalle entre deux vérifications. SUBSCRIPTION_SCAN_PLAYLIST_END limite à 50 le nombre d'entrées analysées par vérification, les plus récentes d'abord. SUBSCRIPTION_MAX_SEEN_IDS plafonne à 50 000 les identifiants de vidéos mémorisés par abonnement, afin de contenir la croissance du fichier d'état.

Ces trois compteurs disent comment le projet pense la charge : une veille légère, bornée en profondeur et en mémoire, plutôt qu'une synchronisation exhaustive. La page wiki Subscriptions documente le fonctionnement, et l'état de chaque abonnement atterrit dans subscriptions.json du répertoire d'état.

HTTPS, mandataire inverse et versions au rythme de yt-dlp

MeTube peut servir du HTTPS lui-même avec HTTPS, CERTFILE et KEYFILE, ou vivre derrière un mandataire inverse ; sous un sous-répertoire, URL_PREFIX s'impose, et le mandataire doit transmettre les en-têtes Upgrade et Connection, l'interface utilisant WebSocket pour les mises à jour en direct. Les vidéos restreintes passent par un fichier cookies.txt téléversé dans les options avancées, et les intégrations existent pour Chrome, Firefox, les bookmarklets, un raccourci iOS et Raycast, avec une exigence HTTPS dès que la page appelante l'est.

Le rythme des versions suit la dépendance : yt-dlp doit être mis à jour souvent pour suivre les sites, donc une nouvelle image MeTube est publiée automatiquement dès qu'une version stable de yt-dlp paraît. Les étiquettes sont datées, 2026.08.20, 2026.08.21 puis 2026.08.28 en trois sorties d'août 2026, et des builds nocturnes de yt-dlp s'activent via YTDL_NIGHTLY_UPDATE_TIME pour qui veut suivre le fil des correctifs au jour le jour.

Conclusion éditoriale

Publié sous AGPL-3.0, MeTube se prête à un hébergement personnel sans formalité ; modifier le code et l'offrir en service réseau impose en revanche de partager les sources sous la même licence. Avant de l'exposer, trois réglages méritent un test réel : laisser ALLOW_YTDL_OPTIONS_OVERRIDES désactivé tant que l'instance n'est pas réservée à un cercle de confiance, poser TEMP_DIR sur un SSD en gardant à l'esprit qu'un système de fichiers en RAM empêche la reprise des téléchargements, puis vérifier après un premier téléchargement que queue.json et completed.json apparaissent bien dans l'état défini par STATE_DIR.

Sources officielles

  1. Official README
  2. Project repository
  3. Release notes
Notes de la communauté

Notes de la communauté