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ü penceresi (
fillercut ui, varsayılan) — pywebview +
WebView2. Başlık "Filler-Cut", varsayılan boyut 1280×800, minimum boyut
960×600 (altında gözden geçirme ekranındaki timeline ile kesim listesi üst
üste biniyordu). Bayraklar:--native(açıkça iste — yoksa hata),
--no-native(tarayıcıya zorla),--no-browser(hiçbir şey açma). pywebviewopsiyonel bağımlılıktır:pip install "fillercut[native]".
Kurulu değilse tarayıcı moduna düşülür.GET /api/instance— kimlik + canlılık ucu (uygulama,surum,pid).
İkinci açılışın "bu portta koşan BEN miyim?" sorusunu yanıtlar; aynı uç
pencereye URL verilmeden önce sunucunun gerçekten cevap verdiğini
doğrulamak için de kullanılır.experiments/pywebview_spike/— karar ölçümünün harness'i ve bulguları.
Değişti
- Port çakışması artık hata değil. v1.0'da dolu port
Hata: port N kullanımda+ çıkış koduydu; şimdi ephemeral (0) porta düşülür, düşülen
port konsola yazılır ve pencereye/tarayıcıya gerçek URL verilir.
Gerekçe: native dağıtımda kullanıcı komut satırı bayrağı yazamaz. - İkinci
fillercut uiyeni sunucu başlatmaz. Varsayılan portta bir
Filler-Cut bulursa "zaten çalışıyor (port N, pid P)" deyip 0 ile çıkar;
portta başka bir uygulama varsa ephemeral porta düşer. - Sunucuya artık host/port değil bağlı dinleme soketi verilir
(uvicorn.Server.run(sockets=...)) — ephemeral porta düşüldüğünde gerçek
portu yarışsız bilmenin tek yolu.
Ölçüldü
Native pencerenin varsayılan olup olmayacağı ölçümle kararlaştırıldı
(kill criteria: tarayıcı moduna göre +3 sn'den yavaşsa bayrak arkasına
alınacaktı). Soğuk başlangıçtan arayüzün ilk API çağrısına kadar, 5'er koşu:
| kol | medyan |
|---|---|
| tarayıcı | 0.865 sn |
| native | 1.401 sn |
Delta +0.536 sn — eşiğin çok altında, native varsayılan oldu. Ayrıntı ve
sınırlar: experiments/pywebview_spike/README.md.
Bilinen sınırlar
- pywebview WebView2'yi bulamazsa exception ATMAZ — sessizce MSHTML
(IE11) motoruna düşer ve o düşüş HKCU'yaFEATURE_BROWSER_EMULATION
anahtarı yazar. Arayüzfetch/async/canvaskullandığı için sonuç
"çökme" değil "sessizce bozuk pencere" olurdu. Bu yüzden WebView2 tespiti
ön-uçuştur (web/native.py): yoksawebview.platforms.winformshiç
import edilmez. Kiliditests/test_web_native.py'de. - Tek instance kilidi porta bağlıdır, kilit dosyasına değil. Kazanç:
bayat kilit sınıfı yok. Bedeli: ilk instance yabancı bir servis yüzünden
ephemeral porta düşmüşse ikinci açılış onu bulamaz ve kendi sunucusunu
başlatır (nadir köşe, belgelidir). - İkinci açılış mevcut pencereye odaklanmaz, adresini söyler. Odaklama
IPC + WinForms thread affinity işi; ucuz olan seçildi. - Native pencere yalnız Windows'ta denenir; diğer platformlarda tespit
doğrudan tarayıcı moduna düşer (dağıtım hedefi Windows). - Pencere ikonu bu fazın kapsamında değildir (PyInstaller/Inno fazı).