Skip to content
LukassDevPublic

About

🎧 App de música em React Native (Expo) com playlists, curtidas, histórico, backup e fila de reprodução. 🔌 Configure e use o seu próprio servidor para ouvir músicas (código incluído). 📚 Projeto educacional, sem conteúdo protegido incluído.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

8 Commits

Folders and files

Repository files navigation

Lify

Preparar e iniciar o backend

Depois de clonar ou baixar este repositorio, execute o instalador na pasta raiz:

  • Linux/Termux: bash serversetup.sh
  • Windows: serversetup.bat

O instalador prepara Node.js 22+, Git e yt-dlp, instala as dependencias do backend e inicia o servidor. No Linux, o script suporta Termux e distribuicoes Debian/Ubuntu com apt-get; no Windows, requer o WinGet.

O Lify é um projeto experimental de aplicativo móvel para descoberta e reprodução de música. Busca faixas e metadados no YouTube Music, mantém uma biblioteca local e reproduz áudio por meio de um servidor Node.js independente.

Projeto de estudo, sem finalidade comercial. O Lify é fornecido como projeto experimental, sem garantias de disponibilidade ou adequação para qualquer uso. Não é um serviço oficial do Spotify, do YouTube ou do Google, nem é afiliado ou endossado por essas empresas.

O que o app faz

  • Busca faixas e informações de catálogo usando youtubei.js.
  • Na versão web, usa o backend para pesquisar o catálogo e carregar artistas, álbuns e playlists.
  • Reproduz áudio em segundo plano com react-native-track-player.
  • Mantém favoritos, histórico, playlists e preferências no próprio dispositivo, usando SQLite; esses dados não são enviados ao servidor de áudio.
  • Permite organizar uma fila de reprodução e importar playlists públicas do YouTube Music para a biblioteca local.
  • Permite importar arquivos de áudio do dispositivo para playlists locais e reproduzi-los sem conexão.
  • Permite guardar faixas para reprodução offline no aplicativo móvel.
  • Permite exportar/importar backups da biblioteca e agendar cópias locais diárias, semanais ou mensais. O sistema pode atrasar as tarefas em segundo plano; os backups portáteis .lifybackup incluem os arquivos de áudio importados e podem ser exportados ou restaurados em outro aparelho.
  • Oferece interface em português e inglês, escolha do servidor de áudio e reprodução fixa no perfil de poupança de dados.

O aplicativo é feito com React Native, Expo e Expo Router.

Disponibilidade

O código-fonte está disponível neste repositório. As versões preparadas para uso são o app Android e a versão web executada localmente em localhost; não há um site público hospedado por este projeto.

O projeto pode ser compilado para iPhone usando um ambiente de desenvolvimento iOS compatível, mas não há um app iOS compilado ou distribuído neste repositório. A compilação para iOS não é uma versão pronta para instalação aqui.

Como funciona o backend

O servidor de áudio está em backend/. Ele é uma API Node.js independente, não um servidor de contas ou de biblioteca. O app envia o ID de uma faixa; o servidor usa yt-dlp para resolver uma URL de áudio disponível e encaminha a resposta do YouTube CDN ao player.

App mobile ── busca e metadados ──> YouTube Music (youtubei.js)
App web ── catálogo ──> API Node ──> YouTube Music (youtubei.js)
 │
 ├── ID da faixa ──> API Node (yt-dlp) ──> YouTube CDN ──> player
 └── biblioteca, fila e preferências ──> SQLite no dispositivo

O endpoint de áudio encaminha pedidos HTTP Range, necessários para o player procurar diferentes posições da faixa. O servidor não acumula o áudio inteiro na memória nem o guarda em cache; mantém em cache, por tempo limitado, apenas metadados da resolução e URLs temporárias. O app usa sempre o perfil dataSaver; a API também mantém o perfil standard para compatibilidade com outros clientes. Se um bloco tardio do Innertube falhar, a próxima tentativa usa yt-dlp por até dois minutos. Há limites para resoluções simultâneas e timeouts para pedidos. O endpoint /health informa se o servidor está ativo.

Rotas da API:

  • GET /health
  • GET /stream/:videoId?profile=standard
  • GET /stream/:videoId?profile=dataSaver
  • GET /download/:videoId?profile=dataSaver para downloads explícitos.
  • GET /catalog/search, /catalog/suggestions, /catalog/artist/:id, /catalog/collection/:kind/:id e /catalog/related/:videoId para o catálogo usado pelo cliente web.

O perfil dataSaver é o usado pelo app. A API também aceita standard em /stream para compatibilidade com outros clientes. Consulte o README do backend para detalhes dos resolvedores, timeouts, pedidos Range, configuração e publicação.

Executar localmente

App

Requer Node.js compatível com Expo SDK 57. Para executar no Android, configure o ambiente de desenvolvimento Android e, na raiz do repositório, execute:

cd frontend
npm install
npx expo prebuild
npm run android

Para iPhone, a compilação exige um ambiente iOS compatível; o repositório não inclui um binário iOS pronto. Os scripts da raiz encaminham os comandos start, android, ios, test e typecheck para frontend/.

Servidor de áudio

Requer Node.js 22 ou superior. Em outro terminal, na raiz do repositório:

cd backend
npm install
npm run dev

O servidor escuta na porta 4000 por padrão. Para escolher outra porta, defina a variável PORT. Para iniciar em modo normal, use npm start.

O app não vem com um servidor de áudio predefinido. Na primeira abertura, ele mostra um aviso para configurar o endereço em Ajustes → Servidor de áudio. Inicie sua própria cópia do backend e informe o respectivo endereço. Em um dispositivo físico, use o endereço local do computador e conecte ambos à mesma rede. Esses valores são instruções de configuração e não vêm preenchidos no app ou no build.

O app também permite escolher um servidor personalizado em Ajustes → Servidor de áudio. Um servidor personalizado precisa implementar as rotas e encaminhar os pedidos Range descritos acima.

Executar a versão web localmente

Para gerar os arquivos web localmente, execute na raiz do repositório:

  • Windows: webbuild.bat
  • Linux/macOS: bash webbuild.sh

Os scripts instalam as dependências do frontend com npm ci e exportam o site para frontend/dist. No Windows, depois execute web.bat para servi-lo na porta 5000 e abra http://localhost:5000 no navegador. web.bat apenas serve a exportação existente; não a compila.

A versão web usa o backend para busca e reprodução. Inicie o backend separadamente e informe o endereço dele em Ajustes → Servidor de áudio. A biblioteca e as preferências continuam armazenadas localmente no navegador.

Interface e inspiração visual

A interface foi inspirada em padrões visuais de aplicativos de streaming, especialmente na organização de conteúdo, navegação e apresentação do player associadas ao Spotify. O Lify é um projeto independente e não representa o Spotify. Parte das telas e dos componentes deriva de um projeto de interface distribuído sob licença MIT; os créditos e avisos de licença estão em frontend/THIRD_PARTY_NOTICES.md.

Uso do servidor e serviços de terceiros

O servidor incluído existe para desenvolvimento e experimentação neste projeto; não é uma oferta de hospedagem ou um serviço público para uso comercial. Quem quiser usar a API deve copiar o diretório backend/ para seu próprio ambiente, instalá-lo e iniciá-lo localmente, ou em infraestrutura sob seu próprio controle. Não dependa de uma instância hospedada por outra pessoa.

O app e o backend interagem com serviços e conteúdos de terceiros, incluindo YouTube/YouTube Music e o YouTube CDN. Antes de executar ou disponibilizar uma cópia, cada pessoa deve verificar e cumprir, por sua própria conta, os termos, condições, políticas e leis aplicáveis desses terceiros. O fato de o código estar disponível não concede direitos sobre conteúdos, não constitui autorização do YouTube ou de titulares de direitos e não garante que qualquer uso seja permitido. O mantenedor deste projeto não fornece aconselhamento jurídico nem assume a responsabilidade pelo uso feito por terceiros.

Desenvolvimento e testes

# App: testes de lógica e verificação TypeScript
cd frontend
npm test
npm run typecheck

# API: testes do servidor
cd ..\backend
npm test

Estrutura

  • frontend/src/app/ — rotas e telas do aplicativo.
  • frontend/src/components/ — componentes reutilizáveis e interface.
  • frontend/src/features/ — lógica e estado das funcionalidades.
  • frontend/src/services/catalog/ — busca e integração com o catálogo.
  • frontend/src/services/audio/ — fila, controle e serviço de reprodução.
  • frontend/src/database/ — banco SQLite, migrações e repositórios.
  • frontend/src/storage/backups/ — backups manuais e agendados.
  • backend/ — API Node.js para resolver e encaminhar áudio.
  • frontend/THIRD_PARTY_NOTICES.md — créditos e licenças de terceiros.

About

🎧 App de música em React Native (Expo) com playlists, curtidas, histórico, backup e fila de reprodução. 🔌 Configure e use o seu próprio servidor para ouvir músicas (código incluído). 📚 Projeto educacional, sem conteúdo protegido incluído.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Contributors

Languages