Skip to content

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
· 77 commits to main since this release

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ü 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).
  • pywebview opsiyonel 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 ui yeni 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'ya FEATURE_BROWSER_EMULATION
    anahtarı yazar. Arayüz fetch/async/canvas kullandığı için sonuç
    "çökme" değil "sessizce bozuk pencere" olurdu. Bu yüzden WebView2 tespiti
    ön-uçuştur (web/native.py): yoksa webview.platforms.winforms hiç
    import edilmez. Kilidi tests/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ı).