- 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
- Puede hacer match incluso con nombres complejos de archivos de anime como
-
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
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
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
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"
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
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
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
Kyoo también usa Python y Go en algunos componentes, y TypeScript en el frontend
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
Aunque la parte de sincronización en Kubernetes todavía necesita más trabajo
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
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
Recomiendo probar cambiar el control de congestión predeterminado de Linux (
net.ipv4.tcp_congestion_control) abbrtanto 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
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
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.