Reading Polish manuscripts (1689–1944) with vision-language models: an evaluation on 30 pages

This study examines the reading of 30 pages of Polish manuscripts from 1689–1944, for which reference transcriptions exist, by three vision-language models in seven variants; reading accuracy, cost, and cases of interrupted readings and their causes were compared. Gemini 3.8 Flash achieved the highest accuracy at the lowest cost, and interrupted readings proved to depend on the type of document rather than on scan quality.

Date
Reading time
17 min

Series “The Kruszyński papers”, part 2 of 2 · previous: The papers of Konstanty Kruszyński (1772–1818)

Connotacya, p. 3
1
Connotacya, p. 8
2
Connotacya, p. 11
3
Connotacya, p. 14
4
Connotacya, p. 21
5
Sekreta różne, p. 2
6
Sekreta różne, p. 5
7
Sekreta różne, p. 7
8
Sekreta różne, p. 9
9
Sozańscy, p. 31
10
Sozańscy, p. 45
11
Sozańscy, p. 50
12
Sozańscy, p. 62
13
Sozańscy, p. 71
14
Sozańscy, p. 76
15
Sozańscy, court usher’s certificate
16
Letter of Fr. Nadolski, 1810
17
Monitorium (form)
18
Linde, “Pierwszy rzut myśli”
19
Opinion of the Directorate (draft)
20
Prawo Mikłaszewskiemu (AGAD AR)
21
Copy of the Sejm decree, 1689
22
Opisanie sprawy Brzoski, p. 1
23
Opisanie sprawy Brzoski, p. 3
24
Rubinkowski, Ateista, p. 3
25
Rubinkowski, Ateista, p. 5
26
Zabistowski, Mowa, p. 2
27
Zabistowski, Mowa, p. 7
28
Account of Dr P. / Dr Ne., p. 10
29
Account of Dr P. / Dr Ne., p. 60
30
The thirty pages of the test set in table order. Hatched tiles: pages on which at least one Gemini variant interrupted the reading.TranskriBUW · Wikisource
30pages, 15 hands, 1689–1944
7model variants
210readings
13readings interrupted by a filter
$12.7cost of the entire test
87,915reasoning tokens for a single page

1. Aim of the study and test material

In the previous part of this series we described the reading of 672 pages of the papers of Konstanty Kruszyński carried out with Gemini 3.8 Flash at a cost of 12 dollars. The accuracy of that reading remained an open question. Our own reference set (18 pages from the fonds) is awaiting correction. No open set of Polish manuscripts with transcriptions intended for the evaluation of automatic handwriting recognition exists: the available test sets cover only printed texts for Polish, and the HTR-United catalogue contains no Polish material.

We therefore compiled a small test set from material available online. A human-made transcription exists for every page:

SourceContentPages in testTranscription
TranskriBUW (BUW)“Connotacya” of a Zamość burgher, 1689–1726; divorce records, 1792–1828; records of the Government Commission for Religious Denominations and Public Enlightenment (KRWRiOP), 182116made by volunteers and approved by the BUW editors; diplomatic, abbreviations not expanded
TranskriBUWaccounts of the Warsaw Uprising, 1944, pencil, crossings-out in crayon (control material)2as above
Wikisource“Sekreta różne”, a book of recipes from 1752 (AGAD)4verified
Wikisourcethe Łyszczyński case, 1689 (copies from the 17th–18th centuries), a letter from the Radziwiłł Archive8partly unproofread

We also downloaded 42 pages of German Kurrent script from the diary of the Dresden court (Zenodo). This material is relevant because 185 pages of the Kruszyński papers are written in Kurrent. The present test, however, concerns Polish texts only.

2. Measurement method

  1. 1 · downloadScans and transcriptionsOmeka S and MediaWiki of BUW, the Wikisource API, Commons. 296 pages, of which 30 Polish pages were used in the test.
  2. 2 · cleaningReference textRemoval of editorial markup, wiki templates, editor’s footnotes and homoglyphs (Cyrillic “а”, “о”).
  3. 3 · readingPrompt consistent with production processingThe instruction from our processing pipeline: diplomatic transcription, [?] for uncertain words, a JSON schema.
  4. 4 · 7 variantsGemini, Sol, SonnetEach variant reads each page once, without corrections and without retries.
  5. 5 · resultPage CERThe proportion of characters requiring correction: strict (character by character) and normalised (ignoring letter case and punctuation).

CER (character error rate) is the number of character insertions, deletions and substitutions needed to transform the model’s reading into the reference text, divided by the length of the reference text. A value of 5% corresponds approximately to one incorrect word per line; at 20% the text has to be retyped from the original. We compare whole pages without splitting them into lines, because Wikisource merges lines into paragraphs.

2.1. Model variants tested

VariantModelSettingPrice per 1M tok. (in/out)
gemini-lowGemini 3.8 Flash, AI Studioreasoning low, image at the highest resolution$0.75 / $3.75
gemini-highGemini 3.8 Flash, AI Studioreasoning high$0.75 / $3.75
gemini-low-or, -high-orGemini 3.8 Flash via OpenRouter, Vertex onlylow / high, default resolution$0.75 / $3.75
sol-low, sol-highGPT-6.1 Sol (OpenAI)reasoning low / high, image at original resolution$2 / $10
sonnet-highClaude Sonnet 5.5 (Anthropic)adaptive thinking, effort high$2 / $10

3. Reading accuracy

The principal result of the study: Gemini 3.8 Flash reads Polish manuscripts the most accurately and at the lowest cost. The low variant, used in production processing, costs less than one cent per page, and its error rate is almost equal to that of the high variant, which is ten times more expensive. Sonnet 5.5 ranks second. Both Sol variants achieve the weakest results, and Sol high is, moreover, the most expensive.

Cost per page and error rate

Logarithmic horizontal axis, standard price (no discounts). Strict CER weighted by character count; only pages read by all variants shown are included, excluding the 1944 accounts.

The ranking of the variants depends to some extent on the selection of pages. On the 21 pages read by all seven variants (toggle above), Sonnet’s result approaches that of Gemini low (10.9% versus 10.3%). This comparison, however, excludes the most difficult pages, on which Sonnet loses the most and Gemini most often interrupts the reading. This issue is discussed in Section 7.

Error rate by document

Strict CER within a group of pages. In brackets: pages read by all 5 variants / pages in the group.

Three observations follow from the chart:

  • With legible handwriting the results are even. The “Connotacya” from Zamość is carefully written, and every model reaches 4–5% errors, mostly due to differences in convention (capital letters, “y” instead of “i”).
  • Differences emerge with difficult handwriting. In the divorce records of 1822–23 the error rate is 12–13% for Gemini, 17% for Sonnet and 19–23% for Sol.
  • The higher cost of Gemini’s high variant is justified only for forms. On printed KRWRiOP forms filled in by hand, the low variant reaches 18% and the high variant 10%. In the remaining groups the difference lies within the measurement error.

4. Results for individual pages

The rows of the map correspond to pages and the columns to variants. A darker cell indicates a higher error rate, and a hatched cell a reading interrupted by Gemini. Details are displayed when the cursor is placed over a cell.

5. Analysis of selected pages

Five pages on which the differences between the models are particularly pronounced are discussed below.

Fragment of a page of the Connotacya chronicle, careful 18th-century handwriting
“Connotacya”, p. 11 (1689–1726). The careful handwriting of a Zamość burgher. All variants: 3.3–4.8% CER. With handwriting of this kind, the choice of model has no significant effect on the result.
Printed Monitorium form of the Government Commission, 1821, filled in by hand
KRWRiOP Monitorium, 21 December 1821. Print, handwritten entries and crossings-out on a single page. Gemini low 34% CER, Gemini high 12.5%, Sol low 10.6%. In this case reasoning improves the result, because the model has to separate the printed text from the entries.
Fragment of a court usher’s certificate from 1823, cursive that is difficult to read
Sozańscy, 1823, court usher’s certificate. The most difficult handwriting in the test: all models 29–52% CER. The models do not leave gaps but insert phrases absent from the manuscript, e.g. „w asystencyi JPP Świadków”, reproducing a typical official formula instead of reading the text.
Page of a 1944 account written in pencil, with crossings-out in coloured crayon
Account of the Warsaw Uprising, 1944. Pencil, squared paper, crossings-out in crayon. The only group in which Sonnet achieves the best result (20.7% versus 23–31%). The reference transcription also includes the crossed-out text, which the models omit; part of the errors is therefore due to a difference in convention.

5.1. Comparison of four readings of a single passage

“Sekreta różne”, p. 9: a recipe for preventing smallpox scars. A wavy underline marks an error, and a dotted underline a difference solely in letter case, diacritics or punctuation. The reference text is given in superscript.

Substantive error: „rtęć” (mercury) instead of „ruty” (rue)Sol high read „powieś na szyi rtęć” (“hang mercury around the neck”) instead of „powies na szyi rutę” (“hang rue around the neck”), in a recipe intended for a sick child. The example shows that automatic reading requires correction before publication: the error is grammatically correct and plausible in context.

A considerable proportion of the marked differences are differences in convention. The models modernise „Swiezego” to „świeżego” and add the heading „J. M. J.”, which is omitted in the Wikisource transcription. Strict CER counts these differences as errors; normalised CER disregards them. For this reason we report both measures in the tables.

6. Cost and effect of reasoning

Models with a reasoning function consume tokens on hidden reasoning before generating the response; these tokens are billed as output. In the task of manuscript transcription, the additional cost translates into almost no gain in accuracy.

Token composition per page

Average per page, all 30 pages. Input (image + prompt), reasoning, visible response.

inputreasoningresponse

Reasoning and accuracy gain

Each point is a page. Horizontal axis: Gemini high reasoning tokens. Vertical axis: CER difference between the low and high variants in percentage points.

  • During calibration (3 pages) Gemini high used on average 7.7k reasoning tokens per page; in the full test 23.8k, with a maximum of 87,915 tokens for a single page of the “Sekreta”. This corresponds to approximately 30 pages of text; the CER of that page fell from 9.0% to 8.0%.
  • Sol high uses a similar number of reasoning tokens (12k), but the price per token is almost three times higher. In addition, a full-resolution image amounts to 7.4k input tokens in its case, compared with 3.1k for Gemini.
  • Sonnet 5.5 uses few reasoning tokens (2.1k) but generates the longest responses, because it describes margins, ink colour and the hand in greater detail.

7. Interrupted readings in Gemini

The most significant result of the study does not concern the error rate. On some pages Gemini interrupts its response during generation, often in mid-sentence. We had already observed such blocks in the core of the fonds (2.8% of pages were processed in fallback mode); in the present test they proved to be document-dependent rather than random.

Heading of the recipe „Sposób robienia Massy do Sklejenia stłuczonych Farfur”, manuscript of 1752
“Sekreta różne”, p. 5 (AGAD, 1752). „Sposób robienia Massy do Sklejenia stłuczonych Farfur”, i.e. a recipe for a porcelain adhesive made from burnt oyster shell and egg white. Gemini via Vertex usually stops after the words „Sposob robienia Massy do Skle…”. Scan: Wikimedia Commons, transcription: Wikisource (CC BY-SA).

7.1. Point of interruption

Via OpenRouter, the text generated before the interruption is available (the direct Google API returns an empty response in such cases). The length of the bar corresponds to the whole page (2,285 characters of reference text), and the filled portion to the generated part.

7.2. Control trials

Prompt for Gemini (p. 5, reasoning low)AI StudioVertex
Summary of the manuscript’s content in Englishfull responsefull response
Diplomatic transcription from the image (text only, no JSON)interruptedinterrupted
Transcription from the image with modernised spellinginterrupted (51 chars)interrupted (25 chars)
Without image: verbatim repetition of the pasted text of the whole pagefull responsefull response
Without image: translation of that text into Englishfull responsefull response
Greyscale image rotated by 2°; image reduced to 60%interruptedinterrupted
Lower half of the page only (without the title „Sposób robienia…”)full responseinterrupted (704 chars)

7.3. Hypotheses on the cause of interruptions

HypothesisAssessmentRationale
Recitation filter: the model does not reproduce text from its training data (Wikisource is available online)unlikelyThe model repeats pasted text in full. The modernised version, which does not exist online, is also interrupted.
Recognition of the specific scan from CommonsrejectedModified images (greyscale, rotation, reduction) are also interrupted.
An output classifier for “image → text” tasks, sensitive to “how to make” instructions (burning, powders, compounds)most likelyThe interruption occurs immediately after „Sposób robienia…”, the summary is not blocked, and the lower half of the page without the heading was read in AI Studio. The hypothesis does not explain why text without an image is not blocked.
A classifier for religious and violent content (Vertex only)possibleVertex also interrupted the reading of both copies of the Łyszczyński case records (atheism, blasphemy, execution in 1689) before the first character. AI Studio read these pages.
Copy of the 1689 Sejm decree against Łyszczyński, black-and-white scan
Copy of the Sejm decree against Łyszczyński, 1689. Vertex (high): response interrupted before the first character. AI Studio (low): 13.4% CER, the best result among all models. Scan: Commons, transcription: Wikisource.

Practical conclusions:

  • The same model offered through two services is subject to different filters. AI Studio (used in the project) blocked 3 of 60 readings, Vertex via OpenRouter 10 of 60.
  • Blocks depend on the type of document, not on scan quality. Recipe books, manuals and records of blasphemy cases may be omitted entirely. Household recipes may also occur in the estate papers of Nawra.
  • Retrying the request does not solve the problem. The solution is to use a different model: Sol and Sonnet did not block a single page. On the “Sekreta” pages that were read, Gemini achieves 9% CER and Sonnet 15%; the fallback model provides the text at the cost of lower accuracy.

8. Reliability of model self-assessment

Each reading includes a self-assessment of page legibility (good, medium, poor) and [?] markers for uncertain words. If these signals agree with the actual CER, they can be used to route to a second reading or to correction only those pages for which the model itself signals uncertainty.

Self-assessed legibility and actual error rate

Mean CER of pages that the model rated as having good, medium or poor legibility; number of pages below each bar.

Sonnet’s self-assessment is the best calibrated. Its three ratings delimit groups of pages with a CER of 4.7%, 16% and 26%. It places [?] markers on 25 of 30 pages, and reads pages without markers almost without error (4.8%). Gemini high’s rating distinguishes two levels (8% versus 20%), whereas Gemini low placed [?] markers on only 6 pages, including pages where it did make errors. This matters for correction: Gemini’s reading is more accurate, but it is harder to identify the passages in it that require checking.

Best reading of each page

Strict CER on the 28 pages read by all 5 main variants. The last bar is the upper bound of combining models, attainable only if the correct reading is selected.

Selecting the best of the five readings for each page would reduce the error from 10.8% (Gemini high) to 9.5%. Reading each page with several models therefore yields little benefit compared with Gemini alone. Using a second model is justified where the first returned no text.

9. Flex and Batch processing modes

Because of Sol’s high cost we attempted to use cheaper OpenAI modes, both with a 50% discount: Flex (requests served when computing capacity is available) and Batch (batch processing within 24 hours). Course of the trials:

  1. 12 Oct, calibrationFlex mode works for a trial request (5 tokens).
  2. 12 Oct, run38 of 54 requests are rejected with the code flex_unavailable (“Flex processing is temporarily unavailable”). Requests that were served took up to 21 minutes per page.
  3. 12 Oct, BatchJob submission rejected with the message “Billing hard limit has been reached” (the account spending limit, independent of the limit in the script). The account was topped up.
  4. 13 Oct, 9:59Submission of a batch job with 38 readings.
  5. 11:25 → 12:18 → 13:21Progress: 1 of 38, then 17 of 38, unchanged after an hour. Batch mode does not make partial results available before the job is completed.
  6. 13:25Job cancelled. OpenAI returns the 17 completed readings at the batch price; the remaining 21 were performed in standard mode in under an hour.
  • „Mlijenia sztucznych Furfur”Sonnet’s reading of the heading „Sklejenia stłuczonych Farfur”, i.e. of a recipe for a porcelain adhesive.
  • „nachalność”Gemini low’s reading (“impertinence”) in place of „na sameo Pana boga” in Zabistowski’s speech. Gemini high read „Maiestat”, which remains consistent with the sense of the sentence.
  • Anno 1609The reference text of the “Connotacya” gives the year 1609 where the scan and historical sources indicate 1689. Reference transcriptions also contain errors.
  • “0.5em 2em 200%”An error in our own processing pipeline: when wiki templates were cleaned, style parameters were extracted instead of text. After the fix, the CER of some Wikisource documents fell by over ten percentage points.
  • missing commaGemini via OpenRouter four times returned JSON without a comma between objects. A repeated request returned a valid result.
  • 300 secondsThe Gemini response time limit. It was exceeded once; the repeated reading of that page of the divorce records took 204 s and used 22.8k reasoning tokens.

10. Estimated cost of reading the entire fonds

The Sczaniecki Archive comprises 60,197 scans. We assume that approximately 69% of them contain text, as in the core (672 of 973), i.e. approximately 41,500 pages. The chart shows the cost of a single reading with each variant at the standard price and in batch mode (50% discount with all three providers).

Single reading of the entire fonds

USD, cost per page measured in the test × 41,500 pages. Light bar: standard price; dark bar: batch mode.

The cost range exceeds a factor of thirty: from approximately 200 dollars (Gemini low, batch mode) to approximately 7,200 dollars (Sol high, standard price). The full processing pipeline (two readings, knowledge graph, name resolution) cost $0.018 per page in batch mode for the core, which amounts to approximately 740 dollars for the entire fonds. Gemini’s batch pricing changes in 2027 and will need to be recalculated before large-scale processing.

11. Recommended workflow

The test results suggest the following rule: the reading is performed by the least expensive model, and a second model is used only where the first returned no text or signals uncertainty.

1. Gemini 3.8 Flash, reasoning lowImage at the highest resolution, AI Studio (not Vertex), batch mode. Approx. $0.005 per page.
reading result
Reading interrupted by a filterSonnet 5.5 high. In the test 3 of 60 readings, in the core approx. 3%.
Form or print with entriesGemini high: reasoning reduces CER from 18% to 10%.
Self-assessment “medium” or disagreement between two readingsSecond reading and adjudication; pages routed to correction with priority.
text + confidence markers
2. Correction in the “Archivist’s Desk”Manual correction, starting with uncertain pages. Each corrected page feeds the data for model fine-tuning and further tests.

We do not recommend switching to Sol or applying the high variant to all pages: in the test it increased the cost tenfold for an improvement of 0.3 percentage points.

12. Further work

  1. Our own reference set. 18 pages from the fonds are awaiting correction in the browser. Only this set will make it possible to assess the reading of the handwriting of the Kruszyński papers rather than of the Zamość chronicle.
  2. Kurrent. 42 pages from Dresden have been downloaded. German texts make up 30% of the pages in the core, and no measurement is yet available for them.
  3. Safety settings. It should be verified whether explicitly setting safetySettings in the Gemini API reduces the number of interrupted readings of the “Sekreta”. OpenRouter does not pass these settings through.
  4. Extension of the TranskriBUW set. The service contains more approved pages than were used in the test (the remaining pages of the “Connotacya”, the divorce records and KRWRiOP). Publishing results that include their text requires the consent of BUW, as the transcriptions have no specified licence.
  5. Uncertainty indicator. It should be tested on the reference set whether disagreement between two Gemini readings predicts errors better than self-assessment. The result will determine whether a second reading is performed always or conditionally.

13. Other models and fine-tuning

The test covered three models from three providers. Models from various market segments qualify for the next round. A further open question is whether, instead of choosing an off-the-shelf model, one should fine-tune a model of one’s own on the basis of the corrections made.

13.1. Models for the next round of tests

  • More capable models from the same providers: Claude Opus 5.5 and a higher-tier Gemini model, if one is released. They may read more accurately, but at a price several times higher they are justified only as a second reading of difficult pages.
  • Cheaper variants: Claude Haiku 5.5 and cheaper GPT-6 models. In the role of a fallback model for Gemini blocks, the absence of refusals is what matters most; accuracy may be lower.
  • Open vision-language models (e.g. the Qwen-VL family) and document OCR models. Running them on one’s own GPU infrastructure is inexpensive and not subject to content filters. Without fine-tuning, however, eighteenth-century Polish cursive remains beyond their capabilities.
  • Classical HTR systems: Transkribus (the models “Polish M2” and “Polski Wieszcz”) and eScriptorium/Kraken. They recognise text line by line, are very inexpensive to operate and effective for a single hand in long series. They do not interpret layout or content and therefore cannot replace the knowledge-graph construction stage.

13.2. Methods for improving accuracy

Examples in the prompt

Data
3–5 corrected pages in the same hand
Cost
more input tokens for every reading, no training
Advantages
can be tested immediately, on any model
Disadvantages
works for one hand, not for the entire fonds; context length increases

Fine-tuning a model in the cloud

Data
hundreds of corrected pages
Cost
training plus a higher reading price for the fine-tuned model
Advantages
understanding of content and the JSON format are retained
Disadvantages
availability for vision models must be checked with each provider; filters remain

Open model with an adapter (LoRA)

Data
500–2,000 corrected pages
Cost
GPUs for training and reading, engineering work
Advantages
no filters and no per-page fees; the model remains within the project
Disadvantages
lower baseline; own measurements and maintenance required

Classical HTR model

Data
thousands of segmented lines
Cost
low to operate, high for data preparation
Advantages
high effectiveness for a single hand in a long series
Disadvantages
text only; metadata, dates and persons require a separate stage

A combination of these methods appears most advantageous. Gemini performs an inexpensive reading of the whole. Correctors in the “Archivist’s Desk” correct uncertain pages first. The corrections are used to fine-tune an open model or as in-prompt examples for a given hand. Once several thousand corrected pages have been accumulated, a model of our own can take over repetitive series (e.g. the Nawra estate registers), while the large models remain reserved for difficult cases and content analysis. The precondition is that corrections from the “Archivist’s Desk” are stored as image–text pairs, which should be provided for already at the present stage.

Proposal for an open test setNo Polish set for evaluating the automatic reading of manuscripts exists. The corrected pages of the Sczaniecki Archive (public domain, State Archives in Toruń) and, with the consent of BUW, the approved pages of TranskriBUW could form its basis. Such a set would serve all archival projects in Poland.

14. Limitations of the study

  • 30 pages and approximately 15 hands constitute a small sample. Differences below 1–2 percentage points within a group lie within the measurement error.
  • The reference transcriptions were made by volunteers according to rules of their own (e.g. regarding the transcription of crossings-out). Part of the models’ errors results from differences in convention. The prompt was not adapted to these rules.
  • Sol performed its readings in three modes (Flex, Batch, standard). The mode does not affect accuracy, but the measured times do not reflect the model’s speed; costs are given at the standard price.
  • Prices as of 11–13 October 2026. Each reading is a single one; a second reading and adjudication (used in our processing pipeline) reduce the error but were not the subject of this measurement.

Sources and licences. TranskriBUW scans: University of Warsaw Library, public domain. TranskriBUW transcriptions were used solely to calculate error rates and are not quoted here, with the exception of one year in the list of observations in Section 9. Wikisource scans and transcriptions: Wikimedia Commons / Wikisource (Polish), CC BY-SA. The Sczaniecki Archive from Nawra: State Archives in Toruń, fonds 69/833/0.