# Digital Humanities Transcription and Annotation Tools Compared

Source: https://www.potatoannotator.com/docs/guides/digital-humanities-annotation-tools-compared

**Transkribus recognizes handwriting for 1 credit a page, with 50 free credits a month and paid plans from €99 a year, and FromThePage hosts crowdsourced transcription projects from $100 a month. eScriptorium is a free, open-source handwriting recognition platform that a project can host on the project's own server, and Zooniverse hosts volunteer transcription projects for free. Potato is a free, self-hosted alternative to Transkribus and FromThePage for correcting recognized text with several transcribers on each line, though Potato runs no recognition model and starts from the PAGE XML that Transkribus or eScriptorium exports.**

[Handwritten text recognition](https://en.wikipedia.org/wiki/Handwriting_recognition) (HTR) converts an image of handwriting into text, and optical character recognition (OCR) does the same for print. An HTR platform first finds the regions and lines of text on a page and then reads each line, and the first step is called layout analysis. [PAGE XML](https://github.com/PRImA-Research-Lab/PAGE-XML) stores the regions, lines, and recognized text of one page image. The Library of Congress maintains [ALTO](https://www.loc.gov/standards/alto/), an XML format for the same layout and text. The [Text Encoding Initiative](https://en.wikipedia.org/wiki/Text_Encoding_Initiative) (TEI) encodes texts for scholarly editions, with elements such as `<persName>` for people and `<placeName>` for places. [IIIF](https://en.wikipedia.org/wiki/International_Image_Interoperability_Framework) serves images from a library's server through a manifest that lists the pages, and [W3C Web Annotation](https://www.w3.org/TR/annotation-model/) is the standard data model for an annotation on a text passage or an image region.

Ground truth is a set of hand-corrected transcriptions that trains and tests a recognition model. Character error rate (CER) counts the insertions, deletions, and substitutions needed to turn one transcription into another (the [Levenshtein distance](https://en.wikipedia.org/wiki/Levenshtein_distance)) and divides the count by the length of the reference transcription. [Digital Humanities in Potato](/use-cases/digital-humanities) lists Potato's humanities tasks in one place, and [Digital Humanities Formats](/docs/guides/digital-humanities) documents every importer and exporter option.

## Which digital humanities tools are worth comparing?

The tools in the table cover recognition, transcription, encoding, and annotation. The tools differ in who runs the recognition model, in where the data lives, and in how many people can work on one page.

| Tool | Runs as | License or price | Suits |
|---|---|---|---|
| **[Transkribus](https://www.transkribus.org/)** | Hosted web app | Free plan with 50 credits a month; Scholar plan €99 a year with 900 credits | Recognizing handwriting and print, training custom models, and publishing editions with Transkribus Sites |
| **[eScriptorium](https://escriptorium.inria.fr/)** | Web app you host, or an account on an institution's instance | MIT | Recognition and model training with the Kraken engine, on a server the project controls |
| **[FromThePage](https://fromthepage.com/)** | Hosted web app | From $100 a month; transcribers free; AGPL-3.0 source | Crowdsourced transcription, review, and indexing for libraries and archives |
| **[Zooniverse](https://www.zooniverse.org/)** | Hosted platform | Project Builder and hosting free | Public volunteer projects, after review by the Zooniverse team |
| **[Recogito Studio](https://recogitostudio.org/)** | Web app you host with Docker, or a hosted plan | AGPL-3.0 | Collaborative annotation of TEI texts, IIIF images, and PDFs |
| **[TEI Publisher](https://tei-publisher.org/)** | App inside the eXist-db database | Open source | Publishing TEI editions online, with a web editor for marking up entities |
| **[Oxygen XML Editor](https://www.oxygenxml.com/xml_editor/tei_editor.html)** | Desktop app for Windows, macOS, and Linux | Academic license $137 with a year of maintenance, or $6 a month billed yearly | Encoding and validating TEI by hand |
| **[Potato](/)** | Python web server configured in YAML, on your own computer or server | GPL-3.0-or-later | Several transcribers correcting the same HTR lines, entity tagging in TEI, and regions on IIIF canvases |

Transkribus charges 1 credit a page for handwritten text recognition and 0.25 credits a page for line detection alone. On-demand credits cost €59.50 for 250 and never expire. FromThePage's Researcher plan covers one project of up to 10,000 pages, and FromThePage offers a free trial of 200 pages.

## Which tool for which task

The table pairs each kind of humanities work with the tools built for that work.

| Task | Good fits |
|---|---|
| Recognizing handwriting with an existing model | Transkribus and eScriptorium |
| Training a recognition model on a collection's own hand | Transkribus and eScriptorium |
| Public volunteer transcription | Zooniverse and FromThePage |
| A library's transcription project with review and indexing | FromThePage |
| Several transcribers correcting the same recognized lines, on a project's own server | Potato |
| Correcting layout regions and lines on page images | Transkribus, eScriptorium, and Potato |
| Encoding a full TEI edition by hand | Oxygen XML Editor |
| Publishing a TEI edition online | TEI Publisher and Transkribus Sites |
| Tagging people and places with a gazetteer | Recogito Studio |
| Tagging entities in TEI with several annotators and agreement | Potato |
| Annotating regions on IIIF images | Recogito Studio and Potato |
| Writing annotation pages into a copy of a IIIF manifest | Potato |

Transkribus and eScriptorium appear in every row about recognition, because both platforms run the model. Potato appears where the machine reading or the edition already exists and a team divides the checking among several people.

## Who runs the recognition model

Transkribus runs recognition as a hosted service and trains custom models from the transcriptions a team corrects. The free plan includes 5 training runs a month, and the Scholar plan includes 30. eScriptorium runs recognition and training with the [Kraken](https://kraken.re/) engine on whichever server hosts the instance, and imports and exports Kraken models. FromThePage offers handwritten text recognition with Gemini 3 as an option on annual plans, and FromThePage flags the machine draft for review by a person.

Potato does not recognize handwriting, does not segment pages, and does not train recognition models. `potato import -f page_xml` reads the PAGE XML that Transkribus, eScriptorium, or OCR-D wrote, makes one item for each text line in reading order, and crops each line out of the page image for the transcriber. When the recognizer stored a confidence for a line, Potato keeps the value on the item as `htr_confidence`. The `page_xml` export writes each corrected line back into a copy of the source file. eScriptorium's import accepts PAGE XML and ALTO transcriptions, and PAGE XML is the format of Potato's export.

## Free Transkribus and FromThePage alternatives

Transkribus and FromThePage are the paid incumbents for transcription, and both do more than correction. Transkribus recognizes text, analyzes layout and tables, trains models, tags entities, and publishes searchable editions. FromThePage runs public projects with volunteers, review, discussion, and subject indexing, and exports TEI, CSV, HTML, and IIIF annotations. Each free tool below covers part of that work.

eScriptorium is the free counterpart for recognition and training. A Vilnius University workshop describes eScriptorium as "a non-commercial, community-driven alternative" to Transkribus. eScriptorium shares projects with teams on the same instance and exports plain text, PAGE XML, and ALTO, with no TEI export in the list. Zooniverse is the free counterpart for public crowdsourcing, and the Zooniverse transcription guide recommends 2 to 5 volunteers per page. Zooniverse does not aggregate text classifications on the platform, and the same guide points projects to a separate tool for aggregating lines of transcription ([ALICE](https://alice.zooniverse.org)). Recogito Studio is free to host and annotates TEI and IIIF, with no handwriting recognition.

Potato is built for the correction step. Potato imports a Transkribus or eScriptorium PAGE XML export as a project, sends each line to as many transcribers as the config sets, shows a word diff against the machine reading, and writes each transcriber's corrections to a separate PAGE XML folder. Potato has no recognition model, no public volunteer community, no publishing of editions, and no agreement figure for transcriptions, and [what Potato does not do](#what-potato-does-not-do-for-digital-humanities) lists the other gaps.

## Several transcribers and agreement by tool

The tools share work among several people in different ways. The table lists the agreement measures that each tool's own documentation describes.

| Tool | How several people share the work | Agreement |
|---|---|---|
| Transkribus | Shared documents with roles, and a progress view of pages complete, in progress, and not started | — (the editor compares two saved versions of a page side by side) |
| eScriptorium | Teams, and projects or documents shared with users of the same instance | — |
| FromThePage | Volunteers, staff, and students with transcription, review, discussion, and progress tracking | — |
| Zooniverse | Each page goes to a set number of volunteers before the page retires | — (each volunteer's transcription is exported, and ALICE aggregates lines) |
| Recogito Studio | Real-time annotation and commenting by several users | — |
| Potato | One server; the config assigns each line, page, or passage to a set number of annotators | Transcriptions: none. Entity spans: token-level kappa, span F1, Krippendorff's alpha, and Mathet's gamma. Regions: matched IoU, detection F1, and chance-corrected alpha. Questions: Cohen's kappa, Fleiss' kappa, and Krippendorff's alpha |

A dash means we found nothing for the row in the tool's own documentation, checked on 2026-10-29. If a cell is wrong, [tell us](https://github.com/davidjurgens/potato/issues/new).

Potato stores each transcriber's corrected line separately, together with the character and word edit distances from the machine reading. The character edit distance divided by the length of the corrected line gives the recognizer's CER on that line. Potato does not compute CER between two transcribers. With two transcribers on a project, the `page_xml` export writes one folder for each transcriber, and a short script over the two folders gives the CER between the transcribers. For a categorical question beside the transcription, such as a legibility rating, the admin dashboard at `/admin/iaa` reports kappa. [Adjudication](/docs/guides/adjudication-and-disagreement) shows how to review items where annotators disagree. For student or crowd transcribers, Potato recruits through Prolific or a SONA subject pool and runs a [training phase](/docs/features/training-phase) before the real items, and [Running a Crowdsourced Study](/docs/guides/crowdsourcing-prolific-mturk) covers the setup.

## File formats and round trips

The table lists the formats a humanities project usually moves between and what Potato 2.13.1 reads and writes for each format.

| Format | Written or read by | Potato import | Potato export |
|---|---|---|---|
| PAGE XML | Transkribus, eScriptorium, and OCR-D | Yes, one item per line or one per page (`-f page_xml`) | Yes, corrections written into a copy of each source file, one folder per transcriber |
| ALTO XML | Transkribus and eScriptorium | No | No |
| TEI P5 | Transkribus, FromThePage, Recogito Studio, TEI Publisher, and Oxygen | Yes, with name elements as spans (`-f tei`) | Yes, spans as name elements or `<rs>`, one folder per annotator |
| IIIF Presentation 3 and 2.x manifests | Transkribus, eScriptorium, and FromThePage import manifests | Yes, one item per canvas (`-f iiif`) | Annotation pages and a copy of the manifest (`-f iiif_annotations`) |
| W3C Web Annotation | Recogito Studio | Yes (`-f web_annotation`) | Yes, one `AnnotationCollection` |
| Zooniverse project exports | Zooniverse | Workflows and classifications, without transcription tasks | No |

The `page_xml` export keeps the metadata, the reading order, the schema version, and every other part of the source file that nobody corrected. Both the 2013 and the 2019 PAGE schemas are read. A corrected line loses the recognizer's confidence and the line's `Word` elements, because the old word boxes no longer match the new text. The `keep_words=true` option keeps the word boxes. Potato reads and writes no ALTO. A project that needs ALTO converts the exported PAGE XML with another tool.

A TEI file loses more on the way through Potato:

- **A reading text.** Potato's TEI import takes the regularized, corrected, or expanded form of each `<choice>`. The `<orig>`, `<sic>`, and `<abbr>` readings do not reach the annotator. `<note>`, `<del>`, and `<fw>` are left out.
- **Attributes on names.** The import keeps the element name of each `<persName>` or `<placeName>` and drops attributes such as `ref` and `when`.
- **A new document.** The `tei` export builds a new TEI file from the project, keeps the title from the header, and does not edit the source file. Merge the exported spans into the edition with an XSLT or by hand.
- **Overlapping spans.** A span that crosses another span cannot nest in XML, so the export writes the span into `<standOff><listAnnotation>` with a `string-range` target and reports the count.

## Named entities and gazetteers

Transkribus tags names, places, and events in the editor and exports the tags to a spreadsheet. Recogito Studio has a GeoTagger plugin that links annotations to a gazetteer, a plugin for Reconciliation Service APIs, a named-entity recognition plugin, and a TEI Inliner plugin that writes annotations as inline TEI. TEI Publisher's web annotation editor marks up entities in a TEI edition, and a TEI Publisher app can keep registers of people and places.

Potato tags entities as spans, and a span scheme can link each span to an entry in Wikidata, in UMLS, or in any knowledge base with a REST search API. Potato has no built-in client for GeoNames or Pleiades, and a gazetteer with a search API connects through the REST option. The link is stored with the span in each annotator's `user_state.json` and in the Parquet export. The `tei` export writes no `ref` attribute, so links to Wikidata do not reach the TEI file. [Entity Linking](/docs/annotation-types/entity-linking) documents the knowledge base options, and [Agreement for Spans](/docs/guides/agreement-for-spans) explains the span measures.

## Hosting and data ownership

Where the images and transcriptions live differs by tool. Transkribus stores documents as private by default on READ-COOP servers in Innsbruck, Austria. FromThePage keeps a cancelled subscription's data read-only and exportable. Zooniverse hosts all project media publicly through hashed, anonymized URLs, even on a private project, and a project promoted to the Zooniverse community makes classification data open after a proprietary period of normally two years. eScriptorium and Recogito Studio can run on a server the project controls.

Potato runs on your own computer or server, so archival images and unpublished transcriptions stay on infrastructure the project controls. A local file reaches Potato's `media/` folder only from inside the folder being imported, or from a folder named with `--image-dir`. [Air-Gapped Deployment](/docs/measurement/air-gap) covers running Potato with no network connection, and a [Hugging Face Space](/docs/deployment/deploy-huggingface) is a hosted option.

## Correcting HTR lines with two transcribers in Potato

The import reads a Transkribus PAGE XML export and writes a runnable project. The page images sit beside the XML or in a folder named with `--image-dir`:

```bash
potato import -f page_xml -i transkribus-export/ -o letters-project
```

The config below has the shape that the import writes, with two additions. `num_annotators_per_item: 2` sends every line to two transcribers for a comparison of the two readings. The `legibility` question gives the admin dashboard a kappa for how the transcribers judged each line.

```yaml
annotation_task_name: Letter book line correction
task_dir: .
output_annotation_dir: annotation_output/
data_files:
  - data/source.jsonl
item_properties:
  id_key: id
  text_key: htr_text
user_config:
  allow_all_users: true
  users: []

# Every line goes to two transcribers for a comparison of the readings
num_annotators_per_item: 2

instance_display:
  fields:
    - key: line_image
      type: image_region
      label: Line
      padding: 12

annotation_schemes:
  - annotation_type: text_edit
    name: transcription
    description: Correct the recognized text against the line image.
    source_field: htr_text
    show_diff: true
    show_edit_distance: true
    allow_reset: true
  - annotation_type: radio
    name: legibility
    description: How legible is the line?
    labels:
      - clear
      - partly illegible
      - illegible
```

The `image_region` display downloads each page image once and crops one line at a time from the downloaded image. The transcriber sees a word diff and a count of changed words and characters while typing. After the corrections are in, the export writes the PAGE XML for each transcriber:

```bash
python -m potato.export -c letters-project/config.yaml -f page_xml -o corrected/
```

The export writes `corrected/<transcriber>/page_xml/` with one file per page. For layout instead of text, `--page-xml-mode regions` imports each page as polygons labeled by region type, and [Digital Humanities Formats](/docs/guides/digital-humanities#page-xml-and-htr-line-correction) shows the options.

## What Potato does not do for digital humanities

- **No handwriting recognition or HTR training.** Transkribus and eScriptorium recognize text and train recognition models, and annotators correct the output in Potato.
- **No ALTO.** Potato reads and writes PAGE XML, TEI, IIIF, and W3C Web Annotation, and no ALTO or hOCR.
- **No agreement on transcriptions.** Potato reports kappa and alpha for spans, regions, and questions, and no CER between transcribers.
- **No TEI editing.** Potato reads a reading text from TEI and writes entity spans back to a new file. Oxygen XML Editor or TEI Publisher edits the full encoding.
- **No entity links in TEI.** Wikidata and other knowledge base links stay in Potato's own output and the Parquet export.
- **No public volunteer community.** Potato recruits through Prolific, a SONA pool, or a link the project shares, and Zooniverse and FromThePage bring volunteers.
- **No publishing.** Transkribus Sites and TEI Publisher publish searchable editions.
- **No Zooniverse transcription tasks on import.** The Zooniverse importer skips transcription tasks and reports the count.
- **Desktop browser for transcription.** The line correction scheme is not on Potato's list of phone-tested types.
- **Needs a server.** Someone installs Potato with `pip` and runs the server, on a laptop for one transcriber or on a shared machine for a team.

Checked against each project's own documentation in October 2026.

## Frequently asked questions

### Is there a free alternative to Transkribus?

Yes. eScriptorium is free, open source under the MIT license, and runs recognition and model training with the Kraken engine on a server you host or on an institution's instance. Potato is a free, self-hosted alternative for the correction step, where several transcribers check Transkribus or eScriptorium output line by line. Potato runs no recognition model. Transkribus's own free plan gives 50 credits a month, enough for about 50 pages of recognition.

### What is the best collaborative software for transcribing handwritten documents?

FromThePage and Zooniverse are built for public volunteer transcription, with FromThePage hosting library projects from $100 a month and Zooniverse hosting projects for free after review. Transkribus shares documents with a team and tracks which pages are done. Potato suits a closed team on the project's own server, with each line assigned to a set number of transcribers and each transcriber's corrections exported separately.

### How do I create ground truth for training an HTR model?

Correct a recognition model's output by hand against the page images, keep one transcription convention throughout, and export the corrected pages as PAGE XML or ALTO for training. Both Transkribus and eScriptorium train models from corrected transcriptions. In Potato, two transcribers can correct each line, the `page_xml` export writes each transcriber's version, and eScriptorium imports the corrected PAGE XML for retraining.

### Can I tag named entities in historical texts and export the entities to TEI?

Yes. Potato imports a TEI file with `potato import -f tei`, turns `<persName>`, `<placeName>`, `<orgName>`, `<date>`, and `<rs>` into editable spans, and the `tei` export writes the spans back as the same elements. The export builds a new TEI file rather than editing the source, and links to Wikidata are not written as `ref` attributes. Recogito Studio's TEI Inliner plugin and TEI Publisher's annotation editor also write entities as inline TEI.

## Further reading

- [Digital Humanities in Potato](/use-cases/digital-humanities), for the humanities tasks in one place
- [Digital Humanities Formats](/docs/guides/digital-humanities), for IIIF, W3C Web Annotation, PAGE XML, TEI, and Zooniverse options
- [Correct Transkribus and eScriptorium HTR Output Line by Line](/blog/correct-htr-output-line-by-line), for two transcribers correcting HTR lines and the character error rate before and after
- [Export Formats](/docs/features/export-formats#digital-humanities-and-maps) and [Importing Projects](/docs/tools/importing-projects)
- [Span Annotation](/docs/annotation-types/span-annotation) and [Entity Linking](/docs/annotation-types/entity-linking)
- [Deep Zoom](/docs/vision-spatial/deep-zoom), for gigapixel scans
- [Inter-Annotator Agreement](/docs/guides/inter-annotator-agreement) and [Adjudication](/docs/guides/adjudication-and-disagreement)
- [Document Annotation Tools Compared](/docs/guides/document-annotation-tools-compared) and [Text Annotation Tools Compared](/docs/guides/text-annotation-tools-compared)
- Showcase designs for [DocLayNet document layout](/showcase/doclaynet-document-layout) and [DWIE document entity linking](/showcase/dwie-document-entity-linking)
