In this categoryLocal AI · 59
- How to Run Indra OCR Locally: a 1M-Parameter CPU Model That Hits 49 Pages a Second
- How to Run AuroraIMG-6M Locally: AuroraAI-Research's 6.82M-Parameter Text-to-Image Model
- How to Run Maya-1 Locally: a 3.3B-Parameter Text-to-Speech Model with Voice Design
- How to Run Sopro V2 Turbo Locally: a 120M-Parameter Voice Cloning TTS Model
- How to Run Kova TTS 1 Locally: a 1.25B-Parameter Voice Cloning Model for Narration
- How to Run Whistle Locally: Cactus's 16.9MB On-Device Speech Recognition Model
- How to Run Antalia-2 Mini Locally: a 7.6M-Parameter Turkish TTS Model
- How to Run Supra2-IMG Locally: SupraLabs' 104M-Parameter Text-to-Image Model
- How to Run VisionHOPE Locally: PSRben's Self-Modifying Vision Backbone
- Fish Audio S1-Mini: What It Is and How to Actually Try It
- How to Run SupraTTS-0.1-Beta Locally: A Tiny Glow-TTS Voice Model
- How to Run Nemotron 3 Diarization Locally: Streaming Speaker Tagging in 99M Parameters
- How to Run Freya-TTS Locally: A 183M-Parameter Turkish Text-to-Speech Model
- How to Run Audio8 ASR Infinite Locally: Streaming Speech Recognition That Never Stops
- How to Run TeleOCR Locally: One Model for Scanned and Photographed Documents
- How to Run Xing4.0-29B-A4B Locally: A 256K-Context MoE Model for Agent Tasks
- How to Run IndicF5 Locally: Voice Cloning for 11 Indian Languages
- How to Run Fish Audio S2 Pro Locally: Multilingual TTS with Inline Emotion Control
- How to Run ZDTaichu5.0-9B Locally: A 9.79B Vision-Language Model Built for Spatial Reasoning
- How to Run Qwen3-TTS-12Hz-1.7B-VoiceDesign Locally: Voice Design From a Text Description
- How to Run YuE2-3B Locally: Open Source Music Generation That Beats Suno v5 on Benchmarks
- MiniCPM5-2B: Install and Run OpenBMB's 2B Model That Outscores 4B Rivals
- BERT Base Uncased: Specs, How to Run It, and Why It's Still Trending in 2026
- How to Run tencent/AuK Locally: Zero-Shot TTS, Voice Cloning and Speech Editing
- Stable Diffusion 3.5 Medium: What's Different From SDXL and Flux
- Qwen-Image-2512: The Text-to-Image Model That Renders Real Text
- How to Run Irodori-TTS Anime Locally: Japanese Voice Cloning and Voice Design
- How to Run Breeze TTS 2 Locally: Voice Clone, Voice Design and Voice Direction
- How to Run Kokoro-82M Locally: the Fastest Open-Weight TTS Model
- How to Install Ollama on macOSStart
- How to Install Ollama on Windows
- How to Run Llama 3 Locally with Ollama
- How to Pick the Right Local AI Model for Your Hardware
- Best GGUF Models to Run by VRAM Tier (8GB, 12GB, 16GB, 24GB, 48GB)
- Run LLMs in Your Browser With WebGPU: No Install, No Server (WebLLM)
- How to Use Ollama as a Drop-In OpenAI API
- GGUF vs MLX vs NVFP4: Local AI Quantization Formats Explained
- Best GPU for Running AI Locally in 2026Start
- How Much RAM Do You Need for Local AI?
- Mac vs PC for Local AI: Which Should You Choose?
- How to Build a Local AI Workstation on Any Budget
- How to Set Up Local AI on 8GB of VRAM
- How to Set Up Local AI on 12GB of VRAM
- Best Local LLM for 16 GB VRAM: Setup, Quantization and Real Speed
- How to Set Up Local AI on 24GB of VRAM
- Best Local LLM on Mac M4 16 GB: Setup, MLX vs GGUF and Real Speed
- Best Local LLM on Mac M4 Pro 48GB: Setup, Quantization and Real Speed
How to Run Indra OCR Locally: a 1M-Parameter CPU Model That Hits 49 Pages a Second
Indra OCR is an open-weight document parsing model from Datalab that runs on CPU through ONNX Runtime, no PyTorch and no GPU required. It turns PDFs and images into markdown, plain text or JSON with layout boxes, and on Datalab's own benchmark it processes about 49 pages a second at 32 cores.
Indra OCR is an open-weight document parsing model from Datalab that runs on CPU through ONNX Runtime, no PyTorch and no GPU required. It turns PDFs and images into markdown, plain text or JSON with layout boxes, and on Datalab's own benchmark it processes about 49 pages a second at 32 cores.
Written by Priya Raghunathan, local-AI hardware reviewer. I check parameter counts, licenses and benchmark numbers against the primary source before recommending an install path.
A new top-20 entrant on Hugging Face's trending list
Indra OCR entered the top 20 of Hugging Face's overall trending list. At time of writing it has 218 likes and 2,433 downloads on the datalab-to/indra-ocr model page, released October 10, 2026, under a modified OpenRAIL-M license. Its companion benchmark repo, datalab-to/omni_parse_bench, has 21 stars on GitHub. The most-liked Space linking to it is tardellirs/model-pulse (237 likes), a Hub-wide stats dashboard rather than a demo of the model itself.
Specs at a glance
| Field | Value |
|---|---|
| Publisher | Datalab (datalab-to) |
| Pipeline | Image-to-text: PDFs and images in, markdown, text or JSON out |
| Parameters | About 1.24 million total (1,236,366 F32, per the HF API's safetensors metadata); the model card describes the main recognizer, rec.onnx, as roughly 1M params on its own |
| Runtime | ONNX Runtime, no PyTorch required |
| Model size on disk | About 18 MB |
| Throughput | 49.4 pages/s at 32 cores on the OmniParseBench test set (x86, no GPU) |
| License | Code: Apache 2.0. Model weights: modified OpenRAIL-M |
| Release date | October 10, 2026 |
| GitHub stars | 21 (datalab-to/omni_parse_bench) |
What it actually does
Indra OCR converts PDFs and images into markdown, plain text or structured JSON. For scanned pages and photos it runs its own OCR models; for digital PDFs it reads the PDF's existing text layer directly and only falls back to OCR on the parts that layer is missing, such as text baked into an image. Every output line and layout block comes with a bounding box and a label (heading, list, table, caption, footnote, page header and so on), and the whole page comes back in reading order rather than raw position order. The whole thing ships as a handful of small ONNX models, about 18 MB total, which is why it starts up fast and runs on a laptop CPU instead of needing a GPU.
Benchmarks: how it stacks up against Tesseract and PaddleOCR
Datalab tested Indra OCR against Tesseract 5 and two PaddleOCR configurations on OmniParseBench, a 2,937-page, 16,288-test benchmark they maintain. Every engine ran on the same x86 machine with 4 vCPUs, one page at a time, on the same pages. The headline score is the mean of the text, tables and layout sub-scores.
| Engine | Headline | Text | Tables | Layout | Median ms/page |
|---|---|---|---|---|---|
| Indra OCR (auto mode) | 62.1 | 41.3 | 56.4 | 88.6 | 228 |
| Indra OCR (OCR only) | 57.5 | 33.5 | 50.9 | 88.2 | 303 |
| PaddleOCR PP-OCRv6 small (text only) | not scored | 35.8 | 0.0 | not scored | 2,685 |
| PaddleOCR PP-StructureV3 | 58.4 | 55.6 | 47.8 | 71.7 | 40,958 |
| Tesseract 5 | not scored | 19.3 | 0.0 | not scored | 5,496 |
Two things stand out. PP-StructureV3 actually reads plain text more accurately than Indra OCR's default mode (55.6 versus 41.3), but it takes about 180 times as long per page to do it. And turning on Indra OCR's optional math mode with the --math flag closes most of that gap: text accuracy jumps to 57.5 and the headline score to 66.8, at roughly 71 to 73 percent more time per page (360 ms versus 208 to 210 ms per page in Datalab's single-page timing runs). The tradeoff is explicit and dial-able, which is unusual for a model this small.
Throughput by core count
Indra OCR runs one single-threaded worker process per CPU core, so a single long PDF uses every core you give it. Datalab measured pages-per-second across 4, 8, 16 and 32 cores on the same 300-page test set.
| Cores | Indra OCR | PaddleOCR PP-OCRv6 small | Tesseract 5 | PaddleOCR PP-StructureV3 |
|---|---|---|---|---|
| 4 | 7.3 | 0.65 | 0.78 | ≤ 0.022 |
| 8 | 14.2 | 1.24 | 1.37 | ≤ 0.044 |
| 16 | 27.2 | 2.42 | 2.27 | ≤ 0.089 |
| 32 | 49.4 | 4.28 | 2.92 | ≤ 0.18 |
At 32 cores, Datalab's numbers put Indra OCR at about 11.5 times the throughput of PaddleOCR's text-only models, 16.9 times Tesseract 5, and roughly 280 times PP-StructureV3, though that last figure is against an upper bound since PP-StructureV3 ran a time-capped subset of pages. The gap narrows at low core counts, since Indra OCR's per-worker speed matters more there than its scaling behavior.
Install it
Indra OCR installs as a plain Python package. You need Python 3.10 or newer; it pulls in ONNX Runtime, OpenCV and pypdfium2, and nothing that touches PyTorch or CUDA.
The model files, about 18 MB, download from Hugging Face automatically the first time you run the tool and are cached after that. To point at a local copy instead, set the INDRA_OCR_MODEL_DIR environment variable or pass --model-dir on the command line.
Run it from the command line
The CLI covers most jobs without writing any code: single files, whole folders, and three output formats.
A few flags worth knowing: --mode controls whether a digital PDF's text layer is trusted (auto, the default, OCRs only where that layer fails its checks; ocr ignores the text layer entirely; text trusts it even when the checks fail). --keep-furniture keeps page headers and footers in the markdown output, which is off by default. --math turns on a second recognizer that reads mathematical notation as LaTeX, at the cost of roughly 71 to 73 percent more time per page. --cores limits how many worker processes it spawns, useful if you don't want it claiming every core on a shared machine.
datalab-to/omni_parse_benchDatalab's document parsing benchmark: the 2,937-page test set and scorer used for every number in this guide.github.com21Use it from Python
For anything beyond a one-off file, the Python API gives you per-page objects with markdown, plain text lines, layout blocks and timings attached.
import indra_ocr
conv = indra_ocr.load(threads=4)
for i, page in conv.convert("paper.pdf"):
print(page.source, page.timings["total_ms"])
print(page.markdown) # headings, lists, tables as HTML
page.blocks # layout blocks, in reading order
page.lines # Line(box, text, conf), in reading orderFor many files at once, convert_many spins up one single-threaded worker process per core and hands back results in input order. On macOS and Windows it needs the usual if __name__ == "__main__": guard, since worker processes re-import the script; skip that guard and it falls back to one process with a warning instead of failing outright.
Language coverage
OCR mode, meaning scans and photographed pages, covers Latin script (about 50 languages), Cyrillic, Greek, Devanagari, Bengali, and Chinese in both simplified and traditional form. Digital PDFs are a separate story: Indra OCR reads any script through the PDF's own text layer, and Datalab says it keeps at least 98 percent of that layer's characters across 75 language families they tested, including Arabic, Hebrew, Thai, Japanese, Korean and the Indic scripts, with right-to-left lines kept in right-to-left order. In short, if the source is a digital PDF, language support is wide; if it's a scan or photo, only the languages listed above get OCR'd correctly.
Known limitations
Complex tables with merged cells, multi-line headers or no ruling lines can land in the wrong rows or columns; simple grid tables read fine. Handwriting isn't supported at all, scoring around 8 percent on Datalab's own handwriting tests. Scripts outside the OCR list, including Arabic, Hebrew, Thai and Korean Hangul, only work through a digital PDF's text layer; run them through OCR on a scan and they come out as wrong characters, not an error. Old or low-resolution scans score around 20 percent on Datalab's degraded-scan tests. And pages above 100 megapixels at 200 DPI get rendered at a lower resolution automatically, which can lose small text.
Indra OCR vs TeleOCR
Both are open-weight document parsers, but they're built for opposite ends of the same job. TeleOCR is a 1.42 billion parameter vision-language model that reads both clean digital pages and tilted, camera-photographed documents, and needs a GPU with a few gigabytes of VRAM to run well. Indra OCR is about a thousand times smaller at roughly 1.24 million parameters, runs on CPU alone, and trades some accuracy on hard cases, handwriting, badly warped photos, unusual scripts, for raw speed: 49 pages a second at 32 cores against TeleOCR's GPU-bound inference. Reach for Indra OCR when you're parsing clean PDFs or scans in bulk and don't have a GPU to spare; reach for TeleOCR when the source documents are photographed, distorted or need a model that can also read formulas and tables with higher accuracy.
FAQ
What is Indra OCR?
An open-weight document parsing model from Datalab that converts PDFs and images into markdown, plain text or JSON. It runs on CPU through ONNX Runtime, with no PyTorch or GPU required.
How many parameters does Indra OCR have?
About 1.24 million total, per the safetensors metadata in the Hugging Face API. The model card describes rec.onnx, the main text recognizer, as roughly 1 million parameters on its own, with several smaller models for detection, layout order and script identification alongside it.
Can I use Indra OCR commercially?
The code is Apache 2.0. The model weights use a modified OpenRAIL-M license, which is free for research, personal use, and startups under $20 million in funding or revenue, and cannot be used to compete with Datalab's own API. Read the LICENSE file in the model repo before shipping it in a paid product.
Does it need a GPU?
No. Indra OCR runs entirely on CPU through ONNX Runtime. Datalab's own benchmarks were run on an x86 machine with no GPU involved at all.
Where to go from here
- Need a model that also handles photographed or tilted pages? Run TeleOCR locally covers a 1.42 billion parameter vision-language model built for that case.
- Want another self-hosted document parser to compare against? Self-host baidu Unlimited-OCR covers a different open-weight parser.
- Browse other open OCR and document models: the local AI model directory lets you compare specs side by side.
Local models run better with more VRAM. CompareRTX GPUs on Amazonbefore you upgrade.(affiliate link. We may earn a commission at no extra cost. Disclosure)
Watch related tutorials
9:42
10:30
11:05
9:50
13:30
16:45Weekly local AI drops
New models, what runs on your hardware, and the guides to set them up. One email a week, unsubscribe any time.