Skip to content
Linguistics

Potato for linguistics research

Review interlinear glosses from FLEx or Toolbox, correct Praat and ELAN tiers, and run draw-a-map dialect tasks in Potato, a free tool you host yourself.

Potato imports texts from FLEx and Toolbox and recordings with Praat TextGrid or ELAN tiers, puts each sentence or interval in front of reviewers with checks against the Leipzig Glossing Rules, and exports the corrected analysis back to the source tool. Potato is free and open source and runs on your own computer or server, including a laptop in the field.

In a documentation project the first analysis usually exists already, in a FLEx database, a Toolbox file, or a set of TextGrids, and the remaining work is checking that analysis, often with several people sharing the texts. Tools that do both glossing and collaboration are scarce. A 2026 survey of 98 annotation tools for language documentation found that of the 44 that are free and accessible, 15 support morpheme segmentation and glossing, and 6 combine morphological annotation with remote collaboration at no cost (Yang et al., 2026). Potato covers the review step. Potato assigns texts to reviewers, checks the alignment of every word, and records who confirmed each sentence.

Linguistics tasks in Potato

Each row below is a task type Potato ships with, and the linked page has its full configuration.

TaskHow Potato does itDocs
Check and correct interlinear glossesAn interlinear_gloss scheme marks every word whose morpheme segmentation and gloss do not line upInterlinear glossed text
Correct time-aligned transcriptsTextGrid and .eaf files import as tiers of a tiered_annotation scheme, one segment per intervalTranscript formats
Draw-a-map tasksA geo_annotation scheme with task: draw on your own outline map, aggregated by the geo_overlap exportPerceptual dialectology
Reading-time experimentsSelf-paced reading (moving window, cumulative, centered) and the A-maze task, with a time for each regionSelf-paced reading
Judgments of speech sampleslistening_test schemes for MUSHRA, ACR, and ABX tests with blinded stimuliListening tests
Acceptability and rating tasksLikert, slider, and best-worst scaling schemes over sentences or audioLikert scales
Corpus annotationSpan labels for entities and other spans, exported as CoNLL-2003 or CoNLL-USpan annotation

A glossing review project

The scheme below reads a sentence and any existing segmentation and glosses from each item, and the reviewer corrects the segmentation and glosses. abbreviations: leipzig warns when a category label is not one of the Leipzig abbreviations, and tiers adds extra lines under each word.

yaml
annotation_task_name: "Glossing review"
task_dir: "."
data_files:
  - data/sentences.jsonl
item_properties:
  id_key: id
  text_key: text
output_annotation_dir: annotation_output/
user_config:
  allow_all_users: true
num_annotators_per_item: 2    # two reviewers per sentence
annotation_schemes:
  - annotation_type: interlinear_gloss
    name: igt
    description: Segment each word into morphemes and gloss every morpheme
    source_field: text
    morphemes_field: morphemes
    gloss_field: glosses
    translation_field: translation
    tiers: [pos]
    abbreviations: leipzig
    language: la
    metalanguage: en

Two reviewers per sentence (num_annotators_per_item: 2) gives a second opinion on every gloss, which is the usual trade-off when a team is checking a consultant's texts. Set num_annotators_per_item to 1 when each text has a single responsible reviewer. In practice you rarely write the config by hand, because potato import writes the config from a FLEx or Toolbox file.

Bringing texts in and taking them back out

potato import turns a FLExText file, a Toolbox database, or a folder of TextGrid or ELAN files with their recordings into a runnable project. Each phrase, record, or recording becomes one item, and the existing analysis is loaded as its starting point.

bash
potato import -i stories.flextext -o glossing-project/
potato import -i texts.txt -f toolbox -o glossing-project/
potato import -i recordings/ -o transcripts-project/

The export writes the corrected work back in the same formats: flextext and toolbox for glosses, igt for aligned plain text and gb4e LaTeX, and textgrid and eaf for tiers. Re-importing an exported FLExText file gives the same words, segmentations, glosses, translations, and parts of speech. FLEx GUIDs and lexicon links are lost on the way back, because the export has no lexicon. Linguistic fieldwork lists the rest of what does and does not round-trip, and Export formats lists the files each format writes.

Working alongside FLEx, ELAN, and Praat

Each of these tools has a different job, and Potato is built to sit between the three. FieldWorks Language Explorer contains the lexicon and the morphological parser. ELAN does multi-tier, time-aligned annotation of audio and video, and Praat is a program for phonetic analysis. When several people check the same material, Potato adds assignment of texts to reviewers, a record of each person's answer, and a web interface, so reviewers need not install the analysis software.

The web interface also matters for platform. Current FLEx releases run on Windows, not on macOS, and SIL no longer supports the Linux version. Potato installs on macOS, Linux, and Windows, and reviewers use a browser. A reviewer on a Mac can check texts exported from FLEx without a virtual machine.

Frequently asked questions

Can Potato import ELAN and Praat TextGrid files and export them back?

Yes. potato import reads .TextGrid and .eaf files that have an audio or video file of the same name beside each one, and each tier becomes a tier of one tiered_annotation scheme with one segment per non-empty interval. The textgrid and eaf exporters write the corrected tiers back out. Potato reads TextGrids in UTF-8 and in UTF-16, the encoding Praat often uses.

Does Potato run on a Mac?

Yes. Potato is a Python package that installs with pip install potato-annotation on macOS, Linux and Windows, and annotators work in a web browser. A Mac user can review texts exported from FLEx, which does not run on macOS.

Can Potato run in the field without an internet connection?

Yes, once Potato is installed. Potato serves every script, stylesheet, and font from its own install, and the draw-a-map task fetches no map tiles, so a laptop with no connection runs the same interface. Air-gapped deployment describes what is served locally.

Can I run a draw-a-map task online?

Yes. The geo_annotation scheme with task: draw shows participants an outline map you provide as GeoJSON, and participants outline and name the areas where people speak differently in their view. The geo_overlap export overlays all participants' drawings as heat maps. Perceptual dialectology walks through a complete example study.

Further reading

References

  1. Yang et al. (2026). Annotation Tools for Language Documentation: A Survey of Capabilities, Gaps, and Morphological Support. Proceedings of the Ninth Workshop on the Use of Computational Methods in the Study of Endangered Languages (ComputEL-9). https://aclanthology.org/2026.computel-1.9/
  2. Comrie, Haspelmath, and Bickel. The Leipzig Glossing Rules. Max Planck Institute for Evolutionary Anthropology. https://www.eva.mpg.de/lingua/resources/glossing-rules.php

Start here

Example designs

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

Interlinear Glossing of Endangered LanguagesMorpheme-level interlinear glossing, the annotation design behind the SIGMORPHON 2023 Shared Task on Interlinear Glossing (Ginn et al., 2023), which covers endangered and Indigenous languages including Arapaho, Gitksan, Lezgi, Natugu, Tsez and Uspanteko. For each word the annotator segments it into morphemes, labels each morpheme's position (root vs. affix/clitic), writes the Leipzig-style gloss line, and provides a free translation - the core workflow of language documentation. The showcase sample items use pedagogically reliable, fully verifiable stand-in languages (Swahili and Turkish) so the target gloss is correct; the real shared task uses the endangered languages named above.DoReCo: Language Documentation Reference CorpusDoReCo is a cross-linguistic corpus of 53 spoken languages with over 100 hours of narrative speech transcribed and time-aligned at the word and phone levels. This Potato config reproduces its multi-tier ELAN annotation workflow.ToBI Prosodic AnnotationMulti-tier prosodic annotation following the Tones and Break Indices (ToBI) framework. Annotators label pitch accents, phrase accents, boundary tones, and break indices on speech utterances, producing a layered prosodic transcription aligned to the audio timeline (Silverman et al., ICSLP 1992).Universal Dependencies - Dependency Parsing AnnotationDependency parsing and POS tagging annotation based on Universal Dependencies v2 (Nivre et al., LREC 2020). Annotators build syntactic dependency trees and label parts of speech using the UD tagset.Miami Bangor Code-Switching AnnotationMulti-tier annotation of Spanish-English bilingual speech for code-switching analysis. Annotators perform per-word language identification, mark code-switch boundaries and types, classify switch direction and utterance-level language dominance, and provide orthographic transcriptions -- all on parallel tiers aligned to the audio timeline (Deuchar & Parafita Couto, Bangor Miami Corpus, TalkBank).CHILDES Child Language Multi-Tier AnnotationMulti-tier ELAN-style annotation of child-adult interaction videos for language acquisition research. Annotators segment utterance boundaries on the timeline, provide morphological and syntactic annotations, and classify communicative context and error types. Based on the CHILDES/TalkBank project.

Other fields

All use cases