Indra OCR is Datalab’s open OCR package built around a ~1M-parameter recognition model. Searches for indra ocr typically want throughput claims, install steps, and what the markdown/JSON outputs include. Per Datalab’s Oct 13, 2026 blog and the Hugging Face model card, Indra targets clean print on CPU: about 49 pages per second on 32 cores, with layout boxes and reading order—not just a text dump.
This review summarizes public docs from Datalab, Hugging Face, and GitHub (datalab-to/indra). Benchmarks below are vendor-run OmniParseBench / throughput tables unless noted.
What you get
- ~1M-param main recognizer (
rec.onnx); about 18 MB of models on ONNX Runtime—no PyTorch required - ~49 pages/s on 32 CPU cores (Datalab: 49.4 pps mean of 3 runs on 300 OmniParseBench pages); single-page latency ~230 ms median on 4 x86 vCPUs in default auto mode
- Outputs: markdown, plain text, or JSON with line boxes, layout block labels, reading order, confidences, and per-page timings
- Digital PDFs: prefers a usable text layer; OCRs only what is missing (hybrid / auto mode)
- Optional local viewer:
indra-ocr-viewerdraws boxes and reading order over each page

Install and quickstart
Python 3.10+. Dependencies include ONNX Runtime, OpenCV, and pypdfium2. Models download from Hugging Face on first run (or set INDRA_OCR_MODEL_DIR / --model-dir).
pip install indra-ocr
indra-ocr paper.pdf # markdown to stdout
indra-ocr *.pdf --out results/ # one .md per file, all cores
indra-ocr scan.png --format json # lines, boxes, layout blocks
indra-ocr paper.pdf --mode ocr --timings
indra-ocr paper.pdf --math # opt-in LaTeX for math lines
indra-ocr-viewer # local viewer (default http://localhost:8765)
From Python:
import indra_ocr
conv = indra_ocr.load()
for i, page in conv.convert("paper.pdf"):
print(page.source, page.timings["total_ms"])
print(page.markdown)
For batches, indra_ocr.convert_many runs one single-threaded worker per core, one page per task (guard with if __name__ == "__main__": on macOS/Windows). Useful CLI flags include --format md|text|json, --mode auto|ocr|text, --cores N, --keep-furniture, and --dpi (default 200 for PDF render).
Outputs worth caring about
Each page object can expose:
markdown— headings, paragraphs, lists; tables as HTML; headers/footers omitted unless--keep-furniturelines— box + text + confidenceblocks— labeled layout blocks in reading order (Text, Section-Header, List-Group, Table, Caption, Footnote, Form, TOC, page header/footer, etc.)source—text,ocr,hybrid, orerror- Optional
--mathfor inline LaTeX on math lines (off by default; slower; math models download only when enabled)
Vendor benchmark snapshot
OmniParseBench (16,288 tests / 2,937 pages), x86, 4 vCPUs, one page at a time, default settings—figures from Datalab:
| Engine | Headline | Text | Tables | Layout | Median ms/page |
|---|---|---|---|---|---|
| Indra OCR (auto) | 62.1 | 41.3 | 56.4 | 88.6 | 228 |
| Indra OCR (OCR only) | 57.5 | 33.5 | 50.9 | 88.2 | 303 |
Indra OCR --math |
66.8 | 57.5 | 54.8 | 88.1 | ~360 |
| PaddleOCR PP-OCR text (via RapidOCR) | — | 35.8 | 0.0 | — | 2,685 |
| Tesseract 5 | — | 19.3 | 0.0 | — | 5,496 |
| PaddleOCR PP-StructureV3 | 58.4 | 55.6 | 47.8 | 71.7 | 40,958 |
Throughput on the same machine (OCR mode, pages/s): Indra 7.3 / 14.2 / 27.2 / 49.4 at 4/8/16/32 cores versus roughly 0.65–4.28 for PP-OCR text models and 0.78–2.92 for Tesseract 5 in Datalab’s table. Datalab markets ~11–17× faster than those OCR engines on 32 cores, and notes digital text-layer pages can be faster still (median ~130 ms vs ~304 ms for OCR pages in one throughput run).
Languages and limits
- OCR scripts (scans/images): Latin (~50 languages), Cyrillic, Greek, Devanagari, Bengali, Chinese (simplified & traditional)
- Digital PDF text layer: any script Datalab checked across many language families (including Arabic, Hebrew, Thai, Japanese, Korean); RTL order preserved when the layer is used
- Weak spots (documented): complex/merged-cell tables, handwriting (~8% on OmniParseBench handwriting tests), degraded old scans (~20% on old-scan tests), vertical text, scripts outside the OCR list on pure images, math unless
--mathis on
For harder documents, Datalab points to its managed Chandra OCR on the Datalab platform (higher accuracy positioning, separate product/pricing, with SOC 2 Type 2 and related enterprise notes on the HF page).
License
Per Hugging Face: code is Apache 2.0; model weights use a modified OpenRAIL-M (free for research, personal use, and startups under $20M funding/revenue; competitive-use restrictions vs Datalab’s API). Broader commercial licensing is via Datalab pricing.
Who should try it
- CPU-only pipelines that need high throughput on clean digital or lightly scanned print
- Teams that want layout-aware markdown/JSON without standing up a heavy GPU OCR stack
- Classification / segmentation preprocessing where “good enough” text plus structure matters more than perfect table reconstruction
- Not ideal as a sole engine for handwriting, nasty tables, or non-supported scripts on scans
Bottom line
Indra OCR is a deliberately small, fast CPU OCR from Datalab: ~1M params, ~49 pps on 32 cores in vendor tests, and practical markdown/JSON with boxes. Install with pip install indra-ocr, start in auto mode, enable --math only when needed, and read the OpenRAIL weight terms before commercial deployment.
Sources
Sources verified Oct 17, 2026 (Pacific Time)