Cleaning up a dictation and cleaning up a file are not the same job, and until now they shared one prompt. A dictation is read afterwards, so dropping a filler and tightening a sentence is a favour. A file becomes an SRT, and there the same favour is damage: the viewer hears the words while the line is on screen, so a word that was said and is not written is noticed, and a phrase pulled onto the line above is on screen before it is spoken. So the file path gets its own system prompt. It says what the text is and what it is for, and it spends its room on the one repair only context can make: the word the transcriber misheard. Speech models fail phonetically on names, and somebody talking about Anthropic said "Claude", not "cloud". The lines stay where they are, nothing is shortened, nothing is turned into an abbreviation, and the filler words stay because they were said out loud. The glossary and the timestamp rule are appended as before, so a name listed under Cleanup rules still reaches this prompt, and a timestamped run still gets told to leave the stamps alone. The dictation prompt is untouched, and so are the meeting and agent paths. Cleanup rules now has a tab each. An untouched prompt is still stored empty, so switching the interface language keeps switching the prompt language with it.
7.8 KiB
Dikte
Ctrl+Space'e bas, konuş, tekrar bas. Ses OpenAI'ye ya da OpenRouter'a gidip
yazıya çevrilir, OpenRouter'daki bir model transkripti temizler (ıı'lar,
tekrarlar, eksik noktalama), sonuç panoya kopyalanır ve o an yazdığın pencereye
yapıştırılır.
KDE Plasma 6 / Wayland için yazıldı. Sistem paketleri dışında bağımlılığı yok: sadece Python standart kütüphanesi ve PyQt6.
![]() |
![]() |
![]() |
![]() |
Kurulum
sudo pacman -S --needed pipewire-audio wl-clipboard ydotool ffmpeg python-pyqt6
systemctl --user enable --now ydotool # otomatik yapıştırma için
./install.sh # ya da: ./install.sh "Ctrl+Alt+Space"
dikte # ilk açılışta ayarlar penceresi gelir
install.sh dikte komutunu, menü girdisini, oturum açılışında otomatik
başlatmayı ve KDE kısayolunu kurar.
Ayarlar penceresinde iki anahtar istenir: OpenAI ve OpenRouter. Sesi
yazıya çevirme ikisinden birinde çalışır (varsayılan gpt-4o-transcribe),
temizleme her zaman OpenRouter'da (google/gemini-3.5-flash-lite), yani tek bir
OpenRouter anahtarı ikisine de yeter. Boş bırakırsan OPENAI_API_KEY ve
OPENROUTER_API_KEY kullanılır; anahtarlar ~/.config/dikte/config.json
içinde, izinler 600. Temizlemeyi tamamen kapatabilirsin, o zaman ham transkript
yapıştırılır; modelin yanındaki kutudan düşünme seviyesini de seçebilirsin.
Kullanım
| Ne | Nasıl |
|---|---|
| Kaydı başlat / bitir | Ctrl+Space, ya da tepsi simgesine tıkla |
| Kaydı iptal et | Tepsi menüsü → Kaydı iptal et, ya da dikte cancel |
| Ajana sesle komut ver | Tepsi menüsü → Claude'a sor, ya da dikte ask |
| Toplantıyı başlat / bitir | Tepsi menüsü → Toplantı kaydet, ya da dikte meeting |
| Ayarlar | Tepsi menüsü → Ayarlar, ya da dikte settings |
| Güncelleme sonrası yeniden yükle | Tepsi menüsü → Yeniden başlat, ya da dikte restart |
| Çık | Tepsi menüsü → Çık, ya da dikte quit |
Ekranın köşesindeki gösterge kırmızı kayıt noktasını, canlı ses dalgasını ve
süreyi, ardından hangi aşamada olduğunu gösterir. Odak almaz. Dikte çalışırken
Ctrl+Space'e tekrar basmak bir şey yapmaz, sıraya da girmez. Dikte ile ajana
verilen komut yalnızca mikrofon için birbirini bekler, o da tek aygıt olduğu
için; başka hiçbir şeyde beklemezler. Her birinin kendi göstergesi var, ikisi
birden ekrandayken ikincisi birincinin üstüne yerleşir.
Neler yapıyor
-
Sessizlik API'ye gitmez. Sessize yakın bir ses verildiğinde model boş dize döndürmez, bir cümle uydurur ("Altyazı M.K.", "Thanks for watching"). O kaydın kendi gürültü tabanının 10 dB üstüne en az 0,3 saniye çıkan bir şey yoksa kayıt atılır; ne kadar yüksek olursa olsun sabit fanı ya da cızırtıyı eleyen de budur. Kaydın gürültülü ucu -55 dBFS altındaysa da atılır. Gösterge ölçtüğü seviyeyi yazar, eşiği ona bakarak ayarlarsın.
-
Yanlış duyulan kelimeler düzeltilir. Konuşma modelleri özel isimlerde sesçe benzer bir şeye kayıyor; temizleme modelinden bunları bağlamdan onarması, bağlam netleştirmiyorsa dokunmaması isteniyor. Temizleme kuralları sekmesine yazdığın isimler transkripsiyon modeline ipucu, temizleme modeline sözlük olarak gidiyor; "kuber netis"i tanımasını sağlayan da bu:
ham ıı bugün şey kuber netis üzerinde çalışan servisleri güncelledim yani sonra grafanada bir panel açtım hani ve pay kut ile arayüzü şey bitirdim işte sonuç Bugün Kubernetes üzerinde çalışan servisleri güncelledim. Sonra Grafana'da bir panel açtım ve PyQt ile arayüzü bitirdim. -
Başarısız temizleme sessizce geçmez. Dikte kaybolmasın diye ham transkript yine yapıştırılır ama gösterge kehribar rengine döner ve nedenini söyler, normal bir çalışma gibi görünmez.
-
Dikte bunun yerine bir komut da olabilir. Kendi kısayolu transkripti yapıştırmak yerine Claude Code'a (
claude -p) gönderir ve oradan döneni yapıştırır: cevabı ya da ne yapıldığını söyleyen bir cümle. Kendi açacağın oturumun aynısıdır, yani skill'lerin ve bağlı servislerin oradadır; "bunu perşembe üçe takvime koy" cümlesini Claude olmayan bir pencerede söyleyebilir olmanı sağlayan da budur. Codex (codex exec) da aynı şekilde çalışır; OpenRouter ise ikisi de kurulu olmayan bir makinede düz soru cevap için duruyor. Sağlayıcı, model, izinler ve çalışma dizini Ayarlar → Ajan sekmesinde; arka arkaya verilen komutlar tek bir konuşmada kalır. -
Toplantılar mikrofonla hoparlör çıkışından aynı anda kaydedilir; kimin ne dediği tahmin edilmez, sesin hangi kanaldan geldiğiyle belli olur. İki taraf ayrı ayrı yazıya çevrilip tek bir zaman damgalı transkriptte birleştirilir, ardından Ayarlar → Toplantı sekmesinden seçtiğin ikinci bir model kendi talimatıyla bunu tutanağa çevirir: kararlar, aksiyonlar, açık sorular. Sonuç
~/.local/share/dikte/meetingsaltına ve Ayarlar → Tutanaklar sekmesine düşer. Yarıda kalan bir işlem ses kaydını saklar, yeniden denemede parası ödenmiş transkriptin üstünden devam eder. -
Ses ve video dosyaları Ayarlar → Ses dosyası sekmesinde aynı modellerden geçer; istersen
[dd:ss]zaman damgalarıyla, uzun dosyalar ffmpeg ile parçalanarak, sonuç.txtya da.srtaltyazı olarak kaydedilerek; temizleme burada kendi kurallarıyla, altyazı için yazılmış haliyle çalışır: satırlar yerinde kalır, hiçbir şey kısaltılmaz. -
Geçmiş Ayarlar → Geçmiş sekmesinde; boyut sınırı var, sağ tıklayıp silebilirsin.
-
Türkçe ve İngilizce arayüz, varsayılan olarak sistem dilini izler.
Global kısayol için bir kez oturum kapatmak gerekir
KWin kglobalshortcutsrc dosyasını yalnızca açılışta okur, yani install.sh'ın
yazdığı kısayol oturumu yeniden açana kadar tetiklenmez. O zamana kadar Ayarlar →
Kısayol → yerleşik dinleyici /dev/input üzerinden kombinasyonu kendisi
yakalar. Tek farkı: tuşu yutmaz, yani Ctrl+Space odaktaki uygulamaya da iletilir
(bazı editörlerde otomatik tamamlama açılabilir). Dinleyici kullanıcının input
grubunda olmasını gerektirir: sudo usermod -aG input $USER.
Dosyalar
dikte.py giriş noktası, tepsi simgesi, durum makinesi, IPC
audio.py PCM kaydı: diktede pw-record, toplantıda ffmpeg
meeting.py kanal ayırma, konuşmacı etiketi, temizleme, tutanak
assistant.py dikteyi Claude Code, Codex ya da OpenRouter'dan geçirme
api.py iki sağlayıcıda transkript + OpenRouter temizleme (yalnız stdlib)
worker.py transkript → temizleme → pano → yapıştırma
vad.py kayıtta gerçekten konuşma var mı kararı
filetranscribe.py dosyadan transkript: ffmpeg, parçalama, zaman damgaları
overlay.py köşedeki gösterge
settings_ui.py ayarlar penceresi
hotkey.py KDE kısayol kurulumu ve evdev dinleyici
paste.py wl-clipboard ve ydotool sarmalayıcıları
i18n.py metin tablosu
Gösterge XWayland üzerinden çizilir; Wayland'da bir pencereyi belirli bir köşeye
yerleştirmenin yolu yok, dikte.py bu yüzden QT_QPA_PLATFORM=xcb ayarlar.
Lisans
GPL-3.0, LICENSE dosyasına bak.




