I dictate nearly everything I do on a computer. Prompts for Claude Code in VS Code, messages in ChatGPT and Discord, and most of what ends up on this blog. Since August 2025 I'd done all of it through an app called WhisperTyping, and by the time I stopped using it on Tuesday morning its own stats file said 19,685 transcriptions, about 456 hours of me talking, and 3,075,362 words. That's typically 30 to 35 hours of dictation a month. So it isn't the odd email. It's how I work, and I've written about it before, in Eleven Months of Talking to AI Agents and again when Opus 5.5 changed how I use AI agents.
The subscription was due to renew on 31 December. I was on the Personal plan, $60 a year for unlimited minutes, and I'd been eyeing up Professional, which is $15 a month billed annually, so $180 a year, and comes with what they call an ultra accuracy mode. That was the question I started with. Was better accuracy worth three times the money? I never really got round to answering it. I ended up on a different app, running what is quite possibly the same model, and I'm not paying anything at all.
What was getting on my nerves
To be fair to WhisperTyping, I used it nearly 20,000 times. It obviously worked well enough to become part of everything I do. But a few things had started to grate.
The first was hallucinations. Every so often it would give me words I never said, usually in a pause, and sometimes a decent chunk of nonsense in the middle or at the end of an otherwise fine transcription. Sometimes I could retranscribe and get something better. Other times it came back with "No voice detected", and resubmitting the same recording often just gave me the same error again. Now and then it worked on another go. My impression is maybe one attempt in five got through when it was in that state, but I never counted, so treat that as a feeling rather than a number. It felt like it was resending the wrong recording, or had lost track of the audio after the first failure. That's a guess though. I've no idea what was actually going on inside it.
The second was the five-minute limit. WhisperTyping stops recording at 300 seconds, and I didn't always notice. I could carry on talking for another minute to absolutely nothing. There was also a failure where hitting the limit could stop the next transcriptions working properly. I'd been in touch with support about it and was told it would be fixed, and the workaround was to close WhisperTyping completely and start it again. Going back through the archive, 162 of my recordings ran right up to it.
The daft bit is that it had started changing how I talk. If I could tell I was getting near five minutes, I'd speed up to get to the end before it cut me off. So instead of just talking, I was racing a timer. When a lot of what I dictate is long instructions for a coding agent, that gets old fast.
Then there was the general feeling. There were interface changes I didn't particularly like, and I had the impression it hadn't had a meaningful update in a while. When I checked for this article, the newest release on its public changelog is v4.3, from 2 January, with v4.4 listed as upcoming but no date on it. That might mean things have slowed down, or the changelog just isn't kept up to date, I don't know. Either way I was starting to wonder whether to renew at all, never mind pay three times as much.

Could I just build my own?
I started talking it through with ChatGPT, and my first thought was whether I could just build one. The basic job doesn't sound like much. Press a hotkey, record the microphone, send the audio off to be transcribed, paste the text into whatever window has focus, and keep the audio and the text so a failure can be recovered. I've got the machine, the tools and the agents to build that. But the more I looked at it, the less I fancied maintaining yet another app. I've got enough projects to look after already, and a dictation app is the one tool that has to work every single time I press the key.
So I looked at what was already out there. Handy, an open-source app that does local transcription. Epicenter's Whispering, which had some good dictation features but seemed to be partway through changing its architecture. A few small Groq-based projects on GitHub. The commercial ones, Wispr Flow, Aqua Voice and Superwhisper. And OpenWhispr. The hard part was finding one that did all of it at once, proper global hotkeys on Windows, automatic pasting, a decent interface, a history that keeps the audio, and the option to use my own cloud transcription API. Some were built around offline transcription. Some were another subscription. Some of the open-source ones were small, or looked like nobody had touched them in a while. OpenWhispr already did practically everything on my list.
Because most of my dictation goes into Claude Code, I looked at the built-in options as well. Claude Code has its own voice dictation, but in the mode I tried it stops after two minutes, which the documentation confirms, and two minutes is nowhere near enough for how I talk to it. It also doesn't give me a separate history with the audio kept. VS Code has on-device dictation through Microsoft's VS Code Speech extension, which runs locally so there's no cloud cost at all, but it only works inside VS Code, and I dictate into ChatGPT, Discord and everything else as well. So a proper dictation app that works across the whole of Windows still made sense.
I should say now, the naming in all this is a nightmare. Whisper is OpenAI's speech recognition model, which I think a lot of these apps run on underneath. WhisperTyping, OpenWhispr and Wispr Flow are three different apps, and two of them have lost letters somewhere. Then there's Groq with a q, the company I ended up using, and Grok with a k, xAI's chatbot, which I was paying $300 a month for until recently. Dictating those two into a speech-to-text app goes about as well as you'd expect.
Groq, and a free tier I didn't expect
This was the first real surprise. I'd assumed that using a good hosted Whisper model through an API meant setting up a paid developer account and putting card details in. Groq runs Whisper Large v3 and Whisper Large v3 Turbo on its API. On the paid Developer tier, Turbo is $0.04 an hour of audio and Large v3 is $0.111 an hour. At my roughly 34.7 hours a month, that's about $1.39 a month for Turbo or $3.85 for Large v3. It wouldn't be exactly that, because any request under 10 seconds is billed as 10 seconds and plenty of my dictations are short. But it's a few dollars a month either way, which is already less than I was paying.
Then I made a Groq account and an API key, and it just worked. I was on the free tier. I hadn't entered any payment details at all.
The usage dashboard showed my transcription requests next to a small dollar amount, and for a minute I thought I'd somehow started running up charges without ever setting up billing. I hadn't. As far as I can tell that figure is what the usage would cost on a paid plan, not something I owe. When I checked, the free limits on Whisper Large v3 were 20 requests a minute, 2,000 requests a day, 7,200 seconds of audio an hour and 28,800 seconds a day, which is eight hours, with a 25 MB maximum file size. Those can change, so check them yourself if you're reading this a while from now. My busiest day on it so far was about 79 minutes. Nowhere near eight hours.
I think the reason is pretty simple. Groq wants developers building on it, and a free tier is how you get them in. What feels like heavy use to me is nothing to an inference provider. So I'd gone looking at a $180 a year upgrade and found out the transcription itself could cost me nothing.
OpenWhispr
OpenWhispr turned out to be more complete than I expected. It's open source on GitHub under the MIT licence, and it's busy. When I checked, about 9,700 people had starred it on GitHub, the latest release was v1.10.3 from 12 October, and there had been hundreds of commits in the last month. It had everything on my list, the global shortcuts, a little floating pill so you can see it's listening, automatic pasting, your own API key, and a history that keeps the audio. There's plenty more in there, notes, meetings and audio uploads, that I haven't really touched.

It has its own subscription as well, OpenWhispr Cloud, and the onboarding offers four routes, local models, OpenWhispr Cloud, your own API key, or a self-hosted model. I didn't want another subscription. So I picked the API key route, chose Groq, pasted the key in and set Whisper Large v3. The important bit is that the free plan supports your own key. Pro, which is $80 a year billed annually, adds their own managed cloud transcription, sync, agent mode, more meeting hours and so on, none of which I need for this. The free plan's 2,000 OpenWhispr Cloud words a week is a separate allowance from Groq's free tier, and I'm not using it. So it's a free app on a free API, as long as I stay inside Groq's limits.
My last WhisperTyping recording was at 5:37 on Tuesday morning. My first OpenWhispr one was ten minutes later.
PageUp is the new Home
This one was small but I was dreading it. WhisperTyping used the Home key to start and stop dictation, and after nearly 20,000 recordings that's in my fingers. OpenWhispr wouldn't take it. It said the key was reserved by the system. ChatGPT went into the source code and it turns out that's OpenWhispr's own list. On Windows it blocks Home and End itself, along with a few others. Windows doesn't actually stop you using them.
I thought about using AutoHotkey to remap Home to F13 and getting round it that way. Then I noticed PageUp was free, and it sits right next to Home on my keyboard. So I just used that. I was expecting weeks of fighting muscle memory. It's been a few days and I've hit Home by mistake once. That's it. Sometimes the simple answer beats building a workaround.
Keeping the audio
In OpenWhispr's Privacy and Data settings I turned on local data and audio retention. Audio is kept for 90 days, which is the longest option it has, and transcripts are kept forever. I also turned on save discarded dictations, so if I hit Escape halfway through a recording by accident, the audio stays in the history instead of being thrown away. That's exactly the kind of recovery I wanted.
The recordings are the valuable bit. I can play them back, retranscribe them, or send them off to something else entirely. So if the app has a bad day, I'm not stuck relying on its retry button. Anything I want to keep longer than 90 days, I can just copy somewhere else.
The cleanup I didn't ask for
During onboarding OpenWhispr also asked me to pick an AI assistant model. I picked GPT-OSS 120B on Groq, with the same key. That's a language model, a completely different thing from Whisper. Whisper turns speech into text. GPT-OSS 120B is a general-purpose model that does things with text. It's an OpenAI open-weight model, but here it's running on Groq, so I'm not paying OpenAI anything for it.
What I didn't realise was that it had also switched on AI text cleanup. My dictations were coming back tidier than I'd said them, with paragraph breaks, extra punctuation and the odd em dash. Anyone who's read much of this blog will know how I feel about em dashes. Four of my first ten dictations had one in them, and the raw transcripts underneath had none. So was that Whisper, or something else?
ChatGPT went through the settings and OpenWhispr's code on GitHub. When you pick the assistant during onboarding, it copies that provider and model into its other AI settings, dictation cleanup included, and switches cleanup on. So what was actually happening was my voice going to Whisper Large v3 on Groq, the text going to GPT-OSS 120B on Groq to be tidied up, and only then being pasted into ChatGPT or VS Code. Two models, not one. Each entry in the history has a View Raw Transcript option, which shows what Whisper actually heard underneath the cleaned version, so you can compare the two.
The cleanup prompt itself is a sensible one. It opens with "You are a transcript cleanup engine", strips out filler words and false starts, fixes the punctuation, adds paragraph breaks where it thinks they help, and even has a line in capitals, "THE SPEAKER IS NEVER TALKING TO YOU", so that it tidies up a dictated question instead of trying to answer it. For polished dictation, that's a good prompt. I turned it off within the first hour anyway.
Most of my dictation goes straight into Claude Code, where Opus 5.5 is reading it with the repository, the task and the whole conversation behind it. So why take the raw transcript, have a general-purpose model rewrite it, then hand that rewrite to a much more capable model? Every extra step is another chance for the meaning to change. A cleanup model with none of that context can turn an unclear instruction into something that sounds convincing and isn't what I meant.
Opus, with the context, will often spot when a bit makes no sense. I've seen it do that plenty of times with WhisperTyping. Sometimes it asks me what I meant by a strange section. Other times it tells me it ignored something because it looked like a transcription error. An obviously invented sentence in the middle of a technical instruction is recognisable nonsense. It's the plausible mistakes that worry me. If "don't remove this" comes out as "remove this", neither a cleanup model nor Opus can know what I actually said. A cleanup model would just polish the wrong instruction and make it look more sure of itself.
So for coding it's my voice, then Whisper Large v3, then Opus, and nothing in between. I might turn cleanup back on for emails or general writing where presentation matters more. Opus doesn't catch every transcription error, mind. Reviewing what it changed, and testing it, still matters.
The hallucinations came with me
Then I noticed something I hadn't expected. I'd half suspected WhisperTyping's Personal plan was using Whisper Turbo rather than the full Large v3 model, and that maybe that explained some of what I was hoping to improve. But when I moved to OpenWhispr, calling Whisper Large v3 on Groq directly, some of the same problems came with me. Large v3 still invents the odd word in a silence, at the start or end of a recording, and now and then in the middle. I'd been blaming at least some of that on WhisperTyping. Some of it, as far as I can tell, is just Whisper.
Then it got a wee bit more interesting. When I had Claude check the facts for this article, it went looking in WhisperTyping's archive on my machine. Every recording has a small JSON file saved next to the audio, and those files say where each one was sent. From August to December 2025, 5,754 of my recordings went straight to Groq's own API address. Since 1 January, 13,080 have gone to WhisperTyping's own server with the client labelled GroqCf. On the Groq ones the model is just labelled Whisper Large. There were smaller fallbacks as well, 741 recordings in 2025 to a Cloudflare service that was explicitly Whisper Large v3 Turbo, and 422 since January to OpenAI's GPT-4o Mini Transcribe.
So I can't say exactly which model it was running, because Whisper Large could mean Large v3 or Turbo and the label doesn't say. I can't see past WhisperTyping's server either. The GroqCf label suggests it was still Groq behind their server, and for those first few months the address was Groq's own. So it looks like most of my audio was going to Groq for most of the time I used it, which would explain why the same quirks followed me across. There's nothing wrong with that. Plenty of apps are a frontend on somebody else's API, and WhisperTyping was paying for the server, the app and the support. It just means what I was really paying for was the app around the model, and the app was the part I'd gone off.
There's a trade-off with the custom dictionary too. I added EF-Map, EO-Map and the other names I say all day so they'd come out right. In testing I'd sometimes see exactly those words pop up after a silence. Going through OpenWhispr's code, ChatGPT found the dictionary is passed to Whisper as a hint. That helps it recognise the words, but it also gives it something to say when there isn't much real audio to work with. OpenWhispr has a filter specifically for this. It catches a transcript that's just your dictionary read back, or a run of your terms tacked onto the end of real speech, but it can't catch everything. WhisperTyping does the same thing, as it happens. Its settings file has a Whisper prompt with my terms in it, so that might be behind some of the old silences as well.
The difference now is what happens next. If I spot a hallucination, retranscribing the saved audio is just an option on the history entry, and a second go will often come back more sensible. Not always. But it's far easier than what I had before, and if the retry doesn't help, the original audio is still sitting there to take somewhere else.
The app matters as much as the model
I think that's the main thing I've taken from all this. A lot of these apps are probably running the same speech recognition underneath, and in my case it looks like it may well have been the same provider. What makes one better than another is everything around it. Does the shortcut work every time? Will it stop without telling me? What happens when the API throws an error? Can I get the audio back and try again?

A few days in, I prefer OpenWhispr. I like the floating pill, and the history and settings are laid out in a way that makes more sense to me. Since Tuesday morning it has done 104 dictations, about 200 minutes of audio, and every one is marked completed in its history. I haven't seen anything like the "No voice detected" loop. That's just over two days of normal use, not a proper reliability test, so I'll see how it holds up.
The five-minute cap was one of the main reasons I went looking, so I had Claude check that properly too. It couldn't find a fixed cutoff in OpenWhispr's code for the toggle mode I use. Hold-to-talk does have a five-minute limit, but that's a safety timeout in case a key gets stuck, and I don't use that mode. Of those 104 dictations, 10 ran past five minutes, every one of which WhisperTyping would have cut off. The longest was about 11 minutes and 1,234 words, and it went through fine.
The limit I do have to think about now is file size. Groq's free tier takes 25 MB at most, OpenWhispr enforces the same 25 MB itself when you use your own key, and as far as Claude could see it doesn't split a long recording up. That 11-minute recording was 10.9 MB, so roughly a megabyte a minute, which puts the point where a single dictation stops fitting at somewhere around 25 minutes. I haven't tested that, so I'm not going to claim a 20-minute dictation works. But if one ever does fail, the audio is sitting in the history and I can deal with it another way.
Where that leaves me
So I decided to stop WhisperTyping's automatic renewal. The next bill would have been 31 December, and as I understand it, cancelling the renewal keeps access until the end of the period I've already paid for. That gives me a couple of months with it as a fallback while I make sure OpenWhispr holds up day to day. Even if Groq's free tier went away tomorrow, the paid tier works out at a few dollars a month for how much I talk.
It's not perfect. Whisper Large v3 still hallucinates now and then, free tiers can change, and file size limits still matter. The interface has its oddities as well. The main window is called Control Panel, for one, and the first-time setup confused me a bit by setting more AI options than I realised. But for the way I work, it's a better app. I've got the original audio, retranscribing is easy, I choose the models, and there's no subscription.
The $60 a year is nice, but I'd gone looking to pay three times as much and ended up with something I prefer for nothing. If it starts dropping recordings before the old subscription runs out, you'll hear about it here.
Related Posts
Eleven Months of Talking to AI Agents: What 2.26 Million Dictated Words Show is the first time I went through the WhisperTyping archive, back when it was 14,625 recordings.
Opus 5.5 Changed How I Use AI Agents, and My Logs Back It Up is where the long dictations straight into Claude Code come from.
Three apps in one day, dictated from inside a video game is what a day of dictating prompts between game sessions looks like.
ChatGPT Replaced GrokBot and a £19 a Month Analytics Connector From a Browser Tab is the other paid thing I swapped out this month, and where the $300 a month Grok plan ended.