Ctrl+Space starts and stops a recording. The audio goes to OpenAI for transcription, a model on OpenRouter strips the fillers and restores punctuation, and the result is copied and pasted into the focused window. Only the Python standard library and PyQt6 — HTTP, multipart uploads and WAV writing are all hand-rolled. - pw-record captures raw 16 kHz mono PCM with a live level meter - the corner indicator is drawn through XWayland, since a Wayland client cannot position its own window - silence is caught before it costs an API call, relative to each recording's own noise floor, plus a filter for the stock phrases models invent when handed silence - audio and video files can be transcribed too, optionally with [mm:ss] timestamps, chunked through ffmpeg for long inputs - global shortcut installs as a KDE custom shortcut, with an evdev listener as a fallback until the session is restarted - Turkish and English interface, following the system locale by default
7.2 KiB
Dikte
Ctrl+Space'e bas, konuş, tekrar bas. Ses OpenAI'ye 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
./install.sh # ya da: ./install.sh "Ctrl+Alt+Space"
dikte # ilk açılışta ayarlar penceresi gelir
Gereken sistem paketleri (Arch/CachyOS):
sudo pacman -S --needed pipewire-audio wl-clipboard ydotool ffmpeg python-pyqt6
systemctl --user enable --now ydotool # otomatik yapıştırma için
Ayarlar penceresinde iki anahtar istenir:
- OpenAI — sesi yazıya çevirir (
gpt-4o-transcribe). Boş bırakırsanOPENAI_API_KEYortam değişkeni kullanılır. - OpenRouter — transkripti temizler (varsayılan
google/gemini-3.5-flash-lite, listedeki her model çalışır). BoşsaOPENROUTER_API_KEYkullanılır. Temizlemeyi tamamen kapatabilirsin; o zaman ham transkript yapıştırılır.
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 |
| Ayarlar | Tepsi menüsü → Ayarlar, ya da dikte settings |
| Çık | Tepsi menüsü → Çık, ya da dikte quit |
Kayıt sırasında ekranın sol alt köşesinde küçük bir gösterge belirir: kırmızı kayıt noktası, canlı ses dalgası, süre. Ardından "Yazıya çevriliyor…", "Temizleniyor…" ve son olarak yapıştırılan metnin ilk satırı görünür. Gösterge odak almaz, yani yazdığın pencereden çıkmazsın.
Sessizlik API'ye gitmez
Sessize yakın bir ses verildiğinde transkripsiyon modeli boş dize döndürmez —
bir cümle uydurur. Whisper bunun ünlü örneği: iki saniyelik sessizliğe
"Altyazı M.K." ya da "Thanks for watching" der. Yanlışlıkla basılan bir
Ctrl+Space yoksa sana hem bir API çağrısına mal olur hem de hiç söylemediğin
bir cümleyi yapıştırır.
Dikte çağrıyı harcamadan önce kontrol eder ve bu kontrol mutlak değil göreli yapılır — mikrofon kazancı makineden makineye o kadar değişir ki sabit bir eşik bir şey ifade etmez. Şunlardan biri bile geçerliyse kayıt atılır:
- kaydın gürültülü ucu mutlak tabanın altındaysa (varsayılan −55 dBFS);
- o kaydın kendi gürültü tabanının 10 dB üstüne en az 0,3 saniye çıkan bir şey yoksa — ne kadar yüksek olursa olsun sabit fan ya da cızırtıyı eleyen de budur;
- seviye taban civarında hiç hareket etmediyse.
Yine de bir şey sızarsa, ikinci bir filtre modellerin sığındığı kalıp cümleleri yakalar; ama yalnızca altı saniyeden kısa kayıtlarda, ki gerçekten söylenmiş bir "izlediğiniz için teşekkürler" elenmesin.
Gösterge ölçtüğü seviyeyi de yazar (Ses algılanmadı (−56 dB)); mikrofonun
alışılmadık ölçüde kısık ya da gürültülüyse eşiği buna bakarak ayarlarsın.
Dosyadan transkript
Ayarlar → Ses dosyası sekmesi, herhangi bir ses ya da video dosyasını aynı modellerden geçirir. İki seçenek var, ikisi de hatırlanır:
- Zaman damgası ekle — her bölümün başına
[dd:ss]koyar. Bunun için bölüm zamanı döndüren tek model olanwhisper-1kullanılır. - Sonrasında temizleme modelinden geçir — canlı diktedeki temizlemenin aynısı, üstüne modele damgalara dokunmamasını söyleyen bir kural eklenir.
Uzun dosyalar ffmpeg ile 16 kHz mono'ya çevrilip onar dakikalık parçalara
bölünür; her parça sırayla çevrilir ve zaman damgaları kendi yerine kaydırılır.
Sonuç panoya kopyalanabilir ya da .txt olarak kaydedilebilir.
Global kısayol hakkında
KWin, kglobalshortcutsrc dosyasını yalnızca açılışta okur. install.sh
kısayolu doğru yere yazar ama oturumu yeniden açana kadar tetiklenmez.
İki seçenek:
- Oturumu kapat-aç — temiz çözüm. Tuşu KWin yuttuğu için diğer uygulamalara sızmaz.
- Ayarlar → Kısayol → Yerleşik dinleyici'yi aç.
/dev/inputüzerinden kombinasyonu kendisi yakalar, anında çalışır. Tek farkı: tuşu yutmaz, yaniCtrl+Spaceodaktaki uygulamaya da iletilir (bazı editörlerde otomatik tamamlama açılabilir). Rahatsız ederse kısayoluCtrl+Alt+Spacegibi bir kombinasyona çevir.
Yerleşik dinleyici input grubunda olmayı gerektirir:
sudo usermod -aG input $USER.
Ayarlar
~/.config/dikte/config.json içinde, izinler 600 — API anahtarları orada durur.
| Ayar | Açıklama |
|---|---|
| Arayüz dili | Türkçe, İngilizce ya da sistem diline uy |
| Mikrofon | Belirli bir kaynak seç, ya da varsayılanı kullan |
| Konuşma dili | Transkripsiyona dil ipucu verir; otomatik algılama da olur |
| Yapıştırma tuşu | ctrl+v / ctrl+shift+v / shift+insert — terminaller genelde ikincisini ister |
| Panoyu geri koy | Yapıştırdıktan sonra eski pano içeriğini iade eder |
| Sessiz kayıtları atla | Konuşma içermeyen kayıtları API'ye gitmeden eler — yukarıya bak |
| Temizleme kuralları | Temizleme modeline verilen sistem talimatı — ne kadar müdahale edeceğini burada belirlersin |
| Transkripsiyon ipucu | Sık geçen özel isim ve terimler, doğru yazılsınlar diye |
| Ses kayıtlarını sakla | WAV'lar ~/.local/share/dikte/recordings altında kalır |
Geçmiş ~/.local/share/dikte/history.jsonl dosyasında tutulur; son 200 kayıt
Ayarlar → Geçmiş sekmesinden görülebilir.
Dosyalar
dikte.py giriş noktası, tepsi simgesi, durum makinesi, IPC
audio.py pw-record ile ham PCM kaydı ve seviye ölçer
api.py OpenAI 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
Bilinen sınırlar
- Gösterge XWayland üzerinden çizilir; Wayland'da bir pencereyi belirli bir
köşeye yerleştirmenin yolu yok.
dikte.pybu yüzdenQT_QPA_PLATFORM=xcbayarlar. - Otomatik yapıştırma
ydotool'un sanal klavyesiyle yapılır;ydotooldçalışmıyorsa metin yalnızca panoya kopyalanır ve gösterge bunu söyler. - "Yazıya çevriliyor…" sürerken gelen kısayol basışları yok sayılır.
Lisans
GPL-3.0 — LICENSE dosyasına bak.




