Best open-source OCR models in November 2026: 14 local document parsers by score, license and VRAM
On the OmniDocBench v1.6 leaderboard (checked 7 November 2026), the four best open-weight document parsers have under 1.6B parameters each: OXR-1.0 scores 97.03, TeleOCR 96.91, OvisOCR2 96.47 and PaddleOCR-VL-1.6 96.34, all ahead of Gemini 3 Pro at 92.91. On olmOCR-Bench, which tests English PDFs, the best open scores are self-reported: OXR-1.0 at 87.8, LightOnOCR-3-4B at 86.3 and Chandra OCR 2 at 85.8. Every model here has under 17 GB of weights, but only some licenses allow unrestricted commercial use, and HunyuanOCR's excludes the EU.
| Model | Params (Hub) | Weights | OmniDocBench v1.6 | olmOCR-Bench | License | Source | Date |
|---|---|---|---|---|---|---|---|
| OXR-1.0 | 1.53B | 3.1 GB | 97.03 | 87.8 (self) | Custom, Apache-based; paid above $2M | HF card | 2026-10 |
| TeleOCR | 1.42B | 2.8 GB | 96.91 | not reported | Apache 2.0 | HF card | 2026-08-17 |
| OvisOCR2 | 0.85B | 1.7 GB | 96.47 | not reported | Apache 2.0 | HF card | 2026-07 |
| PaddleOCR-VL-1.6 | 0.96B | 1.9 GB | 96.34 | not reported | Apache 2.0 | HF card | 2026-05-28 |
| MinerU2.5-Pro-2605 | 1.16B | 2.3 GB | 95.75 | not reported | Apache 2.0 | HF card | 2026-05-21 |
| GLM-OCR | 1.33B | 2.7 GB | 95.22 | 75.2 (self, no headers) | MIT | HF card | 2026-01 |
| dots.mocr (dots.ocr 1.5) | 3.04B | 6.1 GB | 90.77 (dots.ocr v1) | 83.9 (self) | MIT plus license agreement | GitHub | 2026-03-19 |
| DeepSeek-OCR 2 | 3.39B | 6.8 GB | 90.25 | 76.3 (self) | Apache 2.0 | HF card | 2026-01-27 |
| HunyuanOCR | 1.12B | 2.2 GB | 89.95 | not reported | Tencent community; excludes EU, UK, South Korea | License | 2025-11-25 |
| olmOCR-2-7B-1025 | 8.29B | 16.6 GB (10.1 GB FP8) | 85.74 (version not stated) | 82.4 (Ai2) | Apache 2.0 | HF card | 2025-10-21 |
| LightOnOCR-3-4B | 4.54B | 9.1 GB | not listed | 86.3 (self); 85.4 (Datalab rerun) | Apache 2.0 | LightOn | 2026-10-08 |
| LightOnOCR-3-0.8B | 0.85B | 1.7 GB | not listed | 85.5 (self) | Apache 2.0 | LightOn | 2026-10-08 |
| Chandra OCR 2 | 5.30B | 10.6 GB | not listed | 85.8 (self) | Modified OpenRAIL-M; paid above $2M | HF card | 2026-03 |
| Surya OCR 2.5 | 0.69B | 1.4 GB | not listed | 83.7 (self) | Modified OpenRAIL-M; paid above $5M | HF card | 2026-10 |
All figures checked 7 November 2026. OmniDocBench scores are from the official leaderboard (table headed v1.6_full). olmOCR-Bench "self" means the model's developer ran it; "Ai2" means Ai2's in-house run. Params and weights are the BF16 safetensors totals from each Hugging Face repo, which run higher than the names suggest (TeleOCR is described as 1.2B, OXR-1.0 as 1.3B). Date is the release date on the card, or the Hugging Face repo month when the card gives none.
Which open OCR model scores best on OmniDocBench?
OXR-1.0 leads at 97.03, but the top four sit within 0.7 points of each other and three of them are Apache 2.0. The OmniDocBench README describes 1,651 pages in English, Simplified Chinese and mixed text across academic papers, slides, textbooks, exam papers, handwritten notes, magazines, financial reports and newspapers. Overall is the mean of three parts: (1 minus text edit distance) times 100, table TEDS and formula CDM. Version 1.6 (10 April 2026) added 296 harder pages; a v1.7 update on 30 April added skills-based evaluation, but the leaderboard is still labelled v1.6_full. The last dated news entry (11 September 2026) added TeleOCR, OvisOCR2 and Unlimited-OCR; OXR-1.0, whose repo appeared in October, sits at the top without a news entry.
Sub-2B specialists now beat frontier APIs on this test: Gemini 3 Pro scores 92.91, Gemini 3 Flash 92.62 and GPT-5.2 86.59 on the same table, and Qwen3-VL-235B, a general VLM, gets 89.78. At the top, the sub-metrics matter more than the headline. TeleOCR has the best table TEDS of the four at 96.82; PaddleOCR-VL-1.6 has the best formula CDM at 97.53. The README does not say whether maintainers or model authors ran each entry, and the cards differ slightly from the table: OvisOCR2's card claims 96.58, TeleOCR's 96.87 and PaddleOCR-VL-1.6's 96.33.
PaddleOCR-VL-1.6, GLM-OCR and OXR-1.0 are pipelines: a separate layout model (PP-DocLayoutV3, in the first two cases) finds regions and the VLM reads them. OvisOCR2's card calls it the first end-to-end model to top the leaderboard, meaning one model, one vLLM process.
Why do olmOCR-Bench rankings look different?
Because it tests different documents with pass/fail unit tests, and most current scores are the vendors' own runs. The olmOCR-Bench dataset card lists 1,403 English PDFs and 7,010 tests across arXiv math, old scanned math, tables, old scans, headers and footers, multi-column pages and long tiny text. Ai2's own results table stops at olmOCR v0.4.0 (82.4, released 21 October 2025) and marks third-party scores such as Chandra OCR 0.1.0 (83.1) and PaddleOCR-VL (80.0) as author-reported.
Newer scores come from vendors. LightOn's launch post (8 October 2026) puts LightOnOCR-3-4B at 86.3 and its own 0.8B at 85.5. Datalab's rerun (last run 14 October 2026, olmocr 0.4.27, headers and footers left out) gets 85.4 for the same 4B model, a point lower. That gap is the size of most differences in the ranking, so I treat olmOCR-Bench scores within one point as a tie.
The OmniDocBench leaders mostly skip this benchmark. PaddleOCR-VL-1.6's card reports only the Old Scans category (38.6), and GLM-OCR's 75.2 excludes headers and footers. Old scans are the weakest category for most models: 51.1 for Chandra 2, 47.7 for olmOCR 2 and 33.3 for the first DeepSeek-OCR in the table on the Chandra 2 card. If your archive is English scans, math or small print, weight olmOCR-Bench; for slides, reports and mixed layouts, weight OmniDocBench. Neither tests German, French or Czech. The only multilingual figure I found is Datalab's own 43-language average of 77.8% for Chandra 2.
Which OCR models can you use commercially?
Nine current models are Apache 2.0 or MIT, so the license rarely forces a weaker pick. This summarizes license text; it is not legal advice.
- Apache 2.0: PaddleOCR-VL-1.6, TeleOCR, OvisOCR2, MinerU2.5-Pro-2605, LightOnOCR-3 (all three sizes), DeepSeek-OCR 2 and olmOCR 2 (Ai2 adds its Responsible Use Guidelines).
- MIT: GLM-OCR (its layout model PP-DocLayoutV3 is Apache 2.0) and Unlimited-OCR-2, a 3B multi-page parser Baidu released on 27 October 2026 with no OmniDocBench score yet.
- MIT with conditions: dots.mocr's license agreement allows commercial and SaaS use but adds an acceptable-use policy, requires redistributed fine-tunes to carry "Built with dots.mocr", and puts disputes under Chinese law.
- Revenue thresholds: the OXR-1.0 license needs a separate commercial license once total funding or annual revenue passes USD 2 million, requires online services to name "SoMark OXR", and bans a competing hosted API at any size. Chandra OCR 2 uses the same USD 2 million tests plus a no-competition clause; Surya OCR 2.5 sets the bar at USD 5 million.
- Territory exclusion: the Tencent Hunyuan Community License for HunyuanOCR covers the world "excluding the territory of the European Union, United Kingdom and South Korea".
How much VRAM does a local OCR model need?
Less than any LLM you would run next to it: weights are 1.4 to 16.6 GB, and by my calculation 32 pages in flight add 2.4 to 23 GB of KV cache, depending on the model. KV cache per token is 2 (keys and values) x attention layers x KV heads x head dimension x 2 bytes in BF16, with the values read from each repo's config.json. For a page I assume 4,800 image tokens, LightOn's figure for its 400 DPI setting, plus about 1,400 generated tokens, which is what the PaddleOCR-VL-1.5 paper's A100 table gives when you divide its tokens per second (1,605.6) by its pages per second (1.1433).
| Model | Layers x KV heads x head dim | KV per token | KV, 32 pages x 6,200 tokens | Plus weights |
|---|---|---|---|---|
| OvisOCR2 | 6 full-attention x 2 x 256 | 12 KiB | 2.4 GB | 4.1 GB |
| PaddleOCR-VL-1.6 | 18 x 2 x 128 | 18 KiB | 3.7 GB | 5.6 GB |
| LightOnOCR-3-4B | 8 full-attention x 4 x 256 | 32 KiB | 6.5 GB | 15.6 GB |
| olmOCR-2-7B (FP8) | 28 x 4 x 128 | 56 KiB | 11.4 GB | 21.4 GB |
| TeleOCR | 28 x 8 x 128 | 112 KiB | 22.8 GB | 25.6 GB |
My calculation from config.json files on Hugging Face, 7 November 2026. OvisOCR2 and LightOnOCR-3-4B use the Qwen3.5 hybrid layout, where most layers are linear attention with a small fixed state per sequence that I have not counted. Image tokens per page vary by model and DPI (olmOCR renders at 1,288 px on the long side), so scale the KV column linearly for your own setting. Activations and the vision encoder add a few GB.
The one field report I found lines up. Wael Mansour ran OvisOCR2 on an RTX 5090 at 32 concurrent requests and saw KV cache use stay under 11%, and he concludes a 16 GB card would fit it. Vendors are more cautious with larger models: the olmOCR README asks for at least 12 GB of GPU memory, and the OXR-1.0 card says 24 GB to start and 48 GB for long documents or higher concurrency. On a laptop, Ollama's glm-ocr q8_0 build is a 1.8 GB download.
How fast is local OCR on an RTX 5090, H100 or DGX Spark?
Reported figures run from about 1.1 to 10 pages per second on one GPU, and I found no published OCR throughput for a GB10 machine.
| Model | GPU | Engine | Pages/s | Conditions | Source | Date |
|---|---|---|---|---|---|---|
| OvisOCR2 | RTX 5090 | vLLM 0.22.1 | 9.8 (9.35 full corpus) | 150 DPI, 32 concurrent, max_tokens 4,096 | Wael Mansour | 2026-07-20 |
| Surya OCR 2 | RTX 5090 | vLLM 0.20.1, MTP | 5.35 | 128 concurrent | Datalab | 2026-05-27 |
| LightOnOCR-3-0.8B | H100 | vLLM 0.30.0 | 4.78 | 1540 px, peak setting | LightOn | 2026-10-08 |
| Surya OCR 2.5 | H100 80 GB | vLLM 0.25.1 | 4.52 | 192 DPI, 32 concurrent | Datalab | 2026-10 |
| LightOnOCR-3-4B | H100 | vLLM 0.30.0 | 3.36 | 1540 px, peak setting | LightOn | 2026-10-08 |
| MinerU2.5-Pro-2605 | A100 | vllm-async-engine | 2.12 (card says fps) | concurrent | OpenDataLab | 2026-05-21 |
| GLM-OCR | not stated | not stated | 1.86 | PDF input, one replica, concurrency 1 | Z.ai card | undated card |
| Chandra OCR 2 | H100 80 GB | vLLM | 1.44 | 96 concurrent, hard benchmark mix | Datalab | undated card |
| PaddleOCR-VL-1.5 | A100 | FastDeploy 2.3 / vLLM 0.10.2 | 1.43 / 1.14 | 1,355 pages, end to end incl. rendering | Baidu paper | 2026-01-29 |
Reported by the named sources; I have not run any of these myself. Settings differ (DPI, concurrency, whether PDF rendering and layout detection are timed), so compare rows only loosely. LightOn's best-accuracy setting (400 DPI, 5 MP cap) is slower than the peak figures shown.
Two details are worth copying. Mansour found 150 DPI gave 50% more throughput than 200 DPI with no measurable accuracy change, while 100 DPI fused table cells. He also saw repetition loops on about 0.5% of pages with greedy decoding, fixed with a retry at frequency_penalty 0.3. Throughput peaked at 32 concurrent requests and fell past that.
What does it cost to OCR 100,000 pages?
About $2.64 on a rented RTX 5090 at the fastest reported rate, by my calculation. The steps, using Mansour's sustained 561 pages per minute for OvisOCR2:
- 100,000 pages / 561 pages per minute = 178 minutes = 2.97 hours.
- 2.97 hours x $0.89 per hour (the RTX 5090 rental GPUwerk sells, billed per minute; I run that company) = $2.64, or about $26 per million pages.
- At Surya OCR 2's 5.35 pages per second: 100,000 / 5.35 = 18,692 seconds = 5.19 hours = $4.62.
- Chandra OCR 2 at Datalab's 1.44 pages per second on an H100 needs 19.3 GPU hours for the same job.
For scale, Ai2's README claims olmOCR costs "less than $200 USD per million pages". At these prices, GPU time is not the expensive part of an OCR project. Checking output is.
A DGX Spark at $0.79 per hour matches the 5090's cost per page only if it reaches 0.79 / 0.89 = 89% of the 5090's pages per second. The DGX Spark vs RTX 5090 comparison lists about 1 PFLOP of FP4 against about 3.4 PFLOPS, and 273 GB/s against 1,792 GB/s. Batched OCR is heavy on image prefill, so I don't expect a Spark to get near 89%. Where a Spark makes sense is the next step: the OCR model uses a few GB while a large extraction model such as gpt-oss-120b reads the Markdown on the same machine. The batch processing guide covers queueing a job like that.
ARM64 catch for PaddleOCR-VL on a Spark: in April 2026 a metaparadigma.de write-up found no paddlepaddle-gpu build for ARM64 and compiled one for CUDA 13.0 in about 40 minutes. On 7 November 2026 the CUDA 12.9 index lists a paddlepaddle_gpu 3.3.1 linux_aarch64 wheel for Python 3.12; I have not confirmed it includes GB10 kernels. Models served purely through vLLM avoid the question.
How do you run an OCR model locally?
Serve the model with vLLM and send page images to its OpenAI-compatible endpoint. The vLLM supported-models list has dedicated classes for DeepSeek-OCR 2, PaddleOCR-VL, GLM-OCR, LightOnOCR and Qianfan-OCR, and the Qwen-based models (TeleOCR, OvisOCR2, olmOCR, Chandra) give a plain vllm serve command on their cards. From the LightOnOCR-3-4B card:
pip install vllm
vllm serve lightonai/LightOnOCR-3-4B \
--trust-remote-code \
--default-chat-template-kwargs '{"enable_thinking": false}'
The vLLM recipe for PaddleOCR-VL-1.6 (vLLM 0.11.1 or later) turns off prefix and image caching, which help little when every page is new:
vllm serve PaddlePaddle/PaddleOCR-VL-1.6 \
--trust-remote-code \
--max-num-batched-tokens 16384 \
--no-enable-prefix-caching \
--mm-processor-cache-gb 0
For whole PDFs, use the vendor's toolkit, which handles rendering, rotation and retries: pip install olmocr[gpu] (with the CUDA 12.8 PyTorch index the README gives) then olmocr ./workspace --markdown --pdfs file.pdf for olmOCR 2, or pip install chandra-ocr for Chandra. On a laptop, Ollama runs GLM-OCR with ollama run glm-ocr. On a Spark, start from the GB10 container in the vLLM install guide and the five checks for new models on GB10.
Which OCR model should you pick?
For a company that wants no license questions, I'd start with OvisOCR2: Apache 2.0, 1.7 GB, one vLLM process, 96.47 on OmniDocBench, and the fastest RTX 5090 report I could find. If tables matter most, test TeleOCR next to it. For English scans, math and small print, LightOnOCR-3-4B has the best Apache 2.0 olmOCR-Bench score, and LightOn is a Paris company (legal notice), which some EU procurement teams will like. PaddleOCR-VL-1.6 is the safe, well-documented choice on x86. Chandra OCR 2 and OXR-1.0 score well, but check the USD 2 million thresholds before you build on them. Skip HunyuanOCR in Europe.
Whatever you choose, run 200 of your own pages through two candidates before trusting either leaderboard. OCR output usually feeds retrieval next: see the open embedding model rankings and the embeddings and vector search guide. For general vision models that also read documents, see the best open vision-language models; the multimodal guide covers running them on a Spark.
FAQ
What is the best open-source OCR model in 2026?
On the OmniDocBench v1.6 leaderboard (checked 7 November 2026), OXR-1.0 leads at 97.03, followed by TeleOCR at 96.91, OvisOCR2 at 96.47 and PaddleOCR-VL-1.6 at 96.34. OXR-1.0 needs a paid license above USD 2 million in revenue or funding, so the best Apache 2.0 model on that leaderboard is TeleOCR. On olmOCR-Bench, LightOnOCR-3-4B reports 86.3, the best self-reported score from an Apache 2.0 model.
Which open OCR models allow commercial use?
PaddleOCR-VL-1.6, TeleOCR, OvisOCR2, MinerU2.5-Pro, LightOnOCR-3, DeepSeek-OCR 2 and olmOCR 2 are Apache 2.0 on their Hugging Face cards; GLM-OCR and Unlimited-OCR-2 are MIT. OXR-1.0 and Chandra OCR 2 require a separate license once revenue or funding passes USD 2 million, Surya OCR 2.5 at USD 5 million. HunyuanOCR's license excludes the EU, UK and South Korea.
How much VRAM does a local OCR model need?
The weights are small: 1.4 GB for Surya OCR 2.5 up to 16.6 GB for olmOCR-2-7B in BF16, according to the Hugging Face repo file sizes. By my calculation, 32 pages in flight add about 2.4 GB of KV cache for OvisOCR2 and 22.8 GB for TeleOCR. A 16 GB card runs the sub-2B models comfortably; 24 to 32 GB covers the 4B to 8B ones.
How fast is OCR on an RTX 5090?
The fastest RTX 5090 report I found is 590 pages per minute (about 9.8 pages per second) for OvisOCR2 with vLLM 0.22.1 at 150 DPI and 32 concurrent requests, from a July 2026 write-up by Wael Mansour; it held 561 pages per minute on his full corpus. Datalab reports 5.35 pages per second for Surya OCR 2 on an RTX 5090 at 128 concurrent requests.
Can I use HunyuanOCR in the European Union?
Not under its public license. The Tencent Hunyuan Community License Agreement attached to tencent/HunyuanOCR defines its territory as worldwide excluding the European Union, United Kingdom and South Korea, so the grant does not cover use there. HunyuanOCR scores 89.95 on OmniDocBench v1.6, below several Apache 2.0 models of similar size, so an EU team has better options anyway.
Sources
Every figure above is attributed to its source in the sentence or table where it appears. Pages were read on 7 November 2026 unless a date says otherwise.
- OmniDocBench: A Comprehensive Benchmark for Document Parsing and Evaluation (README and leaderboard), OpenDataLab, GitHub
- olmOCR-Bench README, Allen Institute for AI, GitHub
- allenai/olmOCR-bench dataset card, Hugging Face
- allenai/olmocr: Toolkit for linearizing PDFs for LLM datasets/training, Allen Institute for AI, GitHub, 2025-10-21
- allenai/olmOCR-2-7B-1025-FP8 model card, Hugging Face
- PaddlePaddle/PaddleOCR-VL-1.6 model card, Hugging Face, 2026-05-28
- PaddlePaddle/PaddleOCR-VL-1.6 recipe, vLLM Recipes
- PaddleOCR-VL-1.5 technical report (arXiv 2601.21957), arXiv, 2026-01-29
- TeleOCR model card, Hugging Face, 2026-09-10
- ATH-MaaS/OvisOCR2 model card, Hugging Face
- SoMarkAI/OXR-1.0 model card, Hugging Face
- OXR-1.0 LICENSE, SoMark Team, Hugging Face
- opendatalab/MinerU2.5-Pro-2605-1.2B model card, Hugging Face, 2026-05-21
- zai-org/GLM-OCR model card, Hugging Face
- glm-ocr, Ollama library
- deepseek-ai/DeepSeek-OCR-2 model card, Hugging Face
- rednote-hilab/dots.ocr (dots.mocr) repository, GitHub, 2026-03-19
- dots.ocr LICENSE AGREEMENT, rednote-hilab, GitHub
- LightOnOCR-3: High-Performance OCR and Layout Extraction in One Model, LightOn, Hugging Face blog, 2026-10-08
- Legal notice, LightOn SA
- lightonai/LightOnOCR-3-4B model card, Hugging Face
- datalab-to/chandra-ocr-2 model card, Hugging Face
- chandra-ocr-2 LICENSE, Datalab, Hugging Face
- olmOCR-bench benchmark page, Datalab, 2026-10-14
- Announcing Surya OCR 2: small, accurate, multilingual, Datalab, 2026-05-27
- datalab-to/surya-ocr-2.5 model card, Hugging Face
- tencent/HunyuanOCR LICENSE (Tencent Hunyuan Community License Agreement), Tencent, Hugging Face, 2025-11-25
- baidu/Unlimited-OCR-2 model card, Hugging Face, 2026-10-27
- A 0.8B OCR model beat our production pipeline on 827 scanned medical letters, Wael Mansour, 2026-07-20
- [Linux] PaddlePaddle with GPU on DGX Spark, metaparadigma.de, 2026-04-06
- paddlepaddle-gpu package index, CUDA 12.9, PaddlePaddle
- Supported models, vLLM documentation