Whispree – macOS-App für Spracheingabe mit STT + LLM-Korrektur für koreanische Entwickler
(github.com/Arsture)Ich bin ein Student, der gerne entwickelt. Jedes Mal, wenn ich einer AI etwas auftragen wollte, wurde Tippen zum Flaschenhals, also habe ich mir Spracheingabe angesehen. Zuerst habe ich Superwhisper benutzt. So schlecht war es nicht, aber weil es nicht speziell für Koreanisch ausgelegt ist, hat es ständig Wörter falsch erkannt.
- Wenn ich sagte: „Ich habe einen PR auf GitHub hochgeladen“ → wurde etwas wie „GitHub peol hochgeladen“ transkribiert
- Die Latenz war gut, aber die Erkennungsrate war frustrierend
Wenn man bezahlt, wird es zwar besser. Aber ich bin Student und knapp bei Kasse, also wollte ich nichts dafür ausgeben.
→ Deshalb habe ich versucht, es mit lokalem STT und einem LLM umzusetzen, aber das war viel zu langsam.
→ Dann fiel mir ein: Ich habe GPT ohnehin schon abonniert, also kann ich per OAuth ein LLM mitnutzen, und STT kann ich mit etwas wie Groq fast kostenlos verwenden.
In diese Richtung habe ich dann eine persönliche macOS-App in Swift gebaut.
Kernfunktion: Hotkey drücken und sprechen, dann STT → LLM-Korrektur → automatisches Einfügen an der ursprünglichen Cursorposition.
Im Vergleich zum Tippen ist das 3- bis 5-mal schneller, und selbst wenn man während der Aufnahme in ein anderes Fenster wechselt, merkt sich die App die ursprüngliche Fokusposition und fügt den Text genau dort ein.
Unterschied zu bestehenden Voice-Typing-Apps
Bei bestehenden Apps endet der Ablauf meist bei STT → Einfügen, aber Whispree hängt hinter STT noch eine LLM-Korrekturschicht an. Außerdem gibt es am Markt offenbar keine Apps, die speziell auf Koreanisch ausgerichtet sind.
"밸리데이션 해야 되거든" → "validation 해야 되거든"
"랙트 컴포넌트" → "React 컴포넌트"
"깃헙에 펄 올려놨어" → "GitHub에 PR 올려놨어"
Als ich die App fertig hatte, war ich ziemlich zufrieden und habe sie weiter benutzt und nach und nach Funktionen ergänzt.
Structured Mode
Als ich immer mehr per Sprache an AI eingegeben habe, ist mir aufgefallen, dass ich ungeordneter spreche, als ich dachte. Da kommen viele Dinge wie „und dann“ oder Fülllaute hinein. Also dachte ich, es wäre gut, wenn ein LLM das nachbearbeitet und in Bullet Points strukturiert, und habe diese Funktion gebaut.
Wenn ich Ideen schnell herausschütte, drücke ich einfach den Hotkey und rede drauflos, und am Ende wird ein sauber strukturierter Prompt eingefügt.
Visual Context
Nur aus dem Gesprochenen allein fehlte oft der Kontext, sodass das LLM manchmal in die falsche Richtung korrigiert hat. Deshalb habe ich entschieden, den Bildschirm, auf den ich während der Aufnahme schaue, automatisch zu erfassen.
- Anfangs habe ich nur den gerade fokussierten Bildschirm einbezogen, aber in der Praxis schaue ich beim Aufnehmen oft auch andere Tabs durch
- Deshalb habe ich es so erweitert, dass alle Tabs erfasst werden
- Beim Tab-Wechsel wird der vorherige Tab sofort erfasst, und wenn man 1,5 Sekunden auf einem Bildschirm bleibt, wird dieser Zustand aufgenommen
- Außerdem habe ich eine Funktion ergänzt, mit der Screenshots direkt in den Prompt eingefügt werden können
Quick Fix (Ctrl+Shift+D)
Falsch erkannte Wörter lassen sich direkt in das Korrekturwörterbuch eintragen. Dadurch steigt die Erkennungsrate. Eigentlich hatte ich zuerst nur eine Wörterbuchfunktion gebaut, aber weil mir das zu umständlich war, habe ich daraus einen Hotkey gemacht.
Fast kostenlos
- STT: Groq API (kostenlos)
- LLM-Korrektur: Verwendet direkt das Auth-Token von Codex CLI. Mit einem OpenAI-Konto fallen praktisch keine Zusatzkosten an
- Rein lokal ist ebenfalls möglich: Wenn Sie kein Codex-Abo haben, können Sie lokale Modelle verwenden. Mit einem leichteren Qwen-Modell oder nur mit STT ist die DX aber wahrscheinlich besser ...
Provider & Modi
- STT: WhisperKit / Groq / MLX Audio, insgesamt 3 Optionen
- LLM: 6 lokale Modelle (Qwen, GLM) + 5 OpenAI-Modelle
- Korrekturmodi: Standard / Filler Removal / Structured / Custom, insgesamt 4 Varianten
- In der App kann über die Funktion „Can I Run“ die Kompatibilitätsstufe des eigenen Geräts geprüft werden
Installation
brew tap Arsture/whispree && brew install --cask whispree
Unterstützt werden macOS 14+ (Sonoma) und ausschließlich Apple Silicon. Ursprünglich war die App nur für meinen eigenen Gebrauch gedacht, deshalb habe ich sie für macOS gebaut; andere Plattformen werden derzeit noch nicht unterstützt.
Am Anfang hieß das Projekt übrigens FreeWhisper. Es war ja nur dafür gedacht, dass ich es kostenlos selbst nutze. Als ich es dann als Open Source veröffentlichen wollte, fand ich FreeWhisper aber irgendwie etwas billig. Weil dabei API-Keys „mitgeliehen“ werden, habe ich auch an „NotMyWhisper“ gedacht. Das fühlte sich ein bisschen an wie „die geliehene Katze“. Aber je länger ich es benutzt habe, desto mehr hatte ich das Gefühl: „Das ist nicht der Whisper von jemand anderem, das ist mein Whisper.“ Und so wurde daraus schließlich Whispree.
Open Source unter der MIT-Lizenz. Feedback ist willkommen.
15 Kommentare
Ich nutze es nach längerer Zeit wieder, und in der Zwischenzeit hat es sich stark weiterentwickelt.
Es gibt aber eine Sache, die meiner Meinung nach verbessert werden sollte.
Die Funktion für den visuellen Kontext ist sehr gut. Dass jedoch nach jeder beendeten Aufnahme der aufgenommene Bildschirm angezeigt wird, ist etwas umständlich. Man kann das zwar einfach mit ESC abbrechen, aber idealerweise sollte er gar nicht erst erscheinen.
Falls damit gemeint ist, den beim Aufnehmen erfassten Bildschirm einzufügen, wäre es vielleicht sinnvoller, das durch eine Funktion zu ergänzen, mit der man den Capture-Screen nach Abschluss später wiederfinden kann.
Wenn Sie während der Aufnahme die linke Wahltaste gedrückt halten, wird der Kontext zwar übergeben, aber das Einfügen lässt sich deaktivieren!
Meinten Sie vielleicht diese Funktion??
Nein. Ich nutze wirklich ausschließlich die reine Transkriptionsfunktion. Es ist nur lästig, dass nach jedem Ende einer Aufnahme die Liste der Bildschirmaufnahmen erscheint, daher würde ich das gern deaktivieren.
Wenn man die Optionstaste gedrückt hält, erscheint sie zwar nicht. Aber für mein Nutzungsmuster ist auch das unpraktisch. Ich denke, dass es viele mit einem ähnlichen Problem gibt. Könntet ihr das in die Hauptoptionen aufnehmen?
Ah, diese Hauptoption ist vermutlich standardmäßig deaktiviert, aber wenn Sie eine frühere Version verwenden, wurde das möglicherweise noch nicht berücksichtigt!
In der whispree-App -> LLM -> Screenshot-Kontext -> An Agent übergeben können Sie es explizit auf Off stellen und deaktivieren!
Welche Aspekte Ihres Nutzungsmusters für Sie unpraktisch sind, habe ich hier nicht ganz klar verstanden, vielleicht auch, weil man hier keine Bilder anhängen kann T_T
Wenn es für Sie okay ist, könnten Sie dann ein GitHub-Issue erstellen? Dann versuche ich, den Kontext so gut wie möglich zu verstehen und das entsprechend zu berücksichtigen!
Danke. Seit heute wurde es nicht mehr angezeigt, und ich habe mich schon gefragt, warum — offenbar lag es daran, dass die Funktion aktualisiert wurde.
Vielen Dank für das schnelle Feedback.
Bei Handy gab es ein paar Punkte, die ich schade fand, daher klingt das gut. Ich werde vorerst darauf umsteigen und es ausprobieren.
Vielen Dank! Feedback ist jederzeit willkommen!
Klingt gut :) Viel Erfolg!
Vielen Dank :)
Ich glaube, bei der Einrichtung der Tastenkürzel gibt es einen Bug.
Oh, dürfte ich vielleicht fragen, um welchen Bug es sich handelt?
Die Einrichtung von Tastenkürzeln funktioniert überhaupt nicht, und wenn man sie zurücksetzt, sind die Tastenkürzel am Ende komplett verschwunden.
Könnte es sein, dass die Accessibility-Berechtigung bereits gesetzt ist?
Falls nicht, fügen Sie bitte die Whispree-App unter „Bedienungshilfen“ hinzu, versuchen Sie anschließend erneut, die Tastenkombination festzulegen, und geben Sie uns bitte Bescheid!
Ich habe es einmal ausprobiert, und es ist hervorragend. Viel Erfolg!
Danke!