Skip to content

Releases: inanx12/Filler-Cut

Filler-Cut 1.3.2 — Ek disk eklemek artık dosya oluşturmayı gerektirmiyor; oynatma başlığı akıcı

Choose a tag to compare

@github-actions github-actions released this 06 Sep 20:13

Ek disk eklemek artık dosya oluşturmayı gerektirmiyor; oynatma başlığı akıcı.

Eklendi

  • İlk açılışta hazır config.json şablonu. Arayüz ilk kez çalıştığında
    %APPDATA%\fillercut\config.json yoksa oluşturulur ve içine
    {"ui": {"izinli_kokler": []}} yazılır. v1.3.1'de kullanıcı hem klasörü hem
    dosyayı sıfırdan, doğru kodlamayla kurmak zorundaydı; artık yalnızca listeyi
    düzenlemek yetiyor (izin hatası zaten dosyanın tam yolunu ve kopyalanabilir
    örneğini gösteriyor). Davranış değişikliği yok: boş liste "ek kök yok"
    demek, yani varsayılanın aynısı — şablon kök eklemez.
    Var olan dosyaya hiç dokunulmaz (kurulum sihirbazının kendi kaydı olsa
    da, bozuk olsa da); bozuk dosyanın açık hatası aynen korunur.

Düzeltildi

  • Zaman çizelgesindeki oynatma başlığı artık akıcı ilerliyor. Konum
    saniyede ~4 kez ateşlenen timeupdate olayına bağlıydı ve beyaz çubuk gözle
    sekiyordu; artık oynatma sırasında her karede güncelleniyor. Konum tahmin
    edilmiyor, her karede videonun gerçek zamanı okunuyor — bu yüzden çizelgeye
    tıklama, J/K/L mekiği ve kenar sürükleme anında yapışıyor. Başlık yalnız
    oynarken ve pencere görünürken güncellenir; duraklatınca ya da sekme arka
    plana geçince döngü durur. Kesim atlama mantığı ve dalga formu çizimi
    değişmedi.

Filler-Cut 1.3.1 — Kurulu sürümde ikinci bir sürücü (D:\ …) artık gerçekten açılabiliyor

Choose a tag to compare

@github-actions github-actions released this 06 Sep 02:57

Kurulu sürümde ikinci bir sürücü (D:\ …) artık gerçekten açılabiliyor.

Düzeltildi

  • Kurulu kullanıcı [ui].izinli_kokler'i ayarlayamıyordu. Ayar yalnız
    filler-cut.toml'dan okunuyordu; o bir repo dosyasıdır ve kurulu exe onu
    hiç bulamaz — yani kurucuyla kuran herkes gezginde ev dizinine kilitliydi
    ve dışarıdan seçilen video reddediliyordu. İzinli kökler artık kullanıcının
    kendi yapılandırmasından da okunuyor:
    %APPDATA%\fillercut\config.json içindeki "ui": {"izinli_kokler": [...]}.
    Sihirbazın kurulum anahtarlarına (binary/model) dokunulmuyor; sihirbaz
    da artık dosyayı üzerine yazarken bu bölümü koruyor.
    Öncelik: filler-cut.toml > config.json — toml'da kök varsa
    config.json hiç okunmaz, yani mevcut kurulumların davranışı birebir aynı
    kalır. Bozuk bir config.json, düzenlemeyi sessizce yok saymak yerine
    dosyanın adını veren açık bir hatayla durdurur.
  • "İzin verilen konumlar dışında" hatası çözümsüz bir yol gösteriyordu.
    Kurulu sürümde mesaj artık config.json'un tam yolunu ve olduğu gibi
    kopyalanabilen (geçerli JSON) örneğini veriyor; ulaşılamayan repo
    dosyasından bahsetmiyor. pip/kaynak koşusunda filler-cut.toml yine doğru
    cevap olarak gösteriliyor.

Güvenlik

  • İzinli kök invariant'ı değişmedi: kökler yalnızca yerel config
    dosyalarından
    gelir — onları değiştiren bir API ucu ya da CLI bayrağı
    yoktur. config.json da filler-cut.toml gibi yerel bir dosyadır, tehdit
    modeli aynıdır. İnvariant artık ayrıca regresyon kilidiyle korunuyor.

Filler-Cut 1.3.0 — Artık bir editör: kesimleri oynatırken canlı önizleyin

Choose a tag to compare

@github-actions github-actions released this 05 Sep 15:56

Artık bir editör: kesimleri oynatırken canlı önizleyin.

Arayüz tek ekranlı bir "proje" görünümüne dönüştü: video proje içinden eklenir, dalga formu anında görünür, kesimler
oynatılırken canlı önizlenir, klavyeyle gezilir ve paneller kendi ölçünüze
göre ayarlanır. Kesim mantığı, kesim sonuçları ve komut satırı DEĞİŞMEDİ:
düzenlemesiz bir koşu, bu sürümden önceki referans videoyla bit düzeyinde
aynı
MP4 üretir (gerçek koşuda doğrulandı).

Eklendi

  • Tek ekranlı editör düzeni. Üst bar (Kesimi Başlat · Render Al · Kapat),
    sol panel (medya kartı + Filler Listesi: zaman + kelime + tür; tıklayınca
    oynatma başlığı oraya gider), orta önizleme, sağ panel (kesim özeti / aşama
    ilerlemesi / sonuç) ve kalıcı zaman çizelgesi. Ayrı "başlangıç ekranı"
    kalktı; video proje içinden seçilir (sürükle-bırak ve klasör gezgini aynen
    duruyor).
  • Dalga formu artık video seçilir seçilmez görünüyor. Önceden analiz
    bitene kadar beklemek gerekiyordu; ses zarfı ve süre şimdi arka planda
    hesaplanıp dosya başına önbellekleniyor — aynı videoyu ikinci kez açmak
    hiçbir şey hesaplamaz.
  • Zaman çizelgesinde yakınlaştırma (1×–16×) ve zaman cetveli. Yakınlaşınca
    cetvel otomatik sıklaşır, oynatma başlığı görüş alanında tutulur.
  • Kesim-atlamalı önizleme. Oynat dediğinizde kaynak video oynar ama
    final videoyu görürsünüz: kesilecek bölgeye gelindiğinde otomatik
    atlanır. Atlama yalnız oynatma sırasındadır — duraklatılmışken kesimin
    içine tıklayıp inceleyebilirsiniz. Kesim videonun sonuna kadar sürüyorsa
    oynatma başlığı kesimin başına oturur ve durur (final videoda bulunmayan
    bir kare donmaz).
  • J/K/L mekiği. J geri, K dur, L ileri; aynı yöne her basış hızı katlar
    (1× → 2× → 4× …, en fazla 16×). Hız oynatıcı çubuğunda yazar. Geri sararken
    de kesikler atlanır. Mevcut kısayollar (Boşluk, ←/→, Y, M) aynen duruyor.
  • Panel ayırıcıları. Sol panelin genişliği ve zaman çizelgesinin
    yüksekliği sürükleyerek ayarlanır; ölçünüz hatırlanır. Çift tıklama
    varsayılana döndürür.
  • Koyu başlık çubuğu. Masaüstü penceresinin başlık çubuğu artık
    uygulamanın kendisi gibi koyu. Windows'u açık temada kullananlarda koyu
    gövdenin üstünde açık gri bir şerit kalıyordu.
  • Dışa aktarım biçimi artık "Render Al"a basınca soruluyor (MP4 / NLE
    projesi + altyazı kutusu). Önceden analizden ÖNCE seçmek gerekiyordu; artık
    kesimleri gördükten sonra karar veriliyor.
  • Sağ panelde canlı kesim özeti: mod, tür bazında sayı, kazanılan süre ve
    plan özeti. Sayılar rapor.json'a yazılacak olanların aynısıdır.

Değiştirildi

  • Atlamalı oynatma yalnız oynarken atlıyor. Duraklatılmışken de atladığı
    için Filler Listesi'nden bir kesime tıklamak kullanıcıyı kesimin sonuna
    fırlatıyordu; artık tıklanan yere gidiliyor.
  • Koşu sırasında video bırakıldığında verilen uyarı tek metne indirildi ve
    üst bardaki durum satırında da görünüyor (dropzone o sırada gizli olduğu
    için uyarı görünmüyordu).
  • Hata mesajları insan diliyle. Sessiz bir videoda görünen "PLAN
    başarısız: kesim planı tüm videoyu kapsıyor — boş video üretilmez;
    eşikleri gözden geçir" cümlesi yerine artık "Bu videoda kesilecek konuşma
    bulunamadı (ses yok ya da tamamı sessizlik)." yazıyor. Teknik cümle
    kaybolmuyor, "Log detayı" katlamasında duruyor.

Düzeltildi

  • Bir şey ters gittiğinde ekran donuk kalıyordu. Sessiz (ya da tamamı
    sessizlik olan) bir videoda kesim planı üretilemez; iş sunucuda düzgün
    başarısız oluyor ama arayüz "İŞLENİYOR"da asılı kalıyor, kullanıcıya
    hiçbir şey söylenmiyordu. Artık sağ panelde ne olduğunu söyleyen bir hata
    kartı, "Yeni video" düğmesi ve geri bildirim bağlantısı çıkıyor. Her hata
    türü aynı yere düşüyor: kesim planı üretilemedi, ffmpeg bulunamadı, izin
    verilen konumlar dışında dosya.
  • Kurulum sihirbazı hiç açılmıyordu. whisper.cpp motoru ya da dil modeli
    eksik olan bir makinede indirme ekranı görünmüyor, arayüz boş proje
    ekranında kalıyordu. (Yalnız bu sürümün geliştirme dalında oluşmuş bir
    gerileme; yayınlanmış bir sürümü etkilemedi.)
  • Boşluk tuşu düğmelere takılıyordu. Bir düğmeye tıkladıktan sonra
    Boşluk oynatmayı başlatmıyor, o düğmeyi yeniden basıyordu. Düğmeler artık
    fareyle tıklandığında klavye odağını almıyor; Tab ile gezenler için
    düğmeler eskisi gibi Boşlukla çalışıyor.
  • Pasif "Render Al" basılabilir görünüyordu. Düğme gerçekten pasifti ama
    yeşil dolgusu koyu zeminde hâlâ bir eylem gibi okunuyordu; pasif düğmeler
    artık dolgusuz.
  • Kesim kenarından sürükleme çalışmıyordu. Zaman çizelgesinde bir
    kesimin kenarını tutup kapsamı değiştirmek bu sürümün geliştirme dalında
    bozulmuştu (mıknatıs açık ya da kapalı, fark etmiyordu): dalga formu
    katmanı, tıklamaları alması gereken kesim katmanının üstünde duruyordu.
    Kenar sürükleme (iki yön), boş alanda sürükleyerek yeni kesim ve
    mıknatısın iki modu yeniden çalışıyor. (Yayınlanmış bir sürümü
    etkilemedi.)
  • Başlık çubuğu vurgu renginde kalabiliyordu. Windows'ta "Vurgu rengini
    başlık çubuklarında göster" açık olan makinelerde pencere başlığı koyu
    değil renkli çıkıyordu; artık rengi uygulama kendisi söylüyor. Eski
    Windows sürümlerinde eskisi gibi davranır.
  • Diyaloglar sessizce hiçbir şey yapmıyordu (KI-17). Tarayıcı motoru
    <dialog> kapanış olayını hiç bildirmiyor; "Analizi başlat"a basınca modal
    kapanıyor ama iş başlamıyordu.

Teknik

  • wavesurfer.js 7.12.11 (BSD-3-Clause) vendor edildi — CDN yok, uygulama
    çevrimdışı çalışır. Sürüm ve SHA-256 web/static/vendor/vendor.json'da,
    kilidi testte.
  • ReviewKarari eklemeli iki alan kazandı (cikti, srt): None
    varsayılanı config'i geçerli kılar, yani CLI yolu bit-birebir korunur.
  • Yeni uçlar: GET /api/medya/onizleme (süre + zarf, arka planda + önbellekli)
    ve GET /api/medya/video (iş başlamadan önizleme, HTTP Range ile).
  • ReviewGorunumu tiers ve kesim başına kelimeler taşıyor; ikisi de
    mevcut reason-zinciri ayrıştırmasının TEK gövdesinden türer (KI-3 ailesi).
  • Görünürlüğün tek kaynağı body[data-asama]; hata yeni bir durum olarak
    eklendi. Yeni statik kilit: app.js içinde tanımsız bir fonksiyona yapılan
    çağrı kalırsa test kırmızıya döner (kurulum sihirbazı kusurunu bu yakalar).
  • Koyu başlık çubuğu DwmSetWindowAttribute ile kurulur ve pencere
    görünmeden ÖNCE uygulanır; eski Windows sürümlerinde sessizce atlanır —
    uygulama hiçbir koşulda düşmez. Windows 11'de başlık zemini ve metni
    ayrıca açıkça yazılır (DWMWA_CAPTION_COLOR / DWMWA_TEXT_COLOR), çünkü
    koyu kip niteliği tek başına vurgu rengine izin veriyor.
  • Zaman çizelgesindeki katmanların yığın sırası (z-index) artık açıkça
    ilan ediliyor; bir kütüphanenin gölge DOM'u sıraya sessizce giremez.
  • Yeni test katmanı: sürükleme kilitleri gerçek fare olaylarıyla koşuyor
    (Playwright + Chromium, tarayici marker'ı — CI'da koşmaz, tarayıcı yoksa
    kendi kendine atlanır). Statik kilitler bu sınıf kusuru göremiyordu.

Filler-Cut 1.2.4 — Hotfix: iş koşarken ekranda boş siyah pencereler açılıp kapanıyordu

Choose a tag to compare

@github-actions github-actions released this 04 Sep 01:23

Hotfix: iş koşarken ekranda boş siyah pencereler açılıp kapanıyordu.

v1.2.3 masaüstü penceresini düzeltti; bu sürüm o pencerede iş koşarken
görülen rahatsızlığı gideriyor. Kesim sonuçları değişmedi — üretilen video
bit düzeyinde aynıdır.

Düzeltildi — boş konsol pencereleri (KI-16)

  • Bir video işlenirken Transkript ve Render aşamalarında ekranda boş
    siyah pencereler açılıp kapanıyordu. Filler-Cut'ın kullandığı yardımcı
    programlar (ffmpeg, ffprobe, whisper.cpp) artık penceresiz başlatılıyor.
  • Yalnızca masaüstü uygulamasında görülüyordu; komut satırından
    (fillercut video.mp4) koşanlar etkilenmiyordu.
  • Çıktı birebir aynı: düzeltme yalnızca pencerenin çizilip çizilmemesiyle
    ilgilidir; kesim planı, transkript ve video dosyası değişmez. Referans
    klipte üretilen MP4'ün SHA-256'sı düzeltme öncesiyle aynı çıktı.

Testler

  • tests/test_surec.py (14 test): bayrak kararının birim kilidi + paket
    ağacının AST taramasıfillercut/surec.py dışında doğrudan süreç
    başlatan bir çağrı kalırsa test kırmızıya döner. Yarın eklenecek bir çağrı
    bu düzeltmeyi sessizce atlayamaz.
  • Gerçek donanım koşuları (-m ffmpeg, -m wcpp) ve uçtan uca video
    koşusu yeşil; sessizlik tespiti ve transkript yolları değişmedi.

Süreç

  • AGENTS.md Release Kontrol Listesi'ne madde: kurulu exe'de iş koşarken
    konsol penceresi yanıp sönmemeli.

Filler-Cut 1.2.0 — Kurulan bir Windows uygulaması: kurucusu var, kendi penceresinde açılıyor, motorunu kendisi indiriyor

Choose a tag to compare

@github-actions github-actions released this 02 Sep 19:48

Kurulan bir Windows uygulaması: kurucusu var, kendi penceresinde açılıyor, motorunu kendisi indiriyor.

Filler-Cut artık kurucusu olan bir Windows uygulaması (Faz 4): Python
gerekmiyor (Faz 3), kendi masaüstü penceresinde açılıyor (Faz 1) ve ilk
çalıştırmada whisper.cpp motorunu ve dil modelini sizin yerinize indiriyor
(Faz 2). Elle indirme, zip açma, yol yazma yok.

pip ile kuranlar için CLI ve varsayılanlar hiç değişmedi.


Eklendi — Windows kurucusu (dağıtım epic'i Faz 4)

Artık bir kurucu var: Filler-Cut-Setup-<sürüm>.exe. Çift tıklayın, kurulur;
Başlat Menüsünden açılır. Yönetici yetkisi istemez (kendi kullanıcı
klasörünüze kurulur), kurucu Türkçe ve İngilizce konuşur.

Kurucu iki ön koşulu da sizin yerinize çözer:

  • WebView2 — arayüzün kendi penceresinde açılması için gerekli. Yoksa
    Microsoft'un resmi kurucusunu sessizce çalıştırır. Kurulamazsa kurulum
    yarıda kalmaz; "Filler-Cut tarayıcı moduna düşer" diye uyarır.
  • ffmpeg — Filler-Cut ffmpeg'i dağıtmaz (lisans grupları ayrı). Kurulum
    sonunda yoksa bunu söyler ve winget install ffmpeg komutunu verir;
    winget yoksa elle kurulum bağlantısını gösterir. Kurulumu engellemez.

Kaldırma indirdiğiniz modeli silmez. Program klasörü tamamen gider ama
%LOCALAPPDATA%\fillercut (whisper.cpp ikilisi + model, yarım gigabayt)
ve ayarlarınız yerinde kalır. Kaldırıcı "bunlar da silinsin mi?" diye
sorar — varsayılan hayır.

  • Kurucu: per-user (%LOCALAPPDATA%\Programs\Filler-Cut), lzma2 sıkıştırma,
    MIT lisans sayfası + üçüncü taraf bildirimi (kurulum dizinine de kopyalanır).
  • Başlat Menüsü kısayolu doğrudan arayüzü açar; masaüstü kısayolu isteğe
    bağlı (varsayılan kapalı).
  • Tek komutla üretim: .\scripts\build_setup.ps1

Düzeltildi

  • İndirme, dosya tamamen inip doğrulandıktan sonra çökebiliyordu. Yarım
    dosyanın nihai adına taşınması, %LOCALAPPDATA% başka bir sürücüye
    yönlendirilmiş profillerde (paketlenmiş/sanallaştırılmış ortamlar, klasör
    yönlendirmesi) WinError 17 veriyordu. Artık bu durumda kopyalamaya
    düşülüyor; en pahalı anda kaybedilen indirme yok.

Bilinen sınırlar

  • Kurucu imzasız: SmartScreen ilk çalıştırmada uyarabilir ("Daha fazla
    bilgi" → "Yine de çalıştır"). Kod imzalama kabul edilmiş bir eksiktir.
  • Kurucu uygulama verisi (model/ikili) indirmez — o iş uygulamanın kendi
    sihirbazının. Kurucunun internete çıktığı tek yer WebView2 kurulumudur.

Eklendi — bağımsız Windows uygulaması (dağıtım epic'i Faz 3)

Filler-Cut artık Python kurmadan çalışan iki exe olarak paketleniyor:
fillercut.exe (komut satırı) ve fillercut-ui.exe (çift tıklayınca
doğrudan arayüzü açan, konsolsuz sürüm). İkisi de tek klasörde durur;
ikonu, sürüm bilgisi ve telif kaydı yerinde.

Paketlenmiş uygulamada varsayılan konuşma motoru whisper.cpp (Vulkan)
oldu. Yani ilk açılışta Faz 2'nin sihirbazı devreye girip motoru ve modeli
indiriyor; ondan sonrası her makinede GPU hızlanmasıyla çalışıyor —
AMD, Intel ve NVIDIA'da aynı ikili.

pip ile kuranlar için hiçbir şey değişmedi: orada varsayılan hâlâ
faster-whisper.

  • fillercut.exe — konsol CLI'ı, bugüne kadarki tüm komutlar aynı.
  • fillercut-ui.exe — konsolsuz; argüman gerekmez, doğrudan arayüzü
    açar. (Faz 4'te Başlat Menüsü kısayolu buna basacak.)
  • Tek komutla build: .\scripts\build_exe.ps1 — temiz dist, spec'ten
    build, artefakt özeti ve smoke testler.
  • Uygulama ikonu (packaging/fillercut.ico) — web arayüzünün işaretiyle
    aynı, üretici script'i repoda.

Ölçüldü

Varsayılan backend (kill criteria: wcpp net +1'den fazla ekstra filler
kaçırırsa varsayılan değişmez):

fw whispercpp
GT yakalama, normal mod 0/4 1/4
GT yakalama, agresif mod 5/8 6/8
yanlış pozitif (16 koşu) 0 0
tier ihlali (16 koşu) 0 0
transkripsiyon toplam (4 klip) 53.59 sn 4.24 sn

wcpp daha az kaçırıyor ve bu makinede 12× hızlı. Ölçümün sınırı: bu
makine AMD; faster-whisper'ın CUDA yolu olmadığı için CPU'da koştu. NVIDIA
için repo'nun kendi kaydı (KI-1, RTX 4050) iki backend arasında hız
beraberliği
gösteriyor — yani orada gerileme değil, berabere.

onedir vs onefile (5'er koşu, soğuk başlangıç → sunucu hazır):

onedir onefile
medyan açılış 0.517 sn 2.058 sn
boyut 277 MB 206 MB
dosya 312 2
Windows Defender temiz temiz

Delta +1.54 sn, eşik +3 sn — yani kill criteria onedir'i zorlamadı;
karar trade-off'a dayanıyor: o 1.5 saniye her açılışta ödeniyor (onefile
arşivi her koşuda %TEMP%'e açıyor) ve "tek dosya" avantajı Faz 4'teki
kurucuyla zaten kayboluyor. Onefile varyantı FILLERCUT_ONEFILE=1 ile
aynı spec'ten üretilebilir.

Bilinen sınırlar

  • ffmpeg pakete girmez (kilitli karar): sistem bağımlılığı olarak kalır.
    Yoksa uygulama stack trace değil tek satır Türkçe hata + kurulum bağlantısı
    verir; paketlenmiş exe'de de doğrulandı (çıkış kodu 1).
  • Kod imzalama yok — exe imzasız dağıtılıyor; SmartScreen ilk açılışta
    uyarabilir. UPX de bu yüzden kapalı (AV yanlış-pozitif riski).
  • CUDA ikilisi pakete girmez: sihirbaz Vulkan indirir, CUDA yolu ileri
    kullanıcı için manuel kalır.
  • Paketleme yalnız Windows x64 için ölçüldü.

Eklendi — ilk çalıştırma sihirbazı (dağıtım epic'i Faz 2)

whisper.cpp motorunu ve dil modelini artık elle indirip yollarını yazmanız
gerekmiyor. fillercut ui ilk açılışta bunlar eksikse sihirbaz ekranını
gösteriyor: model seçicisi (boyutlarıyla), tek düğmeyle indirme, yüzde/hız/
kalan süre, iptal ve yeniden dene. İndirme bitince ekran kendiliğinden video
seçme ekranına geçiyor; sihirbaz bitene kadar iş başlatılamıyor.

Komut satırını tercih edenler için fillercut setup aynı işi yapıyor;
fillercut setup --durum neyin kurulu olduğunu, hangi kaynaktan geldiğini
ve neyin eksik olduğunu raporluyor.

  • Sihirbaz ekranı (fillercut ui) — eksik varlıklar, model seçici,
    ilerleme çubuğu, iptal/yeniden dene. Kurulum eksikken iş başlatma
    sunucuda kilitli (POST /api/jobs → 409), istemciyi atlayan da
    aynı kilide çarpar.
  • fillercut setup--model AD ile model seçimi, --yes ile onaysız
    (CI/betik), --durum ile rapor.
  • İndirme motoru — akışlı indirme, .part + atomik rename, Range ile
    kaldığı yerden devam, SHA-256 doğrulama, indirmeden önce disk alanı
    kontrolü, iptal (yarım dosya korunur).
  • Manifest (fillercut/assets/manifest.json) — indirilen her şeyin adı,
    adresi, boyutu ve SHA-256'sı tek yerde.

Seçilebilir modeller:

model boyut ne zaman
ggml-large-v3-turbo-q5_0 547 MB önerilen — hız/doğruluk dengesi
ggml-small-q5_1 190 MB yavaş bağlantı ya da dar disk
ggml-large-v3-q5_0 1.08 GB kalite ağırlıklı, en yavaş

Değişti

  • [asr].whispercpp_binary / whispercpp_model zorunlu değil artık.
    Yollar şu sırayla çözülür, ilk VAR OLAN aday kazanır:
    filler-cut.tomlFILLERCUT_WCPP_BINARY/FILLERCUT_WCPP_MODEL
    sihirbazın yazdığı %APPDATA%\fillercut\config.json → eksik.
    Mevcut kurulumlar sihirbazı hiç görmez; sihirbaz hiçbirini ezmez,
    kendi ayrı dosyasına yazar. PATH'teki whisper-cli de eskisi gibi bulunur.
  • İndirilenler %LOCALAPPDATA%\fillercut\bin ve ...\models altına iner —
    repoya ve venv'e yazılmaz.
  • fillercut video.mp4 doğrudan çalıştırılıp ikili/model eksikse sessiz
    indirme yok
    : net hata + fillercut setup / fillercut ui önerisi.

Ölçüldü

Model kaynağı ölçümle seçildi (kill criteria: HF, GitHub Release'den %20+
yavaşsa modeller kendi release'imize taşınacaktı):

ölçüm HF GitHub Release
20 MiB eşit dilim (medyan, 3 koşu) 7.04 MiB/sn 8.48 MiB/sn
tam dosya (gerçek indirme) 10.6–10.8 MiB/sn 8.04 MiB/sn
Range ile resume çalışıyor çalışıyor

Dilimdeki %16.9'luk fark eşiğin altında kaldı ve gerçek boyutlu indirmede
sıralama tersine döndü — model kaynağı Hugging Face kaldı. Ayrıntı:
experiments/download_spike/README.md.

Bilinen sınırlar

  • Sihirbaz yalnız [asr].backend = "whispercpp" seçiliyken devreye girer;
    varsayılan backend (faster-whisper) kendi modelini kendisi indirir.
    Paketlenmiş dağıtımda varsayılanın çevrilmesi PyInstaller fazının kararıdır.
  • GPU tespiti / CUDA-vs-Vulkan seçimi yok: sihirbaz tek Vulkan
    win-x64 ikilisini indirir (AMD, Intel ve NVIDIA'da aynı ikili çalışır).
    CUDA yolu ileri kullanıcı için manuel kalır.
  • ffmpeg indirilmez — sistem bağımlılığı olarak kalır (kurucu fazının konusu).
  • Native pencere gibi, sihirbaz da yalnız Windows hedefiyle ölçüldü.
  • Tek instance kilidi gibi burada da kalıcılık dosyaya değil dizine bağlıdır:
    %LOCALAPPDATA% taşınırsa indirilenler yeniden inmek zorunda kalır.

Eklendi — native masaüstü penceresi (dağıtım epic'i Faz 1)

fillercut ui bugüne kadar tarayıcıda bir sekme açıyordu. Artık Filler-Cut'ın
kendi masaüstü penceresi var: başlığı "Filler-Cut", görev çubuğunda kendi
girdisi, sekme kalabalığında kaybolmuyor. İçerideki arayüz birebir aynı —
aşamalar, gözden geçirme ekranı, istatistik paneli, hepsi değişmedi.

Pencere Windows'un WebView2 çalışma zamanını kullanır. Makinede yoksa (ya da
pywebview kurulu değilse) hiçbir şey bozulmaz: eskisi gibi tarayıcıda
açılır ve konsola tek satır neden yazılır. Tarayıcıyı tercih ediyorsanız
fillercut ui --no-native her zaman tarayıcıda açar.

İki küçük ama sinir bozucu durum da kapandı. Varsayılan port (8765) doluysa
program artık hata verip çıkmıyor — boş bir porta düşüyor ve gerçek adresi
söylüyor. Ve arayüz zaten açıkken ikinci kez fillercut ui yazarsanız ikinci
bir sunucu başlatmıyor; "zaten çalışıyor" deyip mevcut adresi gösteriyor.

CLI yine hiç değişmedi.

Eklendi

  • **Native masaüstü...
Read more

v1.1.0 — Sessizliğe yasla + mıknatıs

Choose a tag to compare

@inanx12 inanx12 released this 01 Sep 15:27

Gözden geçirme ekranı iki yeni araç kazandı, transkript CPU'da hızlandı.

Kesim sınırını elle sürüklemek her zaman en pratik yol değil: çoğu zaman
istediğiniz şey "şu kesimi biraz açıp en yakın sessizliğe yaslamak". Artık her
kesim satırında bunun için tek bir düğme var — Sessizliğe yasla (kısayol
Y). Kesimin iki sınırını da dışarı, ilk sessizlik kenarına kadar taşır; o
yönde 500 ms içinde sessizlik yoksa orada durur. Komşu kesime dayanınca da
durur, yani iki kesim birbirine yapışıp birleşmez. Beğenmezseniz "Geri al"
her zamanki gibi çalışıyor.

İkincisi mıknatıs: sürüklerken tutamacın en yakın sessizliğe yapışması
bazen tam istediğiniz yeri kaçırmanıza yol açıyordu. Üst bardaki mıknatıs
düğmesiyle (kısayol M) yapışmayı kapatıp sınırı tam istediğiniz yere
bırakabilirsiniz. Varsayılan açık — yani hiçbir şeye dokunmazsanız davranış
v1.0 ile birebir aynı.

Görünmeyen ama hissedilen değişiklik: GPU'suz makinelerde transkript
belirgin hızlandı
(ölçülen medyan ~1.4×). whisper.cpp'ye kaç çekirdek
kullanacağını artık Filler-Cut söylüyor; eskiden makineden bağımsız sabit
4 çekirdekle koşuyordu. GPU koşusunda fark yok, üretilen transkript birebir
aynı.

CLI yine hiç değişmedi.

Eklendi

  • "Sessizliğe yasla" — kesim satırındaki tek tık aksiyonu (kısayol Y),
    her kesim türünde. Kesimin iki sınırını da dışa, ilk sessizlik kenarına
    taşır; yön başına tavan ±500 ms, tavan içinde kenar yoksa tavanda durur.
    Komşu kesime min_keep kalana kadar yaklaşır, birleşme yok. Sonuç
    sıradan bir kullanıcı düzenlemesidir: orijinal plan değişmez, kesimin
    gerekçe (reason) zinciri ve türü korunur, "Geri al" ve sınır kuralları
    aynen geçerlidir. Yeni bir ffmpeg geçişi eklenmez — sürüklemenin kullandığı
    sessizlik haritasının aynısı kullanılır.
  • Mıknatıs anahtarı — üst barda durumu gösteren düğme (kısayol M);
    kapalıyken sürükleme tamamen serbesttir. Varsayılan açık: dokunulmazsa
    v1.0 davranışı birebir korunur. Tercih oturum içindir (kalıcı ayar yok).
    Yapışma kapansa da "iki kesim arası ya sıfır ya en az min_keep" kuralı
    koşmaya devam eder — o bir tercih değil, kural.

Değişti

  • whisper.cpp CPU koşusu hızlandı — thread sayısı artık makinenin
    mantıksal çekirdek sayısından geliyor (-t); eskiden binary'nin makineden
    bağımsız sabit varsayılanı (4) kullanılıyordu. 72 koşuluk ölçümde CPU'da
    medyan ×1.41 (fiziksel çekirdekle ×1.28), GPU'da nötr (×1.00) ve
    transkript çıktısı 72 koşunun hepsinde birebir aynı. os.cpu_count() değer
    vermezse bayrak hiç geçilmez (eski davranış).

Belgeler

  • README.md ve README.tr.md'ye arayüz ekran görüntüleri eklendi
    (docs/images/): tanıtımın altında gözden geçirme ekranı, web arayüzü
    bölümünde akış sırasıyla video seçme → işleniyor → tamamlandı.
  • İki README'nin web arayüzü bölümüne yasla ve mıknatıs satırları eklendi.

Altyapı

  • GitHub Actions action'ları Node 24 koşan sürümlere yükseltildi
    (actions/checkout v4 → v7, actions/upload-artifact v4 → v7). Runner'ın
    Node 20 kullanımdan kaldırma uyarısı kalktı. Sürümler her action'ın kendi
    action.yml'sindeki runs.using alanından doğrulandı — upload-artifact
    v5 hâlâ node20'dir, node24 v6'da gelir.

Ölçüldü, uygulanmadı

  • AMF -usage mini-ızgarası (4 klip × 7 kol × 3 tekrar, RX 9060 XT): hiçbir
    değer mevcut ayarı geçemedi — en iyi hız farkı −%2,4 (gürültü) ve hiçbir kol
    tabandan küçük dosya üretmedi. Encoder ayarları değişmedi. Ölçümde iki
    şey saptandı: AMF'nin -usage varsayılanı zaten transcoding'dir (bit-birebir
    aynı çıktı) ve ultralowlatency ile lowlatency aynı sonucu verir.
    Ayrıntı KNOWN_ISSUES.md KI-6 -usage ekinde, ölçüm experiments/amf_usage/.

Bilinen sınırlar

  • "Kesimler birleşmez" garantisi yasla aksiyonuna aittir; sınırı elle
    sürüklerken komşuya çok yaklaşırsanız kesimler v1.0'daki gibi birleşebilir.
  • Yaslamadan önceki sınırlara dönen ayrı bir "geri al" yoktur — sürüklemede de
    yoktu; kesimin tamamını geri almak her ikisini de kapsar.
  • -t politikasının üst sınırı ölçülmedi (64+ mantıksal çekirdekli makineler);
    bilinçli olarak tavan konulmadı — KNOWN_ISSUES.md KI-9.

v1.0.0 — Web arayüzü

Choose a tag to compare

@inanx12 inanx12 released this 27 Aug 23:16

Filler-Cut'ın web arayüzü geldi. fillercut ui yazın; tarayıcıda videonuzu
seçin, aracın bulduğu kesimleri kesmeden önce görün, dinleyin, düzeltin ve
onaylayın.

Bir koşu şöyle geçiyor: dosyayı sunucu taraflı gezginden seçiyorsunuz (GB'lık
video tarayıcıya yüklenmiyor, araç diskten okuyor), 6 aşamalı işleme canlı
akıyor, sonra gözden geçirme ekranında duruyor. Orada her kesim dalga
formunun üzerinde işaretli: atlamalı oynatmayla kesilmiş hâlini dinliyor,
beğenmediğiniz kesimi tek tıkla geri alıyor, sınırını sürükleyerek
düzeltiyorsunuz (tutamaç en yakın sessizliğe yapışıyor) ve aracın kaçırdığı
bir yeri kendiniz kesim olarak ekleyebiliyorsunuz. Başlıktaki satır siz
düzenledikçe "ne kadar kısalacak"ı anlık gösteriyor. Onaylayınca render
başlıyor; sonuç ekranı kazanımı, tür kırılımını (kesin/aday filler, sessizlik,
elle eklenen), kesilen filler sözcüklerinin dökümünü ve çıktı yollarını
veriyor — "Klasörde göster" ile dosyaya gidiyorsunuz.

CLI hiç değişmedi: fillercut video.mp4 akışı, çıktıları ve rapor.json
biçimi aynı. Düzenleme yapmadan onaylanan bir web koşusu, CLI'nin ürettiği
dosyanın byte-byte aynısını üretiyor (hash'le doğrulandı). Yeni runtime
bağımlılıkları yalnız fastapi + uvicorn (numpy zaten dolaylı geliyordu,
doğrudana terfi etti); npm/build adımı yok.

Bilinen sınır: işler yalnızca bellekte yaşar — sunucu yeniden başlatılırsa
kaybolurlar (arayüz bunu söyler). Üretilmiş dosyalar diskte kalır.

v1.0 UI Dilim 3 — istatistik paneli + cila

Eklendi

  • Sonuç ekranında istatistik paneli — tür kırılımı (kesin/aday filler,
    sessizlik, elle eklenen) mini çubuklarla, kesilen filler sözcüklerinin
    dökümü
    (eee ×3, ııı ×1…) ve kullanıcının kendi düzenlemelerinin
    sayıları. Panelin tek veri kaynağı yazılan rapordur; hiçbir sayı yeniden
    hesaplanmaz — ekrandaki sayı ile rapor.json'daki sayı ayrışamaz (kilit
    testte). Kelimeler reason zincirinden çıkarılır (KI-3 ailesi) ve görüntü
    formunda
    gruplanır: Eee, ile eee aynı kovaya düşer, ııı ekranda
    ii olmaz.
  • Review başlığında canlı özet — "N kesim · toplam X ms kesilecek · yeni
    süre Y (%kazanım)"; geri alma/ekleme/sürükleme sonrası anında güncellenir
    (onay öncesi kazanım önizlemesi).
  • Gezgin breadcrumb'ı — ev dizininden bulunulan klasöre kadar tıklanabilir
    parçalar. Ev'in üstü hiç listelenmez: gösterilse tıklandığında 403
    alınırdı; hapsin sınırı arayüzde de görünür (güvenlik testi her parçanın
    gerçekten açılabildiğini doğrular).
  • Koşu ekranında aşama süreleri — biten aşamada kalıcı, koşan aşamada
    canlı sayan süre. Damga sunucudadır: SSE kopup yeniden bağlanınca geçmiş
    toptan replay edilir, istemcide ölçülen süre o anda sıfırlanırdı.
  • "Klasörde göster" (çıktı/rapor/transkript) — POST /api/reveal;
    Windows'ta explorer /select,, macOS'ta open -R, Linux'ta xdg-open.
    Komut üretimi saf ve platform başına testli; kabuk kullanılmaz, yol ev
    dizini hapsinden geçer, desteklenmeyen platformda Türkçe 501.
  • Boş durum yüzeyleri — ana ekranda karşılama, video içermeyen klasörde
    ne yapılacağını söyleyen mesaj (önceki hâli yalnızca klasör de yokken
    görünüyordu; asıl sık durum "alt klasör var, video yok"tu).

Değişti

  • Pipeline hata mesajları eyleme dökülebilir hâle geldi. Her katman hatası
    artık "ne oldu" kadar "ne yapmalı"yı da söylüyor: ffmpeg PATH ipucu,
    disk/izin ipucu, encoder tercih sırası, silence_min_ms, girdi yolu.
    TRANSCRIBE ipucusu seçili backend'e göre değişir (faster-whisper'da
    model indirme/CUDA, whispercpp'de binary ve model yolu) — kullanıcı yanlış
    yere bakmasın. İstisna sınıf adı korunur (CUDA/DLL hatalarında ayırt
    edici); stack trace hiçbir yolda kullanıcıya gösterilmez. Envanter tablo
    hâlinde testlidir.

v1.0 UI Dilim 2 — review ekranı

Pipeline artık PLAN'dan sonra durur: kullanıcı kesimleri tarayıcıda
gözden geçirir, düzenler ve onaylayınca RENDER koşar. Yeni bağımlılık
YOK
(npm/build adımı yok; waveform peaks + canvas vanilla JS). numpy
dolaylı bağımlılıktan (faster-whisper/CTranslate2) doğrudan kullanıma
terfi etti — yeni paket değil, pyproject.toml'a not düşüldü.

Eklendi

  • Review ekranı — video oynatıcı + zaman çizelgesi (waveform, tür renkli
    kesim blokları, playhead) + kesim listesi (tür rozeti, aralık, süre, geri
    al/geri ver). Klavye: Space oynat/dur, ←/→ 5 sn.
  • Atlamalı oynatma (tamamen istemcide, sunucu round-trip'i yok): açıkken
    kesimler atlanır, kapalıyken orijinal kesintisiz oynar (karşılaştırma için).
  • Tek tık geri alma — kesim listeden SİLİNMEZ, aktif=false olur ve
    tek tıkla geri gelir. Elle eklenen kesimler de aynı şekilde toggle'lanır.
  • Sürüklenebilir kesim sınırları + snap-to-silence (150 ms eşik, ham
    sessizlik haritasından) ve sürükleyerek elle kesim ekleme (manuel).
  • manuel kesim türüSegmentKind/CutKind'e eklendi; kademe sayımı
    (KI-3) manuel: önekini DÖRDÜNCÜ kategori olarak tanır, mevcut üç reason
    kalıbına dokunulmadı (regresyon kilidi testte). Rapora tiers.manuel ve
    duzenleme (devre dışı / sınır değişen / elle eklenen) alanları girdi;
    ikisi de geriye uyumlu default'lu.
  • API: GET /review (kesim listesi + uygulanmış aralıklar + ham
    sessizlik haritası), POST /review/edits (overlay'in tam anlık görüntüsü),
    POST /approve, POST /cancel, GET /video (HTTP Range — seek şart),
    GET /peaks. Job durum makinesi genişledi:
    queued → running → review → rendering → done | failed | iptal.
  • "İş bulunamadı" yüzeyi (Dilim 1 bulgusu) — sunucu yeniden başlatıldıysa
    SSE sonsuza dek yeniden bağlanmaya çalışıyordu; artık durum sorulur ve 404
    ise açık bir ekran gösterilir.

Kurallar (kodda ve testte kilitli)

  • Düzenlemeler yıkıcı değil: orijinal plan hiç değişmez; kararlar ayrı bir
    overlay katmanında durur (web/review.py). Render her zaman "plan + overlay
    uygulanmış" görünümden beslenir.
  • Doğruluğun kaynağı sunucudur: istemcideki snap/clamp yalnız UX'tir; ms-int
    (float reddedilir), sınır doğrulaması, snap, min_keep clamp ve union sunucuda
    yeniden uygulanır ve saklanan değerler bunlardır.
  • Kullanıcının sürüklediği sınır padding'i EZER ve KI-5 anomali koruması
    o sınıra uygulanmaz — ikisinin de gerekçesi apply_review_edits'te yazılı.
  • min_keep clamp yalnız düzenlenmiş kesimlere uygulanır (dokunulmamış kesim
    çıpadır). Ölçülen kural: snap min_keep'i ihlal edemez — yasak bölgeye
    düşen snap iptal edilir, yoksa boşluk bırakmak isteyen kullanıcı komşu
    kesimle sessizce birleşirdi.
  • Çakışma union'la çözülür (reddetme yok), boş video yasağı onay anında
    uygulanır: plan tüm videoyu kesiyorsa onay Türkçe mesajla reddedilir ve
    pipeline beklemeye devam eder.

Düzeltildi

  • typer.Exit yutuluyordu. click'te RuntimeError türevidir, web job'ının
    genel except Exception'ı onu yakalıyordu: review'da vazgeçen kullanıcı
    UI'da "beklenmeyen hata" görürdü. Kod 0 artık temiz iptal.
  • Sunucu kapanışta asılıyordu. Review'da bekleyen worker threading.Event
    üzerindeydi ve ThreadPoolExecutor thread'leri daemon değildir — Ctrl+C
    sonrası süreç kapanmıyordu. JobKayit.kapat artık bekleyen işleri iptal eder.
  • Waveform sıfır genişlikte kayboluyordu (ekran henüz düzenlenmemişken
    çizim tuvali 1 px'e sabitliyordu) — ResizeObserver ile yeniden çizilir.

Doğrulandı (gerçek donanım — RX 9060 XT, whispercpp/Vulkan + h264_amf)

  • Test1.mp4 PLAN sonrası review'da durdu; 5 kesim tür rozetleriyle listelendi,
    video Range ile oynadı (süre 25.68 sn), 2000 binlik waveform yüklendi.
  • Düzenlemesiz onay CLI ile hash-identik (F5185E7E…9004) — Dilim 1'in
    CLI referansıyla birebir.
  • Snap: 11438 ms'e bırakılan tutamaç 11498 ms'lik sessizlik kenarına yapıştı.
    min_keep clamp: 250 ms boşluk denemesi 300 ms'e itildi, 65 ms denemesi
    komşuya değdirilip union oldu.
  • Tek kesim geri alma: kalan süre 20113 → 20543 ms (+430 ms, tam kesim süresi).
  • Elle kesim + geri alma birlikte: çıktı 19.60 sn, raporda tiers.manuel=1,
    duzenleme={devre_disi:1, sinir_degisen:0, manuel_eklenen:1}, rejected=1.
  • Atlamalı oynatma açıkken kesim atlandı (13.15 sn), kapalıyken kesimin içinde
    oynamaya devam etti (11.94 sn).
  • Her şeyi kesme denemesi: Türkçe uyarı + onay reddi, iş review'da kaldı.
  • Var olmayan job id → "İş bulunamadı" ekranı.

v1.0 UI Dilim 1 — iskelet + uçtan uca koşu

Localhost web arayüzü iskeleti + uçtan uca koşu. Yeni runtime
bağımlılıkları yalnız fastapi + uvicorn (v0.3 review server'ının
stdlib http.server'dan evrimi; şablon motoru / htmx / npm YOK — statik
HTML + vanilla JS + tek CSS). httpx yalnız dev extra'sına girdi: FastAPI
TestClient'ın zorunlu alt bağımlılığıdır, runtime'a girmez.

Eklendi

  • fillercut ui alt komutu — web arayüzünü YALNIZ 127.0.0.1'de
    başlatır (0.0.0.0 yok), portu basar, tarayıcıyı sunucu istekleri kabul
    etmeye hazır olunca açar (--port, --config, --no-browser; port
    doluysa Türkçe ön-hata). Mevcut tek-komut CLI şekli KORUNUR: dispatch
    main_entry'de argv üzerinden — ikinci bir typer komutu eklenmedi, VIDEO
    argümanı yerinden oynamadı ("ui" adında uzantısız video işlemek isteyen
    ./ui yazar).
  • src/fillercut/web/ — FastAPI app factory + üç ekran (tek sayfa,
    karanlık tema, sistem font stack, Türkçe): Başlangıç (sunucu taraflı dosya
    gezgini + Normal/Agresif mod — video tarayıcıya YÜKLENMEZ, sunucuya yalnız
    yol gider), Koşu (6 aşamalı gösterge: geçenler tikli, aktif vurgulu; SSE
    canlı ilerleme, kopuşta EventSource otomatik yeniden bağlanır), Sonuç
    (kazanım yüzdesi, orijinal → yeni süre, kesim sayısı, çıktı/rapor/
    transkript yolları, Yeni iş). /docs, /redoc, /openapi.json kapalı.
  • Dosya gezgini API'si (GET /api/fs/browse) — yalnız klasörler + video
    uzantılı dosyalar (gizli girdiler atlanır). Güvenlik: yol canonicalize
    edilir (resolve.. ve symlink/junction çözülür), ev dizini dışına
    her çıkış 403
    ve cevapta...
Read more

v0.4.1 — AMF kalibrasyonu + cli giriş noktası düzeltmesi

Choose a tag to compare

@github-actions github-actions released this 26 Aug 10:29

Davranış değişikliği (yalnız AMD): h264_amf ile üretilen çıktının kalitesi ve boyutu değişir — aynı crf artık -quality quality preset'i ve kalibre edilmiş qp eşlemesiyle encode ediliyor. NVENC / QSV / libx264 yollarına DOKUNULMADI, o çıktılar bit-birebir aynı.

AMD donanım kalibrasyonu + bir giriş noktası düzeltmesi. h264_amf kalite
argümanları ilk kez gerçek AMD donanımında ölçüldü — KNOWN_ISSUES.md KI-6'nın
kalan yarısı kapandı, kayıt tamamen "Çözüldü"
. Yeni bağımlılık yok.

Düzeltildi

  • render/encoder.pyh264_amf kalite argümanları kalibre edildi.
    Değerler v0.2'den beri ölçülmemiş "makul default"lardı. Radeon RX 9060 XT +
    Ryzen 5 7500F üzerinde, QSV kalibrasyonunun (v0.3.3) deseniyle ölçüldü:
    libx264 -preset medium -crf 23 referansı, ffmpeg'in kendi ssim filtresi,
    iki klip × 4 aday, tam klip, video-only. Seçilen set
    -quality quality -rc cqp -qp_i {crf} -qp_p {crf}:

    • -quality balancedquality: aynı qp'de iki klipte de hem daha
      küçük dosya (KLIP_A 92.86 vs 95.04 MB) hem marjinal daha yüksek SSIM.
      Bedeli ~1.7-2× süre; kabul edildi, quality bile yazılım x264'ün
      yarısından hızlı (21.2 vs 48.8 sn) ve bu araçta darboğaz encode değil ASR.
    • qp ofseti 0 (qp = crf), AMF_QP_OFFSET sabitine bağlandı. Boyut
      süzgeci qp 21'i iki klipte de eliyor (+58.6% / +42.5%); kalanlar
      arasında qp 23 iki klipte de SSIM'de daha yakın. QSV'de klip başına
      kazananlar çatışıp karar tek klibe yaslanmak zorunda kalmıştı — AMF'de
      tek doğrusal eşleme iki klipte de doğrudan kazanıyor.
    • -rc cqp sabitlemesi korundu (gerekçe KI-6'da: varsayılan bitrate
      hedefli mod düşük bitrate'te sessizce kalite düşürür). Mod adayları
      ezberden değil ffmpeg -h encoder=h264_amf envanterinden doğrulandı.

    Ölçülen iki encoder'a özgü tuzak koda ve testlere kilitlendi:

    • AMF'nin -preset'i -quality'nin alias'ıdır ve x264 sözlüğünü
      BİLMEZ
      — yalnız balanced/speed/quality. -preset medium ffmpeg'de
      127 koduyla patlar (ölçüldü), bu yüzden render.preset bu yola
      bağlanmaz. QSV'de isimler tesadüfen çakıştığı için tuzak orada
      görünmüyordu.
    • -qp_b yazılmaz: seçilen arg setiyle üretilen akışta B-frame yok
      (ölçüldü: 60 karede 1×I + 59×P), ayarlanacak bir şey yok.

    QSV'nin -q sızıntısının AMF muadili YOKTUR: dört bayrak da encoder'a
    özel AVOption'dır, generic -q gibi tüm akışlara bağlanmaz. Uçtan uca
    koşuda çıktının ses akışı 196 kbps ölçüldü (config hedefi 192k korunuyor).

  • cli.pypython -m fillercut.cli giriş noktası. __main__ guard'ı
    yoktu: bu yol modülü import edip HİÇBİR ŞEY YAPMADAN 0 koduyla çıkıyordu —
    exit 0, boş stdout, üretilen dosya yok. Dışarıdan başarılı koşu gibi görünen
    sessiz bir no-op. console_scripts hedefi (fillercut) doğru çalıştığı için
    kusur yalnız bu yolda görünüyordu. Guard app'e değil main_entry'ye
    bağlanır — v0.3.3'ün konsol akışı ayarı ilk echo'dan önce çalışmalı, yoksa
    yönlendirilmiş çıktı bu yolda yine patlardı.

Değişti

  • AMD makinelerde render çıktısı değişir (davranış değişikliği). Aynı
    crf ile üretilen dosya artık farklı: balanced yerine quality preset'i
    ve kalibre edilmiş qp eşlemesi kullanılıyor. NVIDIA (NVENC), Intel (QSV) ve
    yazılım (libx264) yollarına DOKUNULMADI — o satırlar bit-birebir aynı.

Test

  • Toplam test sayısı 477 → 486; ffmpeg marker'lı test 10 → 13.
  • TestGercekAmfProbe (yeni): NVENC/QSV muadillerinin AMD karşılığı —
    probe + seçim + üretilen arg setiyle gerçek encode. AMD donanımı yoksa
    çalışma anında skip eder; kalibrasyon makinesinde skip DEĞİL, koştu.
  • TestModulGirisNoktasi (yeni): python -m fillercut.cli --version
    subprocess'te exit 0 verip sürümü basmalı. Red-first doğrulandı — fix'ten
    önce assert '' == 'fillercut, version 0.4.0' ile kırmızıydı, yani
    belirtinin kendisini (exit 0 + boş stdout) yakalıyor. Subprocess şart:
    -m yolu ancak ayrı yorumlayıcı koşusunda sınanır, runner.invoke(app, …)
    guard'ı hiç çalıştırmaz.
  • TestBuildEncodeArgs'ın AMF değer kilitleri yeni sete güncellendi; ayrıca
    x264 preset sözlüğünün bağlanmadığı ve -qp_b'nin yazılmadığı kilitlendi.

Belgeler

  • KNOWN_ISSUES.md KI-6: ana başlık "Çözüldü" işaretlendi (kayıt
    silinmedi), "AMF yarısı — AÇIK" bölümü QSV'ninkiyle aynı formatta ölçüm
    kaydına dönüştü — donanım künyesi, seçenek envanteri, iki klip için tam
    boyut/Δboyut/SSIM/ΔSSIM/süre tabloları, mod + preset + değer seçiminin ayrı
    ayrı gerekçesi, ölçülen tuzaklar ve uçtan uca doğrulama. İki tablonun yan
    yana okunabilmesinin dayanağı kayda geçti: referans satırları QSV
    ölçümüyle birebir aynı çıktı (KLIP_A 75.22 vs 75.21 MB / 0.99073;
    KLIP_B 12.45 MB / 0.99770). "AMD günü" notu güncellendi: AMF bitti,
    whisper.cpp HIP derlemesi sırada.
  • AGENTS.md: RENDER encoder notundaki "AMF kalite argümanları kalibre
    EDİLMEDİ" ifadesi kaldırıldı; üç donanım yolunun da kalibre olduğu ve iki
    encoder'a özgü tuzak (QSV -q:v, AMF -preset) yazıldı.

Bilinen sınırlar

  • -usage hiç ölçülmedi. Envanterde high_quality ve transcoding
    dahil altı değer var; grid'i küçük tutmak için kapsam dışı bırakıldı.
    Kalite/boyut eğrisini kaydırabilir — ölçülmeden değiştirilmemeli.
  • Kalibrasyon tek makinede yapıldı (RX 9060 XT). Başka nesil AMF
    silikonunda (eski GCN/Polaris) değerler sapabilir; ölçüm yöntemi KI-6'da
    kayıtlı ve tekrarlanabilir.
  • CQP içeriğe uyarlanmaz. Ofset 0'da dosya iki klipte de referansı ~%23
    aşıyor. Sapma bilinçli olarak kalite yönünde bırakıldı — NVENC (-2) ve
    QSV ofsetleriyle aynı tercih: "bedeli daha büyük dosya".

Ölçüm özeti (KLIP_A 8BitDo.mp4 720p30 facecam, KLIP_B nokta1.mp4 1080p60 düşük hareket; referans libx264 -preset medium -crf 23, SSIM ffmpeg'in kendi ssim filtresiyle kaynağa karşı, tam klip, video-only): seçilen qp = crf iki klipte de referansın SSIM'ine en yakın kabul edilebilir aday — KLIP_A −0.00062 (boyut +%23.5), KLIP_B −0.00101 (+%23.3). qp 21 SSIM'de daha yakın olsa da boyut süzgecine takıldı (+%58.6 / +%42.5). QSV kalibrasyonunda klip başına kazananlar çatışmış ve karar tek klibe yaslanmak zorunda kalmıştı; AMF'de tek doğrusal eşleme iki klipte de doğrudan kazanıyor. Tam tablolar KNOWN_ISSUES.md KI-6'da.

Test sayısı 477 → 486 collected (bu koşuda 477 passed / 9 skipped; dağılım donanıma bağlıdır — üç donanım probe sınıfının hepsi aynı makinede yeşil olamaz). Trio (pytest -x --tb=short / ruff check . / mypy .) üçü de exit 0.

v0.4.0 — kelime sınırları sessizlik haritasına çapalanıyor (zincir şişmesi fix'i)

Choose a tag to compare

@inanx12 inanx12 released this 23 Aug 16:12

Davranış değişikliği: kesim sınırları sıkılaşır ve <ad>_transkript.json artık re-anchor'lı (çapalanmış) sınırları taşır — kayıt çapalamadan SONRA yapılıyor, dosyadaki zamanlar pipeline'ın DETECT'e verdiği zamanlardır (ham ASR çıktısı değil). Bu dosyayı fixture olarak kullanan akışlar bunu bilmeli.

Kelime sınırlarının silencedetect haritasına yeniden çapalanması
(re-anchor) — KNOWN_ISSUES.md KI-1'in "zincir şişmesi" bulgusunun pipeline
seviyesinde savunması. Kullanıcıya görünür davranış değişikliği vardır
(aşağıda). Yeni bağımlılık yok.

Eklendi

  • transcribe/reanchor.py — kelime sınırı çapalama (saf fonksiyon).
    ASR kelime sınırları duraklamaları yutar: whisper.cpp -ml 1 -sow sınırları
    uç uca üretir, duraklama komşu kelimeye yapışır; faster-whisper'da da
    muadili vardır (KI-5, işte ~15 sn). reanchor_words(words, silences) bir
    kelimenin sessizliğe giren ucunu kırpar:
    • end sessizliğin içindeyse → end = sessizlik.start
    • start sessizliğin içindeyse → start = sessizlik.end
    • kelime sessizliği boydan geçiyorsa → uzun kalan parça korunur
      (eşitlikte sol taraf; gerekçe ölçümle sabit, KI-1'e bak)
    • kelime TAMAMEN sessizlik içindeyse (ghost) → dokunulmaz; bu fazda
      silme/flag'leme yok, transkript bütünlüğü korunur
      Değme (uç uca) kesişim kırpma SAYILMAZ — KI-5'in "değme çakışma kanıt
      sayılmaz" sınır semantiğiyle aynı katı eşitsizlik. Saf fonksiyondur:
      subprocess yok, ffmpeg bilmez, Word frozen olduğu için kırpılanlar yeni
      nesne olarak döner.

Değişti

  • Kesim sınırları sıkılaşır (davranış değişikliği). Şişmiş kelime
    sınırından türeyen filler kesimleri artık kelimenin gerçek sınırına
    daralır; duraklama komşuluğundaki şişmelerde kesim konuşmanın üstüne
    taşmaz. Gerçek koşuda şey kelimesinin end sapması 702 ms → 3 ms,
    umarım'ın start sapması −1014 ms → +2 ms.
  • <ad>_transkript.json artık re-anchor'lı sınırları taşır. Kayıt
    çapalamadan SONRA yapılır: dosyadaki zamanlar pipeline'ın DETECT'e verdiği
    zamanlardır, ham ASR çıktısı değil. Dosyayı fixture olarak kullanan
    akışlar bunu bilmelidir.
  • Pipeline sırası: silencedetect haritası TRANSCRIBE'dan ÖNCE. Harita
    WAV'dan üretilir, transkriptten bağımsızdır. Tek koşu: aynı harita hem
    çapalamayı hem DETECT'in sessizlik yarısını besler — ikinci bir ffmpeg
    çağrısı YOK. Çapalama ham haritayı kullanır (silence_min_ms süzgecinden
    geçmemiş): o süzgeç "hangi sessizlik kesilir" politikasıdır, "konuşma
    nerede yok" sorusunun cevabı değil.
  • KI-5 anomali koruması yerinde kalır (FILLER_ANOMALI_MS = 3000 ms) —
    kaldırılmadı, yedek savunmaya çekildi: re-anchor'ın çıpası olmayan
    bölgelerde (bkz. sınırlar) tek savunma odur.

Bilinen sınırlar (KI-1'de ölçümüyle)

  • <400 ms duraklamalar kırpılmaz: harita audio/silence.py'nin d=0.4
    eşiğiyle üretilir; daha düşük eşikli AYRI bir silencedetect koşusu bilinçli
    olarak backlog'dadır (çift ffmpeg koşusu istenmiyor).
  • Zincir kayması kapsam dışıdır: sapmanın bir bölümü konuşmadan konuşmaya
    kayan zincirden gelir; o bölgede sessizlik YOKTUR, dolayısıyla sessizlik
    tabanlı çapalama düzeltemez. Ölçüm: 16 referans kelimesinin 8'i tolerans
    içinde (6 temiz akış + 2 duraklama komşuluğu), 8'i zincir_kaymasi.
  • Filler kaçağı (KI-1 ana kaydı) bu sürümde ÇÖZÜLMEDİ — ayrı faz.

Ölçüm özeti (test_konusma.wav, wcpp turbo/q5_0, harita noise=-35dB d=0.4): şişme tek sınıf değil. Duraklama komşuluğu sınıfı kapandı (şey end sapması 702 → 3 ms, umarım start sapması −1014 → +2 ms); zincir kayması sınıfı açık — o bölgede sessizlik yok, çapalamanın çıpası yok. Referans setinin durumu: 16 kelimenin 8'i tolerans içinde. Tam tablo ve eşik taraması KNOWN_ISSUES.md KI-1'de.

Test sayısı 431 → 468 (462 passed, 6 skipped). Trio (pytest / ruff check . / mypy .) üçü de exit 0.

v0.3.3 — QSV kalibrasyonu + yönlendirilmiş çıktı fix'i

Choose a tag to compare

@inanx12 inanx12 released this 22 Aug 23:06

Donanım kalibrasyonu + bir crash düzeltmesi. h264_qsv kalite argümanları ilk kez gerçek Intel donanımında ölçüldü (KI-6'nın QSV yarısı kapandı) ve yönlendirilmiş çıktıda koşuyu öldüren encoding hatası giderildi. Yeni bağımlılık yok.

Düzeltildi

render/encoder.pyh264_qsv kalite argümanları kalibre edildi. v0.2'den beri tablodaki QSV girişi "makul default"tu, gerçek donanımda hiç ölçülmemişti. Intel UHD iGPU'da (i5-12450HX, hibrit kip) iki gerçek klip × 7 aday ölçüldü — libx264 crf 23 referansına karşı boyut, süre ve SSIM:

  • Mod ICQ değil CQP. Eşit dosya boyutuna indirgendiğinde CQP iki klipte de daha yüksek SSIM verdi (720p30 facecam: 0.98971 vs ~0.98903 @ 82 MB; 1080p60 düşük hareket: 0.99658 vs ~0.99623 @ 13.4 MB) ve daha hızlıydı (45.6 vs 59.1 sn). Yeni arg seti: -preset medium -q:v {crf}.
  • Eşleme -q:v = crf (ofset 0). Klip başına kazananlar çakıştı (facecam'de crf+0, düşük hareketli klipte crf+3); tek doğrusal eşleme gerektiği için karar aracın hedef içeriğine — konuşma/facecam — yaslandı. Ofset 0 iki klipte de referansın SSIM'ine 0.001 içinde kalıyor.
  • Ölçüm sapması kayda geçti: CQP sabit kuantizasyondur, x264'ün crf'i gibi içeriğe uyarlanmaz — düşük hareketli 1080p60 klipte dosya referansı %31 aştı (facecam'de %9). Sapma bilinçli olarak kalite yönünde bırakıldı (NVENC'in -2 ofsetiyle aynı tercih).
  • -q değil -q:v. Stream belirteci olmadan -q ses encoder'ına da sızıyor: aynı komutta aac -b:a 192k hedefini bırakıp qscale VBR'a geçti (241 kbps ölçüldü). Ürettikleri video akışı bit-birebir aynı, yani ölçümler eşlemeye taşınıyor.

_KALITE_ARGS'ın diğer satırlarına (h264_nvenc, h264_amf, libx264) dokunulmadı. Ölçüm tabloları KNOWN_ISSUES.md KI-6'da.

CLI — yönlendirilmiş stdout koşuyu öldürüyordu. fillercut video.mp4 > log.txt (veya herhangi bir pipe) Windows-TR makinede traceback'le ölüyordu: yönlendirilmiş stdout locale encoding'ine düşüyor (ölçüldü: cp1254, errors="surrogateescape") ve probe özetindeki (U+2713) cp1254'te yok → UnicodeEncodeError. Çıktı terminalde kalınca görünmüyor, log alan herkesi vuruyordu. main_entry artık stdout+stderr'i errors="replace"e ayarlıyor. encoding="utf-8" bilinçli olarak seçilmedi: locale encoding'i korumak gerçek konsolda kod sayfasıyla çelişme riskini sıfırlıyor, bedeli yalnız süs karakteri — gerçek koşuda doğrulandı, log.txt'de (0x97) ve ı (0xFD) sağlam, yalnız ?.

Değişti

console_scripts hedefi fillercut.cli:appfillercut.cli:main_entry. Akış ayarı ilk çıktıdan önce çalışmak zorunda ve modül seviyesinde yapılamaz (fillercut.cli'yi import etmek çağıranın akışlarını değiştirmemeli). Kaynaktan kuranlar için not: bu paketleme değişikliğidir, etkili olması için pip install -e . gerekir.

Testler

  • QSV değer sabitlemesi CQP'ye güncellendi; -q:v'nin stream belirteçli olması ve [0, 51] kırpması ayrıca kilitlendi.
  • TestGercekQsvProbe — NVENC muadilinin QSV karşılığı (@pytest.mark.ffmpeg); donanım yoksa kendi kendine skip eder.
  • TestKonsolAkisiDayanikliligi — cp1254 sahte akışa gerçek probe özeti basımı: crash yok, replace ile düşüyor, akış sürüyor; üç guard yolu (akış None, reconfigure yok, akış kapalı) ayrıca kilitli.
  • Kilit testler fix'siz kırmızı olduğu doğrulanarak eklendi: fix devre dışı bırakılınca ana test tam da üretimdeki hatayı verdi ('charmap' codec can't encode character '✓').
  • Toplam test sayısı 417 → 431 (429 passed, 2 skipped); ffmpeg marker'lı test 5 → 8.

Bilinen sınırlar

KI-6 AMF yarısı açık — AMD donanımı yok; kalibrasyon "AMD günü"nde QSV'nin deseniyle tekrarlanacak (referans → aday grid'i → boyut/süre/SSIM → crf eşlemesi), adaylar önce ffmpeg -h encoder=h264_amf çıktısıyla doğrulanacak.

Tam değişiklik listesi: CHANGELOG.md