Measured
The model's benchmark, with the same pages and the same scoring script for every model:
Every model read the same pages and was scored by the same script; Typhoon OCR V2 2B and Typhoon OCR V2 0.8B ran with the settings on their model card. Intervals are 95% paired bootstrap intervals over pages.
- Thai document tables: 65 real Thai government and university pages, text and tables scored together. Ahead of Typhoon OCR V2 2B by 3.6 points, 95% interval [+1.2, +6.2], and 3.9 points above its base model.
- ThaiOCRBench tables: table structure and content (TEDS) on its 193 table images. +1.3 against Typhoon OCR V2 2B, [−1.7, +4.6]: a tie.
- Printed Thai text: character accuracy, 100 × (1 − character error rate), averaged over 12 sets of 1,200 pages and 50 whole Administrative Court judgments. +0.76 against Typhoon OCR V2 2B, [−0.04, +1.51]: a tie. A page cut off by a repetition loop counts as empty; none of the 2,270 pages was.
- Seconds a page: the median of 12 pages sent one at a time to vLLM on one NVIDIA H100. Typhoon OCR V2 2B needs
--enforce-eager on the vLLM version we used, so its time is pessimistic. - New Royal Gazette pages: 339 pages from 293 documents published from 4 to 9 November 2026, after our training data was collected. The set was locked before any model read it, and each model read each page once; character accuracy. These are new documents of a kind OpenThai 2.0 OCR Markdown was trained on (Royal Gazette pages from earlier months), so they show how it reads unseen documents, not a new kind of document. The reference text comes from the same tool that made our Royal Gazette training labels, so it follows conventions this model learned. +4.1 against Typhoon OCR V2 2B, [+3.7, +4.4]; with every space removed, so that line-joining conventions do not count, +3.5, [+3.2, +3.9]. Typhoon OCR V2 0.8B was not run on this set.
In short: significantly better than Typhoon OCR V2 2B on Thai document tables and on new Royal Gazette pages, and level with it on ThaiOCRBench tables and on printed text. On 339 new Royal Gazette pages, published after the training data was collected, it read 98.7% of characters correctly, against 94.6% for Typhoon OCR V2 2B. The method and every set are on the model page.
These figures hold for the API, because the API runs the model with nothing in between. Run through the live endpoint on 10 November 2026, the 65 table pages scored 95.8, with no failed request and no page cut off.
Measured on the production service on 10 November 2026: a median of 1.49 s per page from request to answer, sent from Bangkok one page at a time (0.87 to 3.40 s over 12 table pages), and about 19,200 dense pages an hour with 16 pages in flight. A 100-page PDF of 24 MB is read in about 20 seconds at the service, not counting the upload.
Limits
- 100 pages and 50 MB per request; split a longer document.
- Photographed single words and very short crops read worse than full pages: 96.4 on the OCR104 photographed document crops, against 99.8 for Typhoon OCR V2 2B.
- Dot-matrix print (bank passbooks, impact-printed forms) reads less well than ordinary print: about 89% character accuracy on our dot-matrix development crops; the crops are generated and there is no real dot-matrix test set yet, so expect less on real passbooks.
- Handwriting is read at the level of single text lines; full handwritten pages are not a target.
- Scene text and photographs of screens are not targets.
Data handling
Documents are processed in Thailand and held in memory for the request only: neither the file nor the result is stored. Only the request's metadata is logged (path, status, pages and time). Consent and notice under PDPA and GDPR remain with you as the data controller.
The model is open, so it can also run on your own GPU and no document has to leave your network: the weights are on Hugging Face, a free download, and the model page has the commands.
Changelog
| Version | Date | Changes |
|---|
| v1.0.0-20261112 | 12 Nov 2026 | First release: OpenThai 2.0 OCR Markdown as an API, 0.15 IC per page. |