6 puntos por GN⁺ 2024-07-30 | 1 comentarios | Compartir por WhatsApp
  • Fin del soporte para compilaciones ARM de 32 bits

    • Las nuevas versiones de Node ya no soportan ARM de 32 bits
    • Por actualizaciones de seguridad y problemas de dependencias, se requiere migrar a un SO de 64 bits
  • Introducción a MeTube

    • GUI web de youtube-dl (usa un fork de yt-dlp)
    • Soporta descarga de videos desde YouTube y varios otros sitios

Ejecutar con Docker

  • Comando de Docker

    docker run -d -p 8081:8081 -v /path/to/downloads:/downloads ghcr.io/alexta69/metube
    
  • Ejemplo de 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
    

Configuración con variables de entorno

  • UID: ID del usuario con el que se ejecutará MeTube (predeterminado: 1000)
  • GID: ID del grupo con el que se ejecutará MeTube (predeterminado: 1000)
  • UMASK: valor de umask (predeterminado: 022)
  • DEFAULT_THEME: tema predeterminado (light, dark, auto, predeterminado: auto)
  • DOWNLOAD_DIR: ruta donde se guardan las descargas (predeterminado: /downloads)
  • AUDIO_DOWNLOAD_DIR: ruta donde se guardan las descargas de solo audio (predeterminado: DOWNLOAD_DIR)
  • DOWNLOAD_DIRS_INDEXABLE: si el directorio de descargas puede indexarse (predeterminado: false)
  • CUSTOM_DIRS: si se habilitan las descargas en directorios personalizados (predeterminado: true)
  • CREATE_CUSTOM_DIRS: si se permite crear directorios automáticamente (predeterminado: true)
  • STATE_DIR: ruta donde se guardan los archivos de persistencia de la cola (predeterminado: /downloads/.metube)
  • TEMP_DIR: ruta donde se guardan los archivos temporales de descarga (predeterminado: /downloads)
  • DELETE_FILE_ON_TRASHCAN: si los archivos eliminados desde la UI también se eliminan del servidor (predeterminado: false)
  • URL_PREFIX: ruta base del servidor web (predeterminado: /)
  • PUBLIC_HOST_URL: URL base de los enlaces de descarga mostrados en la UI
  • PUBLIC_HOST_AUDIO_URL: URL base de los enlaces de descarga de audio
  • OUTPUT_TEMPLATE: plantilla de nombre para los archivos descargados (predeterminado: %(title)s.%(ext)s)
  • OUTPUT_TEMPLATE_CHAPTER: plantilla de nombre para archivos de video divididos por capítulos (predeterminado: %(title)s - %(section_number)s %(section_title)s.%(ext)s)
  • YTDL_OPTIONS: opciones adicionales que se pasarán a youtube-dl (formato JSON)
  • YTDL_OPTIONS_FILE: ruta a un archivo JSON para poblar YTDL_OPTIONS

Uso de cookies del navegador

  • Agregar a docker-compose.yml

    volumes:
      - /path/to/cookies:/cookies
    environment:
      - YTDL_OPTIONS={"cookiefile":"/cookies/cookies.txt"}
    
  • Instalar una extensión para extraer cookies

    • Firefox
    • Chrome

Extensiones del navegador

  • Chrome: disponible para instalar desde Google Chrome Webstore
  • Firefox: disponible para instalar desde Firefox Addons

Atajo de iOS

  • Atajo de iOS: envía una URL desde Safari a MeTube
  • Se requiere ingresar la dirección y el puerto del servidor

Compatibilidad con iOS

  • Requisitos de archivos de video en iOS: se requieren los códecs de video h264 o h265 y el códec de audio aac
  • Al descargar en formato MP4 se puede elegir la opción "Best (iOS)"

Bookmarklet

  • Bookmarklet de Chrome: envía la página web abierta actualmente a MeTube
  • Si se usa en páginas HTTPS, se requiere un proxy inverso HTTPS

Ejecutar detrás de un proxy inverso

  • Ejemplo de configuración de 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;
    }
    
  • Ejemplo de configuración de 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>
    
  • Ejemplo de configuración de Caddy

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

Actualizaciones de yt-dlp

  • Compilación nocturna automática: si hay una nueva versión de yt-dlp, se compila automáticamente y se actualiza la imagen de Docker
  • Se recomienda instalar y configurar watchtower

Solución de problemas y envío de issues

  • MeTube es una UI para yt-dlp: no envíes al proyecto MeTube problemas relacionados con yt-dlp
  • Se recomienda usar directamente el comando de yt-dlp: prueba las opciones y luego aplícalas en YTDL_OPTIONS

Compilación y ejecución local

  • Herramientas necesarias: node.js y 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
    
  • Compilar la imagen de Docker localmente

    docker build -t metube .
    

Notas de desarrollo

  • Funciona en Windows, macOS y Linux
  • Si ejecutas el servidor desde VSCode, la carpeta de descargas será la carpeta Downloads del usuario

Resumen de GN⁺

  • MeTube es una GUI web de youtube-dl que ofrece la capacidad de descargar videos desde varios sitios
  • Puede desplegarse y configurarse fácilmente con Docker, y permite personalización mediante diversas variables de entorno
  • Permite descargar videos cómodamente mediante extensiones del navegador y atajos de iOS
  • Mantiene siempre la versión más reciente al actualizar automáticamente a la última versión de yt-dlp
  • Entre los proyectos con funciones similares están JDownloader y Video DownloadHelper

1 comentarios

 
GN⁺ 2024-07-30
Opiniones de Hacker News
  • Tube Archivist es útil para archivar e indexar canales técnicos

    • Ofrece búsqueda avanzada de texto completo y metadatos
    • Tiene una búsqueda mucho mejor que la de Alphabet
  • Quieren algo como un TiVo para YouTube

    • No quieren perderse los 100 canales que ven con frecuencia
    • Necesitan un feed con prioridades
    • Mejor aún si se puede descargar y ver por DLNA
    • A YouTube no le interesa ayudar a que los usuarios no se pierdan el contenido que les gusta
  • Están pensando en hacer una app sencilla usando yt-dlp

    • Creen que no hace falta alojarla en un servidor
    • Se preguntan si hay alguna alternativa
  • Estaría bien tener una interfaz que se integre con Jellyfin

    • Buscar YouTube, descargar con yt-dlp y luego hacer streaming por Jellyfin sin anuncios
  • Les parece curioso que haya tantas herramientas para hacer mirroring de YouTube

    • Se preguntan por qué la gente descarga/archiva videos
    • Archivar por si borran el video está bien, pero en lo personal les pasa rara vez
    • Creen que, una vez visto un video, no hace falta volver a verlo
  • Un servidor basado en yt-dlp podría volverse popular si viniera empaquetado como PiHole, con una imagen sencilla y una app cliente frontend

    • Comprar una Raspberry Pi, grabar la imagen en una tarjeta microSD, elegir los canales de YT favoritos e instalar la app cliente, y así tener contenido de YT sin anuncios en local
  • Están usando TubeSync

    • A pesar de sus funciones simples y muchos bugs, funciona lo suficientemente bien
    • Permite suscribirse a canales o playlists, descargar los videos a una ruta y revisar una vez al día si hay contenido nuevo
    • Solo le falta una buena UX para configurar canales
    • Guarda los archivos y deja que Plex se encargue del resto
    • Se preguntan si existe una opción mejor
  • Están usando Cobalt.tools

    • Están satisfechos
  • Descargan videos que agregaron a playlists y los guardan en un servidor compartido de Plex

    • Principalmente archivan videos de conciertos y partes de skate
  • Como herramienta relacionada está Yark: YouTube Archiver with Offline UI