Sonocles so-NOK-leez GitHub →
Free · Open source · MIT

Words, while you're
still saying them.

Sonocles listens to your Mac's microphone and streams what you say — word by word, about 180 milliseconds behind you.

Everything runs on the Neural Engine. Nothing leaves the machine.

Download for Mac Source on GitHub Apple Silicon · macOS 14+ · free
Illustration: a cheerful bearded philosopher speaking, sound arcs sweeping from his mouth to a delighted scribe who is keeping up easily.
The whole product, basically. One person talks. Something else keeps up. The difficult part is the second half.
partiallag 120msthe
partiallag 180msthe menu
partiallag 200msthe menu bar
partiallag 200msthe menu bar app
partiallag 140msthe menu bar app is

Real frames. One word each, roughly every 200 ms.

Why it exists

It started as crackly audio.

The speech-follow built into the teleprompter was fighting the encoder for CPU. The prompter kept up. The audio did not.

OBS wants every core it can get. So does a software encoder. Adding speech recognition to that same scrap meant dropped samples — and dropped samples on a take you cannot re-shoot are not a performance problem, they are a lost afternoon.

The Neural Engine, meanwhile, was sitting there doing absolutely nothing. It is a separate piece of silicon that no encoder is competing for. Moving the listening onto it did not make it faster so much as make it free: it stopped taking anything the recording needed.

Illustration: two figures crammed at one small desk, elbows colliding, the scribe's stylus skidding off his tablet, while an identical empty desk sits beside them.
Two craftsmen, one desk, and a perfectly good second desk. Nobody is doing anything wrong. That is what makes it so annoying.

The distinction

It is not a dictation app.

Dictation hands you a sentence once you have finished saying it. Perfectly good, when you are writing and nothing downstream is waiting. Useless when something is: a teleprompter that has to keep your pace, a cue that has to fire on a word, an editor that needs to know when you said it rather than when the transcript turned up.

DictationSonocles
Gives you textwhen you stop talkingwhile you are still talking
Aims ata text fielda socket
Latency that mattersnone, reallyall of it
You arewritingperforming

If dictation is what you want, use Sonari. It is genuinely good, it runs locally too, and it is made by a friend. We compared notes and concluded the use cases diverge: Sonari is built around the moment you stop speaking. This one is built around the moment you have not.

The measurement

Word by word, not
sentence by sentence.

One instrument, one sentence, one microphone. Apple's own Speech framework delivers that sentence in four bursts, 3.7 seconds apart. We ship the comparison so you can re-run it instead of believing us.

EngineArrival gapBehind liveWords per arrival
Apple SpeechAnalyzer3747 ms0 ms, four times8.8
Parakeet 320 ms302 ms540 ms2.3
Parakeet 160 ms206 ms180 ms1.5
# the baseline is one flag away
make baseline

What it is for

Driving a prompter, mostly.

That is the honest answer. It exists because Pteroprompter needed it, and that is still what it is tuned for. But nothing about it is prompter-shaped — it streams words and timestamps at a socket, and what listens is your business.

Illustration: a Greek amphitheatre seen from above as concentric rings radiating from one tiny figure on the central stage, reading equally as a sound wave.
An amphitheatre, from above. Concentric rings around one small figure — which is also, exactly, how you draw a voice leaving a mouth. The building is a diagram of what it is for. We took the coincidence and made it the logo.

What it does

Five things worth knowing.

It knows when you said it

Every frame carries the audio time it describes, not just the time it arrived. Arrival time drifts with the delivery schedule; audio time does not. That is the difference between a marker you can cut on and one you have to nudge.

It does not want your CPU

The models run on the Neural Engine, which your encoder is not competing for. Not a benchmark boast — it is the entire reason the thing was written. Recognition that costs you cores costs you takes.

It does not make things up

Thirty seconds of piano at -9 dBFS produced zero words. A transducer emits tokens as acoustic evidence arrives, so with no speech there is nothing to emit. Models that hallucinate over music are a genuine hazard when the output drives a scroll.

Nothing leaves your Mac

Models download once and run on device. The sockets bind to loopback only. There is no account, no key and no server — not as a policy, but because none was ever built.

Anything can drive it

SSE and WebSocket, both live at once. An HTTP control API to start and stop it, behind Basic auth if you want. And a CLI that reports its own latency, because the numbers up there should be yours to check.

Using it

Point something at a socket.

// both transports carry identical JSON, both live at once
const es = new EventSource('http://127.0.0.1:7357/events')
const ws = new WebSocket('ws://127.0.0.1:7358')
{ "type": "partial", "text": "the menu bar",
  "audioStart": 40.28, "audioEnd": 40.8,
  "lagMs": 200, "seq": 3 }

Use audioEnd, not ts. A missing lagMs means unmeasured — never zero. We are quite firm about this.

The name

Renowned for sound.

κλέος

The -cles in Sophocles and Pericles is the Greek -κλῆς, from kleos: renown. It comes down from a root meaning to hear — the same one that gives English the word loud. In Homer it is specifically the fame that survives because bards sing it and people hear it.

So the suffix does not merely mean famous. It means heard of. We would love to claim that was the plan.

Sono- is Latin, mind you. So the name is a seam between two languages, which is not scholarship so much as an accident we have decided to be pleased about. So is television. Nobody minds.

Illustration: a round friendly bearded figure cupping an enormous ear, eyes squeezed shut in theatrical concentration, sound arcs arriving at his hand.
Heard of.

Anyway

Here is a Greek man
with a podcast.

He has been talking for some time. The small winged one has kept up with every word, roughly 180 milliseconds behind, and has not once had to ask him to repeat himself.

Illustration: a relaxed bearded figure reclining with a wine cup, talking into a retro broadcast microphone, while a small winged figure behind him takes notes with intense concentration.
Nobody in this picture finds any of it unusual. Which is, in fairness, the goal.