Geçtiğimiz hafta, FableCut adı verilen yeni bir video editörü açık kaynak olarak yayınlandı. Farkıysa, Premiere benzeri arayüzüne rağmen, AI ajanlarının doğrudan kontrol edebildiği bir yapıya sahip olması. Bu yenilikçi yaklaşım, proje dosyasının doğrudan arayüz olarak kullanılmasından kaynaklanıyor.
Geleneksel Yöntemlere Karşı Alternatif Bir Tasarım
Çoğu AI destekli video editörü, işlemleri gizli API'ler aracılığıyla yürütür. Örneğin, addClip() ya da applyFilter() gibi fonksiyonlar çağrılarak, araç kendi durumunu yönetir. Eğer bir kullanıcı sonucu düzenlemek istiyorsa, tüm bir işbirliği katmanını inşa etmek gerekir.
FableCut ise tam tersini yapıyor. Tüm zaman çizelgesi, medya, klip, iz, anahtar kare, geçiş ve işaretleri tek bir JSON dosyasında, project.json içerisinde saklıyor. Hem editör arayüzü hem de dışa aktarma işlemi bu dosyayı okuyarak çalışıyor. Yani, JSON dosyasını düzenleyebilen her şey — Claude Code üzerinden MCP, Python script'leri, jq ya da basit bir metin editörü — video düzenlemeyi de yapabiliyor.
{
"id": "c_title",
"kind": "text",
"track": "V3",
"start": 0,
"duration": 2.2,
"props": {
"text": "EL İŞİ",
"font": "Bebas Neue",
"glow": 45,
"textAnim": "letter-pop"
}
}Yukarıdaki JSON örneği, parlak bir kinetik metin klipini temsil ediyor. Bu klip, herhangi bir API çağrısıyla oluşturulmuyor; doğrudan dosyaya yazılmasıyla oluşturuluyor.
Sunucu-Tarafı Olaylar (SSE) ile Basit Bir Dinleme Mekanizması
Hacker News'teki ilk sorulardan biri, "SSE burada ne işe yarıyor?" olmuştu. Mantıklı bir soru, çünkü SSE kanalı aslında çok basit bir işlevi yerine getiriyor.
Sunucu, fs.watch ile proje dosyasını izliyor, 150 milisaniyelik bir gecikmeyle tarayıcıya sadece change kelimesini gönderiyor. Hiçbir veri yükü taşımıyor. Tarayıcı ise projeyi yeniden çekerek güncelleniyor. Tüm mekanizma, node:http üzerindeki yaklaşık 15 satırlık bir koddan oluşuyor.
Peki neden WebSocket yerine SSE kullanılıyor? Çünkü veri akışı tek yönlü. Tüm yazma işlemleri (arayüz, ajan ya da komut satırı script'i) REST ya da dosya sistemi üzerinden gerçekleşiyor. Tarayıcı yalnızca "bir şey değişti, bak" sinyalini alıyor. Veri içermeyen bir olayın sıralama sorunu olamaz ve bir sinyalin kaçırılması, sonraki çekimde en güncel durumu alacağı için sorun yaratmaz.
Revizyon Sayacı: İnsan ve AI’nın Ortak Zaman Çizelgesi
Proje dosyasında bir revizyon sayacı bulunuyor. Her yazma işlemi, bu sayıyı artırmalı. Eğer bir yazma işlemi, diskteki revizyon sayısından eski bir sayıyla gelirse, sunucu 409 yanıtıyla reddediyor.
Bu tek sayı, tüm eşzamanlılık modelini oluşturuyor. Örneğin, kullanıcı arayüzünde bir klip sürüklerken, AI aracı aynı anda bir düzenleme yapıyorsa, AI’nın yazma işlemi reddediliyor. Aracın son durumu okuyarak değişikliğini yeniden uygulaması gerekiyor. Bu basit model, insan hızıyla nadiren gerçekleşen kaba düzeydeki düzenlemeler için yeterli oluyor.
Kare Hassasiyetli CSS Animasyonları: Yenilikçi Bir Yaklaşım
FableCut, animasyonlu SVG üst katmanları (alt yazılar, konfeti, kıvılcımlar) kullanıyor. Bu animasyonlar, CSS @keyframes ile çalışıyor. Ancak, video kompozisyonu gerçek zamanlı olmadığı için, animasyonun belirli bir andaki durumunu yakalamak zor.
Çözüm, tüm animasyonları durdurmak ve zamanı elle kontrol etmek. Kompozisyon motoru, animation-delay: calc(var(--d, 0s) - t) gibi bir CSS özelliğiyle, klipin yerel zamanını (t) kullanarak animasyonu sürekli olarak ayarlıyor. Negatif bir gecikme, animasyonun geçmişteki bir karesini gösteriyor. Örneğin, -1.3s gecikmesi, animasyonun 1.3. saniyesindeki karesini sabit olarak görüntülüyor. Bu sayede, hem önizleme hem de dışa aktarma işlemlerinde tutarlılık sağlanıyor.
SVG oluşturucular için tek kural, animation-delay değerini sabit olarak tanımlamamak ve yerine --d özelliğini kullanarak zamanlamayı ayarlamak.
ffmpeg’e Erişim Vermek Yeterli mi?
Hacker News’ta atılan bir yorumda, "Claude’a ffmpeg erişimi vermek yeterli" denmişti. Evet, kesme, birleştirme ve toplu dönüştürme işlemleri için ffmpeg mükemmel bir araç.
Ancak, FableCut’un odak noktası yaratıcı sürecin kendisi. ffmpeg yalnızca çıktı alırken kullanılabiliyor; AI aracı filtre zincirini oluşturuyor, dakikalarca render yapıyor ve sonucu göremiyor. Geri bildirim verildiğindeyse her şey yeniden renderlanıyor. FableCut ise düzenlemeleri JSON farkı olarak saklıyor. Tarayıcı 150 milisaniyede güncelleniyor ve zaman çizelgesi bozulmadan kalıyor.
FableCut, ffmpeg’in yerini alacak bir araç değil. Dışa aktarma işlemleri tarayıcıda renderlanan karelerin ffmpeg’e aktarılmasıyla gerçekleşiyor. FableCut, AI aracı ile ffmpeg arasındaki durum ve önizleme katmanı olarak çalışıyor.
Sınırlamalar ve Gelecek Planları
Mevcut versiyonda, dışa aktarma işlemi için tarayıcıyı açık tutmak gerekiyor (headless dışa aktarma henüz desteklenmiyor). Ayrıca, Chromium tabanlı bir tarayıcıya bağımlılık söz konusu. AI’nın yaptığı kurgular her zaman doğru olmayabilir; bu yüzden insan müdahalesi önem kazanıyor. AI emeği sağlarken, estetik kararlar kullanıcıya ait.
Açık kaynak olarak yayınlanan FableCut’un README dosyası ve bazı editör bileşenleri, AI araçlarıyla birlikte geliştirildi. Bu yaklaşım, aracın asıl kullanıcısının AI ajanları olması nedeniyle oldukça uygun. Ancak, mimari kararlar bağımsız olarak savunulabilir nitelikte.
Projeye ronak-create/FableCut adresinden ulaşabilirsiniz. MIT lisansıyla yayınlanan araç, sıfır bağımlılıkla ve sadece node server.js komutuyla çalışıyor. Eğer bu araçla ilginç bir proje geliştirirseniz, paylaşmanız bizi mutlu edecektir.
Yapay zeka özeti
FableCut, tarayıcıda çalışan ve AI ajanlarına doğrudan erişim sunan yenilikçi bir video editörü. Proje dosyasıyla yapılan düzenlemelerle video kurgusu oluşturmayı sağlıyor.