Transcription¶
Pipeline¶
- Decode
recording.m4a; delay the mic track bymicDelayMs; AEC3 on the mic against the system track. - Resample to 16 kHz; Silero VAD (FluidAudio) finds speech segments per track.
- ASR per segment with the configured model. A voiced segment that decodes empty is retried with
the model's second pass when
beamRetry = true(Parakeet only; Whisper has its own fallback). - Diarization of the system track (pyannote community-1 via FluidAudio): far-end speakers
become
S1..SNin the order they first speak, capped bymaxSpeakers. The mic track is alwaysyou. - Merge, sort by time, write
transcript.json+transcript.md;pipeline.logrecords every stage's timing, model ids and warnings.
Re-run with different knobs from the meeting toolbar (Re-transcribe) or rex transcribe <folder>.
Models¶
| id | Engine | Notes |
|---|---|---|
parakeet-tdt-0.6b-v2 (default) |
FluidAudio CoreML | English, fast, word timings + confidence |
parakeet-tdt-0.6b-v3 |
FluidAudio CoreML | Multilingual |
whisper-tiny / whisper-base / whisper-small |
WhisperKit CoreML | Small, multilingual, lower accuracy |
whisper-large-v3-turbo |
WhisperKit CoreML | Good accuracy, ≈1.6 GB |
whisper-large-v3 |
WhisperKit CoreML | Best accuracy, ≈3 GB, slow |
whisper-distil-large-v3 |
WhisperKit CoreML | English, between turbo and large |
Settings › Transcription lists every model with its size (approximate until downloaded), download /
remove buttons and the cache folder. Downloads never start while recording. Models unload after
[models] idleMinutes by default (unloadPolicy = keep | idle | immediate).
Speakers¶
[speakers] youis the label for the mic track;unknownLabel = "Speaker {n}"formats the others. Rename a speaker by clicking its chip in the transcript: the label is rewritten intranscript.json,transcript.mdandmeeting.json.speakers.map- segment text never changes.diarizerpicks how voices are clustered. Both options use the same pyannote segmentation and WeSpeaker embedding models;pyannote-community-1-vbx(default) scores the whole recording with PLDA and VBx re-clustering, which keeps one voice together far better on long meetings.pyannote-community-1is the streaming clustering from earlier releases.maxSpeakersdrops the least talkative speakers beyond the cap (VBx caps the clustering itself). WithcapSpeakersToInvitees(default on) and an invite list, the cap becomes the number of invitees other than you, so a two-person call cannot split into three voices. An uninvited joiner is folded into the closest voice; re-transcribe with the cap off or a higher maximum.speakerThreshold(40–90, default 70) is the cosine-distance cutoff in percent for "same voice" in the streaming diarizer: lower splits voices more readily, higher merges similar voices. VBx uses its own tuned threshold and ignores it. Tune per meeting from the Re-transcribe sheet before changing the default.
Confidence¶
Segments carry the engine's confidence; words carry theirs when the engine provides them. In the
transcript view a segment under the threshold ([ui] lowConfidencePercent, default 60 %, in
Settings › Transcription) shows a Low confidence (n%) caption, and words a tenth below the
threshold get a dotted underline, so you know where to check against the audio. Exports do not
include confidence except json.
Player¶
The meeting detail view plays the recording with per-track mute/volume, speed, a level-bar scrubber, click-to-seek on any segment, space / ← / → keys, and highlights the current segment.