6 points par GN⁺ 2024-07-30 | 1 commentaires | Partager sur WhatsApp
  • Arrêt des builds ARM 32 bits

    • Les nouvelles versions de Node ne prennent pas en charge ARM 32 bits
    • Une migration vers un OS 64 bits est nécessaire en raison des mises à jour de sécurité et des problèmes de dépendances
  • Présentation de MeTube

    • Interface web de youtube-dl (utilisant le fork yt-dlp)
    • Prend en charge le téléchargement de vidéos depuis YouTube et de nombreux autres sites

Exécution avec Docker

  • Commande Docker

    docker run -d -p 8081:8081 -v /path/to/downloads:/downloads ghcr.io/alexta69/metube
    
  • Exemple docker-compose

    version: "3"
    services:
      metube:
        image: ghcr.io/alexta69/metube
        container_name: metube
        restart: unless-stopped
        ports:
          - "8081:8081"
        volumes:
          - /path/to/downloads:/downloads
    

Configuration via variables d'environnement

  • UID : identifiant utilisateur sous lequel MeTube s'exécute (par défaut : 1000)
  • GID : identifiant de groupe sous lequel MeTube s'exécute (par défaut : 1000)
  • UMASK : valeur umask (par défaut : 022)
  • DEFAULT_THEME : thème par défaut (light, dark, auto, par défaut : auto)
  • DOWNLOAD_DIR : chemin de stockage des téléchargements (par défaut : /downloads)
  • AUDIO_DOWNLOAD_DIR : chemin de stockage des téléchargements audio uniquement (par défaut : DOWNLOAD_DIR)
  • DOWNLOAD_DIRS_INDEXABLE : indique si le répertoire de téléchargement peut être indexé (par défaut : false)
  • CUSTOM_DIRS : active ou non le téléchargement vers des répertoires personnalisés (par défaut : true)
  • CREATE_CUSTOM_DIRS : indique si la création automatique de répertoires est prise en charge (par défaut : true)
  • STATE_DIR : chemin de stockage des fichiers de persistance de la file d'attente (par défaut : /downloads/.metube)
  • TEMP_DIR : chemin de stockage des fichiers de téléchargement temporaires (par défaut : /downloads)
  • DELETE_FILE_ON_TRASHCAN : indique si les fichiers supprimés depuis l'UI sont aussi supprimés sur le serveur (par défaut : false)
  • URL_PREFIX : chemin de base du serveur web (par défaut : /)
  • PUBLIC_HOST_URL : URL de base des liens de téléchargement affichés dans l'UI
  • PUBLIC_HOST_AUDIO_URL : URL de base des liens de téléchargement audio
  • OUTPUT_TEMPLATE : modèle de nom de fichier téléchargé (par défaut : %(title)s.%(ext)s)
  • OUTPUT_TEMPLATE_CHAPTER : modèle de nom de fichier pour les vidéos découpées en chapitres (par défaut : %(title)s - %(section_number)s %(section_title)s.%(ext)s)
  • YTDL_OPTIONS : options supplémentaires à transmettre à youtube-dl (au format JSON)
  • YTDL_OPTIONS_FILE : chemin du fichier JSON servant à renseigner YTDL_OPTIONS

Utilisation des cookies du navigateur

  • À ajouter dans docker-compose.yml

    volumes:
      - /path/to/cookies:/cookies
    environment:
      - YTDL_OPTIONS={"cookiefile":"/cookies/cookies.txt"}
    
  • Installer une extension d'extraction des cookies

    • Firefox
    • Chrome

Extensions de navigateur

  • Chrome : installation possible depuis le Google Chrome Webstore
  • Firefox : installation possible depuis Firefox Addons

Raccourci iOS

  • Raccourci iOS : envoie une URL depuis Safari vers MeTube
  • Saisie requise de l'adresse du serveur et du port

Compatibilité iOS

  • Exigences des fichiers vidéo iOS : codec vidéo h264 ou h265 et codec audio aac requis
  • Lors d'un téléchargement au format MP4, l'option "Best (iOS)" peut être sélectionnée

Bookmarklet

  • Bookmarklet Chrome : envoie la page web actuellement ouverte vers MeTube
  • Un proxy inverse HTTPS est nécessaire en cas d'utilisation sur une page HTTPS

Exécution derrière un proxy inverse

  • Exemple de configuration NGINX

    location /metube/ {
      proxy_pass http://metube:8081;
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "upgrade";
      proxy_set_header Host $host;
    }
    
  • Exemple de configuration Apache

    <Location /metube/>
      ProxyPass http://localhost:8081/ retry=0 timeout=30
      ProxyPassReverse http://localhost:8081/
    </Location>
    <Location /metube/socket.io>
      RewriteEngine On
      RewriteCond %{QUERY_STRING} transport=websocket [NC]
      RewriteRule /(.*) ws://localhost:8081/socket.io/$1 [P,L]
      ProxyPass http://localhost:8081/socket.io retry=0 timeout=30
      ProxyPassReverse http://localhost:8081/socket.io
    </Location>
    
  • Exemple de configuration Caddy

    example.com {
      route /metube/* {
        uri strip_prefix metube
        reverse_proxy metube:8081
      }
    }
    

Mise à jour de yt-dlp

  • Builds nightly automatiques : si une nouvelle version de yt-dlp est disponible, le build est lancé automatiquement et l'image Docker est mise à jour
  • Installation et configuration de watchtower recommandées

Dépannage et soumission d'issues

  • MeTube est l'UI de yt-dlp : ne pas soumettre au projet MeTube les problèmes liés à yt-dlp
  • Utilisation directe de la commande yt-dlp recommandée : tester d'abord les options puis les appliquer à YTDL_OPTIONS

Build et exécution en local

  • Outils requis : node.js et Python 3.11

    cd metube/ui
    npm install
    node_modules/.bin/ng build
    cd ..
    pip3 install pipenv
    pipenv install
    pipenv run python3 app/main.py
    
  • Build local de l'image Docker

    docker build -t metube .
    

Notes de développement

  • Fonctionne sous Windows, macOS et Linux
  • Lors de l'exécution du serveur dans VSCode, le dossier de téléchargement est le dossier Downloads de l'utilisateur

Résumé de GN⁺

  • MeTube est l'interface web de youtube-dl et permet de télécharger des vidéos depuis de nombreux sites
  • Il peut être déployé et configuré facilement avec Docker, avec de nombreuses variables d'environnement pour la personnalisation
  • Les extensions de navigateur et les raccourcis iOS permettent de télécharger des vidéos plus facilement
  • La dernière version de yt-dlp est maintenue à jour automatiquement
  • Parmi les projets offrant des fonctionnalités similaires, on trouve JDownloader et Video DownloadHelper

1 commentaires

 
GN⁺ 2024-07-30
Avis sur Hacker News
  • Tube Archivist est utile pour archiver et indexer des chaînes techniques

    • Il offre des fonctions avancées de recherche plein texte et de métadonnées
    • Il propose une recherche bien meilleure que celle d'Alphabet
  • Quelqu'un aimerait une fonctionnalité de type TiVo pour YouTube

    • Il ne veut pas rater les 100 chaînes qu'il regarde régulièrement
    • Il a besoin d'un flux prioritaire
    • Ce serait encore mieux s'il était possible de télécharger puis de regarder via DLNA
    • YouTube ne semble pas se soucier d'éviter aux utilisateurs de manquer les contenus qu'ils aiment
  • Quelqu'un envisage de créer une application simple avec yt-dlp

    • Il pense qu'il n'est pas nécessaire de l'héberger sur un serveur
    • Il se demande s'il existe des alternatives
  • Ce serait bien d'avoir une interface intégrée à Jellyfin

    • Rechercher sur YouTube, télécharger avec yt-dlp, puis streamer via Jellyfin sans publicité
  • Quelqu'un trouve étonnant qu'il existe autant d'outils de mirroring YouTube

    • Il se demande pourquoi télécharger/archiver des vidéos
    • Les archiver en cas de suppression peut être utile, mais personnellement cela arrive rarement
    • Il estime qu'une fois une vidéo vue, il n'y a pas besoin de la revoir
  • Un serveur basé sur yt-dlp pourrait devenir populaire s'il était packagé avec une image simple et une application cliente frontend, à la manière de PiHole

    • Acheter un Raspberry Pi, flasher une carte microSD, choisir ses chaînes YT préférées et installer l'application cliente permettrait d'accéder localement à des contenus YT sans publicité
  • Quelqu'un utilise TubeSync

    • Malgré des fonctions simples et beaucoup de bugs, cela fonctionne suffisamment bien
    • Il permet de s'abonner à des chaînes ou playlists, de télécharger les vidéos dans un chemin donné et de vérifier une fois par jour les nouveaux contenus
    • Il ne manque qu'une UX pour configurer les chaînes
    • Il stocke les fichiers et laisse Plex gérer le reste
    • Il se demande s'il existe de meilleures options
  • Quelqu'un utilise Cobalt.tools

    • Il en est satisfait
  • Quelqu'un télécharge les vidéos ajoutées à une playlist et les stocke sur un serveur Plex partagé

    • Il archive surtout des vidéos de concerts et des séquences de skate
  • Outil connexe : Yark: YouTube Archiver with Offline UI