Why VoxBase runs locally and on its own
In VoxBase, iCloud is not the brain of the system.
It works as a courier.
iPhone › iCloud carries the recording › the Mac processes it locally › Markdown goes back to iCloud
The transcription itself is done by my Mac:
- Silero VAD finds speech
- ffmpeg prepares the audio
- whisper-cli runs the large-v3 model
- the Metal GPU speeds up processing
- no external transcription API is needed
No paying by the minute. No request limits. No need to send a conversation to a third-party service.
But being local solves nothing by itself if every file has to be started by hand.
So VoxBase runs through launchd, the macOS system scheduler.
The worker configuration has simple logic:
<key>StartInterval</key>
<integer>60</integer>
This means that about once a minute macOS starts a check for new recordings.
The worker looks at:
- whether the file has fully downloaded from iCloud
- whether its size has stopped changing
- whether it has been processed before
- whether another instance is already running
- whether transcription can safely start
If everything is ready, the pipeline starts.
If not, the file simply waits for the next check.
I separately tested scenarios with interruptions:
iPhone without internet › Wi-Fi appears › the recording syncs › VoxBase makes a transcript
And another variant:
worker stopped › recordings pile up › worker starts › the queue is processed
So the system doesn’t require a perfect moment when the iPhone, the internet and the Mac are all available at once. It carries on when conditions become normal again.
Another important decision came after problems with CloudKit.
At first some working files were also in iCloud. But chunks, temporary audio, logs and constantly changing state began to bloat the local cloud cache.
After that the architecture became stricter.
In iCloud:
- finished Markdown transcripts
- metadata
- permanent copies of originals
Locally on the Mac:
- temporary processing
- chunks
- logs
- state
- errors
- locks and cache
The rule turned out simple:
iCloud should store artifacts, not the insides of a running machine.
A separate agent deletes temporary enhanced audio files at night. Originals are never deleted.
In the end the roles are separated:
iCloud carries › launchd watches › the Mac processes › Markdown keeps the result
VoxBase runs on its own not because there’s a lot of AI in it.
But because ordinary system details are assembled into a stable cycle: check, process, save, don’t repeat, and clean up what’s temporary.
In the next post I’ll talk about the next layer: how the system can determine not only what was said, but where exactly I’m the one speaking.
