Yohoho.
Free dictation, on your own computer.
Independent project · Product design & engineering · 2026Press a shortcut, speak, and Yohoho pastes the text into the app you’re writing in. Speech recognition runs on the computer, with a choice of models.
What makes dictation dependable in another app?
Speaking long prompts was easier than typing them. The first Windows experiment built on a patched open-source WhisperWriter. From that foundation, I developed a portable Python tool and a native Mac interface, adding model choices, recording feedback, and transcript recovery.
Colleagues wanted it on their computers, but terminal setup was a barrier. A free Mac app made it easier to get started. The harder part was making dictation dependable while someone worked elsewhere: showing that it was listening, leaving their cursor alone, and keeping the words when delivery failed.
Learn more about the first versionProject details
- My role
- Product design, prototyping, and AI-assisted engineering
- Built with
- SwiftUI, AppKit, Python, ONNX, and MLX
- Build documented here
- Native 1.0.3 · September 2026
Speech recognition runs locally. Model downloads and update checks use the network.
The indicator must not become the destination.
A ring and chime confirm that recording has started. But showing that feedback must not move keyboard focus away from the app where the words should land.
Placing the indicator beside the text cursor proved unreliable across terminals and editors. A separate panel gave feedback a stable home. It does not activate or intercept clicks, so the writing app keeps keyboard focus.
That window constraint reached into the animation code: the native panel needed an explicit timer to keep the ring moving. Cancellation also had to reject late results, even if transcription was still running.
Keeping the text when pasting fails.
A finished dictation could miss its destination when the cursor was in the wrong place. History keeps the transcript available to copy, edit, or paste again without repeating it.


The last five transcripts are one click away in the menu bar. History keeps the longer record for searching and editing. The original transcription stays available, and an edit becomes the current text. Copying a result does not rerun recognition or create another History entry.
Saving runs separately from pasting, so storage cannot hold up delivery. A transcription failure can retry retained audio; a missed paste can recover completed text.
Why I kept three speech models.

A model can recognize speech accurately and still make dictation feel slow. Testing narrowed the offering to three: an English default, broader language coverage, and an English option I preferred for filler handling.
| Model | What it offers | Model files |
|---|---|---|
| Parakeet V2Default | English dictation with the smallest download. | 661 MB |
| Parakeet V3 | Upstream support for 25 European languages. | 670 MB |
| Cohere Small | My preference for filler handling in English. | 1.51 GB |
Parakeet V2 had the fewest errors in a small English comparison. A separate latency check ruled out Unified: it took about 14 seconds after a 9.5-second recording. Each extra option needed a useful difference, not just a place in the dropdown.
Learn more: measurements and tradeoffsThe menu bar could not hold the whole app.
Recent transcripts need quick access. Model downloads, recording controls, and appearance need room to be understood. Putting all of them in one menu made both jobs harder.

Demo
Open demoInteractive demo. Downloads, permissions, and dictation are simulated.
The menu now holds recent transcripts and quick actions. A dedicated window gives configuration and History their own space. Settings controls are reused in first-run setup, so their descriptions and behavior stay consistent.
The AI-assisted native build still needed checking against that intent. One preview was smaller than the indicator it was meant to represent. I caught the mismatch and directed a correction to the preview, preserving the working recording panel.
What changed in daily use.
With the chime and History, I stopped worrying as much about whether it was listening or where the text had gone. That is the clearest change in my own use.
Colleagues differed in where dictation fit. Some used it with other people around; others preferred home or a private setting. Removing terminal setup made the app easier to approach, but it did not make speaking aloud comfortable everywhere.
Those are informal observations, not a retention study. They leave a useful question for the next version: when is speaking preferable to typing, and when does the setting get in the way?
What is still open
I want more people to have access to it. A collaborator is helping with Windows. Native source publication, richer context, and a simpler prepared-update experience are still ahead.
Project history.
An unreliable text-cursor position led to a separate indicator. That panel had to preserve focus, and cancelled work had to stay cancelled.
June to September 2026
- 01The text cursor was unreliable.Learn more
Feedback needed a stable place outside the text field.
- 02Give feedback its own panel.Learn more
A separate panel must leave typing in the writing app.
- 03Preserve the destination’s focus.Learn more
An active destination also needs protection from late results.
- 04Discard cancelled results.Learn more

