4 puan yazan GN⁺ 2024-04-07 | 1 yorum | WhatsApp'ta paylaş
  • Kyoo, film, dizi ve anime gibi video içeriklerine odaklanan self-hosted bir medya sunucusudur ve Jellyfin ya da Plex'e alternatiftir
  • Klasör yapısını zorunlu kılmadan veya metadata'yı elle düzenlemeyi gerektirmeden çalışmayı hedefler; garip dosya adları yüzünden medya düzgün taranmazsa bunu bug olarak kabul eder
  • Özellikleri eklenti sistemiyle genişletmek yerine yerleşik özellikler olarak sunma yönündedir; dinamik transcoding, önizleme küçük resimleri, intro/jenerik algılama ve gelişmiş altyazı desteği içerir
  • Şu anda istemci olarak Web destekleniyor; Android henüz v5'te sunulmuyor ve iOS ile tvOS desteği, donanım satın alma gereksinimi ve yıllık yaklaşık $100 geliştirici ücreti nedeniyle şu anda planlanmıyor
  • Sunucu yöneticileri, indirme dizinindeki dosyaları ayrıca düzenlemeden kullanabilir ve Kyoo kapsamını müzik, e-kitap veya oyun yerine video streaming ile sınırlar

Kyoo'nun çözmeye çalıştığı sorun

  • Kyoo, video içeriğine özel bir self-hosted medya sunucusudur
    • Hedef içerikler Movies, Series ve Anime'dir
    • Jellyfin veya Plex'e alternatif olarak sunulur
  • Bakım yükünü azaltmayı hedefler
    • Belirli bir klasör yapısı gerekmez
    • Elle metadata düzenleme gerekmez
    • Garip dosya adlarında bile medya düzgün taranmalıdır; başarısız olursa bu bir bug olarak değerlendirilir
  • Eklenti sistemi sunmaz
    • Özellikleri mümkün olduğunca yerleşik olarak sağlama yaklaşımını benimser

Başlıca özellikler

  • Dynamic Transcoding

    • Medyayı istenen kalitede transcoding yapabilir
    • Otomatik kalite geçişi sayesinde oynatma sırasında kalite değiştirilebilir
    • Transcoder'ı beklemeden anında gezinilebilir
  • Video Preview Thumbnails

    • Video ilerleme çubuğunun üzerine gelindiğinde video önizlemesi görülebilir
  • Intro/Credit detection

    • Ses fingerprinting ile intro ve jenerik otomatik olarak algılanır
    • Bölüm başlığı eşleştirme de kullanılabilir
  • Enhanced Subtitle Support

    • PGS/VODSUB ile SSA/ASS altyazıları destekler
    • Mümkün olduğunda videoya gömülü fontları kullanır
  • Anime Name Parsing

    • [Some-Stuffs] Jojo's Bizarre Adventure Stone Ocean 24 (1920x1080 Blu-Ray Opus) [2750810F].mkv gibi karmaşık anime dosya adlarını da eşleştirebilir
  • Helm Chart

    • Kubernetes kümesine dağıtım için resmi bir Helm chart vardır
    • Çoklu replica üzerinde çalışılmaktadır
  • OIDC Connection

    • Google, Discord, Authelia gibi OIDC uyumlu servislerle giriş yapılabilir

Henüz v5'e yeniden eklenmemiş özellikler

  • Watch List Scrubbing Support

    • Bağlı servislerle izleme listesini otomatik senkronize etme özelliği v5'te henüz yeniden eklenmedi
    • Hedefler arasında SIMKL ve gelecekte diğer servisler yer alıyor
  • Download and Offline Support

    • İnternet olmadan izleme için indirme ve çevrimdışı destek de v5'te henüz yeniden eklenmedi
    • Cihaz yeniden çevrimiçi olduğunda ilerlemeyi senkronize eden bir özellik olarak tanıtılıyor

İstemciler ve platformlar

  • Şu anda desteklenen istemci Web'dir
  • Android istemcisi v5'te henüz sunulmuyor ve durumu “soon”
  • Ek platformlar değerlendiriliyor
  • Frontend, React-Native ve Expo ile oluşturulmuştur
  • Apple cihaz desteği şu anda planlanmıyor
    • Hedefler iOS ve tvOS'tur
    • Nedeni donanım satın alma gereksinimi ve yıllık yaklaşık $100 geliştirici ücretidir

Jellyfin/Plex'ten farkları

  • Jellyfin ve Plex, teknik olarak SQLite'a dayanan ve her şeyi tek bir container içinde tutan bir yapı olarak açıklanıyor
  • Kyoo ise gerektiğinde ek container'lar kullanma yaklaşımını benimsiyor
    • Örnek olarak transcoder veriliyor
  • İşletim felsefesi “bir kez kur, sonra unut” yaklaşımıdır
    • Dosya adlarını elle değiştirmeyi gerektirmez
    • Belirli bir klasör yapısı gerektirmez
    • İndirme dizinindeki dosyaları olduğu gibi kullanmayı hedefler
  • Kapsam film, TV şovu ve anime streaming ile sınırlıdır
    • Müzik, e-kitap ve oyunları kapsamaz

Başlangıç ve entegrasyon kaynakları

  • API Documentation: Kyoo'yu diğer servislerle entegre etmek için API dokümantasyonu
  • Join the discord: Sorular, geliştirme tartışmaları, özellik istekleri ve bug paylaşımı için Discord
  • weblate: Kyoo'nun henüz desteklemediği diller için çeviri eklenebilir
  • kyoo.zoriya.dev: Telif hakkı olmayan filmlerden oluşan canlı demo sunulur

1 yorum

 
GN⁺ 2024-04-07
Hacker News yorumları
  • Demo güzel ve iyi hazırlanmış. Ses için Plexamp, video için Apple TV’de Plex uygulamasını kullanan memnun bir Plex kullanıcısı olduğumdan geçmeyi düşünmüyorum; ama ilgilendiğin teknolojileri öğrenmek için başlayan bir sandbox projesinin giderek büyümesi, bir şeyler inşa etmek için gerçekten iyi bir motivasyon gibi görünüyor

    • Sesli kitap da dinliyorsanız Bookcamp’e de bakmaya değer. Plexamp ile de mümkün olabilir ama Bookcamp daha çok Audible hissine yakın
    • Plexamp’i nasıl kullandığını merak ediyorum. Albümleri indirip oradan stream ederek Spotify benzeri bir alternatif olarak mı kullanıyorsun?
    • Beni Plex’te tutan tek neden Plexamp
      Plex’in bir gün enshittification aşamasına girmesine karşı Jellyfin’i de paralel olarak kurdum ama 2012’de aldığım ömür boyu üyelik şimdiye kadar parasını fazlasıyla çıkardı
  • Plex’ten Jellyfin’e geçmeye çalıştım ama Jellyfin’in kütüphane yönetimiyle pek ilgilenmiyor gibi görünmesi ve dosya yapısı hakkında aşırı güçlü varsayımlarda bulunması en büyük sınırlamaydı
    Wiki’de dosya adlarını doğru vermeyi anlatan ayrı bir bölüm var; Plex’te ise bunu dert etmeniz gerekmiyor. Kyoo’nun da benzer bir yaklaşım mı izlediğini, yoksa daha kullanıcı dostu mu olduğunu merak ediyorum. Plex’in para kazanma biçimi saçma ama Jellyfin de henüz ciddi kullanım için tam hazır değilmiş gibi geliyor

    • Bence o kısım gerçekten tuhaf. Kyoo’nun hedefi kütüphaneyi senin yerine düzenlemek; indirme klasörünü olduğu gibi kütüphane klasörü olarak kullansan bile adları değiştirmeden doğrudan çalışmalı
      Şimdilik istisna durumlar var; özellikle ekstra videolar gibi öğeler bazen iyi işlenmiyor. Yine de "[SomeGroup] Jojo's bizzare adventure - golden wings 12.mkv" gibi tuhaf anime dosya adları bile işleniyor
    • Bir medya sunucusunun neden yapı konusunda daha az ısrarcı olması gerektiğini merak ediyorum. Jellyfin’de birkaç düğmeye basınca kendi kendine halletmesini seviyorum; yapıyı benim düşünmek zorunda kalmamam rahat
    • Jellyfin kullanıyorum ama dosya yönetimini TMM(tiny media manager) ile yapıyorum. Jellyfin, TMM’in ürettiği çıktıları oldukça iyi kabul ediyor
      Açıkçası hiç medya yönetim kodu olmayan, sadece streaming yapan hafif bir Jellyfin de görmek isterdim
    • Elbette ortama göre değişir ama Jellyfin, manuel etiketleme kullanmaya yetecek kadar iyi destek sunuyor. Dosya tarayıcısında bakması kolay olacak şekilde oluşturduğun klasör yapısını bozmaya ya da dosya adlarını değiştirmeye gerek yok; dosya veya klasörde "Identify"ye basıp başlık ya da IMDB numarasıyla etkinleştirdiğin veritabanlarında arama yapman yeterli
      Bir klasörün hangi TV dizisi olduğunu bir kez belirleyince bölümler otomatik tanınıyor gibi görünüyor. Klasör adı "doğru" değilse sadece ilk adım otomatik olmuyor; Tiny Media Manager ile toplu NFO dosyası oluşturularak bunun etrafından dolaşılabilir gibi
    • Plex’in para kazanmasının neden saçma olduğunu merak ediyorum. Açık kaynağa kıyasla premium freemium model daha az ideal olabilir ama 4 yıl önce Plex Pass ömür boyu aboneliğini memnuniyetle satın aldım ve şimdiye kadar hiç pişman olmadım
  • Güzel görünüyor. Medya sunucusu projelerinin özellikle C#’ı tercih etme eğiliminde olması ilginç. Teknik bir nedeni mi var, yoksa büyük projelerin standardı belirlemesinin sonucu mu, merak ediyorum

    • İlgili yazılımların çoğu, özellikle *arr ailesi de .NET ile yazılmış. Geliştirici deneyiminden ödün vermeden performansı iyi olan bir platform
    • C# web sunucusu tarafında parlıyor; bu yüzden garip değil. Yine de kişisel olarak giderek daha az seviyorum
      Kyoo da bazı bileşenlerde Python ve Go, frontend’de ise TypeScript kullanıyor
    • Bu proje birden fazla dilde yazılmış gibi görünüyor. C#, Go, Python görüyorum; frontend kodu da olabilir ama o tarafa alerjim var
  • Hem Postgres hem RabbitMQ kullanmak fazla gibi görünüyor. Operasyon yükünü azaltmak için her şeyi Postgres’e indiren bir PR’ı kabul ederler mi merak ediyorum
    Masaüstüne dönünce RabbitMQ’nun medya sunucusunda tam olarak ne yaptığını incelemem gerekecek

    • RabbitMQ servisler arası iletişim için kullanılıyor. Yeni ekledik ama ileride istemcilerle websocket iletişimi, yeni öğe oluşturma ve yeniden tarama istekleri için iş kuyruğu, harici servislerle izleme listesi senkronizasyonu ve Kubernetes dağıtımlarında birden çok replika arasında senkronizasyon için kullanılacak
      Ancak Kubernetes tarafındaki senkronizasyon için hâlâ daha fazla çalışma gerekiyor
    • RabbitMQ harika. Programın bazı bölümleri doğası gereği diğerlerinden daha yavaş olduğunda özellikle faydalı oldu
      Çok sağlam ve kendini kanıtlamış bir kuyruk sistemi sunarken çalıştırma yükü de düşük. Bu sayede yapıyı basit tutabiliyorsunuz
  • İlginç bir proje. Ancak "transcoder’ı beklemeden kolayca gezinme" kısmını merak ediyorum
    Container ve codec’e bağlı olarak bu hep sorun olmuştur. Bunu nasıl çözdüklerini, libav kullanıp kullanmadıklarını merak ediyorum

    • Her küçük video aralığı için ffmpeg çalıştırıyor; mevcut transcoding konumundan çok uzağa seek edersen yeni bir ffmpeg süreci oluşturuyor
      Zor olan kısım, bu aralıkların takılma veya sorun olmadan izlenebilmesini sağlamak ve ses ya da video bölümlerinin tekrarlanmamasını garanti etmek. Yeterince ilgi olursa ayrıntılı anlatan bir blog yazısı yazabilirim
  • Müziği işlememesi üzücü. Plex’i kullanmamın ana nedeni müzik kütüphanesi yönetimi; Plex’te bile müzik ikincil bir odak gibi hissettiriyor ama yine de yeterince kullanılabilir

  • Birkaç gün önce n100 üzerinde Jellyfin ve tailscale kurdum
    Yerelde iyi çalışıyordu, ama dünyanın öbür ucundaki ailemle tailscale üzerinden paylaşınca bir şeyler bozuldu. Yükleme hızı yeterince hızlı olmasına rağmen stream’in başlaması yaklaşık 1 dakika sürdü; gecikme süresiyle ilgili olabilir. Bunu bir denemeyi planlıyorum

    • Benzer bir sorun yaşamıştım. WireGuard üzerindeki bir ters proxy’nin arkasına Jellyfin koymuştum; kıtalar arası ziyaretçiler gibi gecikme süresi yüksek olduğunda aktarım hızı başta fena olmayan seviyelere sıçrıyor, ama birkaç saniye içinde kullanılamayacak kadar yavaşlıyordu. Sorunun paket tıkanıklığıyla ilgili olduğunu doğrulamak uzun sürdü
      Jellyfin ve ters proxy sunucusunda Linux’un varsayılan tıkanıklık kontrolünü (net.ipv4.tcp_congestion_control) bbr olarak değiştirmeyi öneririm. Ayrıntıları çok iyi bilmiyorum, yan etkileri olabilir [1] ve daha iyi tıkanıklık kontrol algoritmaları da olabilir; ama benim durumumda bu sorunu tamamen çözdü. Önceden, sessiz ve en uygun ağ koşullarında bile bağlantı hat hızının %10’unun altına, bazen %1’e kadar takılıp kalıyordu
      Ayrıca Caddy varsayılan olarak HTTP/3’ü açtığı için HTTP/2’ye zorladım. Daha sonra bbr’nin daha yeni sürümlerine de bakmam gerekecek gibi
      [1] https://news.ycombinator.com/item?id=37408406
  • Gerçekten iyi görünüyor. TV’ye cast edilebiliyor mu merak ediyorum. Beni Plex’e bağlı tutan tek sebep bu; onun dışında Plex’i sevmiyorum

    • Henüz değil. Oldukça önemli bir özellik, bu yüzden önümüzdeki 6 ay içinde sunmayı planlıyorum; ama ondan önce istemci özelliklerinin çoğunu tamamlamak istiyorum
    • Jellyfin’in cast özelliği eskiden epey kötüydü, ama bugünlerde çok daha iyi. En son ne zaman sorun yaşadığımı hatırlamıyorum bile
    • Mac tarayıcısında açıp AirPlay ile Apple TV’ye gönderebilirsiniz. Windows’ta da cast türü şeylerle benzer şekilde mümkün
  • Plex’in gittiği yöne bakınca daha fazla seçenek çıkması sevindirici. SONARR/RADARR’a doğrudan bağlanan hook’lar yapılıp takvim öğesine tıklayınca doğrudan oynatıcıya geçilebilse güzel olurdu
    Hukuki sorunlar yüzünden bunu doğrudan yapmak istemeyebilirler, ama kendi barındırdığın medya ile korsan içerik yönetimi özelliklerini tek arayüzde birleştirmek kullanışlı olurdu

  • Güzel görünüyor. Demo sayfasında birkaç filme tıkladım ve rastgele dolaştım; her şey kusursuz çalıştı
    Ölçeklenebilirliği merak ediyorum. Tek bir sunucunun yaklaşık kaç kullanıcıyı kaldırabileceğini ve nasıl bir sunucu gerektiğini bilmek isterim. Demo sayfasının neyin üzerinde çalıştığını ve kullanıcı sayısı ne kadar artarsa aşırı yükleneceğini de merak ediyorum

    • Demo, README’deki docker-compose’u Oracle VPS Always Free katmanında çalıştıran bir kurulum
      Sunucu benchmark’ı yapmadım, ama sınırlayıcı unsurun neredeyse kesinlikle makinenin encode hızı olacağını düşünüyorum. Tüm istemcilerin aynı anda farklı h265 8K filmleri transcode etmesi gerekiyorsa, aynı sayıda kullanıcının doğrudan oynatma yaptığı duruma kıyasla bambaşka düzeyde GPU/CPU gücü gerekir