info bead04ff09 feat(tray): Modell-Lade-Wartebalken plattformübergreifend anzeigen
Entfernt den Windows-only-Guard in App.__init__, damit der Dialog mit
indeterminatem ttk.Progressbar auch unter Linux erscheint, wenn das Laden
länger als 500 ms dauert. Ersetzt das literale \u2026 im Label durch das
Zeichen … und passt Spec/Plan an den tatsächlichen Umsetzungsstand an
(Timeout-basierter Wartebalken statt tqdm-Monkey-Patch, da die Xet-Engine
Python-tqdm bypasst).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 20:58:21 +02:00

whisper-local

Lokales Speech-to-Text mit globalem Hotkey. Hotkey halten → Sprechen → loslassen → faster-whisper transkribiert lokal → Text wird ins aktive Textfeld eingefügt. Kein Netzwerk, kein Cloud-Service.

Läuft als Hintergrunddienst mit Tray-Icon auf Linux (KDE Plasma / Wayland) und Windows 10/11.

Features

  • Systemweiter Hotkey (Standard: F12), konfigurierbar über den Einstellungs-Dialog im Tray
  • Einfügen ins aktive Textfeld unabhängig von der Anwendung (Browser, Terminal, IDE …)
  • Mikrofon-Auswahl über Tray-Einstellungen
  • Lokale Transkription via faster-whisper
  • Tray-Icon mit drei Zuständen: warten / aufnehmen / transkribieren

Systemabhängigkeiten

Linux (Arch / CachyOS)

sudo pacman -S ydotool wl-clipboard libayatana-appindicator gobject-introspection
  • ydotool — simuliert Tastatureingaben unter Wayland (Text-Einfügen via Ctrl+V)
  • wl-clipboard — Clipboard-Zugriff unter Wayland (wl-copy)
  • libayatana-appindicator + gobject-introspection — Tray-Icon über StatusNotifierItem (KDE/Wayland)

Damit ydotool ohne sudo funktioniert, muss der ydotoold-Daemon laufen und der Benutzer in der input-Gruppe sein:

sudo systemctl enable --now ydotool
sudo usermod -aG input $USER
# Neu-Login nötig

Der Benutzer braucht außerdem Lesezugriff auf /dev/input/event*, was die input-Gruppen-Mitgliedschaft abdeckt.

Windows

Keine System-Dependencies. pynput und pywin32 werden automatisch via uv installiert.

Installation

Voraussetzung: uv (Python-Paketmanager).

git clone <repo-url> whisper-local
cd whisper-local
uv sync

uv sync installiert plattformspezifisch:

  • Linux: evdev, PyGObject, pystray, Pillow, sv-ttk, darkdetect
  • Windows: pynput, pywin32, pystray, Pillow, sv-ttk, darkdetect

Konfiguration

Die Konfigurationsdatei wird beim ersten Start angelegt. Vorlage: config.example.toml.

  • Linux: ~/.config/whisper-local/config.toml
  • Windows: %APPDATA%\whisper-local\config.toml

Hotkey und Mikrofon lassen sich auch direkt über den Einstellungs-Dialog im Tray ändern (Rechtsklick aufs Tray-Symbol → „Einstellungen"). Änderungen greifen sofort ohne Neustart.

Key-Namen folgen dem evdev-Format (KEY_F12, KEY_LEFTSHIFT, …) — auch unter Windows.

Starten

uv run whisper-local

Beim ersten Start lädt faster-whisper das Whisper-Modell (Standard: small) herunter. Danach erscheint das Tray-Icon und der Hotkey ist aktiv.

Autostart unter Linux (systemd user unit)

mkdir -p ~/.config/systemd/user
cp systemd/whisper-local.service ~/.config/systemd/user/
systemctl --user daemon-reload
systemctl --user enable --now whisper-local.service

Das whisper-local-Executable muss dafür in ~/.local/bin verfügbar sein (uv tool install . oder Pfad in der Unit anpassen).

Entwicklung

uv run pytest                    # Tests
uv run python -m whisper_local   # Direkt starten

Plattform-spezifische Tests werden über @pytest.mark.skipif(sys.platform != ...) übersprungen.

Architektur- und Designdokumente liegen unter docs/superpowers/.

Lizenz

TBD

S
Description
No description provided
Readme 926 KiB
1.3.0 Latest
2026-05-14 19:31:35 +02:00
Languages
Python 97.6%
PowerShell 2.4%