6 pontos por GN⁺ 2024-07-30 | 1 comentários | Compartilhar no WhatsApp
  • Fim do suporte a builds ARM de 32 bits

    • As novas versões do Node não oferecem suporte a ARM de 32 bits
    • É necessário migrar para um sistema operacional de 64 bits por causa de atualizações de segurança e problemas de dependências
  • Introdução ao MeTube

    • GUI web do youtube-dl (usando o fork yt-dlp)
    • Suporta download de vídeos do YouTube e de vários outros sites

Executando com Docker

  • Comando Docker

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

Configuração por variáveis de ambiente

  • UID: ID do usuário sob o qual o MeTube será executado (padrão: 1000)
  • GID: ID do grupo sob o qual o MeTube será executado (padrão: 1000)
  • UMASK: valor de umask (padrão: 022)
  • DEFAULT_THEME: tema padrão (light, dark, auto, padrão: auto)
  • DOWNLOAD_DIR: caminho de armazenamento dos downloads (padrão: /downloads)
  • AUDIO_DOWNLOAD_DIR: caminho de armazenamento dos downloads apenas de áudio (padrão: DOWNLOAD_DIR)
  • DOWNLOAD_DIRS_INDEXABLE: se o diretório de download pode ser indexado (padrão: false)
  • CUSTOM_DIRS: se habilita downloads em diretórios personalizados (padrão: true)
  • CREATE_CUSTOM_DIRS: se oferece suporte à criação automática de diretórios (padrão: true)
  • STATE_DIR: caminho para armazenar os arquivos de persistência da fila (padrão: /downloads/.metube)
  • TEMP_DIR: caminho para armazenar arquivos temporários de download (padrão: /downloads)
  • DELETE_FILE_ON_TRASHCAN: se arquivos excluídos na UI também devem ser apagados do servidor (padrão: false)
  • URL_PREFIX: caminho base do servidor web (padrão: /)
  • PUBLIC_HOST_URL: URL base dos links de download exibidos na UI
  • PUBLIC_HOST_AUDIO_URL: URL base dos links de download de áudio
  • OUTPUT_TEMPLATE: template de nome de arquivo dos downloads (padrão: %(title)s.%(ext)s)
  • OUTPUT_TEMPLATE_CHAPTER: template de nome de arquivo para vídeos divididos por capítulos (padrão: %(title)s - %(section_number)s %(section_title)s.%(ext)s)
  • YTDL_OPTIONS: opções adicionais repassadas ao youtube-dl (formato JSON)
  • YTDL_OPTIONS_FILE: caminho de um arquivo JSON para preencher YTDL_OPTIONS

Uso de cookies do navegador

  • Adicionar ao docker-compose.yml

    volumes:
      - /path/to/cookies:/cookies
    environment:
      - YTDL_OPTIONS={"cookiefile":"/cookies/cookies.txt"}
    
  • Instalar extensão para extração de cookies

    • Firefox
    • Chrome

Extensões de navegador

  • Chrome: pode ser instalada na Google Chrome Webstore
  • Firefox: pode ser instalada nos Firefox Addons

Atalhos do iOS

  • Atalho do iOS: envia a URL do Safari para o MeTube
  • É necessário informar o endereço e a porta do servidor

Compatibilidade com iOS

  • Requisitos de arquivos de vídeo no iOS: codecs de vídeo h264 ou h265 e codec de áudio aac são necessários
  • Ao baixar no formato MP4, é possível selecionar a opção "Best (iOS)"

Bookmarklet

  • Bookmarklet para Chrome: envia a página web aberta no momento para o MeTube
  • Ao usar em páginas HTTPS, é necessário um proxy reverso HTTPS

Executando atrás de um proxy reverso

  • Exemplo de configuração 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;
    }
    
  • Exemplo de configuração 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>
    
  • Exemplo de configuração Caddy

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

Atualização do yt-dlp

  • Builds noturnos automáticos: quando houver uma nova versão do yt-dlp, a imagem Docker é recompilada e atualizada automaticamente
  • Recomenda-se instalar e configurar o watchtower

Solução de problemas e envio de issues

  • O MeTube é uma UI do yt-dlp: problemas relacionados ao yt-dlp não devem ser reportados no projeto MeTube
  • Recomenda-se usar diretamente o comando do yt-dlp: teste as opções e depois aplique em YTDL_OPTIONS

Build e execução locais

  • Ferramentas necessárias: node.js e 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 da imagem Docker

    docker build -t metube .
    

Notas de desenvolvimento

  • Funciona em Windows, macOS e Linux
  • Ao executar o servidor no VSCode, a pasta de downloads é a pasta Downloads do usuário

Resumo do GN⁺

  • O MeTube é uma GUI web do youtube-dl que oferece a capacidade de baixar vídeos de vários sites
  • Pode ser implantado e configurado facilmente com Docker, com personalização por meio de várias variáveis de ambiente
  • Permite baixar vídeos de forma prática por meio de extensões de navegador e atalhos do iOS
  • Mantém sempre a versão mais recente do yt-dlp com atualização automática
  • Projetos com funcionalidades semelhantes incluem JDownloader e Video DownloadHelper

1 comentários

 
GN⁺ 2024-07-30
Comentários no Hacker News
  • O Tube Archivist é útil para arquivar e indexar canais técnicos

    • Oferece recursos avançados de busca por texto completo e metadados
    • Oferece uma busca muito melhor do que a da Alphabet
  • Gostaria de algo como um TiVo do YouTube

    • Não quero perder os 100 canais que assisto com frequência
    • Preciso de um feed com prioridades
    • Seria ainda melhor se desse para baixar e assistir via DLNA
    • O YouTube não tem interesse em garantir que os usuários não percam o conteúdo de que gostam
  • Estou pensando em criar um app simples usando yt-dlp

    • Acho que não precisa ser hospedado em um servidor
    • Queria saber se existem alternativas
  • Seria bom se houvesse uma interface integrada ao Jellyfin

    • Pesquisar no YouTube, baixar com yt-dlp e depois fazer streaming pelo Jellyfin sem anúncios
  • Acho curioso existirem tantas ferramentas para espelhar o YouTube

    • Fico me perguntando por que baixar/arquivar vídeos
    • É bom arquivar caso um vídeo seja apagado, mas pessoalmente isso acontece raramente
    • Acho que, depois de assistir a um vídeo, não preciso vê-lo de novo
  • Um servidor baseado em yt-dlp poderia fazer sucesso se viesse empacotado com uma imagem simples e um app cliente de frontend, como o PiHole

    • Comprar um Raspberry Pi, gravar a imagem em um cartão microSD, selecionar seus canais favoritos do YT e instalar o app cliente para acessar conteúdo do YT localmente e sem anúncios
  • Estou usando o TubeSync

    • Apesar das funções simples e de muitos bugs, funciona bem o suficiente
    • Dá para assinar canais ou playlists, baixar os vídeos para um diretório e verificar conteúdo novo uma vez por dia
    • Só precisaria de uma UX para configurar os canais
    • Ele salva os arquivos e o Plex cuida do resto
    • Queria saber se há opções melhores
  • Estou usando o Cobalt.tools

    • Estou satisfeito
  • Baixo os vídeos que adiciono a playlists e os armazeno em um servidor Plex compartilhado

    • Principalmente faço arquivo de vídeos de shows e partes de skate
  • Uma ferramenta relacionada é o Yark: YouTube Archiver with Offline UI