Skip to main content

Ready to get started?

Book a call

PJ

Varve

  • Nov 2026
  • Product Therapy
  • Proof of Concept
The Varve window: three recordings in order in the sidebar, Ana, Robin and Theo in the People list, and the transcript playing with the spoken word highlighted.
Varve lines up a session’s recordings, names each person once and plays the transcript back word by word.

Overview

Varve turns a recorded conversation into a transcript you can use. You drop in the files from every recorder in the room, and Varve lines them up in the order they were recorded and transcribes them. It names each person once, even when that person appears in several files. Everything runs on the Mac, so the recordings never leave it.

We built it in a day as a proof of concept. It had to answer one question: can a voice be recognised as the same person across separate recordings, with all of the work done on the Mac? It answered yes on a real recorded session.

Platform
macOS
Stack
Swift, SwiftUI, FluidAudio
Timeline
November 2026

Recordings in order

A conversation is rarely one file. A lapel-mic kit and a phone each hold part of it, and every file starts its speakers over. Varve reads the time stamp that most recorders write into a file name, so dropped files line up in the order they were recorded. A file with no stamp falls back to its creation date, and you can always drag files into a different order.

Each file can be transcribed on its own, or all of them can be queued to run one after another. Finished transcripts are kept on disk, so reopening a session never redoes the speech work.

An empty sidebar that reads “Drop recordings here” above a Choose Files button.
A new project starts empty and asks for the session’s recordings.
Three recordings listed by time of day, each marked not transcribed with its own Transcribe button.
Dropped files line up in the order they were recorded.
The same list mid-run: the first recording done, the second finding speakers and the third queued.
Files transcribe one at a time while the rest wait their turn.
The end of the first recording’s transcript running into the second recording’s heading and its first turns.
The recordings read as one transcript, each under its own heading.

Transcribed on the Mac

Transcription and speaker separation both run on the Mac’s Neural Engine through FluidAudio, so the recordings never leave it.

For speakers, we chose FluidAudio’s offline diarizer over its Sortformer model. The offline diarizer puts no cap on the number of voices and returns a voiceprint for each one, and naming people across files depends on those voiceprints. Each word then goes to the speaker whose stretch of audio it overlaps most.

Short interjections can still be absorbed into the surrounding speaker’s turn. We wrote that gap down and chose to tune the diarizer before replacing it. The editing tools move a stray word by hand.

A terminal running varve-cli on a folder of recordings, printing each stage for the first file.
The same pipeline runs from the command line, which made it quick to test.
The People list straight after transcription, with placeholder speakers each matched to a voice in every file.
Each voice is separated and matched across files before anyone is named.
The first recording’s transcript, each turn with its start time, a play button and the speaker’s name in their colour.
Every turn carries the name of the voice that spoke it.

One name per person

Speakers are separated within each file. Varve then matches them across files by voice, so each person is named only once. The matching never joins two voices from the same file, since those have already been told apart. Adding a new file fits its speakers into the people already named without disturbing them.

We tuned the match on a real session, where the same person’s voice scored far closer than any two different people, and set the threshold in that gap. When a match is wrong, a menu moves a voice to someone else by hand. Voices you choose to remember are named automatically in the next session, and each person has a play button for their longest stretch of speech.

The People list with Ana, Robin and Theo, each with talk time and their voice in each file.
Each person is named once and carries that name through every recording.
A voice’s menu open under Ana, offering Same person as Robin, Same person as Theo and Someone else.
A voice can be moved to someone else when the match is wrong.
The foot of the People list with the Remember Voices button.
Remember Voices keeps the named voices for later sessions.
A later session’s People list, where Robin, Theo and Ana each carry the recognised badge.
In the next session, remembered voices are named without being asked.

Cleaning up the transcript

Selected words can be played, split into their own segment, given to another person, corrected or deleted. A corrected word keeps its place in the audio, because new words share out the time of the words they replace. The first version gathered these actions in a shortcut strip and a pencil that appeared on hover. A menu on the words themselves replaced both.

Dragging words into the neighbouring segment moves the boundary between speakers. Playback is one transport for the whole session. It carries on into the next recording and keeps the spoken word highlighted and in view.

A selection that runs across a line break, with the word menu open on Assign To and the names Ana, Robin and Theo.
A menu on the words themselves replaced the shortcut strip and the pencil.
A segment open for correcting, with the hint “Return splits at the cursor · Esc when done”.
Corrected words keep their place in the audio.
The transcript during playback: the current segment’s button shows pause, the spoken word is highlighted and the words still to come are grey.
During playback the spoken word leads the highlight and the segment stays in view.

Projects and export

A session saves as a single Varve file that remembers each recording relative to itself, so a folder moved as a whole keeps working. The transcripts are saved inside the file, so a project opens even without its audio. If recordings go missing, locating one finds the others in the same folder, and Varve checks each file’s length before linking it.

The finished transcript previews and exports as plain text or Markdown.

The sidebar with two recordings marked “Not found — Locate…”.
A moved recording can be found again, and its neighbours follow.
The export preview set to Markdown, showing the title, the speakers and a recording heading.
The transcript exports as Markdown for notes and documents.
The export preview set to plain text, with time, name and words in columns and long turns wrapped beneath themselves.
Plain text sets time, name and words in columns that wrap beneath themselves.

The name

The name comes from geology. A varve is a layer of sediment laid down in a lake over a year. The icon draws on it: a waveform whose bars are cut into bands of cream, ochre, rust and sage, like layers of sediment.

The Varve app icon: a waveform on a dark tile, each bar cut into horizontal bands of cream, ochre, rust and sage.
The icon cuts a waveform into layers of sediment.

Outcomes

One transcript for a whole session, with every person named once across every recording

Transcription and speaker separation that run entirely on the Mac

Remembered voices that name regular speakers automatically

Hand corrections that stay in time with the audio

A working Mac app that proved the idea on a real session

Get started today.

Book a call