Warum ich meine Spracherkennung selbst gebaut habe
July 28, 2026
Seit einer Woche tippe ich meine Tagebucheinträge nicht mehr, ich spreche sie. Angefangen hat das allerdings mit einem Bug und nicht mit dem Tagebuch.
Das eingebaute Diktieren war unbrauchbar
Claude Code bringt eine Diktierfunktion mit, die eigentlich bisher absolut unbrauchbar war. Bei mir verdoppelte sie jedes Wort. Ich sage „one and a half days“, im Eingabefeld steht „one one and a half half days days“. Jedes Mal, nicht nur gelegentlich.
Bevor ich das gemeldet habe, wollte ich ausschließen, dass es an meinem Rechner liegt. Also habe ich das Mikrofon direkt mit sox mitgeschnitten, 16 kHz mono, mit mehreren Mikrofonen. Die Aufnahmen waren sauber, kein einziges verdoppeltes Wort. Was auch immer da schiefgeht, es passiert erst nach der Aufnahme.
Seit dem 18. Juli steht mein Kommentar in Issue #77771. Ich war auf der aktuellen Version, ich war im Tap-Mode, und einen Workaround gibt es bis heute nicht. Der Issue ist offen.
Warum mir das überhaupt wichtig war
Ich schreibe jeden Morgen direkt nach dem Aufstehen auf, was am Vortag passiert ist. Getippt dauert das schon ein paar Minuten. Mit einer Spracherkennung sollte mir das mindestens die Hälfte der Zeit sparen. Um fünf Uhr früh, so kurz nach dem Aufstehen, ist das ein Unterschied, den ich merke und mir mehr Zeit für andere Dinge gibt.
Dazu kommt der Alltag mit Claude Code. Ich tippe sehr viel mehr, als ich früher Code geschrieben habe. Ein längerer Prompt ist gesprochen deutlich schneller fertig, als wenn ich alles Tippen würde.
Das macht alles natürlich nur Sinn, wenn alles, was ich diktiere, weitestgehend richtig verstanden wurde, und ich nicht nachher mit manueller Korrektur noch einmal viel Zeit investieren muss.
Was so auf dem Markt gibt
Bezahlversionen existieren, und einige davon sollen gut sein. Die, die ich gefunden habe, laufen auf macOS. Ich sitze vor einem Linux-Rechner, damit war die Liste schon kurz. Und bei den bezahlten Versionen auf dem Mac ist man schnell mal mit 20 EUR im Monat dabei.
Bliebe, sich bei einem der großen Anbieter direkt anzumelden. Ich habe bereits ein Konto bei OpenRouter, über das ohnehin alles läuft, was ich an KI benutze. Mal von dem Abo bei Anthropic für Claude Code abgesehen, das ich für meine tägliche Arbeit brauche. Aber ein weiteres Abo wollte ich nur wegen ein bisschen Spracherkennung nicht auch noch haben.
Dazu kommt, dass ich die Wahl behalten wollte, welches Modell die Erkennung macht. Bei OpenAI bekomme ich halt nur die Models von OpenAI. Bei OpenRouter kann ich wählen, welches Model ich verwenden will.
Ich benutze heute Voxtral von Mistral, also die europäische Variante, und das war eine bewusste Entscheidung.
Für das Cleanup, dass sich den erkannten Text noch einmal anschaut, und die offensichtlichsten Fehler behebt, verwende ich ebenfalls ein Model von Mistral.
Und was ist mit Open Source?
Zwei Kandidaten habe ich mir angesehen.
SoupaWhisper macht genau das, was ich wollte: Taste drücken, sprechen, Text erscheint. Die Erkennung läuft lokal über faster-whisper, und eine GPU braucht es dafür ausdrücklich nicht. Auf meiner CPU war es trotzdem zu langsam, und beim Transkribieren war mir der Arbeitsspeicher weg. Lokal ist schön, aber nicht auf dieser Hardware.
whisrs ist der zweite, und der sah lange nach der Lösung aus. Es unterstützt mehrere Backends: Groq als Standard, Deepgram, OpenAI, dazu OpenAI-kompatible Realtime-Server und whisper.cpp lokal. OpenRouter steht nicht auf der Liste. Die OpenAI-Kompatibilität hilft mir dabei nicht, denn gemeint sind Realtime-Server, also Websockets. OpenRouters Transkription ist ein ganz normaler REST-Aufruf gegen /api/v1/audio/transcriptions. Zwei verschiedene Dinge, die nur ähnlich heißen.
Ganz neu ist Handy was durchaus interessant zu sein scheint. Aber erstens kam es zu spät und zweitens arbeitet es wieder nur mit lokalen Models.
Groq hätte funktioniert und hat sogar ein kostenloses Kontingent. Es wäre aber wieder ein neuer Account gewesen, und darum ging es mir ja gerade.
Dass OpenRouter bei keinem der Tools auftaucht, die ich mir angesehen habe, ist übrigens keine Nachlässigkeit der Entwickler. OpenRouter hat seine Audio-APIs erst am 1. Mai 2026 angekündigt. Als ich anfing, war die Schnittstelle rund drei Monate alt.
Also lieber selbst machen
Den Ausschlag gab, dass es einfach aussah. Ich habe Claude beschrieben, was ich will, und ein paar Minuten später lief ein Playground, in den ich diktieren konnte. Nicht perfekt, aber gut genug, um zu sehen, dass der Weg trägt.
Der zweite Grund ist persönlicher. Ich probiere solche Dinge gern selbst aus, weil ich danach verstehe, wie sie funktionieren. Bei einem fertigen Tool bleibt es bei der Bedienung. Wenn ich es selbst zusammenstecke, sehe ich auch, an welchen Stellen es klemmt.
Herausgekommen ist ein Shell-Skript an einer Tastenkombination: Aufnahme starten, dieselbe Taste stoppt sie, das Audio geht an OpenRouter, der Text landet im gerade fokussierten Fenster. Ob das ein Terminal ist, ein Editor oder ein Browser-Textfeld, ist dem Skript egal.
Der Kompromiss
Am liebsten hätte ich das komplett bei mir laufen. In meinem Homelab hoste ich fast alles selbst, und Tagebucheinträge gehören nicht zu den Daten, die ich gerne durch fremde Rechenzentren schicke.
Nur gibt meine Hardware kein brauchbares lokales Modell her, das hatte SoupaWhisper schon deutlich gezeigt. Es ist also ein bewusster Kompromiss und keine Grundsatzentscheidung. Sollte hier irgendwann eine passende GPU stehen, wandert die Erkennung nach Hause.
Was es kostet
In der ersten Woche 0,181 Dollar. Das ist die komplette Rechnung, Spracherkennung und die anschließende automatische Textkorrektur zusammen.
Inzwischen läuft die Korrektur über ein anderes Modell, das etwas teurer ist, insofern wird die Zahl steigen. Selbst ein Euro pro Woche wäre mir eine funktionierende Spracherkennung aber locker wert.
Wie es weiterging
„Sah einfach aus“ stimmte für den ersten Nachmittag. Danach kamen die Probleme, und die waren interessanter als der Aufbau: verschluckte Wortenden, die sich tagelang nicht reproduzieren ließen, Wartezeiten zwischen vier und siebzehn Sekunden ohne erkennbaren Zusammenhang zur Textlänge, und einmal ein Diktat, das vollständig durch einen chinesischen Satz ersetzt wurde.
Das ist aber ein eigener Artikel.