Skip to main content

Open weights

OpenThai 2.0 OCR Markdown

An open model that reads Thai document pages into Markdown, with every table kept as a table.

  • Parameters0.63billion
  • LicenceOpenMDW-1.1
  • Thai document tables95.2score
  • One H1001.6s a page

Download the weightsRead the launch post

Released 12 November 2026 by iApp Technology, as open weights on Hugging Face: a free download.

What it does​

  • Keeps tables as tablesTables come out as HTML with rowspan and colspan, so the merged header cells of Thai government forms survive. 95.2 on 65 real Thai government and university pages, against 91.3 for its base model.
  • Writes MarkdownHeadings, lists and paragraphs come out as Markdown, ready for a search index, a retrieval pipeline or a language model's prompt.
  • Marks where each block isEvery block carries a bounding box and a class such as title, text, table or picture, in reading order.
  • Reads columns in orderTwo- and three-column pages are read column by column instead of straight across.
  • Runs on one GPU1.6 seconds a page on one NVIDIA H100 with vLLM, one page at a time. 0.63 billion parameters.

Measured​

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.

ModelSizeThai document tablesThaiOCRBench tablesPrinted Thai textSeconds a pageNew Royal Gazette pages
OpenThai 2.0 OCR Markdown0.63B95.268.990.31.698.7
Nemotron 3.5 Parse (base model)0.63B91.368.389.01.891.5
Typhoon OCR V2 2B2B91.667.689.615.894.6
Typhoon OCR V2 0.8B0.8B89.064.785.818.7–
  • 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, level with it on ThaiOCRBench tables and on printed text, and about 10 times faster at a third of the size. On 339 new Royal Gazette pages, published after our training data was collected, it read 98.7% of characters correctly, against 94.6% for Typhoon OCR V2 2B. The benchmarks, the scoring scripts and how the checkpoint was chosen are in the model card.

Run it​

The model repository ships NVIDIA's nemotron_parse package, which serves and post-processes it.

hf download iapp/OpenThai2.0-OCR-Markdown --local-dir OpenThai2.0-OCR-Markdown
pip install vllm==0.26.0
pip install -e ./OpenThai2.0-OCR-Markdown
vllm serve ./OpenThai2.0-OCR-Markdown --served-model-name nemotron-parse --trust-remote-code

Tested with vLLM 0.26.0, transformers 5.14.1, PyTorch 2.11 and Python 3.10. It runs anywhere Nemotron 3.5 Parse runs.

Prefer a hosted service? The OpenThai 2.0 OCR Markdown API runs this model for you, in Thailand, at 0.15 IC a page. For plain text, Word, PowerPoint, Excel or a searchable PDF, OpenThai 2.0 OCR Text starts at 0.049 IC a page.

Limits​

  • Repetition loops. None in our tests: no page was cut off by a loop among 2,270 printed-text pages, 193 ThaiOCRBench table images, 65 Thai document table pages and 6,137 development pages. If another page is cut off at the token limit, DocumentParser raises GenerationError, so the page can go to another reader.
  • 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.
  • Charts are read as the base model reads them; they were not part of the fine-tuning.

Training​

The text labels are exact, never another model's reading: 54,596 training rows, mostly synthetic Thai documents (forms, memos, minutes, schedules and merged-cell tables, rendered with scan and phone-photo damage, plus two- and three-column pages) and born-digital Thai government pages, the Thai parliament's budget documents and the Royal Gazette, whose text layer gives the exact text, plus tables of other kinds: public financial and scientific tables (FinTabNet and PubTabNet), and synthetic Thai receipts, statements and lab reports, some with every digit in Thai. They include 420 pages on which earlier fine-tunes ran into a repetition loop, with the loop as the thing not to write. Trained on one H100 for one epoch of 1,707 steps; the release is the last checkpoint, used as trained, with none of the base model's weights blended in. It was picked by a rule fixed before any candidate was scored, on development sets only. No benchmark page was trained on. The mix, the recipe and the rule are in the model card.

Licence​

OpenMDW License Agreement, version 1.1, the licence of its base model. OpenThai 2.0 OCR Markdown is a Thai fine-tune of NVIDIA Nemotron 3.5 Parse (0.63B); NVIDIA's licence, notices and original model card are included unchanged in the repository. The tokenizer is MIT-licensed.

Built on NVIDIA Nemotron.

Built by iApp Technology. Trained and evaluated on an NVIDIA H100 GPU provided by Siam AI Corporation.

Siam AI Corporation