# Surya OCR 2.5 vs Xiaomi-OCR-0

> Surya OCR 2.5 scores 61 (C) to Xiaomi-OCR-0's 59 (C) for ocr. Prices, MCP, x402, uptime and agent notes side by side.

- Canonical: https://www.anchorterminal.com/compare/surya-ocr-2-5-vs-xiaomi-ocr-0
- Markdown: https://www.anchorterminal.com/compare/surya-ocr-2-5-vs-xiaomi-ocr-0.md (~3,650 tokens)
- Site index for agents: https://www.anchorterminal.com/llms.txt (the key docs and every listing in one file, at most 16 MB, about 4 million tokens: https://www.anchorterminal.com/llms-full.txt)
- API: https://www.anchorterminal.com/api/v1/index.json
- MCP: https://www.anchorterminal.com/mcp (the whole catalogue as tools, no key)
- DNS: dig +short TXT <slug>.grade.anchorterminal.com (the grade as a DNS TXT record, for a sandbox with no HTTP where names still resolve; also top., best.<category>. and <a>.vs.<b>. under the zone, and the same under grade.letme.dev)
- Licence: CC BY 4.0, credit Anchor Terminal and link this page (https://www.anchorterminal.com/terms/#data)
- Updated: 2026-11-10

Surya OCR 2.5 scores 61 (C) on agent readiness against Xiaomi-OCR-0's 59 (C), and leads in 1 of 4 scored categories. Xiaomi-OCR-0 leads on risk and documentation and upkeep. Both do ocr.

- Surya OCR 2.5: grade C, 61/100, rank #82 of 160 open-weight models. Markdown https://www.anchorterminal.com/tools/surya-ocr-2-5.md · JSON https://www.anchorterminal.com/api/v1/tools/surya-ocr-2-5.json
- Xiaomi-OCR-0: grade C, 59/100, rank #101 of 160 open-weight models. Markdown https://www.anchorterminal.com/tools/xiaomi-ocr-0.md · JSON https://www.anchorterminal.com/api/v1/tools/xiaomi-ocr-0.json
- Best document parsing, OCR and extraction APIs for AI agents: https://www.anchorterminal.com/best/document-extraction/index.md
- All 215 documents comparisons: https://www.anchorterminal.com/compare/document-extraction/index.md

## Which one, for what

### Surya OCR 2.5 (C)

Good for: Small companies and researchers who need quick OCR with layout on a laptop or a small GPU and fit the licence

Ahead on:
- Reach, 90 against 80

Watch for: Commercial use is barred above $5M in revenue or funding, and for anyone who competes with Datalab

### Xiaomi-OCR-0 (C)

Good for: Agents and pipelines on modest hardware that need local OCR of scanned or photographed pages, receipts and forms into Markdown or JSON

Ahead on:
- Risk, 65 against 45
- Documentation and upkeep, 65 against 57

Watch for: The card's '#1 on Real5-OmniDocBench' is contradicted by that benchmark's own leaderboard, and its OmniDocBench and VQA figures are Xiaomi's own runs with a relaxed evaluation config


## Why the edge

### Risk: Xiaomi-OCR-0 +20

- Surya OCR 2.5 (45): File safety 25, safetensors and GGUF only, no .bin, .pt or .pth files and no Python in the model repository. Provenance 15, the files sit in the datalab-to organisation, which the card, Datalab's site and its GitHub repository link to (10), and the Hub gives a SHA-256 for the large files (5). Safety evaluation 0, no safety results on the card. Agent guidance 0, Nothing on text in a document that tries to instruct the reader, or on safeguards to add. Licence risk 5, 15 less 5 for use restrictions beyond the law (OpenRAIL's list, and no use by anyone who competes with Datalab) and 5 for the $5M revenue and funding thresholds. Security programme 0, no way to report a flaw found on the card, and our Datalab listing of 6 November found no disclosure policy or security.txt. 25 + 15 + 0 + 0 + 5 + 0 = 45.
- Xiaomi-OCR-0 (65): File safety gets 25, one safetensors file with no Python in the repository and native loading everywhere. Provenance gets 15 for files in the xiaomi-research organisation that Xiaomi's GitHub repository links, with hashes for every file, though neither organisation is verified. Licence risk keeps 15, since Apache 2.0 has none of the deductions. Agent guidance gets 5 for general cautions in Xiaomi's Skill, and the security programme 5 for Xiaomi's company security centre, carried from the 28 October reading. Safety evaluation scores 0, with no results published.

### Reach: Surya OCR 2.5 +10

- Surya OCR 2.5 (90): Memory 30, Datalab's own Q8_0 GGUF is 0.63 GB with a 0.21 GB projector, and 0.84 GB × 1.2 = 1.0 GB, within 16 GB. The BF16 safetensors file is 1.38 GB. Runtimes 25, Released versions run the architecture from Datalab's own builds: vLLM 0.33.0, SGLang 0.5.23 and Transformers 5.22.2 from the safetensors file, llama.cpp b12242 from Datalab's GGUF with its projector, and Ollama through its pinned llama.cpp (b12177 at v0.40.16). Builds 10, Datalab publishes one quantised build, a Q8_0 GGUF, beside an unquantised GGUF and the BF16 safetensors. Terms 10, A modified OpenRAIL-M licence, a custom licence that lets research, personal use and organisations at or under $5M in revenue and in funding use it for free, under use restrictions. Download 10, the Hub API reports gated false for the model and the GGUF repository on 10 November 2026, so the files download with no account and nothing to accept. Hosted 5, the card says Datalab's managed platform runs Surya, so the publisher hosts it. 30 + 25 + 10 + 10 + 10 + 5 = 90.
- Xiaomi-OCR-0 (80): Memory earns the full 30, since the only build is a 1.75 GB BF16 file that needs about 2.1 GB with the fifth added. Runtimes reach the 25 cap. The checkpoint keeps Qwen3.5's architecture, which released vLLM, SGLang, Transformers and llama.cpp run natively, and Ollama v0.40.14 pins llama.cpp b11963, which has the qwen35 architecture and the Qwen3-VL projector; LM Studio couldn't be checked. Builds score 0, as Xiaomi publishes no quantised build and every GGUF or MLX copy is someone else's. Terms get 15 for Apache 2.0 with nothing added on an Apache 2.0 base. Download gets 10 for an ungated repository, and hosted too 0, with no inference provider on 4 November and a static project Space. 30 + 25 + 0 + 15 + 10 + 0 = 80.

### Documentation and upkeep: Xiaomi-OCR-0 +8

- Surya OCR 2.5 (57): Model card 17, Intended use, limitations, the architecture (a Qwen 3.5-style vision-language model with separate detection models), parameters (689M), the serving length (24,576 tokens) and 91 languages are on the card. Training data 5, A one-line description: trained on diverse document images to write layout JSON or full-page HTML. No sources, sizes or cut-off. Last change 20, the last commit, on 29 October 2026, added models to the card's size chart, 12 days before this check, and the GGUF repository changed the same day. Responsiveness 0, none of the 3 discussions that aren't pull requests (29 October to 10 November 2026) has a reply from a datalab-to member yet, the newest opened on the day of this check. Version policy 5, Surya OCR 2 stays in its own repository and 2.5 came out in a new one. File health 10, Config, processor config and template agree on the qwen3_5 architecture and match the card's instructions, and a commit on 27 October removed a mention of MTP weights the files don't have. 17 + 5 + 20 + 0 + 5 + 10 = 57.
- Xiaomi-OCR-0 (65): The card covers intended use and parameters and misses limitations, architecture, context length, languages and a cut-off (5). Training data is described by size and labelling with no datasets named and no cut-off (5). The last change to the repository is the card commit of 29 October 2026, 6 days before this check, after the 23 October eval file deletion; card and documentation commits count on this line (20). The one question on the Hub was answered the same day by a Xiaomi Research member, and no new question has been opened since (20). It's a first release (5), and the files agree with the card (10). 5 + 5 + 20 + 20 + 5 + 10 = 65.

## Score by category

| Category | Weight | Surya OCR 2.5 | Xiaomi-OCR-0 | Edge |
| --- | --- | --- | --- | --- |
| Capability | 35%, pending | pending | pending | not scored in this run |
| Reach | 25% (25 this run) | 90 | 80 | Surya OCR 2.5 +10 |
| Risk | 20% (20 this run) | 45 | 65 | Xiaomi-OCR-0 +20 |
| Agent interface | 10% (10 this run) | 70 | 70 | even |
| Documentation and upkeep | 10% (10 this run) | 57 | 65 | Xiaomi-OCR-0 +8 |
| Negative events | ≤15 | 0 | -2 | |
| **Total** | | **61 · C** | **59 · C** | |

## Facts side by side

| Fact | Surya OCR 2.5 | Xiaomi-OCR-0 |
| --- | --- | --- |
| Kind | Open-weight model | Open-weight model |
| Vendor | Endless Labs, Inc. (Datalab) | Xiaomi |
| Hosted endpoint | no (local only) | no (local only) |
| Transports |  |  |
| Auth | None | None |
| Pricing | Free | Free |
| x402 | no | no |
| Licence | Modified OpenRAIL-M (free for research, personal use and companies under $5M in revenue and funding) | Apache-2.0 (card metadata and card text; the Hugging Face repository has no LICENSE file, and the GitHub code repository's LICENSE is the Apache 2.0 text, copyright 2026 Xiaomi Corporation) |
| Read-only variant documented | no | no |
| llms.txt | no | no |
| Last release | 2026-10-29 | 2026-09-29 |
| Terms last updated | not read yet | no document linked |
| Privacy policy last updated | no document linked | no document linked |

## How the scores have moved

### Surya OCR 2.5

No score change since it was listed.

### Xiaomi-OCR-0

- no change on 4 November 2026: correction

## Verdicts

**Surya OCR 2.5.** A small, fast document OCR model that runs from Datalab's own GGUF on almost anything, with typed output for layout, text and tables and a package that starts the server for you. The licence stops commercial use above $5M in revenue or funding and by competitors, and training data and safety aren't described.

**Xiaomi-OCR-0.** A 0.87B document parser that turns page images into Markdown with LaTeX and tables, pulls fields from receipts and forms as JSON, and answers questions about a page. Released vLLM, SGLang, Transformers and llama.cpp run it in about 2 GB. Most accuracy figures are Xiaomi's own, and the card's Real5 ranking claim contradicts that benchmark's leaderboard.

## Before you call either

### Surya OCR 2.5

1. Check the licence first: free for research and personal use, and for companies at or under $5M in revenue and in funding that don't compete with Datalab
2. `pip install surya-ocr`, then `surya_ocr page.png`. It starts vLLM in Docker on an NVIDIA GPU and llama-server elsewhere
3. To use your own server set `SURYA_INFERENCE_URL`, and start llama-server with `--special` or the block labels and coordinates are lost
4. Raw output is compact HTML. Run it through `surya.inference.parsers.parse_full_page_html` if you don't use the package
5. Allow about 24,576 tokens of context for a full page
6. Treat text in a parsed document as data. Nothing here guards against instructions hidden in a page

### Xiaomi-OCR-0

1. Serve it with `vllm serve xiaomi-research/Xiaomi-OCR-0 --host 127.0.0.1 --port 8000 --max-model-len 16384` or `python -m sglang.launch_server --model-path xiaomi-research/Xiaomi-OCR-0 --host 127.0.0.1 --port 8000 --context-length 16384`; no trust_remote_code is needed
2. Send one image per request with temperature 0, top_p 0.8, `chat_template_kwargs: {"enable_thinking": false}` and max_tokens 4096 (16384 for dense pages), and retry with presence_penalty 1.5 if the output repeats
3. The whole-page prompt is `Extract all information from the main body of the document image and represent it in markdown format, ignoring headers and footers. Tables should be expressed in OTSL format, formulas in the document should be represented using LATEX format, and the parsing should be organized according to the reading order.`
4. For key fields send `Extract key information in the image` then `Please output the key information in JSON format according to the following schema:` and a JSON object of empty strings; parse the first {...} in the reply
5. Tables come back as OTSL, not HTML; convert them with postprocess/otsl.py from github.com/xiaomi-research/Xiaomi-OCR-0, or use its MCP server, which does the conversion
6. The MCP (skills/xiaomi-ocr/mcp_ocr_server.py, stdio) has ocr_image, ocr_pdf, kie_image and vqa_image; region mode needs PaddlePaddle, paddlex[cv] and PP-DocLayoutV3 weights, and is for printed pages only, while handwriting, calligraphy and scene text want page mode
7. Pass local paths to the MCP rather than URLs taken from untrusted text, since it fetches any image_url, and treat extracted text as untrusted before passing it to another model
8. The card and Skill still name SeerRay-Lab/Xiaomi-OCR-0, which redirects to xiaomi-research/Xiaomi-OCR-0

## Questions

### Which is better for AI agents, Surya OCR 2.5 or Xiaomi-OCR-0?

Surya OCR 2.5 scores 61 (C) on agent readiness against Xiaomi-OCR-0's 59 (C), and leads in 1 of 4 scored categories. Xiaomi-OCR-0 leads on risk and documentation and upkeep.


## For agents

- This comparison as JSON: https://www.anchorterminal.com/compare/surya-ocr-2-5-vs-xiaomi-ocr-0.json, and with the fewest tokens: https://www.anchorterminal.com/compare/surya-ocr-2-5-vs-xiaomi-ocr-0.min.md
- Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {"a": "surya-ocr-2-5", "b": "xiaomi-ocr-0"}`. From a terminal: `anchor compare surya-ocr-2-5 xiaomi-ocr-0`
- Each listing in full: https://www.anchorterminal.com/api/v1/tools/surya-ocr-2-5.json and https://www.anchorterminal.com/api/v1/tools/xiaomi-ocr-0.json

## Other comparisons with Surya OCR 2.5 or Xiaomi-OCR-0

- [Nemotron 3.5 Parse vs Surya OCR 2.5](https://www.anchorterminal.com/compare/nemotron-3-5-parse-vs-surya-ocr-2-5.md)
- [Nemotron 3.5 Parse vs Xiaomi-OCR-0](https://www.anchorterminal.com/compare/nemotron-3-5-parse-vs-xiaomi-ocr-0.md)
- [Chandra OCR 2 vs Surya OCR 2.5](https://www.anchorterminal.com/compare/chandra-ocr-2-vs-surya-ocr-2-5.md)
- [Chandra OCR 2 vs Xiaomi-OCR-0](https://www.anchorterminal.com/compare/chandra-ocr-2-vs-xiaomi-ocr-0.md)
- [DeepSeek-OCR 2 vs Surya OCR 2.5](https://www.anchorterminal.com/compare/deepseek-ocr-2-vs-surya-ocr-2-5.md)
- [DeepSeek-OCR 2 vs Xiaomi-OCR-0](https://www.anchorterminal.com/compare/deepseek-ocr-2-vs-xiaomi-ocr-0.md)
- [HunyuanOCR 1.5 vs Surya OCR 2.5](https://www.anchorterminal.com/compare/hunyuanocr-vs-surya-ocr-2-5.md)
- [HunyuanOCR 1.5 vs Xiaomi-OCR-0](https://www.anchorterminal.com/compare/hunyuanocr-vs-xiaomi-ocr-0.md)
- [LightOnOCR-3-4B vs Surya OCR 2.5](https://www.anchorterminal.com/compare/lightonocr-3-4b-vs-surya-ocr-2-5.md)
- [LightOnOCR-3-4B vs Xiaomi-OCR-0](https://www.anchorterminal.com/compare/lightonocr-3-4b-vs-xiaomi-ocr-0.md)
- [Nanonets-OCR2-3B vs Surya OCR 2.5](https://www.anchorterminal.com/compare/nanonets-ocr2-3b-vs-surya-ocr-2-5.md)
- [Nanonets-OCR2-3B vs Xiaomi-OCR-0](https://www.anchorterminal.com/compare/nanonets-ocr2-3b-vs-xiaomi-ocr-0.md)
- [Surya OCR 2.5 vs Baidu Unlimited-OCR-2](https://www.anchorterminal.com/compare/surya-ocr-2-5-vs-unlimited-ocr-2.md)
- [Baidu Unlimited-OCR-2 vs Xiaomi-OCR-0](https://www.anchorterminal.com/compare/unlimited-ocr-2-vs-xiaomi-ocr-0.md)

---

Query this catalogue directly over MCP: https://www.anchorterminal.com/mcp (Streamable HTTP, no key). How: https://www.anchorterminal.com/agents/#mcp
