Downtify: um app selfhost para download e reprodução de músicas com interface web e cliente android

Olá, pessoal! Tudo certo?

Quero apresentar para a comunidade um projeto open source que eu desenvolvo: o Downtify, um downloader e reprodutor de músicas self-hosted com interface web e cliente android. A ideia é simples: você cola um link do Spotify (música, álbum ou playlist) ou pesquisa por música, álbum ou artista e recebe um arquivo de áudio com capa, tags e letra, salvo na sua própria máquina ou servidor. Não precisa de conta, de chave de API nem de Spotify Premium.

Como funciona por baixo dos panos

A API oficial do Spotify só libera esse tipo de coisa para quem tem Premium, então o Downtify vai por outro caminho:

  1. Lê os metadados que o Spotify já expõe publicamente nas páginas de embed;
  2. Procura no YouTube Music o áudio que melhor corresponde à faixa;
  3. Baixa com yt-dlp, converte com ffmpeg e grava as tags com mutagen.

O backend é em Python (FastAPI) e tudo roda em um único container Docker. Além de links do Spotify, dá para colar links do YouTube/YouTube Music ou simplesmente pesquisar pelo nome da música.

O que ele faz

  • 5 formatos: MP3, FLAC, M4A, OGG e OPUS, no bitrate que você escolher
  • Monitor de playlists: acompanha playlists (Spotify ou YouTube Music) e artistas, e baixa sozinho as faixas e os lançamentos novos
  • Letras: normais e sincronizadas, buscadas no lrclib e embutidas no arquivo
  • Player web: ouça a biblioteca direto no navegador, com fila, letra sincronizada, timer para dormir e atalhos de teclado
  • Exportação M3U: playlists que o Jellyfin, o Navidrome e o Plex reconhecem automaticamente
  • Organização das pastas: tudo em uma pasta só ou uma pasta por artista
  • Importação via CSV: traga sua biblioteca exportada do Soundiiz, TuneMyMusic ou Exportify e coloque tudo na fila de uma vez
  • Multiusuário: contas de admin e de usuário comum, cada uma com suas preferências
  • Extras: podcasts por RSS, integração com slskd (Soulseek) e Navidrome, sugestões de artistas e álbuns com base no que você ouve, e bem mais

Instalação

Com Docker é um comando só:

docker run -d -p 8000:8000 --name downtify \
  -v /caminho/para/musicas:/downloads \
  -v downtify_data:/data \
  ghcr.io/henriquesebastiao/downtify

Depois é só abrir http://localhost:8000. O login padrão é admin / downtify (troque a senha logo no primeiro acesso!).

Quem usa Umbrel, CasaOS ou HomeDock OS pode instalar com um clique pela loja de apps da plataforma. A documentação também tem um guia de Docker Compose.

O app Android

Essa é a novidade que eu mais queria mostrar: estou desenvolvendo um cliente Android nativo para o Downtify, também open source. Ele se conecta ao seu servidor e transforma a sua biblioteca em um streaming particular:

  • Encontra o servidor sozinho na rede local (via mDNS), sem precisar digitar IP
  • Login com o mesmo usuário e senha da versão web, ou pareamento por QR code gerado em Configurações → Apps, sem digitar senha no celular
  • Streaming em qualidade original ou em uma versão menor (Opus, AAC ou MP3 de 96 a 320 kbps) para economizar dados móveis
  • Músicas offline guardadas no celular
  • Chromecast
  • Normalização de volume, para todas as músicas tocarem em um volume parecido

O lado do servidor já está pronto e funcionando nas versões atuais do Downtify. O app já conta uma versão estável e está disponível para download na página de releases do github, o código está aberto no GitHub para quem quiser acompanhar, testar ou contribuir.

Dica: se você roda o Downtify no Docker com a rede bridge padrão, o anúncio na rede local não chega ao celular. Use network_mode: host ou digite o endereço do servidor manualmente no app.

Uso responsável

O Downtify é uma ferramenta, e cada um é responsável pelo uso que faz dela. Inclusive, ele tem a função Apoie o artista, que mostra onde comprar a música ou o álbum (iTunes Store, Bandcamp, Qobuz, site oficial do artista). Curtiu um som? Apoie quem fez! :musical_notes:

Links

Feedback, sugestões, issues e PRs são muito bem-vindos. Se o projeto for útil para você, uma :star: no GitHub ajuda bastante na divulgação. Valeu! :penguin:

3 curtidas