# Surya OCR 2.5 (slim)

> Surya OCR 2.5 is Datalab's open-weight OCR model of 689M parameters, one vision-language model for layout, reading order, text and tables as HTML across 91 languages, served by vLLM or llama.cpp, under a modified OpenRAIL-M licence.

- Full: https://www.anchorterminal.com/tools/surya-ocr-2-5.md (~6,550 tokens) · this version ~1,930 tokens · JSON https://www.anchorterminal.com/tools/surya-ocr-2-5.json · canonical https://www.anchorterminal.com/tools/surya-ocr-2-5
- Index: https://www.anchorterminal.com/llms.txt · API: https://www.anchorterminal.com/api/v1/index.json · MCP: https://www.anchorterminal.com/mcp · Updated: 2026-11-10 · pricing https://www.anchorterminal.com/tools/surya-ocr-2-5#pricing · reviews https://www.anchorterminal.com/tools/surya-ocr-2-5#reviews
- Licence: CC BY 4.0, credit Anchor Terminal and link this page (https://www.anchorterminal.com/terms/#data)

**C · 61/100 · rank #82 of 160 open-weight models · #15 in Document parsing & extraction · not agent-ready · confidence low**


Assessment: 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.

## Facts

- Kind: Open-weight model · vendor: Endless Labs, Inc. (Datalab) · category: Document parsing & extraction · legal entity: Endless Labs, Inc. (doing business as Datalab, per its terms of use) · provenance 54/100
- Packages: huggingface `datalab-to/surya-ocr-2.5`, huggingface `datalab-to/surya-ocr-2.5-gguf`, pypi `surya-ocr`
- Auth: None · pricing: Free · x402: no · licence: Modified OpenRAIL-M (free for research, personal use and companies under $5M in revenue and funding)
- Benchmark probes: not run yet, so Performance is pending
- Surface graded: The open weights at huggingface.co/datalab-to/surya-ocr-2.5 and Datalab's GGUF repository, read from the model card, the files and their metadata, the config, the chat template, the licence's commercial clause, the commit history and the runtimes' own code at their latest releases on 10 November 2026. Datalab's company facts come from our Datalab listing of 6 November. Nothing was downloaded or run
- Model: 689,356,864 parameters in the files (689M on the card), a vision-language model in Qwen 3.5's style (Qwen3_5ForConditionalGeneration, 24 layers, hidden size 1,024). One model does layout, reading order, OCR and tables. Text-line detection and OCR error detection are separate small models
- Tasks: Full-page OCR, per-block OCR after layout, layout analysis with reading order, table recognition as HTML with merged cells, and maths. Row and column geometry for tables needs a Surya 2 checkpoint
- Languages: 91 languages on Datalab's internal benchmark, with a 74.9 per cent pass rate overall
- Files: One safetensors file in BF16 (1.38 GB) with chat_template.jinja, config, processor and tokenizer files and the LICENSE. Datalab's GGUF repository holds a Q8_0 file (0.63 GB), an unquantised file (1.18 GB) and a projector (0.21 GB). No pickle files and no Python files. Hugging Face lists a SHA-256 for the large files
- Licence: A modified AI Pubs OpenRAIL-M licence. It keeps OpenRAIL's use restrictions and adds a commercial clause: no use by anyone with more than $5M in prior-year gross revenue or in total funding, except for personal use or research, and none by anyone whose product or service competes with Datalab's. The surya-ocr code is Apache 2.0
- Runtimes: The card documents vLLM (in Docker, on an NVIDIA GPU), llama.cpp (the llama-server binary, on CPU and Apple Silicon) and an experimental MLX backend. The architecture is Qwen 3.5's, which vLLM 0.33.0, SGLang 0.5.23, Transformers 5.22.2 and llama.cpp b12242 run, the last from Datalab's own GGUF
- Input and output: One page image or one block. The model writes each block as a label and four coordinates on a 0 to 1,000 scale, then the content as HTML, and the surya-ocr package decodes that into blocks with label, HTML, polygon, bounding box and confidence. Layout comes back as JSON, decoded under a JSON schema by default
- Recommended settings: The package's defaults: a 24,576-token model length for vLLM, which must hold an image of about 8,000 tokens, the prompt and up to 12,288 output tokens for a full page, eight parallel requests, and --special for llama-server
- Hardware: No memory figure on the card. Datalab measured 4.5 pages a second on one H100 with vLLM at 192 DPI, and gives Apple Silicon figures for llama.cpp. The Q8_0 GGUF with its projector is 0.84 GB
- Training data: The card says only that it was trained on diverse document images to write layout JSON or full-page HTML, and that the line detector was trained from scratch on document line annotations

- Scores: Capability pending, Reach 90, Risk 45, Agent interface 70, Documentation and upkeep 57 · total over the 7 assessed categories
- Why:  · Reach, 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. · Risk, File safety 25, safetensors and GGUF only, no .bin, .pt or .pth files and no Python in the model repository. · Agent interface, Chat template 20, chat_template.jinja in the repository (2,872 characters). · Documentation and upkeep, Model card 17, Intended use, limitations, the architecture (a Qwen 3.5-style vision-language model with separate detection models), paramete…
- Sources: 15, open questions: 5, both in the full twin
- Capabilities: docs.ocr, docs.parse, docs.tables, model.open-weights
- JSON: https://www.anchorterminal.com/api/v1/tools/surya-ocr-2-5.json
- Its vendor verifies the listing with `verify_listing` or `POST https://www.anchorterminal.com/api/v1/verify` (the full twin says how); no effect on the grade.
- Support: Discord https://discord.com/invite/KuZwXNGnfH; https://documentation.datalab.to/; https://status.datalab.to/; more in the full twin

## Before you call it

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

## Connect

```bash
pip install surya-ocr
# starts vLLM in Docker on an NVIDIA GPU, or llama-server on CPU and Apple Silicon, on first use:
surya_ocr page.png
surya_layout page.png
surya_table page.png
```

```bash
# to use a server you already run, point the package at it:
export SURYA_INFERENCE_URL=http://localhost:8000/v1
# llama-server needs --special so block labels and coordinates come back in the text
```

## Similar tools

| Tool | Grade | Score | Shared capabilities | Slim |
| --- | --- | --- | --- | --- |
| Nemotron 3.5 Parse | B | 69 | docs.parse, docs.ocr, docs.tables, model.open-weights | https://www.anchorterminal.com/tools/nemotron-3-5-parse.min.md |
| LightOnOCR-3-4B | C | 61 | docs.ocr, docs.parse, docs.tables, model.open-weights | https://www.anchorterminal.com/tools/lightonocr-3-4b.min.md |
| Xiaomi-OCR-0 | C | 59 | docs.ocr, docs.parse, docs.tables, model.open-weights | https://www.anchorterminal.com/tools/xiaomi-ocr-0.min.md |
| HunyuanOCR 1.5 | C | 56.6 | docs.ocr, docs.parse, docs.tables, model.open-weights | https://www.anchorterminal.com/tools/hunyuanocr.min.md |
| Chandra OCR 2 | C | 54.7 | docs.ocr, docs.parse, docs.tables, model.open-weights | https://www.anchorterminal.com/tools/chandra-ocr-2.min.md |


## Panel reviews (0, desk reviews from public material, no calls made)

