Skip to content

Latest commit

 

History

History
291 lines (210 loc) · 10.3 KB

File metadata and controls

291 lines (210 loc) · 10.3 KB

PushDictate — Push-to-Talk-Diktat für Windows

Diktiere in jedes Fenster mit Textcursor — auch ins Terminal. Strg+Leertaste halten, sprechen, loslassen. Der Text erscheint an der Cursorposition.

License: MIT Platform Python

🇬🇧 English guide → README.md

Veröffentlicht über Proving Lab — Werkzeuge erscheinen dort zusammen mit den Messungen dahinter. Siehe unten.


Warum es das gibt

Die Windows-Spracherkennung und die meisten Diktierwerkzeuge schreiben über die Text-Services-Schicht von Windows. Die steht in Konsolenfenstern nicht zur Verfügung, in vielen Electron-Apps ebenso wenig, und in allem, was in WSL läuft, erst recht nicht. Genau dann, wenn du eine Commit-Nachricht, einen Prompt an einen Coding-Agenten oder einen Shell-Befehl diktieren willst, gibt die eingebaute Spracherkennung auf.

PushDictate geht einen anderen Weg: aufnehmen → transkribieren → Zwischenablage → einfügen. Ein Einfügen aus der Zwischenablage nimmt jedes Fenster an, das Text akzeptiert. Diese eine Entwurfsentscheidung ist der gesamte Sinn des Werkzeugs.

Wo es funktioniert und anderes nicht

Ziel Windows-Diktat PushDictate
Windows Terminal, PowerShell, cmd
WSL / Ubuntu-Shell
Coding-Agenten im Terminal
Integriertes Terminal in VS Code
SSH-Sitzungen
Word, Outlook, Browser

Im Alltag auf Windows 11 verifiziert, nicht in einer systematischen Messreihe über mehrere Windows-Versionen. Stimmt eine Zeile auf deinem System nicht, bitte ein Issue öffnen — dann wird sie hier korrigiert.


Anwendungsfälle

Terminal und Coding-Agenten. Lange Prompts zu tippen ist mühsam, sie zu sprechen trivial — eine mehrsätzige Anweisung ist gesprochen deutlich schneller als getippt. (Nicht gemessen, also Erfahrung, keine Messung.)

Dokumente und E-Mail. Laut entwerfen, schriftlich korrigieren. Die Vokabeldatei hält Eigennamen sauber.

Commit-Nachrichten und Issues. Wer das Warum spricht, schreibt erfahrungsgemäß längere und brauchbarere Nachrichten als beim Tippen.

Notizen, wenn die Hände beschäftigt sind. Beim Lesen, beim Kabelhalten, beim Kochen — der Hotkey ist einen Griff entfernt.


Installation

Voraussetzungen: Windows 10 oder 11, Python 3.10+ (64-Bit), git und ein eigener OpenAI-API-Schlüssel. Kein git? Dann auf GitHub Code → Download ZIP statt der ersten Zeile.

git clone https://github.com/Bubu89/pushdictate.git
cd pushdictate
py -m pip install -r requirements.txt

py -m pip statt bloßem pip mit Absicht: Auf Rechnern mit mehreren Python-Installationen gehört pip oft zu einer anderen als py. Die Pakete landen dann dort, wo niemand sie sucht.

Vor dem ersten Start prüfen:

py pushdictate.py --check

Meldet Pakete, Schlüssel und Schreibrechte und endet mit einem Fehlerwert, wenn das Programm nicht starten würde.

Einrichten ohne Fenster

Der erste Start öffnet ein kleines Einrichtungsfenster. Am Schreibtisch ist das richtig, in einem Skript, über eine Fernsitzung oder wenn ein Agent die Installation übernimmt, ist es unbrauchbar — das Fenster wartet, und nichts wird gemeldet. Deshalb hat jeder Schritt einen Weg ohne Fenster:

py pushdictate.py --set-key sk-…            # Schlüssel in .env schreiben
echo sk-… | py pushdictate.py --set-key -   # oder von der Standardeingabe
py pushdictate.py --check --json            # Status maschinenlesbar
py pushdictate.py --no-setup                # abbrechen statt Fenster öffnen

Rückgabewerte: 0 in Ordnung, 1 Prüfung fehlgeschlagen, 2 Aufruffehler, 3 Schlüssel fehlt und kein Fenster erlaubt. PUSHDICTATE_NO_SETUP=1 wirkt wie --no-setup.

Eine vollständige Installation ohne Zutun sind vier Zeilen:

git clone https://github.com/Bubu89/pushdictate.git && cd pushdictate
py -m pip install -r requirements.txt
py pushdictate.py --set-key "$OPENAI_API_KEY"
py pushdictate.py --check || exit 1

Erster Start: der Einrichtungs-Assistent

PushDictate wird ohne Schlüssel ausgeliefert und wird das auch bleiben. Die Transkription wird dem Schlüssel-Inhaber verrechnet, also muss es deiner sein.

Beim ersten Start öffnet sich ein Fenster, das dich durchführt:

  1. Eine Schaltfläche öffnet https://platform.openai.com/api-keys im Browser
  2. Du fügst den Schlüssel ins Feld ein
  3. Speichern und starten — fertig

Der Assistent legt die .env selbst an. Kein Kopieren, kein Umbenennen, kein Hantieren mit Konfigurationsdateien. Der Schlüssel bleibt auf diesem Rechner, .env steht in .gitignore.

Vor dem Speichern wird der Schlüssel auf Plausibilität geprüft: Ein leeres Feld oder etwas, das kein OpenAI-Schlüssel ist, bekommt eine klare Meldung — statt drei Schritte später zu scheitern.

Kosten: Abrechnung pro Audiominute. Zehn Minuten am Tag sind 300 Minuten im Monat — mal dem Minutenpreis auf OpenAIs Preisseite ergibt deine Zahl. Hier steht bewusst keine: Ein in eine README eingefrorener Preis veraltet still. Aktuelle Preise: https://openai.com/api/pricing/ — verlass dich nicht auf eine Zahl, die in einer README einbetoniert wurde.

Starten

wscript start_silent.vbs      REM ohne Fenster — der Normalfall
python pushdictate.py        REM mit Konsole — zum Debuggen

Am Bildschirmrand erscheint ein farbiger Punkt, im Infobereich ein Symbol. Beim allerersten Start öffnet sich eine Kurzanleitung mit den Tasten und der Bedeutung der Punktfarben. Rechtsklick auf den Punkt holt sie jederzeit zurück.


Bedienung

Aktion Taste
Aufnahme starten Strg + Leertaste
Beenden und einfügen Leertaste

Der Punkt zeigt den Zustand:

Farbe Bedeutung
Rot bereit
Gelb Mikrofon öffnet — noch nicht sprechen
Grün Aufnahme läuft (Startton erklang)
Orange wird transkribiert

Warte auf Grün. Wer bei Gelb anfängt, verliert das erste Wort.

Zwei tiefe Töne bedeuten: nichts eingefügt — Mikrofon stumm, leeres Ergebnis oder ein zurückgestelltes Diktat.


Was du bekommst

  • Push-to-Talk statt Dauerlauschen. Das Mikrofon öffnet, wenn du es verlangst. Dazwischen wird nichts aufgenommen.
  • Funktioniert im Terminal. Der Grund, warum es das Werkzeug gibt.
  • Eigenes Vokabular. vocab.txt (max. ~700 Zeichen) geht als Hinweis an Whisper, damit Eigennamen richtig ankommen. Wirkt sofort, ohne Neustart.
  • Medien pausieren automatisch. Musik oder Video hält während des Diktats an und läuft danach weiter — auch in allen Fehlerpfaden, damit nichts hängen bleibt.
  • Warteschlange bei Netzfehlern. Scheitert die Transkription am Netz, landet die Aufnahme in pending/ und wird automatisch nachgereicht; der Text kommt in die Zwischenablage.
  • Absturz- und Standby-Erholung. Ein geplanter Task startet die App neu, falls sie stirbt; der Audio-Stream wird nach Standby neu aufgebaut, statt still taub zu werden.
  • Nur eine Instanz. Ein benannter Mutex verhindert, dass eine zweite Kopie den Hotkey stiehlt.
  • Verlauf. Die letzten 20 Transkriptionen im Tray-Menü.
  • Kurzanleitung auf Abruf. Rechtsklick auf den Punkt zeigt Tasten, Farben und Hinweise — ohne auf diese Seite zurückzukehren.

Datenschutz

Die Aufnahme verlässt deinen Rechner. Sie geht zur Transkription an die OpenAI-API — unter deinem Schlüssel und OpenAIs Bedingungen. Sonst ist kein Server beteiligt: keine Telemetrie, keine Auswertung, kein Konto beim Autor.

Alles andere bleibt lokal und steht in .gitignore:

Datei Inhalt
.env dein API-Schlüssel
settings.json Geräte- und Sprachwahl
*.log, *.jsonl Zeiten, Fehler und Ausschnitte deiner Diktate
pending/ Audio, das auf einen zweiten Versuch wartet
mute_state.json welche Anwendung beim Diktat gerade Ton ausgab
heartbeat.json Zeitstempel des letzten Lebenszeichens

Wenn deine Audiodaten das Gerät nicht verlassen dürfen, ist ein lokales Whisper-Modell die richtige Wahl — für diese Anforderung ist dieses Werkzeug das falsche.


Fehlerbehebung

Cloudflare WARP blockiert die Transkription

Schlägt sie mit Connection error auf /audio/transcriptions fehl, während Cloudflare WARP läuft, blockiert WARPs Gateway das DNS für api.openai.com — die Adresse ist dort als Tracker eingestuft.

nslookup api.openai.com
REM blockiert, wenn 0.0.0.0 oder :: zurückkommt

api.openai.com und *.openai.com in beiden Systemen freigeben:

  1. Split-Tunnel-Ausnahmen (Routing)
  2. Cloudflare-Gateway-Regel (DNS)

Eines allein reicht nicht.

Der Punkt verschwindet hinter anderen Fenstern

In der aktuellen Fassung behoben — das Overlay meldet sich alle drei Sekunden zurück nach oben. Falls es doch auftritt: Issue mit deiner Windows-Build-Nummer.

Das erste Wort fehlt

Du hast bei Gelb angefangen. Warte auf Grün und den Startton.


Mitarbeit

Issues und Pull Requests sind willkommen. Hilfreiche Meldungen nennen deine Windows- und Python-Version und die passenden Zeilen aus dem Log. Bitte transkribierten Text vorher entfernen — das sind deine Worte, keine Diagnosedaten.


Proving Lab

PushDictate erscheint über provinglab.dev, wo Werkzeuge zusammen mit den Messungen dahinter veröffentlicht werden statt mit Werbeaussagen.

Die Regel dort: keine Zahl ohne Messung, keine Behauptung ohne Test. Wo nichts gemessen wurde, steht das da, statt geschätzt zu werden — deshalb verweist der Kostenabschnitt oben auf OpenAIs Preisseite, statt eine Zahl einzufrieren, die still veralten würde.

Ebenfalls von Proving Lab: Full Page PDF Snap — jede Webseite als ein hochauflösendes PDF sichern, vollständig auf dem eigenen Gerät.


Lizenz

Code: MIT — siehe LICENSE. Nutzen, ändern, weitergeben. Ohne Gewähr. Dokumentation (README, CHANGELOG): CC BY 4.0. Eine Softwarelizenz sagt über Text nichts aus, deshalb steht es hier ausdrücklich da.