Kuzgun
Kuzgun: Kendi Gökyüzünde Özgürce Uçan Bir Medya Uygulaması
Her projede bir kıvılcım anı vardır. Kuzgun'unki, "neden kendi içeriklerimi kendi sunucumdan izleyemiyorum?" sorusuydu.
Bugün sizlerle uzun süredir geliştirdiğim bir projeyi tanıtmak istiyorum: Kuzgun kişisel medya kütüphanenizi yönetmenizi ve içeriklerinizi istediğiniz yerden güvenle izlemenizi sağlayan bir Android uygulaması. Tanıtım sayfasına app.kuzgun.tr adresinden ulaşabilirsiniz.
Neden Kuzgun?
Piyasada onlarca medya sunucusu ve streaming uygulaması var. Plex, Jellyfin, Emby... Hepsi kendi alanında iyi. Ama hepsinde ortak bir sorun var: ya Android deneyimi yetersiz kalıyor, ya torrent entegrasyonu yok, ya da yönetim tarafı karmaşık.
Kuzgun, bu eksikleri tek bir uygulamada çözme amacıyla doğdu. Hedef basit: sunucundaki videoları izle, indirmelerini yönet, altyazılarını ayarla — hepsi tek bir yerden.
Mimari: Kotlin + Rust
Kuzgun iki ana bileşenden oluşuyor:
Android İstemci: Kotlin ve Jetpack Compose ile sıfırdan yazıldı. Tüm arayüz %100 deklaratif Compose kullanıyor. Material Design 3 tasarım dili ile Samsung OneUI 8'e uyumlu bir deneyim sunuyor. Video oynatma tarafında ise ExoPlayer (androidx.media3) kullanılıyor.
Rust Backend: Sunucu tarafı Actix-web 4 framework'ü ile Rust dilinde yazıldı. PostgreSQL veritabanı, Argon2 ile şifre hashleme, JWT tabanlı kimlik doğrulama ve qBittorrent API entegrasyonu barındırıyor. Rust'ın bellek güvenliği ve performans avantajları sayesinde düşük kaynak tüketimi ile yüksek eşzamanlılık sağlanıyor.
Bu iki bileşen arasındaki iletişim tamamen REST API üzerinden gerçekleşiyor ve SSL ile şifreleniyor.
Öne Çıkan Özellikler
Video Oynatıcı
Kuzgun'un video oynatıcısı sıradan bir oynatıcı değil. ExoPlayer üzerine inşa edilmiş özel kontroller barındırıyor:
Jest tabanlı kontroller: Ekranın sol yarısında dikey sürükleme ile parlaklık, sağ yarısında ses seviyesi ayarlanıyor. Yatay sürükleme ile ileri-geri sarım yapılıyor.
Çift dokunma ile sarım: Sağa çift dokunma +10 saniye, sola çift dokunma -10 saniye.
Altyazı desteği: SRT, VTT ve ASS/SSA formatlarını destekleyen özel bir parser yazıldı. Altyazılar sunucudan otomatik yükleniyor veya cihazdan dosya seçilebiliyor. Senkronizasyon bozukluğu için ise ±0.1 saniye hassasiyetinde manuel ayar yapılabiliyor.
Resim içinde Resim (PiP): Android 12 ve üzeri cihazlarda uygulama küçültüldüğünde otomatik olarak PiP moduna geçiyor. Kilit ekranında da oynatma kontrolleri gösteriliyor.
İzleme geçmişi: Video kaldığınız yerden otomatik devam ediyor. İzleme konumları sunucu tarafında saklanıyor, yani cihaz değiştirseniz bile kaldığınız yerden devam edebiliyorsunuz.
İndirme Yönetimi
Kuzgun sadece bir video oynatıcı değil, aynı zamanda güçlü bir indirme yöneticisi:
Torrent desteği: Magnet link yapıştırarak torrent ekleyebiliyorsunuz. Eklenen torrent önce duraklatılmış olarak qBittorrent'e gönderiliyor; bu sayede indirmeden önce dosya seçimi yapabiliyorsunuz. Hangi dosyaları indirmek istediğinizi seçtikten sonra indirme başlıyor. Anlık hız, seed/peer sayısı ve ilerleme bilgisi takip ediliyor.
HTTP indirme: Doğrudan URL ile dosya indirme. Durdurma, devam ettirme ve ilerleme takibi mevcut. Content-Disposition header'ından otomatik dosya adı çıkarımı yapılıyor.
Yönetim Paneli
Admin kullanıcıları için kapsamlı bir yönetim paneli bulunuyor:
Kullanıcı yönetimi: Hesap oluşturma, silme ve şifre sıfırlama. Her kullanıcıya özel kök klasör atanıyor, böylece kullanıcılar yalnızca kendi dosyalarına erişebiliyor.
Aktivite takibi: Giriş/çıkış olayları, IP adresleri ve tüm kullanıcı aksiyonları zaman damgasıyla birlikte loglanıyor.
Sistem geneli izleme: Tüm kullanıcıların torrent ve HTTP indirmeleri tek bir ekrandan görüntülenebiliyor.
Otomatik Güncelleme
Kuzgun, uygulama içi güncelleme sistemiyle her zaman güncel kalıyor. Uygulama açılışında sunucudaki son sürüm kontrol ediliyor. Güncelleme varsa indirilen APK'nın SHA-256 hash'i doğrulanıyor ve kurulum başlatılıyor. Güncelleme notları da deploy anında girilen açıklamalarla birlikte kullanıcılara gösteriliyor.
Güvenlik Yaklaşımı
Kuzgun, kapalı üyelik sistemiyle çalışıyor. Herkese açık bir kayıt sayfası yok; kullanıcılar yalnızca admin tarafından oluşturulabiliyor. JWT tabanlı kimlik doğrulama, Argon2 ile hashlenen şifreler ve kullanıcı bazlı klasör izolasyonu güvenliğin temel taşlarını oluşturuyor.
Deploy tarafında ise APK yüklemeleri ve sürüm kayıtları build secret ile korunuyor. İstemci tarafında indirilen her APK, kurulum öncesi SHA-256 doğrulamasından geçiyor.
Teknik Altyapı
Projenin teknik detaylarına meraklılar için:
Android: Kotlin, Jetpack Compose, ExoPlayer 1.9.0, Retrofit 2.11.0, OkHTTP 4.12.0, Coil 3.0.4. Min SDK 26 (Android 8.0), Target SDK 35 (Android 15).
Backend: Rust, Actix-web 4, SQLx (async PostgreSQL), jsonwebtoken, Argon2. qBittorrent API entegrasyonu.
Veritabanı: PostgreSQL, 9 migration ile yapılandırılmış: kullanıcılar, aktivite logları, indirme takibi, torrent yönetimi, izleme geçmişi ve uygulama sürümleri.
Deploy: Otomatik deploy scripti (build, hash, upload, register, verify) ile tek komutla sürüm çıkılıyor.
Altyapı: Nginx reverse proxy, Let's Encrypt SSL, systemd servis yönetimi.
Sonuç
Kuzgun, kişisel medya yönetimi için uçtan uca bir çözüm sunuyor. Tek bir uygulamada video streaming, torrent ve HTTP indirme, altyazı desteği, PiP modu, izleme geçmişi ve yönetim paneli bir arada. Kotlin + Rust kombinasyonu hem istemci hem sunucu tarafında modern, performanslı ve güvenli bir deneyim sağlıyor.
Proje davet usulü kapalı üyelikle çalışıyor, ancak merak edenler uygulamanın tanıtım sayfasını inceleyebilir.
Tanıtım sayfası: https://app.kuzgun.tr

