Systemweiter Diktierdienst fuer Linux (X11 + Wayland). Taste druecken, sprechen, Text erscheint im aktiven Fenster — in jeder Anwendung.
- Push-to-Talk / Toggle — Taste halten oder einmal druecken zum Aufnehmen, Text wird automatisch eingefuegt
- 4 Diktiermodi:
- Normal — wortgetreue Transkription
- Plus — gesprochenen Text schriftlich formuliert
- Rage — wuetenden Text in hoefliche Formulierung umwandeln
- Emoji — Text mit passenden Emojis anreichern
- Live-Transkription — Echtzeit-Untertitel im Browser mit automatischer Uebersetzung (Mikrofon + Desktop-Audio)
- Lokale oder Online Transkription — faster-whisper (lokal, offline) oder OpenAI Whisper API (online)
- System-Tray App — Einstellungen, Tastenerkennung, Mikrofon-Auswahl per GUI
- SayoDevice-kompatibel — Macro-Pads mit Tap-Firmware, Multi-Key-Combos
- Systemweit — funktioniert in jeder App (Browser, Slack, Terminal, IDE)
- systemd User-Services — Autostart beim Login
- Linux mit X11 oder Wayland
- Python 3.12+
- OpenAI API Key (fuer Online-Modus) oder CUDA/CPU fuer lokalen Modus
- Benutzer muss Mitglied der
input-Gruppe sein (fuer evdev-Zugriff)
# Arch / CachyOS
sudo pacman -S libnotify alsa-utils
# Wayland (empfohlen)
sudo pacman -S wl-clipboard ydotool
# X11
sudo pacman -S xdotool xclip# Debian / Ubuntu
sudo apt install libnotify-bin alsa-utils
# Wayland
sudo apt install wl-clipboard ydotool
# X11
sudo apt install xdotool xclipgit clone <repo-url> stt-trans
cd stt-trans
OPENAI_API_KEY=sk-... bash install.shDas Installationsskript erledigt folgende Schritte:
- Prueft System-Abhaengigkeiten
- Fuegt den Benutzer zur
input-Gruppe hinzu (falls noetig) - Erstellt ein Python-venv und installiert alle Pakete
- Legt die Standard-Konfiguration an (
~/.config/transcriptor/config.json) - Installiert und aktiviert die systemd-Services
Nach der Installation ist ein Neuanmelden erforderlich, falls die input-Gruppe neu hinzugefuegt wurde.
Rechtsklick auf das Tray-Icon und "Einstellungen oeffnen" waehlen. Die GUI bietet:
- Eingabegeraet (Tastatur) auswaehlen
- Audiogeraet (Mikrofon) waehlen
- Tasten fuer jeden Modus zuweisen (Taste druecken statt Key-Code eingeben)
- Trigger-Modus (Hold / Toggle) einstellen
- Inject-Methode waehlen (wtype, xdotool, wl-copy+paste, etc.)
- Live-Transkription Tastenkombination festlegen
# Input-Device setzen (evdev-Pfad)
curl -X PATCH http://localhost:8765/api/config \
-H "Content-Type: application/json" \
-d '{"input_device": "/dev/input/event3"}'
# Trigger-Modus aendern
curl -X PATCH http://localhost:8765/api/config \
-H "Content-Type: application/json" \
-d '{"trigger_mode": "toggle"}'
# Inject-Methode fuer Wayland
curl -X PATCH http://localhost:8765/api/config \
-H "Content-Type: application/json" \
-d '{"inject": {"method": "wl-copy+paste", "paste_shortcut": "ctrl+shift+v"}}'
# Tastenkuerzel anpassen
curl -X PATCH http://localhost:8765/api/config \
-H "Content-Type: application/json" \
-d '{
"modes": {
"normal": {"key_codes": [183], "key_name": "KEY_F13"},
"plus": {"key_codes": [184], "key_name": "KEY_F14"},
"rage": {"key_codes": [185], "key_name": "KEY_F15"},
"emoji": {"key_codes": [186], "key_name": "KEY_F16"}
}
}'
# Aktuelle Konfiguration anzeigen
curl http://localhost:8765/api/config | python -m json.toolSpeicherort: ~/.config/transcriptor/config.json
Wird beim ersten Start automatisch angelegt. Kann alternativ ueber die Umgebungsvariable BLITZTEXT_CONFIG auf einen anderen Pfad gesetzt werden.
| Modus | Standard-Taste | Beschreibung |
|---|---|---|
| Normal | KEY_F13 | Wortgetreue Transkription |
| Plus | KEY_F14 | Gesprochener Text wird schriftlich formuliert |
| Rage | KEY_F15 | Wuetender Text wird hoeflich umformuliert |
| Emoji | KEY_F16 | Text wird mit Emojis angereichert |
Hold-Modus (Standard): Taste halten = Aufnahme laeuft, Taste loslassen = Text wird eingefuegt. Bei kurzem Tap (<400ms) wechselt die Aufnahme automatisch in den Toggle-Modus.
Toggle-Modus: Einmal druecken = Aufnahme starten, nochmal druecken = Aufnahme stoppen und Text einfuegen.
Die Live-Transkription zeigt Echtzeit-Untertitel im Browser mit optionaler Uebersetzung.
- Tastenkombination fuer Live-Modus in den Einstellungen festlegen
- Kombination druecken — der Browser oeffnet sich automatisch unter
http://localhost:8765/live - Mikrofon und Desktop-Audio werden parallel transkribiert
- Zielsprache fuer Uebersetzung im Browser-UI waehlen
- Nochmal die Kombination druecken oder den Stop-Button im Browser verwenden
Die Tray-App zeigt den aktuellen Status (idle / recording) und bietet:
- Einstellungen oeffnen — Konfigurationsfenster mit allen Optionen
- Neustart — startet den Daemon-Service neu
- Beenden — beendet die Tray-App
# Daemon-Status
systemctl --user status stt-trans.service
# Tray-Status
systemctl --user status stt-trans-tray.service
# Daemon neustarten
systemctl --user restart stt-trans.service
# Live-Logs
journalctl --user -u stt-trans.service -fDer Daemon lauscht auf http://localhost:8765.
| Endpoint | Methode | Beschreibung |
|---|---|---|
/api/health |
GET | Service-Status, Version, konfigurierte Geraete |
/api/status |
GET | Aktueller Aufnahmestatus und aktiver Modus |
/api/config |
GET | Gesamte Konfiguration auslesen |
/api/config |
PATCH | Konfiguration teilweise aktualisieren |
/api/config/reset |
POST | Konfiguration auf Standardwerte zuruecksetzen |
/api/process/{mode} |
POST | Text manuell durch einen Modus verarbeiten |
/live |
GET | Live-Transkription HTML-Seite |
/live/stop |
POST | Live-Transkription stoppen |
/ws/live/mic |
WebSocket | Mikrofon-Stream fuer Live-Transkription |
/ws/live/desktop |
WebSocket | Desktop-Audio-Stream fuer Live-Transkription |
# Health-Check
curl http://localhost:8765/api/health
# Text manuell durch "plus"-Modus verarbeiten
curl -X POST http://localhost:8765/api/process/plus \
-H "Content-Type: application/json" \
-d '{"text": "also ich wollte sagen dass das echt cool ist"}'
# Aufnahmestatus abfragen
curl http://localhost:8765/api/statusFuer offline-faehige Transkription ohne OpenAI API:
# faster-whisper installieren
cd stt-trans
source .venv/bin/activate
pip install faster-whisper
# Backend umschalten
curl -X PATCH http://localhost:8765/api/config \
-H "Content-Type: application/json" \
-d '{"transcribe_backend": "local", "local_whisper_model": "small"}'Verfuegbare Modellgroessen: tiny, base, small, medium. Groessere Modelle liefern bessere Ergebnisse, benoetigen aber mehr RAM und Rechenzeit. Das Modell wird beim ersten Aufruf heruntergeladen und im RAM gehalten.
Mit CUDA-faehiger GPU wird automatisch GPU-Beschleunigung verwendet.
| Methode | Umgebung | Beschreibung |
|---|---|---|
wl-copy+paste |
Wayland | Clipboard + ydotool-Paste (empfohlen fuer Wayland) |
wtype |
Wayland | Direkte Tastatureingabe via wtype |
ydotool |
Wayland | Tastatureingabe via ydotool |
xdotool |
X11 | Direkte Tastatureingabe via xdotool |
xclip+paste |
X11 | Clipboard + xdotool-Paste |
- Python 3.12+, FastAPI, uvicorn
- evdev (globale Tastatur-Events)
- sounddevice + numpy + scipy (Audioaufnahme und Resampling)
- OpenAI API / faster-whisper (Transkription)
- pystray + tkinter (System-Tray GUI)
- WebSocket (Live-Transkription Streaming)
- systemd User-Services (Autostart)
MIT License — siehe LICENSE. Freie Nutzung und Kopieren erlaubt.
Issues-first Policy: Bitte zuerst ein Issue erstellen und das Problem oder Feature beschreiben, bevor ein Pull Request eingereicht wird.