4 puntos por GN⁺ 2024-04-07 | 1 comentarios | Compartir por WhatsApp
  • Kyoo es un servidor multimedia autoalojado enfocado en contenido de video como películas, series y anime, y se presenta como una alternativa a Jellyfin o Plex
  • Busca funcionar sin imponer una estructura de carpetas ni requerir edición manual de metadatos; si un medio no se escanea correctamente por un nombre de archivo extraño, se considera un bug
  • En lugar de expandirse mediante un sistema de plugins, apunta a ofrecer las funciones como capacidades integradas, incluyendo transcodificación dinámica, miniaturas de vista previa, detección de intro/créditos y soporte avanzado de subtítulos
  • Actualmente el cliente disponible es Web; Android todavía no está disponible en v5, y el soporte para iOS y tvOS no está planeado por ahora debido a la compra de hardware y al costo anual de desarrollador de aproximadamente $100
  • Los administradores del servidor pueden usar archivos del directorio de descargas sin organizarlos por separado, y Kyoo limita su alcance al streaming de video, no a música, libros electrónicos ni juegos

El problema que Kyoo busca resolver

  • Kyoo es un servidor multimedia autoalojado especializado en contenido de video
    • El contenido objetivo es Movies, Series y Anime
    • Se presenta como una alternativa a Jellyfin o Plex
  • Busca reducir la carga de mantenimiento
    • No requiere una estructura de carpetas específica
    • No requiere edición de metadatos manual
    • El contenido debería escanearse correctamente incluso con nombres de archivo extraños; si falla, se trata como un bug
  • No ofrece un sistema de plugins
    • La dirección es integrar las funciones de fábrica tanto como sea posible

Funciones principales

  • Dynamic Transcoding

    • Permite transcodificar medios con la calidad deseada
    • Hace posible cambiar la calidad durante la reproducción con cambio automático de calidad
    • Se puede navegar de inmediato sin esperar al transcodificador
  • Video Preview Thumbnails

    • Permite ver una vista previa del video al pasar el cursor sobre la barra de progreso
  • Intro/Credit detection

    • Detecta automáticamente la intro y los créditos mediante huellas de audio
    • También se puede usar coincidencia de títulos de capítulos
  • Enhanced Subtitle Support

    • Soporta subtítulos PGS/VODSUB y SSA/ASS
    • Usa las fuentes incluidas en el video cuando es posible
  • Anime Name Parsing

    • Puede hacer match incluso con nombres complejos de archivos de anime como [Some-Stuffs] Jojo's Bizarre Adventure Stone Ocean 24 (1920x1080 Blu-Ray Opus) [2750810F].mkv
  • Helm Chart

    • Tiene un Helm chart oficial para desplegarse en clústeres de Kubernetes
    • El soporte para múltiples réplicas está en desarrollo
  • OIDC Connection

    • Permite iniciar sesión con servicios compatibles con OIDC como Google, Discord y Authelia

Funciones que aún no se han reimplementado en v5

  • Watch List Scrubbing Support

    • La función para sincronizar automáticamente la lista de seguimiento con servicios conectados todavía no se ha reimplementado en v5
    • Está orientada a SIMKL y a otros servicios en el futuro
  • Download and Offline Support

    • La descarga y el soporte sin conexión para ver contenido sin internet tampoco se han reimplementado todavía en v5
    • Se presenta con una función para sincronizar el progreso cuando el dispositivo vuelva a estar en línea

Clientes y plataformas

  • El cliente compatible actualmente es Web
  • El cliente Android todavía no está disponible en v5 y figura como “soon”
  • Se están evaluando plataformas adicionales
  • El frontend está hecho con React-Native y Expo
  • El soporte para dispositivos Apple no está planeado actualmente
    • Los objetivos son iOS y tvOS
    • La razón es la compra de hardware y el costo anual de desarrollador de aproximadamente $100

Diferencias frente a Jellyfin/Plex

  • Jellyfin y Plex se describen como dependientes técnicamente de SQLite y de un enfoque de poner todo dentro de un solo contenedor
  • Kyoo adopta un enfoque de usar contenedores adicionales cuando hace falta
    • Se menciona como ejemplo el transcoder
  • La filosofía operativa es “configúralo una vez y olvídate”
    • No exige renombrar archivos manualmente
    • No exige una estructura de carpetas específica
    • Apunta a usar directamente los archivos del directorio de descargas
  • Su alcance se limita al streaming de películas, series de TV y anime
    • No maneja música, libros electrónicos ni juegos

Cómo empezar y materiales de integración

  • API Documentation: documentación de la API para integrar Kyoo con otros servicios
  • Join the discord: Discord para preguntas, discusión de desarrollo, solicitudes de funciones y reporte de bugs
  • weblate: permite agregar traducciones para idiomas que Kyoo no soporta
  • kyoo.zoriya.dev: ofrece una demo en vivo con películas sin derechos de autor

1 comentarios

 
GN⁺ 2024-04-07
Comentarios en Hacker News
  • La demo se ve bonita y está muy bien hecha. Soy un usuario satisfecho de Plex, uso Plexamp para audio y la app de Plex para Apple TV para video, así que no pienso cambiarme, pero me parece que haber empezado como un proyecto sandbox para aprender tecnologías que te interesaban y luego haber crecido poco a poco es una motivación excelente para crear algo

    • Si también escuchas audiolibros, vale la pena echarle un ojo a Bookcamp. Probablemente también se pueda con Plexamp, pero Bookcamp se siente más como Audible
    • Me da curiosidad cómo usas Plexamp. ¿Descargas álbumes y luego haces streaming desde ahí, usándolo como una alternativa tipo Spotify?
    • Plexamp es la única razón por la que sigo en Plex
      También tengo Jellyfin montado en paralelo por si Plex entra algún día en la fase de enshittification, pero la membresía vitalicia que compré en 2012 ya valió totalmente la pena
  • Intenté pasarme de Plex a Jellyfin, pero la mayor limitación de Jellyfin fue que parece prestar muy poca atención a la gestión de la biblioteca y hace suposiciones demasiado rígidas sobre la estructura de archivos
    En la wiki incluso hay una sección aparte explicando cómo nombrar correctamente los archivos, algo de lo que en Plex ni siquiera tienes que preocuparte. Me da curiosidad si Kyoo sigue un enfoque parecido o si es más amigable para el usuario. La monetización de Plex me parece ridícula, pero Jellyfin todavía da la impresión de no estar listo para usarse en serio

    • Esa parte sí me parece muy rara. El objetivo de Kyoo es ordenar la biblioteca por ti, y debería funcionar de inmediato incluso si usas la carpeta de descargas tal cual como carpeta de biblioteca, sin renombrar nada
      Todavía hay casos límite, y sobre todo algunos elementos como videos extra a veces no se manejan bien. Aun así, también procesa nombres raros de archivos de anime como "[SomeGroup] Jojo's bizzare adventure - golden wings 12.mkv"
    • Me da curiosidad por qué un servidor multimedia debería ser menos estricto con la estructura. En Jellyfin me gusta que con unos pocos botones ya se encarga de eso, y es cómodo no tener que pensar yo mismo en la estructura
    • Uso Jellyfin, pero la gestión de archivos la hago con TMM(tiny media manager). Jellyfin suele aceptar bien los resultados que genera TMM
      Sinceramente, también me gustaría ver un Jellyfin ligero que no tuviera nada de código de gestión multimedia y solo hiciera streaming
    • Claro, dependerá del entorno, pero Jellyfin sí da bastante buen soporte para usar etiquetado manual. No hace falta romper la estructura de carpetas que dejaste cómoda para navegar en el explorador de archivos ni cambiar nombres; basta con pulsar "Identify" en el archivo o carpeta y buscar por título o número de IMDB en la base de datos que tengas activada
      Una vez que indicas qué serie de TV es una carpeta, parece que los episodios se reconocen automáticamente. Cuando el nombre de la carpeta no está "correctamente" puesto, lo único que falla es ese primer paso automático, y quizá se pueda evitar generando NFO en masa con Tiny Media Manager
    • Me da curiosidad por qué la monetización de Plex te parece ridícula. Frente al open source, el modelo freemium premium sí es menos ideal, pero hace 4 años compré con gusto la suscripción vitalicia de Plex Pass y hasta ahora no me he arrepentido ni un poco
  • Se ve bien. Me parece interesante que los proyectos de servidores multimedia tiendan a preferir especialmente C#. Me pregunto si hay una razón técnica o si más bien es resultado de que los proyectos grandes terminaron marcando el estándar

    • La mayor parte del software relacionado, especialmente la familia *arr, también está escrita en .NET. Es una plataforma con buen rendimiento sin sacrificar la experiencia de desarrollo
    • No es raro, porque C# brilla del lado de los servidores web. Aunque, en lo personal, cada vez me gusta menos
      Kyoo también usa Python y Go en algunos componentes, y TypeScript en el frontend
    • Este proyecto parece estar escrito en varios lenguajes. Veo C#, Go, Python, y quizá también haya código de frontend, pero a esa parte le tengo alergia
  • Usar Postgres y RabbitMQ a la vez parece excesivo. Me pregunto si aceptarían un PR para unificarlo todo en Postgres y así reducir la carga operativa
    Cuando vuelva al escritorio quiero revisar qué hace exactamente RabbitMQ en un servidor multimedia

    • RabbitMQ se usa para la comunicación entre servicios. Apenas se introdujo, pero en adelante se usará para la comunicación por websocket con los clientes, colas de trabajo para crear elementos nuevos y pedir reescaneos, sincronización de listas de seguimiento con servicios externos y sincronización entre múltiples réplicas en despliegues de Kubernetes
      Aunque la parte de sincronización en Kubernetes todavía necesita más trabajo
    • RabbitMQ es excelente. Me ha resultado especialmente útil cuando unas partes del programa son inherentemente más lentas que otras
      Ofrece un sistema de colas muy sólido y probado, y al mismo tiempo tiene poca carga de ejecución. Gracias a eso se puede mantener una arquitectura simple
  • Es un proyecto interesante. Pero me da curiosidad eso de "navegar fácilmente sin esperar al transcodificador"
    Dependiendo del contenedor y del códec, esto siempre ha sido un problema. Me pregunto cómo lo resolvieron, y si no usan libav

    • Ejecutan ffmpeg por cada pequeño segmento de video, y si buscas una posición demasiado alejada del punto actual de transcodificación, crean un nuevo proceso de ffmpeg
      La parte difícil es hacer que esos segmentos se puedan ver sin cortes ni problemas, y garantizar que no se repitan los segmentos de audio o video. Si hay suficiente interés, podría escribir una entrada de blog explicándolo en detalle
  • Es una pena que no maneje música. La principal razón por la que uso Plex es la gestión de la biblioteca musical; incluso en Plex da la impresión de ser un enfoque secundario, pero aun así sigue siendo lo bastante útil

  • Hace unos días configuré Jellyfin y Tailscale en un n100.
    En local funcionaba bien, pero al compartirlo por Tailscale con mi familia al otro lado del mundo algo se rompió. Aunque la velocidad de subida era suficientemente rápida, el stream tardaba como 1 minuto en empezar, y creo que podría estar relacionado con la latencia. Planeo probar esto

    • Tuve un problema parecido. Puse Jellyfin detrás de un proxy inverso sobre WireGuard y, cuando había mucha latencia, como con visitantes intercontinentales, al principio la velocidad de transferencia pegaba bien, pero en pocos segundos se volvía inutilizable. Me tomó mucho tiempo identificar que el problema estaba relacionado con la congestión de paquetes.
      Recomiendo probar cambiar el control de congestión predeterminado de Linux (net.ipv4.tcp_congestion_control) a bbr tanto en Jellyfin como en el servidor del proxy inverso. No conozco bien los detalles y puede que tenga efectos secundarios [1], y quizá haya algoritmos de control de congestión mejores, pero en mi caso esto resolvió completamente el problema. Antes, incluso en condiciones de red silenciosas y óptimas, la conexión se quedaba por debajo del 10% de la velocidad de línea, y a veces hasta en 1%.
      Además, Caddy activa HTTP/3 por defecto, así que lo forcé a HTTP/2. También debería revisar una versión más reciente de bbr más adelante.
      [1] https://news.ycombinator.com/item?id=37408406
  • Se ve muy bien. Me pregunto si se puede hacer cast a la TV. Esa es la única razón por la que sigo atado a Plex, porque fuera de eso no me gusta Plex

    • Todavía no. Es una función bastante importante, así que planeo ofrecerla dentro de los próximos 6 meses, pero antes quiero terminar primero la mayoría de las funciones del cliente
    • El casting de Jellyfin antes era bastante malo, pero hoy en día ha mejorado mucho. Ni siquiera recuerdo cuándo fue la última vez que me causó molestias
    • Puedes abrirlo en el navegador de Mac y enviarlo por AirPlay al Apple TV. En Windows también se puede hacer algo parecido con opciones de cast
  • Viendo hacia dónde va Plex, da gusto que haya más opciones. Estaría bueno crear un hook que se conecte directamente a SONARR/RADARR para que al hacer clic en una entrada del calendario te lleve directo al reproductor.
    Puede que no quieran hacerlo directamente por temas legales, pero sería conveniente combinar en una sola interfaz el media self-hosted con funciones de gestión de contenido pirata

  • Se ve bien. Hice clic en algunas películas en la página demo y navegué un poco al azar, y todo funcionó perfectamente.
    Me da curiosidad la escalabilidad. Quisiera saber cuántos usuarios puede soportar un solo servidor y qué tipo de servidor haría falta. También me pregunto sobre qué corre la página demo y a partir de cuántos usuarios se saturaría

    • La demo es la configuración del docker-compose del README corriendo en el tier Always Free de Oracle VPS.
      Nunca he hecho benchmarks del servidor, pero el factor limitante casi con certeza sería la velocidad de codificación de la máquina. Si todos los clientes necesitaran transcodificar al mismo tiempo películas h265 8K distintas, haría falta un nivel de rendimiento de GPU/CPU completamente diferente al de la misma cantidad de usuarios reproduciendo de forma directa.