Skip to content
Audio and speech

Potato for audio and speech annotation

Correct Whisper transcripts and speaker turns against the waveform, or run MUSHRA and MOS listening tests, in a free tool on your own server.

Potato loads Whisper, WhisperX, subtitle, TextGrid, and ELAN transcripts with their recordings so annotators can correct the words and the speaker turns against the waveform, and Potato runs standard listening tests such as MUSHRA and P.808-style MOS. Potato is free and open source, runs on your own computer or server, and can transcribe and diarize recordings locally before annotation starts.

Most speech projects now start from an automatic transcript, and the annotation work is correcting the transcript by fixing words, splitting and merging turns, and assigning speakers. Potato reads the transcript as written, with no conversion script. Since version 2.9, Potato can also produce the transcript on your own machine. potato transcripts --transcribe --diarize runs faster-whisper for transcription and sherpa-onnx for diarization, with no PyTorch and no Hugging Face token, so the recordings never leave the machine.

Speech and audio tasks in Potato

Each row is an annotation type or workflow that ships with Potato, and the linked page has its configuration.

TaskHow Potato does itDocs
Correct ASR transcriptsTurns shown as speaker bubbles synced to the audio, each editable, from Whisper JSON, SRT, VTT, and other formatsAnnotating Whisper transcripts
Speaker diarizationSegments drawn on the waveform and labeled by speaker, or diarized turns whose speakers annotators correctAudio segments
Sound events and taggingLabeled time segments, or clip-level labels with radio and multiselectAudio annotation guide
Listening testslistening_test schemes for MUSHRA, BS.1116, ACR, DCR, CCR, P.835, and ABX, with blinded stimuli and hidden referencesListening tests
Emotion and paralinguisticsCategorical labels or Likert and slider ratings for each clip or segmentAudio annotation guide
Spectrogram boxesTime-frequency boxes for calls, notes, or other eventsSpectrogram annotation
Phonetic tiersTextGrid and ELAN tiers imported for correction and exported backTranscript formats

Transcribing and diarizing on your own machine

The commands below turn a folder of recordings into a data file of diarized, timed transcripts that annotators then correct. Pass --num-speakers when you know how many people speak in each recording.

bash
pip install 'potato-annotation[transcribe]'
potato transcripts ./interviews --transcribe --diarize --num-speakers 2 -o data/interviews.json

Model weights download on first use, so the first run needs a network connection. Voice-activity detection runs first, so Whisper does not invent text over silence. The same detection can drop quiet or whispered speech without a warning. If a recording you know contains speech comes back short, rerun with --asr-no-vad. Transcript formats covers staging the models for an offline machine.

Listening tests

Potato bundles no test material, so you provide the stimuli. A listening_test scheme runs a standard subjective test on each item, with the samples blinded and their order randomized, and the export maps every rating back to its condition. The listening_test export writes per-condition MOS and MUSHRA means with 95% intervals, ABX results, and the ITU-R BS.1534-3 post-screening rule. A headphone check can run before the test as a runtime phase. For crowdsourced listeners, Potato works with Prolific as the recruiting platform, as described in Crowdsourcing.

Working alongside ELAN, Praat, and Label Studio

ELAN is built for detailed multi-tier, time-aligned annotation by one person, and Praat for phonetic analysis. Potato imports and exports both formats, so a team can correct tiers in the browser and keep analyzing in Praat or ELAN. Label Studio has templates for transcription and speaker segmentation. Potato's additions are local transcription and diarization, standard listening-test methods with their screening rules, and the features a study needs, such as several annotators per item, agreement over time segments, and attention checks. Audio annotation tools compared goes through the differences.

Frequently asked questions

How do I correct Whisper transcripts instead of transcribing from scratch?

Keep Whisper's .json output, which has segment timings, and run potato transcripts over the folder to pair each transcript with its audio in a data file. Annotators then see the turns synced to the audio and correct the words and speakers. Export to EAF or TextGrid when the timings need to go on to ELAN or Praat.

How do I annotate speaker turns for diarization?

Use an audio_annotation scheme with one label per speaker, and annotators draw segments on the waveform for each turn. If the recordings were diarized automatically, with WhisperX or with potato transcripts --diarize, annotators correct the speaker of each turn instead of drawing every segment. Agreement over time measures how far two annotators' segments agree.

How do I run a MOS or MUSHRA listening test online?

Add a listening_test scheme with method set to the test you need, such as mushra, or acr for a MOS test, and give each item a reference and the conditions to compare. Potato blinds the samples, shuffles their order for each listener, adds the hidden reference and anchors for MUSHRA, and applies the BS.1534-3 post-screening rule in the listening_test export. Listening tests lists every method and option.

Can I import or export Praat TextGrid and ELAN files?

Yes. potato import reads .TextGrid and .eaf files with a recording of the same name, and turns each tier into a tier of one tiered_annotation scheme. The textgrid and eaf exporters write the corrected tiers back.

Further reading

Start here

Example designs

Each design is a working Potato configuration you can download and run.

Other fields

All use cases