- Kyoo ist ein selbst gehosteter Medienserver mit Fokus auf Videoinhalte wie Filme, Serien und Anime und versteht sich als Alternative zu Jellyfin oder Plex
- Ziel ist ein Betrieb ohne erzwungene Ordnerstruktur oder manuelle Metadatenbearbeitung; wenn Medien wegen ungewöhnlicher Dateinamen nicht korrekt gescannt werden, gilt das als Bug
- Funktionen sollen nicht über ein Plugin-System erweitert, sondern als integrierte Funktionen bereitgestellt werden; dazu gehören dynamisches Transcoding, Vorschau-Thumbnails, Intro-/Credit-Erkennung und erweiterte Untertitelunterstützung
- Derzeit wird als Client das Web unterstützt; Android ist in v5 noch nicht verfügbar, und Unterstützung für iOS und tvOS ist wegen Hardwareanschaffung und jährlichen Entwicklerkosten von etwa $100 derzeit nicht geplant
- Server-Admins können Dateien aus dem Download-Verzeichnis ohne zusätzliche Sortierung nutzen; Kyoo beschränkt den Umfang auf Videostreaming statt Musik, E-Books oder Spiele
Welches Problem Kyoo lösen will
- Kyoo ist ein selbst gehosteter Medienserver, der auf Videoinhalte spezialisiert ist
- Zielinhalte sind Movies, Series und Anime
- Er wird als Alternative zu Jellyfin oder Plex vorgestellt
- Ziel ist es, den Wartungsaufwand zu senken
- Es ist keine bestimmte Ordnerstruktur erforderlich
- Es ist keine manuelle Metadatenbearbeitung erforderlich
- Medien sollen auch bei ungewöhnlichen Dateinamen korrekt gescannt werden; schlägt das fehl, wird es als Bug behandelt
- Ein Plugin-System wird nicht angeboten
- Funktionen sollen, soweit möglich, integriert sein
Hauptfunktionen
-
Dynamic Transcoding
- Medien können in die gewünschte Qualität transkodiert werden
- Durch automatische Qualitätsumschaltung kann die Qualität während der Wiedergabe geändert werden
- Suchen ist sofort möglich, ohne auf den Transcoder zu warten
-
Video Preview Thumbnails
- Beim Überfahren der Video-Fortschrittsleiste mit der Maus ist eine Videovorschau sichtbar
-
Intro/Credit detection
- Intros und Credits werden per Audio-Fingerprinting automatisch erkannt
- Auch der Abgleich von Kapiteltiteln kann genutzt werden
-
Enhanced Subtitle Support
- PGS/VODSUB- sowie SSA/ASS-Untertitel werden unterstützt
- Wenn möglich, werden im Video enthaltene Fonts verwendet
-
Anime Name Parsing
- Auch komplexe Anime-Dateinamen wie
[Some-Stuffs] Jojo's Bizarre Adventure Stone Ocean 24 (1920x1080 Blu-Ray Opus) [2750810F].mkvkönnen zugeordnet werden
- Auch komplexe Anime-Dateinamen wie
-
Helm Chart
- Es gibt ein offizielles Helm Chart zur Bereitstellung in Kubernetes-Clustern
- Mehrere Replicas sind in Arbeit
-
OIDC Connection
- Login ist über OIDC-kompatible Dienste wie Google, Discord und Authelia möglich
Funktionen, die in v5 noch nicht neu implementiert sind
-
Watch List Scrubbing Support
- Die automatische Synchronisierung von Watchlists mit verbundenen Diensten ist in v5 noch nicht neu implementiert
- Ziel sind SIMKL und künftig weitere Dienste
-
Download and Offline Support
- Downloads und Offline-Unterstützung zum Ansehen ohne Internet sind in v5 ebenfalls noch nicht neu implementiert
- Vorgestellt wird dies als Funktion, die den Fortschritt synchronisiert, sobald das Gerät wieder online ist
Clients und Plattformen
- Der aktuell unterstützte Client ist Web
- Der Android-Client ist in v5 noch nicht verfügbar und befindet sich im Status „soon“
- Weitere Plattformen werden geprüft
- Das Frontend ist mit React-Native und Expo gebaut
- Unterstützung für Apple-Geräte ist derzeit nicht geplant
- Gemeint sind iOS und tvOS
- Grund sind die Anschaffung von Hardware und jährliche Entwicklerkosten von etwa $100
Unterschiede zu Jellyfin/Plex
- Jellyfin und Plex werden technisch als auf SQLite angewiesen und als Ansatz beschrieben, bei dem alles in einem einzigen Container liegt
- Kyoo verfolgt den Ansatz, bei Bedarf zusätzliche Container zu verwenden
- Als Beispiel wird der transcoder genannt
- Die Betriebsphilosophie ist „einmal einrichten und vergessen“
- Es werden keine manuellen Änderungen von Dateinamen verlangt
- Es wird keine bestimmte Ordnerstruktur verlangt
- Ziel ist es, Dateien im Download-Verzeichnis unverändert zu nutzen
- Der Umfang ist auf Streaming von Filmen, TV-Shows und Anime beschränkt
- Musik, E-Books und Spiele werden nicht abgedeckt
Einstieg und Integrationsressourcen
- API Documentation: API-Dokumentation zur Integration von Kyoo mit anderen Diensten
- Join the discord: Discord für Fragen, Entwicklungsdiskussionen, Feature-Requests und Bug-Meldungen
- weblate: Übersetzungen für Sprachen hinzufügen, die Kyoo noch nicht unterstützt
- kyoo.zoriya.dev: Bietet eine Live-Demo mit urheberrechtsfreien Filmen
1 Kommentare
Meinungen auf Hacker News
Die Demo ist hübsch und gut gemacht. Als zufriedener Plex-Nutzer, der für Audio Plexamp und für Video die Plex-App auf Apple TV verwendet, habe ich zwar nicht vor zu wechseln, aber ich finde, dass ein Projekt, das als Sandbox-Projekt begann, um interessante Technologien zu lernen, und dann immer weiter gewachsen ist, eine wirklich gute Motivation ist, etwas zu bauen.
Für den Fall, dass Plex irgendwann in die Phase der enshittification eintritt, habe ich Jellyfin parallel eingerichtet, aber die Lifetime-Mitgliedschaft, die ich 2012 gekauft habe, war ihr Geld bisher absolut wert.
Ich wollte von Plex zu Jellyfin wechseln, aber Jellyfins größte Einschränkung war für mich, dass es sich offenbar wenig für Bibliotheksverwaltung interessiert und sehr starke Annahmen über die Dateistruktur macht.
Im Wiki gibt es einen eigenen Abschnitt dazu, wie man Dateien korrekt benennt — etwas, worüber man sich bei Plex keine Gedanken machen muss. Mich würde interessieren, ob Kyoo einen ähnlichen Ansatz verfolgt oder benutzerfreundlicher ist. Plex’ Monetarisierung ist absurd, aber Jellyfin fühlt sich noch nicht bereit für den ernsthaften Einsatz an.
Im Moment gibt es noch Randfälle, vor allem Extras und ähnliche Einträge werden manchmal nicht gut verarbeitet. Aber selbst merkwürdige Anime-Dateinamen wie „[SomeGroup] Jojo's bizzare adventure - golden wings 12.mkv“ werden verarbeitet.
Ehrlich gesagt würde ich auch gern ein leichtgewichtiges Jellyfin sehen, das überhaupt keinen Medienverwaltungs-Code enthält und nur streamt.
Sobald man einmal festgelegt hat, zu welcher TV-Serie ein Ordner gehört, scheinen die Episoden automatisch erkannt zu werden. Der erste Schritt funktioniert nur dann nicht automatisch, wenn der Ordnername nicht „korrekt“ ist; mit Tiny Media Manager könnte man das vermutlich auch umgehen, indem man massenhaft NFO-Dateien erzeugt.
Sieht gut aus. Ich finde es interessant, dass Medienserver-Projekte offenbar besonders zu C# tendieren. Mich würde interessieren, ob es dafür technische Gründe gibt oder ob es eher daran liegt, dass die großen Projekte den Standard gesetzt haben.
Kyoo verwendet für einige Komponenten auch Python und Go und fürs Frontend TypeScript.
Postgres und RabbitMQ beide zu verwenden, wirkt übertrieben. Ich frage mich, ob ein PR akzeptiert würde, der alles auf Postgres vereinheitlicht, um den Betriebsaufwand zu reduzieren.
Wenn ich wieder am Desktop bin, sollte ich mir ansehen, was RabbitMQ in einem Medienserver genau macht.
Allerdings braucht die Kubernetes-Synchronisierung noch weitere Arbeit.
Es bietet ein sehr robustes und bewährtes Queue-System, ist aber trotzdem leicht zu betreiben. Dadurch kann die Architektur einfach bleiben.
Interessantes Projekt. Allerdings frage ich mich bei der Aussage „einfaches Spulen, ohne auf den Transcoder zu warten“.
Je nach Container und Codec war das immer ein Problem. Mich würde interessieren, wie das gelöst wurde und ob libav nicht verwendet wird.
Der schwierige Teil ist, diese Segmente ohne Unterbrechungen oder Probleme abspielbar zu machen und sicherzustellen, dass sich Audio- oder Videosegmente nicht wiederholen. Wenn genügend Interesse besteht, könnte ich dazu einen ausführlichen Blogpost schreiben.
Schade, dass Musik nicht unterstützt wird. Der Hauptgrund, warum ich Plex nutze, ist die Verwaltung meiner Musikbibliothek; selbst bei Plex wirkt Musik eher wie ein Nebenschwerpunkt, aber es ist trotzdem gut genug nutzbar.
Vor ein paar Tagen habe ich Jellyfin und tailscale auf einem n100 eingerichtet.
Lokal lief es gut, aber als ich es per tailscale mit meiner Familie am anderen Ende der Welt geteilt habe, war irgendetwas kaputt. Obwohl die Upload-Geschwindigkeit ausreichend hoch ist, dauerte es etwa eine Minute, bis der Stream startete; vielleicht hat es mit der Latenz zu tun. Ich werde das hier einmal ausprobieren.
Ich empfehle, auf dem Jellyfin- und dem Reverse-Proxy-Server die Standard-Staukontrolle von Linux (
net.ipv4.tcp_congestion_control) aufbbrumzustellen. Ich kenne die Details nicht genau, es könnte Nebenwirkungen geben [1], und es gibt vielleicht bessere Congestion-Control-Algorithmen, aber in meinem Fall hat das das Problem vollständig gelöst. Vorher blieb die Verbindung selbst unter ruhigen, optimalen Netzwerkbedingungen bei weniger als 10 %, manchmal sogar bei nur 1 % der Leitungsgeschwindigkeit hängen.Außerdem aktiviert Caddy standardmäßig HTTP/3, daher habe ich HTTP/2 erzwungen. Später sollte ich mir wohl auch neuere Versionen von bbr ansehen.
[1] https://news.ycombinator.com/item?id=37408406
Sieht wirklich gut aus. Ich frage mich, ob man auf den Fernseher casten kann. Das ist der einzige Grund, warum ich noch an Plex gebunden bin; ansonsten mag ich Plex nicht.
Angesichts der Richtung, in die Plex geht, ist es schön, mehr Optionen zu haben. Es wäre gut, Hooks zu bauen, die direkt mit SONARR/RADARR verbunden sind, sodass man auf einen Kalendereintrag klicken und direkt zum Player springen kann.
Wegen rechtlicher Fragen zögern sie vielleicht, das selbst zu bauen, aber es wäre praktisch, Self-Hosting-Medien und Funktionen zur Verwaltung von Raubkopien in einer Oberfläche zu vereinen.
Sieht gut aus. Ich habe auf der Demo-Seite ein paar Filme angeklickt und zufällig herumgestöbert, und alles funktionierte perfekt.
Ich frage mich, wie es mit der Skalierbarkeit aussieht. Ich würde gern wissen, wie viele Nutzer ein einzelner Server bewältigen kann und welche Art von Server nötig ist. Außerdem interessiert mich, worauf die Demo-Seite läuft und ab welcher Nutzerzahl sie überlastet wäre.
Server-Benchmarks habe ich nicht gemacht, aber der begrenzende Faktor dürfte mit ziemlicher Sicherheit die Encoding-Geschwindigkeit der Maschine sein. Wenn alle Clients gleichzeitig unterschiedliche h265-8K-Filme transcodieren müssen, erfordert das eine völlig andere Größenordnung an GPU-/CPU-Leistung als wenn dieselbe Anzahl von Nutzern direkt abspielt.