Show HN: Kyoo – navegador de mídia auto-hospedado (alternativa ao Jellyfin/Plex)
(github.com/zoriya)- Kyoo é um servidor de mídia auto-hospedado focado em conteúdo de vídeo, como filmes, séries e animes, e é uma alternativa ao Jellyfin ou ao Plex
- Tem como objetivo funcionar sem impor uma estrutura de pastas nem exigir edição manual de metadados; se uma mídia não for escaneada corretamente por causa de nomes de arquivo estranhos, isso é considerado um bug
- As funcionalidades não são estendidas por um sistema de plugins, mas oferecidas como recursos integrados, incluindo transcodificação dinâmica, miniaturas de pré-visualização, detecção de intros/créditos e suporte avançado a legendas
- No momento, o cliente suporta Web; Android ainda não está disponível na v5, e suporte a iOS e tvOS não está planejado atualmente devido à compra de hardware e ao custo anual de desenvolvedor de cerca de US$ 100
- Administradores do servidor podem usar os arquivos do diretório de downloads sem organização separada, e o Kyoo restringe seu escopo a streaming de vídeo, não música, e-books ou jogos
O problema que o Kyoo quer resolver
- Kyoo é um servidor de mídia auto-hospedado especializado em conteúdo de vídeo
- O conteúdo-alvo são Movies, Series e Anime
- É apresentado como alternativa ao Jellyfin ou Plex
- Tem como objetivo reduzir o esforço de manutenção
- Não exige uma estrutura de pastas específica
- Não exige edição de metadados manual
- A mídia deve ser escaneada corretamente mesmo com nomes de arquivo estranhos; se falhar, isso é tratado como bug
- Não oferece um sistema de plugins
- A direção é incorporar os recursos como funcionalidades integradas sempre que possível
Principais recursos
-
Dynamic Transcoding
- Permite transcodificar mídia para a qualidade desejada
- A troca automática de qualidade permite alterar a qualidade durante a reprodução
- É possível navegar imediatamente sem esperar pelo transcoder
-
Video Preview Thumbnails
- Ao passar o mouse sobre a barra de progresso do vídeo, é possível ver uma prévia do vídeo
-
Intro/Credit detection
- Detecta automaticamente intros e créditos por fingerprinting de áudio
- Também é possível usar correspondência de títulos de capítulos
-
Enhanced Subtitle Support
- Suporta legendas PGS/VODSUB e SSA/ASS
- Usa as fontes incluídas no vídeo quando possível
-
Anime Name Parsing
- Consegue fazer a correspondência até de nomes de arquivos de anime complexos, como
[Some-Stuffs] Jojo's Bizarre Adventure Stone Ocean 24 (1920x1080 Blu-Ray Opus) [2750810F].mkv
- Consegue fazer a correspondência até de nomes de arquivos de anime complexos, como
-
Helm Chart
- Há um Helm chart oficial para implantação em clusters Kubernetes
- Múltiplas replicas estão em desenvolvimento
-
OIDC Connection
- Permite login com serviços compatíveis com OIDC, como Google, Discord e Authelia
Recursos ainda não reimplementados na v5
-
Watch List Scrubbing Support
- O recurso que sincroniza automaticamente a lista de acompanhamento com serviços conectados ainda não foi reimplementado na v5
- O alvo é o SIMKL e, no futuro, outros serviços
-
Download and Offline Support
- Downloads e suporte offline para assistir sem internet também ainda não foram reimplementados na v5
- É apresentado como um recurso que sincroniza o progresso quando o dispositivo volta a ficar online
Clientes e plataformas
- O cliente atualmente suportado é Web
- O cliente Android ainda não está disponível na v5 e está em estado “soon”
- Plataformas adicionais estão em análise
- O front-end é feito com React-Native e Expo
- Suporte a dispositivos Apple não está planejado atualmente
- Os alvos são iOS e tvOS
- O motivo é a compra de hardware e o custo anual de desenvolvedor de cerca de US$ 100
Diferenças em relação a Jellyfin/Plex
- Jellyfin e Plex são descritos como tecnicamente dependentes do SQLite e como uma abordagem que coloca tudo dentro de um único contêiner
- O Kyoo adota uma abordagem que usa contêineres adicionais quando necessário
- transcoder é citado como exemplo
- A filosofia operacional é “configurar uma vez e esquecer”
- Não exige alterações manuais de nomes de arquivos
- Não exige uma estrutura de pastas específica
- Tem como objetivo usar diretamente os arquivos do diretório de downloads
- O escopo é limitado a streaming de filmes, programas de TV e animes
- Não cobre música, e-books nem jogos
Primeiros passos e materiais de integração
- API Documentation: documentação da API para integrar o Kyoo a outros serviços
- Join the discord: Discord para perguntas, discussões de desenvolvimento, solicitações de recursos e compartilhamento de bugs
- weblate: permite adicionar traduções para idiomas que o Kyoo ainda não suporta
- kyoo.zoriya.dev: oferece uma demonstração ao vivo composta por filmes sem direitos autorais
1 comentários
Opiniões no Hacker News
A demo é bonita e bem-feita. Sou um usuário satisfeito do Plex, usando o Plexamp para áudio e o app do Plex para Apple TV para vídeo, então não penso em migrar, mas acho que o fato de ter começado como um projeto sandbox para aprender tecnologias que interessavam e ter crescido aos poucos é uma motivação realmente ótima para criar algo
Também deixei o Jellyfin configurado em paralelo para o dia em que o Plex entrar na fase de enshittification, mas a assinatura vitalícia que comprei em 2012 já valeu muito a pena até agora
Tentei migrar do Plex para o Jellyfin, mas a maior limitação do Jellyfin foi que ele parece ter pouco interesse em gerenciamento de biblioteca e faz pressupostos fortes demais sobre a estrutura dos arquivos
No wiki há uma seção separada só explicando como nomear arquivos corretamente, algo com que no Plex não preciso me preocupar. Fico curioso se o Kyoo segue uma abordagem parecida ou se é mais amigável ao usuário. A forma de monetização do Plex é absurda, mas o Jellyfin ainda parece não estar pronto para uso sério
Ainda há casos de exceção, e em especial itens como vídeos extras às vezes não são bem tratados. Mesmo assim, ele lida até com nomes estranhos de arquivos de anime como "[SomeGroup] Jojo's bizzare adventure - golden wings 12.mkv"
Sinceramente, eu também gostaria de ver um Jellyfin leve, sem nenhum código de gerenciamento de mídia e apenas com streaming
Depois que você define uma vez a qual série de TV a pasta corresponde, parece que os episódios são reconhecidos automaticamente. Quando o nome da pasta não está "correto", só o primeiro passo não acontece automaticamente; e provavelmente dá para contornar isso gerando arquivos NFO em massa com o Tiny Media Manager
Parece bom. Acho interessante que projetos de servidor de mídia pareçam ter uma tendência especial a preferir C#. Fico curioso se há uma razão técnica para isso ou se é mais resultado de grandes projetos terem criado um padrão
O Kyoo também usa Python e Go em alguns componentes, e TypeScript no front-end
Usar Postgres e RabbitMQ ao mesmo tempo parece exagerado. Fico curioso se aceitariam um PR para padronizar tudo em Postgres e reduzir a carga operacional
Quando eu voltar ao desktop, vou dar uma olhada no que exatamente o RabbitMQ faz em um servidor de mídia
Mas a sincronização no lado do Kubernetes ainda precisa de mais trabalho
Ele fornece um sistema de filas muito robusto e comprovado, com pouca carga para executar. Graças a isso, dá para manter a arquitetura simples
Projeto interessante. Mas fiquei curioso com a parte de "navegar facilmente sem esperar pelo transcoder"
Dependendo do contêiner e do codec, isso sempre foi um problema. Fico curioso sobre como resolveram isso e se não usam libav
A parte difícil é permitir que esses trechos sejam assistidos sem interrupções ou problemas e garantir que trechos de áudio ou vídeo não se repitam. Se houver interesse suficiente, talvez eu escreva um post no blog explicando em detalhes
É uma pena que não lide com música. O principal motivo pelo qual uso o Plex é o gerenciamento da biblioteca de música; mesmo no Plex, música parece ser um foco secundário, mas ainda assim é suficientemente utilizável
Alguns dias atrás configurei Jellyfin e tailscale em um n100.
Localmente funcionava bem, mas, ao compartilhar via tailscale com familiares do outro lado do mundo, algo quebrou. Mesmo com velocidade de upload suficientemente alta, o stream levava cerca de 1 minuto para começar, e talvez tivesse relação com latência. Pretendo testar isto
Recomendo tentar mudar o controle de congestionamento padrão do Linux (
net.ipv4.tcp_congestion_control) parabbrno Jellyfin e no servidor de proxy reverso. Não conheço bem os detalhes e pode haver efeitos colaterais [1], e talvez existam algoritmos de controle de congestionamento melhores, mas, no meu caso, isso resolveu completamente o problema. Antes, mesmo em condições de rede tranquilas e ideais, a conexão travava em menos de 10% da velocidade do link, às vezes chegando a 1%.Além disso, como o Caddy ativa HTTP/3 por padrão, forcei HTTP/2. Mais tarde acho que também preciso olhar versões mais recentes do bbr.
[1] https://news.ycombinator.com/item?id=37408406
Parece muito bom. Fico curioso se dá para fazer casting para a TV. Esse é o único motivo que me prende ao Plex; fora isso, não gosto do Plex
Olhando para a direção que o Plex está tomando, é bom ver mais opções surgindo. Seria legal criar hooks que se conectem diretamente ao SONARR/RADARR, para que ao clicar em um item do calendário ele vá direto para o player.
Talvez haja receio de criar isso diretamente por questões legais, mas unir mídia self-hosted e recursos de gerenciamento de pirataria em uma única interface parece conveniente
Parece bom. Na página de demo, cliquei em alguns filmes e naveguei aleatoriamente, e tudo funcionou perfeitamente.
Fico curioso sobre a escalabilidade. Quero saber quantos usuários um único servidor consegue suportar e que tipo de servidor seria necessário. Também fico curioso para saber em que a página de demo está rodando e a partir de quantos usuários ela ficaria sobrecarregada
Nunca fiz benchmark do servidor, mas o fator limitante quase certamente será a velocidade de codificação da máquina. Se todos os clientes precisarem transcodificar filmes h265 8K diferentes ao mesmo tempo, isso exigirá um nível de desempenho de GPU/CPU completamente diferente de quando o mesmo número de usuários faz reprodução direta