Potato corrects handwritten text recognition line by line, annotates manuscript images from IIIF manifests, and tags people and places in TEI editions, then writes the corrected work back as PAGE XML, IIIF annotations, W3C Web Annotation, or TEI. Potato is free and open source and runs on your own server.
Most humanities annotation starts from an automated pass or an existing edition: HTR output from Transkribus or eScriptorium, a library's IIIF manifest, or a TEI file. The remaining work is a human one, often shared among students, volunteers, or a project team. Potato provides that step. Each importer builds a runnable project from the source, the source's own annotations arrive as pre-annotations that a person confirms or corrects, and each exporter writes the corrected work back in the same format.
Digital humanities tasks in Potato
Each row is a workflow that one importer and exporter pair supports, described on the digital humanities formats page.
| Task | How Potato does it | Formats |
|---|---|---|
| Correct HTR or OCR output | One item per text line, cropped from the page image, corrected in a text_edit scheme that shows a word diff against the machine reading | PAGE XML from Transkribus, eScriptorium, or OCR-D |
| Correct page layout | One item per page, with every region and line as a polygon labeled by region type | PAGE XML (--page-xml-mode regions) |
| Annotate manuscript images | One item per IIIF canvas, with existing annotations as editable shapes | IIIF Presentation 3 and 2.x manifests |
| Tag entities in an edition | <persName>, <placeName>, <orgName>, <date>, and <rs> become editable spans | TEI P5 |
| Move annotations between viewers | Text quotes and image regions as W3C Web Annotation | Annotorious, Mirador, Hypothesis |
| Run a crowdsourcing workflow privately | A Zooniverse workflow becomes Potato schemes, and its classifications can import as saved work | Zooniverse project exports |
Correcting HTR output from Transkribus or eScriptorium
The import reads a Transkribus or eScriptorium PAGE XML export, finds each page's image beside the XML or in --image-dir, and writes a project. Annotators then see one line at a time, cropped out of the page, with the recognized text ready to correct.
potato import -f page_xml -i transkribus-export/ -o htr-project
python potato/flask_server.py start htr-project/config.yaml -p 8000
python -m potato.export -c htr-project/config.yaml -f page_xml -o corrected/The page_xml export edits the project's copy of each PAGE XML file in place and keeps the rest of the file unchanged, so the corrected files can go back into the HTR tool as ground truth for training. When the recognizer stored a confidence for a line, the item stores that confidence as htr_confidence.
Working alongside Transkribus, eScriptorium, Zooniverse, and Recogito
Potato does not recognize handwriting and does not train HTR models. Transkribus and eScriptorium do both, and Potato corrects their output. Zooniverse is built for public volunteer projects with a review gate before launch, and Potato suits running the same workflow privately, with unpublished material, a lab team or paid transcribers. Recogito Studio is built for collaborative annotation of TEI, IIIF images and PDFs. Potato's additions are assignment of items to people, several annotators per item when a project needs a second opinion, and agreement measures over the annotators' answers.
Because Potato runs on your own server, archival images and unpublished transcriptions stay on infrastructure you control. Every script, stylesheet, and font is served from the install, as described in air-gapped deployment.
Frequently asked questions
Can Potato correct Transkribus or eScriptorium output line by line?
Yes. potato import -f page_xml makes one item per TextLine in reading order, and the annotator corrects the recognized text against the line image in a text_edit scheme that shows a word diff. The page_xml export writes the corrections back into copies of the source files. Both the 2013-07-15 and 2019-07-15 PAGE schema versions are read.
Can several volunteers transcribe the same pages, and can I see where they disagree?
Yes. num_annotators_per_item sets how many people see each line or page, and each person's answer is stored separately. Potato 2.13.1 computes no agreement figure for corrected transcriptions, and the JSONL export gives each person's text for each line to compare. For tagged names and places, Adjudication shows how to review items where the annotators disagree and record a final version.
Can I load images from a IIIF manifest instead of uploading files?
Yes. potato import -f iiif takes a manifest file or an http(s) URL, and each canvas becomes one item whose image comes from the canvas's image or its Image service. The iiif_annotations export writes annotation pages and a copy of the manifest that references the pages, which Mirador and Universal Viewer open.
How is Potato different from running a project on Zooniverse?
Zooniverse hosts public projects and recruits volunteers for those projects. Potato runs on your own server, so Potato fits material you cannot publish or a closed team of annotators. potato import reads a Zooniverse project's workflow, subject and classification exports, so an existing workflow can move across, though survey and transcription tasks are not imported.
Further reading
- Digital humanities transcription tools compared, for Transkribus, eScriptorium, FromThePage, and the TEI editors
- Digital humanities formats, for every importer and exporter option
- Export formats, for the files each format writes
- Adjudication and disagreement, for settling differences between transcribers
- Linguistics and qualitative research, for neighboring fields on this site