4 pontos por GN⁺ 2024-04-07 | 1 comentários | Compartilhar no WhatsApp
  • 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
  • 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

 
GN⁺ 2024-04-07
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

    • Se você também ouve audiolivros, vale conferir o Bookcamp. Talvez dê para fazer com o Plexamp, mas o Bookcamp chega mais perto de uma experiência tipo Audible
    • Fico curioso sobre como você usa o Plexamp. É baixando álbuns e fazendo streaming a partir dali, como uma alternativa parecida com o Spotify?
    • O Plexamp é o único motivo que me mantém no Plex
      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

    • Acho essa parte realmente estranha. O objetivo do Kyoo é organizar a biblioteca por você, e ele deveria funcionar diretamente mesmo usando a pasta de downloads como pasta da biblioteca, sem renomear nada
      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"
    • Fico curioso por que um servidor de mídia deveria ser menos rígido quanto à estrutura. Gosto do fato de que, no Jellyfin, alguns cliques em botões resolvem tudo automaticamente, e é cômodo não precisar pensar na estrutura por conta própria
    • Uso Jellyfin, mas faço o gerenciamento dos arquivos com o TMM(tiny media manager). O Jellyfin tende a aceitar bem os resultados gerados pelo TMM
      Sinceramente, eu também gostaria de ver um Jellyfin leve, sem nenhum código de gerenciamento de mídia e apenas com streaming
    • Claro que varia de ambiente para ambiente, mas o Jellyfin dá suporte bom o suficiente para usar marcação manual. Não é preciso quebrar a estrutura de pastas que você deixou conveniente para ver no navegador de arquivos nem renomear arquivos; basta clicar em "Identify" no arquivo ou na pasta e pesquisar nos bancos de dados ativados pelo título ou número do IMDB
      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
    • Fico curioso sobre por que a monetização do Plex é absurda. Em comparação com open source, um modelo freemium premium é menos ideal, mas comprei de bom grado uma assinatura vitalícia do Plex Pass há 4 anos e não me arrependi nem um pouco até agora
  • 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

    • A maior parte dos softwares relacionados, especialmente a família *arr, também é escrita em .NET. É uma plataforma com bom desempenho sem sacrificar a experiência do desenvolvedor
    • C# brilha no lado de servidores web, então não é estranho. Pessoalmente, porém, gosto cada vez menos dele
      O Kyoo também usa Python e Go em alguns componentes, e TypeScript no front-end
    • Este projeto parece ter sido escrito em várias linguagens. Vejo C#, Go, Python, e talvez também haja código de front-end, mas tenho alergia a essa parte
  • 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

    • O RabbitMQ é usado para comunicação entre serviços. Acabou de ser introduzido, mas no futuro será usado para comunicação via WebSocket com os clientes, fila de tarefas para criação de novos itens e solicitações de nova varredura, sincronização de listas de reprodução com serviços externos e sincronização entre várias réplicas em implantações Kubernetes
      Mas a sincronização no lado do Kubernetes ainda precisa de mais trabalho
    • O RabbitMQ é excelente. Foi especialmente útil quando uma parte do programa era inerentemente mais lenta que outra
      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

    • Executamos o ffmpeg para pequenos trechos de vídeo e, se a navegação vai para muito longe da posição atual de transcodificação, criamos um novo processo ffmpeg
      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

    • Tive um problema parecido. Coloquei o Jellyfin atrás de um proxy reverso sobre WireGuard e, em casos de alta latência, como visitantes entre continentes, no começo a taxa de transferência subia bem, mas em poucos segundos ficava lenta a ponto de ser inutilizável. Demorei para identificar o problema como algo relacionado a congestionamento de pacotes.
      Recomendo tentar mudar o controle de congestionamento padrão do Linux (net.ipv4.tcp_congestion_control) para bbr no 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

    • Ainda não. É um recurso bem importante, então planejo oferecê-lo nos próximos 6 meses, mas antes quero finalizar a maior parte das funcionalidades dos clientes
    • O casting do Jellyfin era bem ruim antigamente, mas hoje está bem melhor. Nem lembro quando foi a última vez que tive algum incômodo
    • Dá para abrir no navegador do Mac e enviar para a Apple TV via AirPlay. No Windows também dá para fazer algo parecido com as opções de cast
  • 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

    • A demo é a configuração do docker-compose do README rodando no nível Always Free de uma VPS da Oracle.
      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