Added in v0.18.0

Transcribe audio files offline, with speaker labels

Vocalinux can turn a recorded meeting, interview or voice memo into a text transcript on your own machine. It uses TinyDiarize, a whisper.cpp model that also marks where the speaker changes, so the transcript comes out as timestamped blocks labelled Speaker 1, Speaker 2 and so on. Start it from the tray or from a terminal.

For recordings, not live dictation

File transcription is separate from the dictation pipeline. It never types into other apps and does not change your dictation model.

Speaker turns, English only

The model is small.en-tdrz. It is English-only, so use it for English recordings.

Local processing

Audio is decoded and transcribed on your computer. Nothing is sent to a server.

From the tray

  1. 1

    Open the tray entry

    Click the Vocalinux tray icon and choose Transcribe Audio File…

  2. 2

    Pick a recording

    Select a WAV file, or an MP3, OGG, FLAC, M4A or Opus file if ffmpeg is installed, and click Open.

  3. 3

    Download TinyDiarize once

    The first time, Vocalinux asks to download the TinyDiarize model (about 465 MB, one time). Click Download. It is only used for file transcription and never becomes your dictation model.

  4. 4

    Wait for the transcript

    A notification says the file is being transcribed. Long files can take a while. When it finishes, a Transcript window opens with timestamps and speaker labels.

  5. 5

    Copy or save it

    Use Copy to put the full transcript on the clipboard, or Save As to write it to a text file (transcript.txt by default).

The model download is checked against a pinned SHA-256 digest before use, like every other Vocalinux model. The status line under the transcript reports how many blocks were found and the highest speaker number.

From the command line

--transcribe-file PATH transcribes one file, prints the diarized transcript to standard output and exits:

terminal
user@linux:~$ vocalinux --transcribe-file meeting.wav
  • It needs no display and no tray, and it runs alongside a Vocalinux instance that is already running, so it works over SSH or from a script.
  • It does not download the model. Fetch TinyDiarize once through the tray entry first, otherwise the command stops with a message saying the model is not downloaded yet.
  • Because the transcript goes to standard output, you can redirect it to a file with your shell. Errors go to standard error, prefixed with vocalinux: could not transcribe, and the exit status is 1. A file with no detectable speech prints vocalinux: no speech detected.

Supported input formats

InputHow Vocalinux reads it
WAV, 16-bit, 16 kHz, mono or stereoRead directly. No extra tools needed.
Any other WAVDecoded with ffmpeg to mono 16 kHz first.
MP3, OGG, FLAC, M4A, OpusOffered in the tray file picker when ffmpeg is installed. Decoded with ffmpeg.
Other files (CLI)Handed to ffmpeg, so anything your ffmpeg build can decode.

Vocalinux does not install ffmpeg for you. Without it, only 16-bit 16 kHz WAV files can be transcribed, and the tray picker's filter says so.

Output format

Each block is one speaker turn: a [HH:MM:SS] timestamp for where it starts, the speaker label, then the text. Blocks are separated by a blank line. The Transcript window, Copy, Save As and the CLI all use the same layout. The lines below show the shape only; they are not real output.

[00:00:00] Speaker 1: <first turn>

[00:00:14] Speaker 2: <second turn>

[00:00:31] Speaker 3: <third turn>

How speaker labels work

TinyDiarize is a small, English-only whisper.cpp model whose output includes a speaker-turn marker wherever it detects a change of voice. Vocalinux runs it in whisper.cpp's tinydiarize mode and splits the text at each marker. Each new block gets the next number.

That makes the labels positional, not identities. In a two-person interview the transcript reads Speaker 1, Speaker 2, Speaker 3, Speaker 4 as the two people take turns, rather than alternating between 1 and 2. Turn boundaries are useful for reading and editing; assigning names is up to you.

Privacy and limitations

  • Local: ffmpeg decoding and whisper.cpp transcription both run on your machine. File transcription always uses the local TinyDiarize model, even when dictation is set to the Remote API engine.
  • Network: only the one-time model download, from a pinned upstream revision.
  • Storage: the transcript is not written to disk unless you click Save As or redirect the CLI output.
  • English only, and speaker numbers do not identify people.
  • The model is about 465 MB, so the first run needs that much free disk space plus download time.
  • Long files take a while. The tray shows a notification while it works.

More on what stays on your machine: offline dictation and the privacy policy.

FAQ

Can it label speakers in languages other than English?

No. The TinyDiarize model Vocalinux uses, small.en-tdrz, is English-only. Speaker labels and the transcript itself are for English audio.

Does Speaker 1 always mean the same person?

No. TinyDiarize marks the points where the speaker changes, and Vocalinux numbers each new turn in order. A person who speaks again later gets a new number, so treat the labels as turn markers and rename them yourself.

Why does the CLI say the model is not downloaded?

vocalinux --transcribe-file never downloads anything. Run Transcribe Audio File… from the tray once and accept the TinyDiarize download, then the CLI can use the model.

Is my audio uploaded anywhere?

No. The file is decoded and transcribed on your machine with whisper.cpp, even if your dictation engine is set to a remote API. The only network use is the one-time model download.

Why can I only pick WAV files in the tray?

ffmpeg is not installed or not on your PATH. Without it, the file picker only offers WAV. Install ffmpeg from your distribution's packages to enable MP3, OGG, FLAC, M4A and Opus.

Transcribe your first file

File transcription is available from v0.18.0; check yours with vocalinux --version. For live dictation model choices, see the Whisper model guide; to fix names the model mishears in dictation, use the custom dictionary.