MeTube: programa de download do YouTube para self-hosting
(github.com/alexta69)-
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
Comentários no Hacker News
O Tube Archivist é útil para arquivar e indexar canais técnicos
Gostaria de algo como um TiVo do YouTube
Estou pensando em criar um app simples usando
yt-dlpSeria bom se houvesse uma interface integrada ao Jellyfin
yt-dlpe depois fazer streaming pelo Jellyfin sem anúnciosAcho curioso existirem tantas ferramentas para espelhar o YouTube
Um servidor baseado em
yt-dlppoderia fazer sucesso se viesse empacotado com uma imagem simples e um app cliente de frontend, como o PiHoleEstou usando o TubeSync
Estou usando o Cobalt.tools
Baixo os vídeos que adiciono a playlists e os armazeno em um servidor Plex compartilhado
Uma ferramenta relacionada é o Yark: YouTube Archiver with Offline UI