Releases: inanx12/Filler-Cut
Release list
Filler-Cut 1.3.2 — Ek disk eklemek artık dosya oluşturmayı gerektirmiyor; oynatma başlığı akıcı
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.jsonyoksa 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şlenentimeupdateolayı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
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.jsoniç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.jsonhiç okunmaz, yani mevcut kurulumların davranışı birebir aynı
kalır. Bozuk birconfig.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ıkconfig.json'un tam yolunu ve olduğu gibi
kopyalanabilen (geçerli JSON) örneğini veriyor; ulaşılamayan repo
dosyasından bahsetmiyor. pip/kaynak koşusundafiller-cut.tomlyine 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.jsondafiller-cut.tomlgibi 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
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ılarrapor.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.js7.12.11 (BSD-3-Clause) vendor edildi — CDN yok, uygulama
çevrimdışı çalışır. Sürüm ve SHA-256web/static/vendor/vendor.json'da,
kilidi testte.ReviewKararieklemeli 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)
veGET /api/medya/video(iş başlamadan önizleme, HTTP Range ile). ReviewGorunumutiersve kesim başınakelimelertaşı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];hatayeni bir durum olarak
eklendi. Yeni statik kilit:app.jsiç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
DwmSetWindowAttributeile 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,tarayicimarker'ı — 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
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.pydışı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.mdRelease 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
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 vewinget install ffmpegkomutunu 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 17veriyordu. 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 ADile model seçimi,--yesile onaysız
(CI/betik),--durumile rapor.- İndirme motoru — akışlı indirme,
.part+ atomik rename,Rangeile
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_modelzorunlu değil artık.
Yollar şu sırayla çözülür, ilk VAR OLAN aday kazanır:
filler-cut.toml→FILLERCUT_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'tekiwhisper-clide eskisi gibi bulunur.- İndirilenler
%LOCALAPPDATA%\fillercut\binve...\modelsaltına iner —
repoya ve venv'e yazılmaz. fillercut video.mp4doğ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ü...
v1.1.0 — Sessizliğe yasla + mıknatıs
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 kesimemin_keepkalana 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 azmin_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/checkoutv4 → v7,actions/upload-artifactv4 → v7). Runner'ın
Node 20 kullanımdan kaldırma uyarısı kalktı. Sürümler her action'ın kendi
action.yml'sindekiruns.usingalanından doğrulandı —upload-artifact
v5 hâlâ node20'dir, node24 v6'da gelir.
Ölçüldü, uygulanmadı
- AMF
-usagemini-ı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-usagevarsayılanı zatentranscoding'dir (bit-birebir
aynı çıktı) veultralowlatencyilelowlatencyaynı sonucu verir.
AyrıntıKNOWN_ISSUES.mdKI-6-usageekinde, ölçümexperiments/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. -tpolitikasının üst sınırı ölçülmedi (64+ mantıksal çekirdekli makineler);
bilinçli olarak tavan konulmadı —KNOWN_ISSUES.mdKI-9.
v1.0.0 — Web arayüzü
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ı ilerapor.json'daki sayı ayrışamaz (kilit
testte). Kelimeler reason zincirinden çıkarılır (KI-3 ailesi) ve görüntü
formunda gruplanır:Eee,ileeeeaynı kovaya düşer,ıııekranda
iiolmaz. - 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'taexplorer /select,, macOS'taopen -R, Linux'taxdg-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=falseolur 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). manuelkesim 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). Raporatiers.manuelve
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çesiapply_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.Exityutuluyordu. click'teRuntimeErrortürevidir, web job'ının
genelexcept 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 veThreadPoolExecutorthread'leri daemon değildir — Ctrl+C
sonrası süreç kapanmıyordu.JobKayit.kapatartı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) —ResizeObserverile 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 uialt komutu — web arayüzünü YALNIZ127.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
./uiyazar).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.jsonkapalı.- 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...
v0.4.1 — AMF kalibrasyonu + cli giriş noktası düzeltmesi
Davranış değişikliği (yalnız AMD):
h264_amfile üretilen çıktının kalitesi ve boyutu değişir — aynıcrfartık-quality qualitypreset'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.py—h264_amfkalite 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 23referansı, ffmpeg'in kendissimfiltresi,
iki klip × 4 aday, tam klip, video-only. Seçilen set
-quality quality -rc cqp -qp_i {crf} -qp_p {crf}:-quality balanced→quality: 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,qualitybile 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_OFFSETsabitine bağlandı. Boyut
süzgeciqp 21'i iki klipte de eliyor (+58.6% / +42.5%); kalanlar
arasındaqp 23iki 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 cqpsabitlemesi korundu (gerekçe KI-6'da: varsayılan bitrate
hedefli mod düşük bitrate'te sessizce kalite düşürür). Mod adayları
ezberden değilffmpeg -h encoder=h264_amfenvanterinden 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ızbalanced/speed/quality.-preset mediumffmpeg'de
127 koduyla patlar (ölçüldü), bu yüzdenrender.presetbu yola
bağlanmaz. QSV'de isimler tesadüfen çakıştığı için tuzak orada
görünmüyordu. -qp_byazı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
-qsızıntısının AMF muadili YOKTUR: dört bayrak da encoder'a
özel AVOption'dır, generic-qgibi 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.py—python -m fillercut.cligiriş 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_scriptshedefi (fillercut) doğru çalıştığı için
kusur yalnız bu yolda görünüyordu. Guardapp'e değilmain_entry'ye
bağlanır — v0.3.3'ün konsol akışı ayarı ilkecho'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ı
crfile üretilen dosya artık farklı:balancedyerinequalitypreset'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;
ffmpegmarker'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
önceassert '' == 'fillercut, version 0.4.0'ile kırmızıydı, yani
belirtinin kendisini (exit 0 + boş stdout) yakalıyor. Subprocess şart:
-myolu 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.mdKI-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
-usagehiç ölçülmedi. Envanterdehigh_qualityvetranscoding
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)
Davranış değişikliği: kesim sınırları sıkılaşır ve
<ad>_transkript.jsonartı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 -sowsı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:endsessizliğin içindeyse →end = sessizlik.startstartsessizliğ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,Wordfrozen 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şeykelimesinin end sapması 702 ms → 3 ms,
umarım'ın start sapması −1014 ms → +2 ms. <ad>_transkript.jsonartı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_mssü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'nind=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'izincir_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
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.py — h264_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
-2ofsetiyle aynı tercih). -qdeğil-q:v. Stream belirteci olmadan-qses encoder'ına da sızıyor: aynı komutta aac-b:a 192khedefini 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:app → fillercut.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,reconfigureyok, 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);
ffmpegmarker'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