Home / Free tools / Lark

Lark, dictation that also transcribes your meetings.

A macOS app that types what you say, and records your calls into speaker-separated transcripts. Everything runs on your own machine. This is the build I use every day, published because it works rather than because it is a product.

Why it exists

I dictate a lot, and I wanted meeting notes without handing my calls to someone else's server. Granola does the meeting half beautifully and it is a subscription that uploads your audio. Handy does the dictation half beautifully, is open source, and runs entirely offline.

So rather than pay for one and run the other, I put the meeting recorder inside the dictation app. One menu bar icon, one local model, no account. Handy describes itself as trying to be the most forkable speech-to-text app rather than the best one. This is that claim being taken up.

What it does

Dictation. Tap a hotkey, talk, tap again. The audio is transcribed locally on Parakeet V3 and pasted into whatever field you were in. The model is about 640 MB and it lives on your disk.

Meetings. Start a recording and Lark captures two separate tracks: your microphone, and the other side of the call through a macOS system audio tap. It never joins the call. When you stop, each track is segmented, transcribed and interleaved into one timestamped Markdown file. The first real call it recorded was 81 minutes long and came out as a 42 KB transcript.

Meeting detection. Lark checks which processes are holding the microphone every two seconds. When a meeting app takes it, a card offers to record. When the app lets go, the card offers to stop, and stops on its own after twenty seconds if you have already walked away from the desk. It never starts or stops without being asked first.

The interesting engineering is not the transcription. That part is a solved problem you can download. It is everything that goes wrong between a Bluetooth headset and a working audio stream.

The part that took the real work

Recording audio on a Mac looks easy until you use AirPods. A Bluetooth microphone can hand you one to three seconds of digital silence at the start of a recording, and sometimes never recovers at all. The original behaviour was to play the start chime anyway, so you would speak your first sentence into nothing and find out later.

Lark plays the chime only once real audio energy arrives, restarts a silent stream at 2.5 seconds, and alerts you only if the retry is also silent. There is a matching problem on the other side: a broken stream can produce 523 seconds of samples inside a 310 second recording, which slides the whole transcript out of sync with the other track. That track is now normalised to wall clock length.

None of that is glamorous and all of it is the difference between a demo and something you trust with a client call.

Get it

The source is public and MIT licensed. There is no download, because a build signed with my own certificate would not open on your machine anyway.

git clone https://github.com/bkoleo/lark.git
cd lark
bun install
CMAKE_POLICY_VERSION_MINIMUM=3.5 bun run tauri build

Change signingIdentity in src-tauri/tauri.conf.json before you build. It currently names a self-signed certificate in my keychain, which yours will not have, so a clean clone fails until you point it at your own or set it to ad hoc. The README explains why a real certificate is worth the two minutes: macOS ties Accessibility and Microphone permissions to the signature, so ad hoc signing means re-granting them by hand after every rebuild.

What it is not

Meeting mode was built as a spike and has been in daily use since, which is a different thing from being hardened. The two track pipeline is solid. The edges around switching audio devices halfway through a call are less so.

It needs macOS 14.2 or later on Apple silicon, because the system audio capture uses Core Audio process taps that do not exist before that. And the transcript still labels you as "Kole", because it is hardcoded and has not been made a setting yet. That is exactly the kind of thing a fork is for.

Not affiliated with Handy, not supported, and not something I am taking feature requests on. Fork it and make it yours.

Get the source Have something like this built

No email, no signup. Credit for the transcription engine and the app it grew out of goes to CJ Pais.