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.
| Task | How Potato does it | Docs |
|---|---|---|
| Correct ASR transcripts | Turns shown as speaker bubbles synced to the audio, each editable, from Whisper JSON, SRT, VTT, and other formats | Annotating Whisper transcripts |
| Speaker diarization | Segments drawn on the waveform and labeled by speaker, or diarized turns whose speakers annotators correct | Audio segments |
| Sound events and tagging | Labeled time segments, or clip-level labels with radio and multiselect | Audio annotation guide |
| Listening tests | listening_test schemes for MUSHRA, BS.1116, ACR, DCR, CCR, P.835, and ABX, with blinded stimuli and hidden references | Listening tests |
| Emotion and paralinguistics | Categorical labels or Likert and slider ratings for each clip or segment | Audio annotation guide |
| Spectrogram boxes | Time-frequency boxes for calls, notes, or other events | Spectrogram annotation |
| Phonetic tiers | TextGrid and ELAN tiers imported for correction and exported back | Transcript 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.
pip install 'potato-annotation[transcribe]'
potato transcripts ./interviews --transcribe --diarize --num-speakers 2 -o data/interviews.jsonModel 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
- Audio annotation guide, for every audio task type with configs
- Think-aloud mode, for spoken rationales transcribed locally
- Linguistics and ecology, for fields that build on the same audio tools