See it. Speak it. Save it.
A voice note that remembers what you were looking at, saved as plain files on your Mac.
$29, once · 14-day free trial
macOS 15 or later · Apple silicon
- Echo[0:00]
Okay, this is the pull request that's supposed to make search 40% faster.
- Echo[0:05]
Six lines of actual change.
- Echo[0:07]
And then scroll scroll scroll, 4000 lines of lock file.
- Echo[0:12]
So, the six lines are fine.
- Echo[0:15]
This one here is the whole fix.
- Echo[0:17]
It stops sorting the results before it filters them, which yes, good.
- Echo[0:21]
This block above it is a comment explaining the block below it, and the block below it is one line, so no.
- Echo[0:28]
And the title says 40% faster, and I can't find a benchmark anywhere in here.
- Echo[0:33]
So, approve the six lines, delete the comment, someone measure the 40% before it goes in the release notes, and the lock file is a separate conversation.
- Files you can open in Finder
- Nothing uploaded
- 100 languages, detected on your Mac
- Apple silicon, macOS 15 or later
Double-tap right Option. Talk. Double-tap again.
Go on. Double-tap your right ⌥, or click the keys.Tap the keys.
Hold Shift to record just an area.Everything on screen, and what you say about it.
Not recording.
A note, not a video.
Markdown, JSON, WAV, MP4, and captions, in a folder you choose. Every one of them opens without Spake. Record system audio too and the folder gains a second track and a speaker document.
- .generated.md
- audio.wav
- captions.mp4
- captions.vtt
- context.json
- frames
- metadata.json
- note.md
- recording.mp4
- transcripts
Search PR: six real lines, one unmeasured claim
[0:00]Okay, this is the pull request that's supposed to make search 40% faster.
[0:05]Six lines of actual change.
[0:07]And then scroll scroll scroll, 4000 lines of lock file.
[0:12]So, the six lines are fine.
[0:15]This one here is the whole fix.
[0:17]It stops sorting the results before it filters them, which yes, good.
[0:21]This block above it is a comment explaining the block below it, and the block below it is one line, so no.
[0:28]And the title says 40% faster, and I can't find a benchmark anywhere in here.
[0:33]So, approve the six lines, delete the comment, someone measure the 40% before it goes in the release notes, and the lock file is a separate conversation.
Spake reads the screen too.
What was on screen is kept as text, beside what you said. Search finds both, so "this one here" has a frame to point at.
Sampled frames, read by your Mac. Nothing is uploaded; there was never anywhere to upload it.
- Harbor - search-kit • Pull Request #218
- Conversation 5
- CHANGED FILES
- v src/search
- • ranking.ts
- • Lockfile
- • pnpm-lock.y...
- +2,206
- -1,794
- perf/search-ordering
- Files changed
- 2
- Commits 2
- Checks9
- +6 -3
- Make search 40% faster #218
- Filter the results before sortingithem, instead of after. Should be about 40% faster once a query matches more
- than a page of results.
- • Open
- dana.reyes wants to merge 2 commits into
- main
- from
- perf/search-ordering
- src/search/ranking.ts +6 -3
- @@-1,34+1,37 @@ src/search/ranking.ts
- 1
- import type { Result } from "./types";
- import { normalize } from "./text";
- const MIN_SCORE = 0.2;
- const MAX_RESULTS = 50;
- 7
- 8
- 9
- 10
- +/**
- +
- */
- * Returns the number of results one page is willing to show.
- function resultlimit(): number { return MAX_RESULTS; }
- 11
- 9
- 10
- 12
- 13
- export function rank (query: string, all: Result[]): Result[] {
- const scored =all.map((result)= score(query, result));
- 11
- 12
- 13
- 14
- 15
- }
- 16
- +2,212 -1,797 in
- 2 files
- const ordered = scored.sort((a, b) = b.score - a.score);
- const kept = ordered.filter((result) = result.score > MIN_SCORE) ;
- return kept.slice(0, MAX_RESULTS);
- 15
- const kept = scored.filter((result) = result.score > MIN_SCORE) ;
- 16
- const ordered = kept.sort((a, b) = b.score - a.score) ;
- 17
- return ordered.slice(0, resultlimit());
- 18
- 19
- All 9 checks passed
- Viewed Unified
- Review changes
- Merge
- THIS PULL REQUEST
- Files changed
- 2
- Lines changed
- 4,009
- Outside the lockfile
- Commits
- 2
- REVIEWERS
- JA jordan.avery
- Reviewing
- MK
- mina.kaur
- Approved
- RT
- rafa.torres
- Pending
- CONVERSATIONS
- K mina.kaur
- ranking.ts:15
- Right - filter first, then sort what
- survives. Did anyone measure the...
- • 2 replies • open
- 2h ago
- DR dana.reyes
- 45m ago
- pnpm-lock.yaml
- The lockfile came along with the
- dependency bump. Nothing in it is mi...
- • 1 reply • open
- TypeScript 5.9
- Ln 15, Col 9
- UTF-8
Recognized on this Mac. It may contain errors; so may the screen.
Who said what.
Turn on system audio (Settings → Recording) and whatever the other app is playing is kept beside your voice, as its own file with its own transcript. A 22 MB speaker model, downloaded once, sorts the turns by voice — on your Mac. Rename a speaker, hand a turn to the right one, or remember that voice for next time.
Up to 30 minutes per audio source. Wear headphones: Spake does not cancel echo, and your speakers are closer to your microphone than you think. When two people talk at once, or the model isn’t sure, the turn stays unassigned. Spake would rather say "Unknown" than guess. Labels are editable observations, not an accuracy guarantee.
- Samantha · System audio
Okay, release notes for 2.1. I'm writing bug fixes and performance improvements. And then we're going to lunch.
- Daniel · System audio
You can't. Undo was redo for three days. People noticed.
- Samantha · System audio
People noticed a lot of things. We're not listing all of them.
- Daniel · System audio
We're listing that one. Fixed an issue where undo performed redo.
- Samantha · System audio
Performed? Like it made a choice.
- Daniel · System audio
It was consistent. I'll give it that. Every single time.
- Samantha · System audio
Fine. Put it in. But you're signing it, because you reviewed that change.
- Daniel · System audio
I approved it. That's not the same as reading it.
- Samantha · System audio
It is exactly the same.
- Daniel · System audio
It's about ten seconds different. Okay? Anything else?
- Samantha · System audio
The thing where settings opens behind every other window.
- Daniel · System audio
Bug fixes and performance improvements.
Two synthesized voices (OpenAI text-to-speech) played as system audio, transcribed and labeled by Spake on one Mac; the microphone track is silence. The labels were then corrected by hand, the voices named, and the note titled.
2 speaker identities, every turn assigned — labels are editable.
Any of 100 languages.
Spake listens to the first 30 seconds and decides which one you spoke, on your Mac. Parakeet takes 25 of them, Whisper the other 75. On macOS 26 with Apple Intelligence, most come back with a title and labels in the language you recorded — Apple’s own locales directly, the rest through a translation model you download, which also stays on your Mac.
Parakeet’s 25 are one download; detection and Whisper’s other 75 add about 630 MB. Model coverage, not an accuracy guarantee. Cantonese titles stay in the transcript’s own words. One language and one engine per take. Menus follow your Mac’s language where a translation exists, or the one you pick in Settings; four interface languages ship today, more are on the way. Translated titles can need a further 1.9 GB model, downloaded only when a note needs it.
25 on Parakeet · the rest on Whisper
- Afrikaansaf
- shqipAlbaniansq
- አማርኛAmharicam
- العربيةArabicar
- հայերենArmenianhy
- অসমীয়াAssameseas
- azərbaycanAzerbaijaniaz
- বাংলাBanglabn
- башҡортBashkirba
- euskaraBasqueeu
- беларускаяBelarusianbe
- bosanskiBosnianbs
- brezhonegBretonbr
- българскиParakeetBulgarianbg
- မြန်မာBurmesemy
- 粵語Cantoneseyue
- catalàCatalanca
- 中文Chinesezh
- hrvatskiParakeetCroatianhr
- češtinaParakeetCzechcs
- danskParakeetDanishda
- NederlandsParakeetDutchnl
- EnglishParakeeten
- eestiParakeetEstonianet
- føroysktFaroesefo
- suomiParakeetFinnishfi
- françaisParakeetFrenchfr
- galegoGaliciangl
- ქართულიGeorgianka
- DeutschParakeetGermande
- ΕλληνικάParakeetGreekel
- ગુજરાતીGujaratigu
- Kreyòl AyisyenHaitian Creoleht
- Hausaha
- ʻŌlelo HawaiʻiHawaiianhaw
- עבריתHebrewhe
- हिन्दीHindihi
- magyarParakeetHungarianhu
- íslenskaIcelandicis
- IndonesiaIndonesianid
- italianoParakeetItalianit
- 日本語Japaneseja
- JawaJavanesejw
- ಕನ್ನಡKannadakn
- қазақ тіліKazakhkk
- ខ្មែរKhmerkm
- 한국어Koreanko
- ລາວLaolo
- Latinla
- latviešuParakeetLatvianlv
- lingálaLingalaln
- lietuviųParakeetLithuanianlt
- LëtzebuergeschLuxembourgishlb
- македонскиMacedonianmk
- Malagasymg
- MelayuMalayms
- മലയാളംMalayalamml
- MaltiParakeetMaltesemt
- Māorimi
- मराठीMarathimr
- монголMongolianmn
- नेपालीNepaline
- norskNorwegianno
- norsk nynorskNorwegian Nynorsknn
- occitanOccitanoc
- پښتوPashtops
- فارسیPersianfa
- polskiParakeetPolishpl
- portuguêsParakeetPortuguesept
- ਪੰਜਾਬੀPunjabipa
- românăParakeetRomanianro
- русскийParakeetRussianru
- संस्कृत भाषाSanskritsa
- српскиSerbiansr
- chiShonaShonasn
- سنڌيSindhisd
- සිංහලSinhalasi
- slovenčinaParakeetSlovaksk
- slovenščinaParakeetSloveniansl
- SoomaaliSomaliso
- españolParakeetSpanishes
- Basa SundaSundanesesu
- KiswahiliSwahilisw
- svenskaParakeetSwedishsv
- Tagalogtl
- тоҷикӣTajiktg
- தமிழ்Tamilta
- татарTatartt
- తెలుగుTelugute
- ไทยThaith
- བོད་སྐད་Tibetanbo
- TürkçeTurkishtr
- türkmen diliTurkmentk
- українськаParakeetUkrainianuk
- اردوUrduur
- o‘zbekUzbekuz
- Tiếng ViệtVietnamesevi
- CymraegWelshcy
- ייִדישYiddishyi
- Èdè YorùbáYorubayo
What Spake doesn’t do
No account.
Your license is a key. You paste it once. There is nothing to sign in to, so there is nothing to forget.
No cloud.
Recording, transcription, and search happen on your Mac. Once the models are downloaded, Wi-Fi is optional.
No subscription.
$29 once. Nothing expires, nothing renews. There is no other tier.
No lock-in.
Delete Spake and every note still opens: Markdown, WAV, MP4, in Finder. The app is the least permanent thing in the folder.
Point your agent at the folder.
Claude Code, Cursor, and Codex read the transcript and the frames as plain files. No plugin, no upload. There is nothing to integrate; it's a folder.
❯ ls -A .generated.md audio.wav captions.mp4 captions.vtt context.json frames/ metadata.json note.md recording.mp4 transcripts/ ❯ claude › Read note.md and the frames in this folder. Post my review on the PR, one comment per thing I complained about.
A command line, included.
Every build ships a spake command inside the app. Ask it for status, notes, recording, or automations, and it answers in JSON, because you were going to pipe it somewhere anyway.
When a new note finishes transcribing, Spake can hand that object to an executable you chose, on standard input. New rules start disabled until you enable them. A script runs with your account’s permissions and may use any service you choose; Spake’s own transcription stays on your Mac.
❯ spake --help | head -9Spake — spoken notes with screen contextspake statusspake notes list [--search TEXT] [--label LABEL] [--limit 100] [--offset 0]spake notes show NOTE_IDspake notes open NOTE_IDspake notes transcribe NOTE_IDspake recording start|stop|pause|resume❯ spake automations schema | jq '.example | {event, path, title, transcription}'{ "event": "note.ready", "path": "/Users/example/Documents/Spake/example-note", "title": "An idea worth developing", "transcription": "completed"}❯
Your script needs a shebang and the executable bit, and runs in the note’s folder. Spake does not read your script’s stdout — it might contain the note — so write a file instead. Up to 16 rules. Each run is held to 30 seconds, 1 minute, or 5 minutes — 1 to 300 seconds from the command line — and a payload over 1 MB is refused.
$29, once.
Pay once. Yours forever, updates included. There is no step two.
- Up to 3 Macs
- 14-day free trial
- 30-day refund
- Secure checkout
Payment is processed by Polar, which handles sales tax and appears on your receipt.
FAQ
Still stuck? Email support@spake.app and a person answers — the same one who wrote the app.
Does it work offline?
Yes. Once the models you use have downloaded, recording, transcription, search, and playback all work with no network. Nothing waits on a server; your notes never had one.
Which Macs?
Apple silicon Macs on macOS 15 or later. Title and label suggestions want macOS 26 with Apple Intelligence; nothing else does.
Where are my notes?
In a folder you pick, one directory per note: Markdown, JSON, WAV, MP4, and WebVTT. Move them, back them up, grep them, open them without Spake. They were never Spake's.
Can it tell who’s speaking?
It labels the turns and lets you correct every label, which is the honest version of yes. Record system audio beside the microphone and each source keeps its own transcript; a model on your Mac groups the turns by voice, and you rename, reassign, or merge the speakers. Up to 30 minutes per source. See Who said what, above.
What languages?
A hundred, detected on your Mac — the whole catalog, with the 25 that run on Parakeet marked, is in Any of 100 languages, above.
Does it link related notes?
The inspector suggests up to three, each with the line that explains the match. Matching runs on your Mac over your own library — shared terms, labels, identifiers, and Apple’s on-device sentence embeddings — with no network and no vector database. They are suggestions, not saved links.
Can I use it with Claude Code or Cursor?
Yes, and there is nothing to install. The note folder is plain files; run the agent in it, or point it at a note. Agents are very good at reading folders.
Can I script it?
Every build ships a spake command — status, notes, recording, automations — and the answer comes back as JSON. When a new note finishes transcribing, Spake can also run an executable you chose and hand it one JSON object on standard input; new rules start disabled until you enable them. See A command line, included, above.
Refunds?
30 days, no questions. A reason helps and is not required. Email support@spake.app.
Is any of this page fake?
The note in the fold is a real note and the folder is its real folder. The two voices in Who said what are synthesized, and it says so under them. The command-line output under "A command line, included" was captured from a built app. The rest is CSS.