- MeTube est une interface web auto-hébergée pour
yt-dlp, qui permet de télécharger depuis le navigateur des médias provenant de YouTube et de dizaines d’autres sites pris en charge
- Il prend en charge le téléchargement de vidéos, d’audio, de sous-titres et de miniatures, et permet aussi de récupérer des playlists et des chaînes en ajustant le format de sortie et les options de téléchargement
- Il est possible de s’abonner à des chaînes et playlists pour vérifier régulièrement les nouveaux éléments et ajouter automatiquement les nouveaux envois à la file d’attente
- Il s’exécute avec Docker ou docker-compose, et configure via des variables d’environnement le nombre de téléchargements simultanés, le chemin de stockage, le modèle de nom de fichier, HTTPS, CORS, le thème, le niveau de logs, etc.
- Les options
yt-dlp sont combinées dans l’ordre options globales, préréglages, puis surcharges par téléchargement ; comme les surcharges par téléchargement autorisent la saisie d’options arbitraires, elles ne doivent être activées que dans un environnement de confiance
Ce que fait MeTube
- MeTube est une interface web auto-hébergée basée sur
yt-dlp
- Il permet de télécharger des médias depuis YouTube et des dizaines de sites pris en charge par
yt-dlp
- Les principales fonctionnalités sont les suivantes
- Télécharger depuis l’interface du navigateur des vidéos, de l’audio, des sous-titres et des miniatures
- Télécharger des playlists et des chaînes
- Configurer le chemin de sortie et les options de téléchargement
- S’abonner à des chaînes et playlists puis vérifier périodiquement les nouveaux éléments
- Ajouter automatiquement les nouveaux envois à la file d’attente de téléchargement
Mode d’exécution
- Il peut être lancé directement avec Docker
docker run -d -p 8081:8081 -v /path/to/downloads:/downloads ghcr.io/alexta69/metube
- L’exemple docker-compose utilise l’image
ghcr.io/alexta69/metube et monte le répertoire hôte de téléchargement sur /downloads dans le conteneur
services:
metube:
image: ghcr.io/alexta69/metube
container_name: metube
restart: unless-stopped
ports:
- "8081:8081"
volumes:
- /path/to/downloads:/downloads
Paramètres de téléchargement et de stockage
- MAX_CONCURRENT_DOWNLOADS limite le nombre de téléchargements pouvant s’exécuter simultanément, avec une valeur par défaut de
3
- Si DELETE_FILE_ON_TRASHCAN vaut
true, le fichier téléchargé sur le serveur est aussi supprimé lorsqu’un élément est envoyé à la corbeille depuis la section « Completed » de l’interface
- DEFAULT_OPTION_PLAYLIST_ITEM_LIMIT définit le nombre maximal d’éléments téléchargeables depuis une playlist ; la valeur par défaut
0 signifie aucune limite
- Les valeurs par défaut liées aux abonnements se règlent aussi via des variables d’environnement
- SUBSCRIPTION_DEFAULT_CHECK_INTERVAL : intervalle de vérification automatique par abonnement,
60 minutes par défaut
- SUBSCRIPTION_SCAN_PLAYLIST_END : nombre maximal d’éléments de playlist ou de chaîne récupérés lors de la vérification d’un abonnement,
50 par défaut
- SUBSCRIPTION_MAX_SEEN_IDS : limite supérieure du nombre d’identifiants de vidéos stockés par abonnement,
50000 par défaut
- DOWNLOAD_DIR est le chemin de stockage des téléchargements, avec
/downloads comme valeur par défaut dans l’image Docker
- Les téléchargements audio seuls peuvent utiliser un chemin de stockage séparé via AUDIO_DOWNLOAD_DIR
- CUSTOM_DIRS et CREATE_CUSTOM_DIRS permettent de choisir dans l’interface un sous-répertoire de téléchargement ou de le créer automatiquement
- STATE_DIR stocke des fichiers d’état persistants comme
queue.json, pending.json, completed.json et subscriptions.json
- TEMP_DIR est le chemin des fichiers de téléchargement intermédiaires ; utiliser un SSD ou un système de fichiers en RAM peut améliorer les performances, mais un système de fichiers en RAM peut empêcher la reprise d’un téléchargement
Nommage des fichiers et options yt-dlp
- OUTPUT_TEMPLATE est le modèle de nom de fichier des téléchargements, avec
%(title)s.%(ext)s comme valeur par défaut
- Il est possible de définir séparément des modèles pour les chapitres, playlists et téléchargements de chaînes
-
OUTPUT_TEMPLATE_CHAPTER
-
OUTPUT_TEMPLATE_PLAYLIST
- OUTPUT_TEMPLATE_CHANNEL
- Les options
yt-dlp sont définies sous forme d’objet JSON
- La hiérarchie des options s’applique du niveau le plus large au plus spécifique
- Options globales : valeurs par défaut pour tous les téléchargements
- Préréglages : ensembles nommés d’options sélectionnables par téléchargement dans l’interface
- Surcharges par téléchargement : options saisies librement et appliquées à un téléchargement précis
- En cas de conflit de clé, le paramètre le plus spécifique l’emporte
- Les surcharges par téléchargement priment sur les préréglages
- Les préréglages priment sur les options globales
- Définir une valeur d’option à
null dans le JSON supprime cette option pour le téléchargement concerné
YTDL_OPTIONS_FILE et YTDL_OPTIONS_PRESETS_FILE surveillent les changements de fichier et rechargent automatiquement leur contenu, sans nécessiter de redémarrage du conteneur
- Si des fichiers et des variables d’environnement sont utilisés ensemble et définissent la même clé ou le même nom de préréglage, la configuration du fichier est prioritaire
Préréglages et surcharges
- Les préréglages apparaissent dans l’interface sous Advanced Options, dans « Option Presets »
- Les préréglages d’exemple effectuent les opérations suivantes
- sponsorblock : supprime les segments sponsor, selfpromo et interaction
- embed-subs : télécharge les sous-titres anglais et allemands et les intègre dans le fichier vidéo
- limit-rate : limite la vitesse de téléchargement à environ 5 MB/s
- Si plusieurs préréglages sont sélectionnés, ils s’appliquent dans l’ordre, et pour une même option, le préréglage suivant écrase le précédent
- Si ALLOW_YTDL_OPTIONS_OVERRIDES est défini à
true, un champ JSON libre « Custom yt-dlp Options » apparaît dans l’interface
- Les surcharges par téléchargement sont désactivées par défaut
- Si cette fonctionnalité est activée, toute personne ayant accès à l’interface peut fournir des options arbitraires de l’API
yt-dlp ; selon les options, cela peut permettre l’exécution de commandes arbitraires dans le conteneur, elle ne doit donc être activée que dans un environnement de confiance
- MeTube force ses propres comportements
extract_flat et noplaylist lors de l’étape initiale de récupération des métadonnées, et les préréglages ne peuvent pas écraser ces clés à cette étape
Cookies, intégration navigateur et lancement rapide
- Les cookies du navigateur peuvent être utilisés lorsqu’il faut télécharger des vidéos restreintes ou privées
- Exporter les cookies en
cookies.txt via une extension Firefox ou Chrome
- Les envoyer via Upload Cookies dans les Advanced Options de MeTube
- Supprimer les cookies envoyés avec Delete Cookies dans la même section
- Les extensions de navigateur permettent d’envoyer directement une vidéo vers MeTube via clic droit
- Pour un usage sur des pages HTTPS, l’instance MeTube doit être derrière un reverse proxy HTTPS
- Les extensions envoient des requêtes depuis les origines
chrome-extension://... ou moz-extension://..., ce qui nécessite le paramètre CORS_ALLOWED_ORIGINS=*
- L’extension Chrome peut être installée depuis le Google Chrome Webstore ou via les sources
- L’extension Firefox peut être installée depuis les Firefox Addons ou via les sources
- Le raccourci iOS permet d’envoyer une URL à MeTube depuis le menu de partage de Safari
- Le bookmarklet envoie à MeTube la page web actuellement ouverte ; sur les pages HTTPS, MeTube doit être configuré en HTTPS ou placé derrière un reverse proxy HTTPS
- Comme le bookmarklet envoie une requête cross-origin depuis l’origine de la page actuelle vers MeTube, il faut ajouter l’origine du site utilisé à CORS_ALLOWED_ORIGINS
- L’extension MeTube pour Raycast permet d’ajouter directement des vidéos depuis Raycast
Serveur web, HTTPS et reverse proxy
- Les paramètres liés au serveur web se règlent via des variables d’environnement
- HOST a pour valeur par défaut
0.0.0.0
- PORT a pour valeur par défaut
8081
- URL_PREFIX est utilisé pour un déploiement sur sous-chemin derrière un reverse proxy
- PUBLIC_HOST_URL et PUBLIC_HOST_AUDIO_URL modifient l’URL de base des liens de téléchargement des fichiers terminés
- Si HTTPS vaut
true et que CERTFILE et KEYFILE sont définis, MeTube démarre en mode HTTPS
- Un reverse proxy peut être utilisé pour la terminaison HTTPS ou l’authentification
- L’image
linuxserver/swag inclut des fragments de configuration en sous-dossier et sous-domaine pour MeTube, ainsi qu’une configuration d’authentification Authelia
- L’exemple NGINX proxifie le chemin
/metube/ vers http://metube:8081 et définit les en-têtes Upgrade et Connection pour le fonctionnement de WebSocket
- Des exemples de reverse proxy pour Apache et Caddy sont également fournis
Mises à jour, dépannage et développement local
- MeTube dépend de yt-dlp, qui doit être mis à jour fréquemment en raison des changements de mise en page des sites vidéo
- Lorsqu’une nouvelle version stable de
yt-dlp est publiée, une nouvelle image Docker MeTube est publiée automatiquement
- Pour maintenir le conteneur à jour, il est possible d’utiliser watchtower
- Pour suivre le canal nightly de
yt-dlp, définir YTDL_NIGHTLY_UPDATE_TIME avec l’heure du jour au format HH:MM pour effectuer la mise à niveau quotidienne et redémarrer MeTube
- Pour les problèmes d’authentification, de post-traitement, de permissions ou de
YTDL_OPTIONS, il est recommandé de d’abord déboguer directement dans yt-dlp, puis de reporter les options fonctionnelles dans MeTube
- La construction et l’exécution locales nécessitent Node.js 22+ et Python 3.13
- L’interface se construit avec
pnpm, les dépendances Python s’installent avec uv sync, puis l’application se lance avec uv run python3 app/main.py
- L’image Docker peut être construite localement avec
docker build -t metube ., ce qui construit aussi l’interface utilisateur
1 commentaires
Avis de Hacker News
Tube Archivist mérite aussi d’être envisagé. C’est excessif si l’on veut seulement récupérer quelques vidéos, mais je l’utilise pour archiver et indexer mes chaînes tech préférées.
On peut faire une recherche en texte intégral et dans les métadonnées, non seulement sur les transcriptions/sous-titres, mais aussi sur les commentaires, les titres et les descriptions ; c’est agaçant de constater que c’est bien mieux que ce qu’offre Alphabet.
https://www.tubearchivist.com/
https://github.com/kieraneglin/pinchflat
Je pourrais comprendre pour un stockage temporaire, mais un outil qui se présente comme un logiciel d’« archivage » devrait partir du principe qu’il risque de ne pas survivre aux données qu’il cherche à préserver.
J’espérais quelque chose comme un clone de PeerTube avec fonction de téléchargement, mais le résultat m’a refroidi ;
yt-dlpavec une configuration et des scripts bien pensés fait bien mieux le travail d’archivage.https://news.ycombinator.com/item?id=41100820
Heureusement, j’ai la chaîne de format utilisée pour enregistrer les noms de fichiers, et comme TubeSync utilise un backend Django et PostgreSQL, il y a peut-être moyen de faire le lien avec les ID YouTube. Mais la migration a quand même l’air d’un vrai cauchemar.
Ce que je veux vraiment, c’est un TiVo pour YouTube.
Il y a une centaine de chaînes que je suis presque religieusement, mais qui publient rarement, et je ne veux absolument pas rater leurs vidéos.
Je n’ai pas non plus envie de fouiller sur YouTube parmi des centaines de nouvelles vidéos de chaînes qui publient quatre fois par jour pour trouver les une ou deux que j’ai vraiment envie de regarder. Au final, je les rate.
J’aimerais avoir un flux priorisé ne contenant que ce que je veux vraiment voir ou dois voir, et ce serait encore mieux si je pouvais tout télécharger et le regarder via DLNA.
Le mode de fonctionnement de YouTube n’est pas de nous aider à ne pas manquer ce qu’on aime. Le mode de fonctionnement de YouTube, c’est de nous faire regarder des vidéos de 3 minutes étirées en 18 à 22 minutes tout en nous collant la boucle de feedback au visage.
Si c’est parce que tu ne veux pas créer de compte, d’accord, et NewPipe conviendra bien ; mais il existe une page dédiée qui affiche chronologiquement les vidéos des chaînes que tu as choisies, donc dire que « le mode de fonctionnement de YouTube n’est pas de nous aider à ne pas manquer ce qu’on aime » me paraît un peu étrange.
La découvrabilité n’est pas géniale, mais si ce n’est pas nécessaire pour ton cas d’usage, ça vaut le coup d’y jeter un œil.
https://fraidyc.at/
Il y a quelque chose que je ne comprends pas. Pourquoi faut-il l’héberger sur un serveur ? Une application autonome qui tourne sous Windows/Linux/mac ne suffirait-elle pas ?
J’ai commencé récemment à utiliser
yt-dlpet je me demandais si je pourrais créer une petite appli. Ça vaut le coup ? Existe-t-il déjà des alternatives de ce genre ?Beaucoup de gens font tourner des applis auto-hébergées sur un serveur externe, un homelab, ou une combinaison des deux, et configurent ces ressources comme une infrastructure avec sauvegardes, etc. En gardant les PC/portables/tablettes/téléphones comme de simples clients ou caches, ils sont faciles à remplacer en cas de perte ou de casse : il suffit de récupérer le contenu local synchronisé avec le serveur. C’est l’une des raisons pour lesquelles ce type d’auto-hébergement est populaire
J’ai déjà vu quelques applications desktop qui encapsulent
yt-dlp. Je ne les ai pas utilisées moi-même, donc je ne peux pas me prononcer sur leur stabilité ou leur fiabilité, mais si tu ne veux pas en créer une nouvelle juste pour le plaisir, mieux vaut chercher d’abord. Ce que tu veux existe peut-être déjàyt-dlppour streamer quand on lui demande d’ouvrir une URL prise en charge. Parabolic est un outil de téléchargement dédié qui utiliseyt-dlphttps://flathub.org/apps/details/io.github.celluloid_player....
https://flathub.org/apps/org.nickvision.tubeconverter
yt-dlpn’est pas indispensable. On peut le faire avec beaucoup moins de code et de complexité, et j’utilise pour cela un tout petit programme en C. Un petit script shell fonctionne aussi très bienCe dont personne ne parle, c’est que
yt-dlpne peut désormais plus télécharger itag 22, et que itag 18 est limité en débit. Doncyt-dlpdoit télécharger séparément les fichiers audio et vidéo, puis les fusionner avecffmpegLes revenus publicitaires de YouTube viennent tout juste de manquer les estimations du consensus. L’accessibilité des vidéos YouTube pourrait encore se dégrader à l’avenir
Si tu n’as pas l’habitude de choisir un format précis, tu risques de ne pas vraiment le remarquer. Par exemple, certaines personnes n’ont utilisé que les itag 18 et 22 pendant des années
https://freetubeapp.io/
Une appli web dockerisée est bien plus simple à créer et à maintenir que des clients desktop/mobile distincts pour Windows, macOS, Android, iOS et Linux
Ce serait bien d’avoir une interface intégrée à Jellyfin. L’idée serait de chercher sur YouTube, télécharger avec
yt-dlp, puis streamer via Jellyfin sans publicitéyt-dlpest manuelle. Un plugin Jellyfin serait excellentPlutôt sympa. Pour l’instant j’utilise https://cobalt.tools, et c’est pas mal aussi
J’ai découvert que Brave pour iOS avait un bouton de playlist permettant de télécharger des vidéos YouTube et de les stocker sur l’appareil. Ça permet le PiP et la lecture hors ligne, sans publicité
Il utilise une licence ouverte basée sur le backend iOS de Mozilla, et je me demande pourquoi davantage d’apps ne font pas pareil. Ils ont trouvé comment faire accepter ça par Apple, et le CEO a déjà publié ici un message défendant la validité de cette technique
En gros, cela ne fonctionne qu’après avoir chargé la vidéo dans le site YouTube classique, et c’est comme un bouton de mode lecture qui s’applique à n’importe quel contenu vidéo, pas seulement YouTube
Je suis un peu surpris qu’il y ait autant d’outils de mirroring pour YouTube. Si l’on utilise ce genre de chose, quelle est la raison de télécharger/archiver les vidéos plutôt que de simplement les streamer depuis YouTube ?
Je comprends qu’il puisse être utile de les conserver au cas où elles seraient supprimées de YouTube, mais dans mon cas c’est très rare. Une fois la vidéo regardée, c’est fini, et si je ne peux plus la revoir, ça ne me dérange pas vraiment
Premièrement, la suppression des pubs est une raison assez importante pour beaucoup de gens
Deuxièmement, comme tu l’as déjà écrit, si une vidéo ou toute une chaîne disparaît à cause d’une réclamation de droits d’auteur ou d’autres signalements, on ne peut plus la streamer. Selon le contenu regardé, cela peut compter beaucoup plus pour certaines personnes que pour toi
Troisièmement, on peut télécharger pour la lecture hors ligne. C’est aussi possible avec l’application YouTube officielle, mais il faut payer Premium, dont le prix paraît excessif, et cela reste soumis au problème des suppressions
Quatrièmement, l’indexation locale. Si l’on veut référencer une vidéo pour la revoir ou la partager plus tard, il peut être plus pratique de l’organiser selon sa propre structure que de conserver un favori vers la copie YouTube ou de refaire une recherche à chaque fois
Ces raisons peuvent se combiner, et il y en a sûrement d’autres auxquelles je n’ai pas pensé ou que j’ai oubliées
La plupart de ce que je télécharge, je le regarde une fois puis je le supprime
En plus, il y a des moments où le streaming YouTube est impossible. Internet peut être coupé, on peut être sur un forfait mobile à l’étranger avec des coûts élevés, ou on peut simplement vouloir se débarrasser de pubs nulles
Connexe : Yark: YouTube Archiver with Offline UI
https://news.ycombinator.com/item?id=41100820
Je pense que si l’on enveloppait l’un des serveurs basés sur
yt-dlpdans un outil de création d’image très simple, façon Pi-hole, avec une bonne application cliente front-end pour la lecture, ça pourrait décoller largement, comme Pi-hole s’est diffusé auprès d’utilisateurs moins techniquesOn achète un Raspberry Pi, on flashe une carte microSD avec l’image, on choisit ses chaînes YouTube préférées, on installe l’application cliente, et tout son contenu YouTube favori est disponible en local, sans publicité
Pour l’instant, j’utilise TubeSync. Ses fonctionnalités sont simples et il y a pas mal de bugs, mais ça fonctionne suffisamment bien pour moi
Tout ce dont j’ai besoin, c’est de m’abonner à des chaînes ou des playlists, de télécharger les vidéos vers un chemin précis, et de vérifier une fois par jour s’il y a du nouveau contenu
Côté UX, il suffit de configurer les chaînes ; ensuite, il n’y a plus qu’à stocker les fichiers et laisser Plex se débrouiller. Quelqu’un connaît une meilleure option ?