6 Punkte von GN⁺ 2024-07-30 | 1 Kommentare | Auf WhatsApp teilen
  • 32-Bit-ARM-Build eingestellt

    • Neue Node-Versionen unterstützen 32-Bit-ARM nicht
    • Wegen Sicherheitsupdates und Abhängigkeitsproblemen ist eine Migration auf ein 64-Bit-OS erforderlich
  • MeTube im Überblick

    • Web-GUI für youtube-dl (verwendet einen yt-dlp-Fork)
    • Unterstützt das Herunterladen von Videos von YouTube und vielen weiteren Websites

Mit Docker ausführen

  • Docker-Befehl

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

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

Konfiguration per Umgebungsvariablen

  • UID: Benutzer-ID, unter der MeTube ausgeführt wird (Standard: 1000)
  • GID: Gruppen-ID, unter der MeTube ausgeführt wird (Standard: 1000)
  • UMASK: umask-Wert (Standard: 022)
  • DEFAULT_THEME: Standard-Theme (light, dark, auto, Standard: auto)
  • DOWNLOAD_DIR: Speicherpfad für Downloads (Standard: /downloads)
  • AUDIO_DOWNLOAD_DIR: Speicherpfad nur für Audio-Downloads (Standard: DOWNLOAD_DIR)
  • DOWNLOAD_DIRS_INDEXABLE: Ob Download-Verzeichnisse indexierbar sind (Standard: false)
  • CUSTOM_DIRS: Ob Downloads in benutzerdefinierte Verzeichnisse aktiviert sind (Standard: true)
  • CREATE_CUSTOM_DIRS: Ob die automatische Erstellung von Verzeichnissen unterstützt wird (Standard: true)
  • STATE_DIR: Speicherpfad für Dateien zur Warteschlangen-Persistenz (Standard: /downloads/.metube)
  • TEMP_DIR: Speicherpfad für temporäre Download-Dateien (Standard: /downloads)
  • DELETE_FILE_ON_TRASHCAN: Ob in der UI gelöschte Dateien auch auf dem Server gelöscht werden (Standard: false)
  • URL_PREFIX: Basispfad des Webservers (Standard: /)
  • PUBLIC_HOST_URL: Basis-URL der in der UI angezeigten Download-Links
  • PUBLIC_HOST_AUDIO_URL: Basis-URL der Audio-Download-Links
  • OUTPUT_TEMPLATE: Dateinamensvorlage für Downloads (Standard: %(title)s.%(ext)s)
  • OUTPUT_TEMPLATE_CHAPTER: Dateinamensvorlage für nach Kapiteln aufgeteilte Videos (Standard: %(title)s - %(section_number)s %(section_title)s.%(ext)s)
  • YTDL_OPTIONS: Zusätzliche Optionen, die an youtube-dl übergeben werden (JSON-Format)
  • YTDL_OPTIONS_FILE: Pfad zu einer JSON-Datei zum Befüllen von YTDL_OPTIONS

Browser-Cookies verwenden

  • Zu docker-compose.yml hinzufügen

    volumes:
      - /path/to/cookies:/cookies
    environment:
      - YTDL_OPTIONS={"cookiefile":"/cookies/cookies.txt"}
    
  • Erweiterung zum Extrahieren von Cookies installieren

    • Firefox
    • Chrome

Browser-Erweiterungen

  • Chrome: Im Google Chrome Webstore installierbar
  • Firefox: Über Firefox Add-ons installierbar

iOS-Kurzbefehle

  • iOS-Kurzbefehl: Sendet eine URL aus Safari an MeTube
  • Serveradresse und Port müssen eingegeben werden

iOS-Kompatibilität

  • Anforderungen an iOS-Videodateien: Erfordert die Videocodecs h264 oder h265 sowie den Audiocodec aac
  • Beim Download im MP4-Format kann die Option „Best (iOS)“ gewählt werden

Bookmarklet

  • Chrome-Bookmarklet: Sendet die aktuell geöffnete Webseite an MeTube
  • Bei Verwendung auf HTTPS-Seiten ist ein HTTPS-Reverse-Proxy erforderlich

Hinter einem Reverse-Proxy ausführen

  • NGINX-Konfigurationsbeispiel

    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;
    }
    
  • Apache-Konfigurationsbeispiel

    <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>
    
  • Caddy-Konfigurationsbeispiel

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

yt-dlp-Updates

  • Automatische Nightly-Builds: Wenn es eine neue yt-dlp-Version gibt, wird automatisch gebaut und das Docker-Image aktualisiert
  • Installation und Konfiguration von watchtower empfohlen

Fehlerbehebung und Issues melden

  • MeTube ist eine UI für yt-dlp: Probleme im Zusammenhang mit yt-dlp sollten nicht im MeTube-Projekt gemeldet werden
  • Direkte Verwendung des yt-dlp-Befehls empfohlen: Optionen zuerst testen und dann auf YTDL_OPTIONS anwenden

Lokal bauen und ausführen

  • Erforderliche Werkzeuge: node.js und 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
    
  • Docker-Image lokal bauen

    docker build -t metube .
    

Entwicklungsnotizen

  • Funktioniert unter Windows, macOS und Linux
  • Wenn der Server in VSCode ausgeführt wird, ist der Download-Ordner der Downloads-Ordner des Benutzers

Zusammenfassung von GN⁺

  • MeTube ist eine Web-GUI für youtube-dl, mit der Videos von verschiedenen Websites heruntergeladen werden können
  • Mit Docker lässt es sich einfach bereitstellen und konfigurieren, zudem sind über zahlreiche Umgebungsvariablen individuelle Anpassungen möglich
  • Mit Browser-Erweiterungen und iOS-Kurzbefehlen lassen sich Videos bequem herunterladen
  • Durch automatische Updates auf die neueste yt-dlp-Version bleibt es stets aktuell
  • Projekte mit ähnlichem Funktionsumfang sind unter anderem JDownloader und Video DownloadHelper

1 Kommentare

 
GN⁺ 2024-07-30
Hacker-News-Kommentare
  • Tube Archivist ist nützlich, um Technikkanäle zu archivieren und zu indexieren

    • Bietet erweiterte Volltext- und Metadatensuche
    • Liefert eine deutlich bessere Suche als Alphabet
  • Gewünscht wird eine Art YouTube-TiVo

    • Man möchte bei den 100 Kanälen, die man regelmäßig schaut, nichts verpassen
    • Ein priorisierter Feed wird benötigt
    • Noch besser wäre es, wenn man per DLNA herunterladen und ansehen könnte
    • YouTube hat kein Interesse daran, dafür zu sorgen, dass Nutzer ihre Lieblingsinhalte nicht verpassen
  • Es wird darüber nachgedacht, mit yt-dlp eine einfache App zu bauen

    • Vermutlich müsste sie nicht auf einem Server gehostet werden
    • Es wird gefragt, ob es Alternativen gibt
  • Eine Oberfläche mit Jellyfin-Integration wäre wünschenswert

    • Man könnte YouTube durchsuchen, mit yt-dlp herunterladen und anschließend ohne Werbung über Jellyfin streamen
  • Es ist erstaunlich, dass es so viele Tools zum Spiegeln von YouTube gibt

    • Es wird hinterfragt, warum man Videos herunterlädt oder archiviert
    • Für den Fall, dass Videos gelöscht werden, ist Archivierung sinnvoll, persönlich kommt das aber nur selten vor
    • Nach dem Anschauen besteht aus persönlicher Sicht meist kein Bedarf, ein Video erneut zu sehen
  • Ein auf yt-dlp basierender Server könnte populär werden, wenn er wie PiHole als simples Image mit Frontend-Client-App verpackt wäre

    • Man kauft einen Raspberry Pi, bespielt eine microSD-Karte mit dem Image, wählt seine Lieblings-YT-Kanäle aus und installiert die Client-App; danach kann man YT-Inhalte lokal und ohne Werbung nutzen
  • TubeSync wird verwendet

    • Trotz einfacher Funktionen und vieler Bugs funktioniert es ausreichend gut
    • Man kann Kanäle oder Playlists abonnieren, Videos in einen Pfad herunterladen und einmal täglich nach neuen Inhalten suchen
    • Es fehlt nur eine UX zur Konfiguration der Kanäle
    • Die Dateien werden gespeichert und Plex erledigt den Rest
    • Es wird gefragt, ob es bessere Optionen gibt
  • Cobalt.tools wird verwendet

    • Die Erfahrung damit ist positiv
  • Videos, die zu einer Playlist hinzugefügt wurden, werden heruntergeladen und auf einem gemeinsam genutzten Plex-Server gespeichert

    • Hauptsächlich werden Konzertvideos und Skate-Parts archiviert
  • Als verwandtes Tool gibt es Yark: YouTube Archiver with Offline UI