datalab-to/chandraPublic

OCR model that handles complex tables, forms, handwriting with full layout.

AI summary: A state-of-the-art document intelligence library for extracting structured data from complex documents using AI.

Stars
12.4K
+47 today
Forks
1.3K
Watchers
89
Open issues
47
Open PRs
14
Contributors
~5
Commits
83
Branches
7

PythonApache-2.0Created Oct 8, 2025Last push 3mo agoLatest release v0.2.0+89 stars this week+198 this month

Quick answers

What is chandra?
A state-of-the-art document intelligence library for extracting structured data from complex documents using AI.
What does chandra do?
Chandra is a specialized library developed by Datalab focused on high-precision document intelligence and OCR capabilities. It leverages advanced AI models to process complex, unstructured documents—such as heavily nested tables, scanned invoices, and mixed-layout forms—and converts them into structured, queryable data. The tool integrates seamlessly into data pipelines, applying spatial reasoning to preserve the relationships between different text elements. By accurately parsing documents that traditional OCR engines fail on, it significantly reduces manual data entry and improves automation accuracy. It provides the core intelligence needed for enterprise-scale document digitization.
Who is chandra for?
Data engineers and automation specialists dealing with high volumes of unstructured documents who need reliable extraction. Requires basic familiarity with Python and AI model integration.
How do I get started with chandra?
pip install chandra
How popular is chandra on GitHub?
datalab-to/chandra has 12,416 stars and 1,250 forks on GitHub, and gained 89 stars in the last 7 days.
What license does chandra use?
datalab-to/chandra is released under the Apache-2.0 license.

Star history

since Jul 29, 2026
05K10KJul 2026Aug 2026Sep 2026Oct 2026
12.4K stars as of Oct 4, 2026. Measured daily since Jul 29, 2026; GitHub no longer exposes earlier star timestamps.

Contribution activity

commits per day, last 52 weeks
OctNovDecJanFebMarAprMayJunJulAugSepMonWedFri2025-10-05: 0 commits2025-10-06: 0 commits2025-10-07: 0 commits2025-10-08: 2 commits2025-10-09: 0 commits2025-10-10: 0 commits2025-10-11: 0 commits2025-10-12: 0 commits2025-10-13: 0 commits2025-10-14: 0 commits2025-10-15: 1 commit2025-10-16: 3 commits2025-10-17: 0 commits2025-10-18: 1 commit2025-10-19: 0 commits2025-10-20: 3 commits2025-10-21: 8 commits2025-10-22: 1 commit2025-10-23: 2 commits2025-10-24: 0 commits2025-10-25: 0 commits2025-10-26: 2 commits2025-10-27: 0 commits2025-10-28: 0 commits2025-10-29: 1 commit2025-10-30: 2 commits2025-10-31: 0 commits2025-11-01: 0 commits2025-11-02: 0 commits2025-11-03: 1 commit2025-11-04: 1 commit2025-11-05: 1 commit2025-11-06: 0 commits2025-11-07: 1 commit2025-11-08: 0 commits2025-11-09: 0 commits2025-11-10: 1 commit2025-11-11: 0 commits2025-11-12: 5 commits2025-11-13: 0 commits2025-11-14: 0 commits2025-11-15: 0 commits2025-11-16: 0 commits2025-11-17: 0 commits2025-11-18: 0 commits2025-11-19: 2 commits2025-11-20: 0 commits2025-11-21: 0 commits2025-11-22: 0 commits2025-11-23: 0 commits2025-11-24: 0 commits2025-11-25: 0 commits2025-11-26: 0 commits2025-11-27: 0 commits2025-11-28: 0 commits2025-11-29: 0 commits2025-11-30: 0 commits2025-12-01: 0 commits2025-12-02: 0 commits2025-12-03: 0 commits2025-12-04: 0 commits2025-12-05: 0 commits2025-12-06: 0 commits2025-12-07: 0 commits2025-12-08: 0 commits2025-12-09: 0 commits2025-12-10: 0 commits2025-12-11: 0 commits2025-12-12: 0 commits2025-12-13: 0 commits2025-12-14: 0 commits2025-12-15: 0 commits2025-12-16: 0 commits2025-12-17: 0 commits2025-12-18: 0 commits2025-12-19: 0 commits2025-12-20: 0 commits2025-12-21: 0 commits2025-12-22: 0 commits2025-12-23: 0 commits2025-12-24: 0 commits2025-12-25: 0 commits2025-12-26: 0 commits2025-12-27: 0 commits2025-12-28: 0 commits2025-12-29: 0 commits2025-12-30: 0 commits2025-12-31: 0 commits2026-01-01: 0 commits2026-01-02: 0 commits2026-01-03: 0 commits2026-01-04: 0 commits2026-01-05: 0 commits2026-01-06: 0 commits2026-01-07: 0 commits2026-01-08: 0 commits2026-01-09: 0 commits2026-01-10: 0 commits2026-01-11: 0 commits2026-01-12: 1 commit2026-01-13: 4 commits2026-01-14: 0 commits2026-01-15: 0 commits2026-01-16: 0 commits2026-01-17: 0 commits2026-01-18: 0 commits2026-01-19: 0 commits2026-01-20: 0 commits2026-01-21: 0 commits2026-01-22: 0 commits2026-01-23: 0 commits2026-01-24: 0 commits2026-01-25: 0 commits2026-01-26: 0 commits2026-01-27: 0 commits2026-01-28: 0 commits2026-01-29: 0 commits2026-01-30: 0 commits2026-01-31: 0 commits2026-02-01: 0 commits2026-02-02: 0 commits2026-02-03: 0 commits2026-02-04: 0 commits2026-02-05: 0 commits2026-02-06: 0 commits2026-02-07: 0 commits2026-02-08: 0 commits2026-02-09: 0 commits2026-02-10: 0 commits2026-02-11: 0 commits2026-02-12: 0 commits2026-02-13: 0 commits2026-02-14: 0 commits2026-02-15: 0 commits2026-02-16: 0 commits2026-02-17: 0 commits2026-02-18: 0 commits2026-02-19: 0 commits2026-02-20: 0 commits2026-02-21: 0 commits2026-02-22: 0 commits2026-02-23: 0 commits2026-02-24: 0 commits2026-02-25: 0 commits2026-02-26: 0 commits2026-02-27: 0 commits2026-02-28: 0 commits2026-03-01: 0 commits2026-03-02: 0 commits2026-03-03: 0 commits2026-03-04: 0 commits2026-03-05: 0 commits2026-03-06: 0 commits2026-03-07: 0 commits2026-03-08: 0 commits2026-03-09: 0 commits2026-03-10: 0 commits2026-03-11: 1 commit2026-03-12: 0 commits2026-03-13: 0 commits2026-03-14: 0 commits2026-03-15: 0 commits2026-03-16: 2 commits2026-03-17: 4 commits2026-03-18: 5 commits2026-03-19: 0 commits2026-03-20: 0 commits2026-03-21: 0 commits2026-03-22: 0 commits2026-03-23: 0 commits2026-03-24: 0 commits2026-03-25: 0 commits2026-03-26: 0 commits2026-03-27: 0 commits2026-03-28: 0 commits2026-03-29: 0 commits2026-03-30: 0 commits2026-03-31: 0 commits2026-04-01: 0 commits2026-04-02: 0 commits2026-04-03: 0 commits2026-04-04: 0 commits2026-04-05: 0 commits2026-04-06: 0 commits2026-04-07: 0 commits2026-04-08: 0 commits2026-04-09: 1 commit2026-04-10: 0 commits2026-04-11: 0 commits2026-04-12: 0 commits2026-04-13: 0 commits2026-04-14: 0 commits2026-04-15: 0 commits2026-04-16: 0 commits2026-04-17: 0 commits2026-04-18: 0 commits2026-04-19: 0 commits2026-04-20: 0 commits2026-04-21: 0 commits2026-04-22: 1 commit2026-04-23: 0 commits2026-04-24: 0 commits2026-04-25: 0 commits2026-04-26: 0 commits2026-04-27: 0 commits2026-04-28: 0 commits2026-04-29: 0 commits2026-04-30: 0 commits2026-05-01: 0 commits2026-05-02: 0 commits2026-05-03: 0 commits2026-05-04: 0 commits2026-05-05: 0 commits2026-05-06: 0 commits2026-05-07: 0 commits2026-05-08: 0 commits2026-05-09: 0 commits2026-05-10: 0 commits2026-05-11: 0 commits2026-05-12: 0 commits2026-05-13: 0 commits2026-05-14: 0 commits2026-05-15: 0 commits2026-05-16: 0 commits2026-05-17: 0 commits2026-05-18: 0 commits2026-05-19: 0 commits2026-05-20: 0 commits2026-05-21: 0 commits2026-05-22: 0 commits2026-05-23: 0 commits2026-05-24: 0 commits2026-05-25: 0 commits2026-05-26: 0 commits2026-05-27: 0 commits2026-05-28: 0 commits2026-05-29: 0 commits2026-05-30: 0 commits2026-05-31: 0 commits2026-06-01: 0 commits2026-06-02: 0 commits2026-06-03: 0 commits2026-06-04: 0 commits2026-06-05: 0 commits2026-06-06: 0 commits2026-06-07: 0 commits2026-06-08: 0 commits2026-06-09: 0 commits2026-06-10: 0 commits2026-06-11: 0 commits2026-06-12: 0 commits2026-06-13: 0 commits2026-06-14: 0 commits2026-06-15: 0 commits2026-06-16: 0 commits2026-06-17: 0 commits2026-06-18: 0 commits2026-06-19: 0 commits2026-06-20: 0 commits2026-06-21: 0 commits2026-06-22: 0 commits2026-06-23: 0 commits2026-06-24: 1 commit2026-06-25: 0 commits2026-06-26: 0 commits2026-06-27: 0 commits2026-06-28: 0 commits2026-06-29: 0 commits2026-06-30: 0 commits2026-07-01: 0 commits2026-07-02: 0 commits2026-07-03: 0 commits2026-07-04: 0 commits2026-07-05: 0 commits2026-07-06: 0 commits2026-07-07: 0 commits2026-07-08: 0 commits2026-07-09: 0 commits2026-07-10: 0 commits2026-07-11: 0 commits2026-07-12: 0 commits2026-07-13: 0 commits2026-07-14: 0 commits2026-07-15: 0 commits2026-07-16: 0 commits2026-07-17: 0 commits2026-07-18: 0 commits2026-07-19: 0 commits2026-07-20: 0 commits2026-07-21: 0 commits2026-07-22: 0 commits2026-07-23: 0 commits2026-07-24: 0 commits2026-07-25: 0 commits2026-07-26: 0 commits2026-07-27: 0 commits2026-07-28: 0 commits2026-07-29: 0 commits2026-07-30: 0 commits2026-07-31: 0 commits2026-08-01: 0 commits2026-08-02: 0 commits2026-08-03: 0 commits2026-08-04: 0 commits2026-08-05: 0 commits2026-08-06: 0 commits2026-08-07: 0 commits2026-08-08: 0 commits2026-08-09: 0 commits2026-08-10: 0 commits2026-08-11: 0 commits2026-08-12: 0 commits2026-08-13: 0 commits2026-08-14: 0 commits2026-08-15: 0 commits2026-08-16: 0 commits2026-08-17: 0 commits2026-08-18: 0 commits2026-08-19: 0 commits2026-08-20: 0 commits2026-08-21: 0 commits2026-08-22: 0 commits2026-08-23: 0 commits2026-08-24: 0 commits2026-08-25: 0 commits2026-08-26: 0 commits2026-08-27: 0 commits2026-08-28: 0 commits2026-08-29: 0 commits2026-08-30: 0 commits2026-08-31: 0 commits2026-09-01: 0 commits2026-09-02: 0 commits2026-09-03: 0 commits2026-09-04: 0 commits2026-09-05: 0 commits2026-09-06: 0 commits2026-09-07: 0 commits2026-09-08: 0 commits2026-09-09: 0 commits2026-09-10: 0 commits2026-09-11: 0 commits2026-09-12: 0 commits2026-09-13: 0 commits2026-09-14: 0 commits2026-09-15: 0 commits2026-09-16: 0 commits2026-09-17: 0 commits2026-09-18: 0 commits2026-09-19: 0 commits2026-09-20: 0 commits2026-09-21: 0 commits2026-09-22: 0 commits2026-09-23: 0 commits2026-09-24: 0 commits2026-09-25: 0 commits2026-09-26: 0 commits2026-09-27: 0 commits2026-09-28: 0 commits2026-09-29: 0 commits2026-09-30: 0 commits2026-10-01: 0 commits2026-10-02: 0 commits2026-10-03: 0 commits
58 commits in the last yearLessMore

Signals and awards

derived from tracked data
  • Widely adopted

    12,416 stars

  • Permissive license

    Apache-2.0

  • Continuous integration

    Automated checks passing

What chandra does

Chandra is a specialized library developed by Datalab focused on high-precision document intelligence and OCR capabilities. It leverages advanced AI models to process complex, unstructured documents—such as heavily nested tables, scanned invoices, and mixed-layout forms—and converts them into structured, queryable data. The tool integrates seamlessly into data pipelines, applying spatial reasoning to preserve the relationships between different text elements. By accurately parsing documents that traditional OCR engines fail on, it significantly reduces manual data entry and improves automation accuracy. It provides the core intelligence needed for enterprise-scale document digitization.

Data engineers and automation specialists dealing with high volumes of unstructured documents who need reliable extraction. Requires basic familiarity with Python and AI model integration.

  • Spatial Reasoning: Accurately interprets complex document layouts, preserving structural relationships in tables and multi-column formats.
  • Advanced OCR Integration: Utilizes state-of-the-art models designed specifically for high-fidelity text extraction from difficult scans.
  • Structured Output: Converts unstructured document images into instantly usable JSON or programmatic data structures.
  • Multi-Modal Ingestion: Processes a wide variety of formats natively, including complex PDFs, raw images, and hybrid documents.
  • Pipeline Integration: Designed as a library to be embedded directly into larger data processing and automation workflows.

Where teams use it

Invoice Processing

Automates the extraction of line items, totals, and vendor details from highly variable and messy invoice formats.

Form Digitization

Converts scanned forms and applications into structured databases for easier querying and compliance tracking.

Legal Document Analysis

Pulls specific clauses, dates, and involved parties out of dense, unstructured legal contracts with high accuracy.

Data Aggregation

Extracts tabular data from annual reports and financial statements into directly analyzable formats.

Getting started: pip install chandra

README

master branch

Datalab Logo

Datalab

State of the Art models for Document Intelligence

Code License Model License Discord

Homepage Docs Public Playground


Chandra OCR 2

Chandra OCR 2 is a state of the art OCR model that converts images and PDFs into structured HTML/Markdown/JSON while preserving layout information.

Try Chandra on Datalab

Our managed platform runs an improved Chandra with higher accuracy than the open weights, zero data retention by default, SOC 2 Type 2, and custom BAAs.

If you have high volume workloads, we offer a batch processing service that has processed 200M+ pages per week — we manage the infrastructure so your workloads finish on time.

Get started with $5 in free credits — sign up — takes under 30 seconds — or try Chandra in our public playground.

Commercial self-hosting requires a license — see Commercial usage. For on-prem licensing, contact us.

News

  • 3/2026 - Chandra 2 is here with significant improvements to math, tables, layout, and multilingual OCR
  • 10/2025 - Chandra 1 launched

Features

  • Tops external olmocr benchmark and significant improvement in internal multilingual benchmarks
  • Convert documents to markdown, html, or json with detailed layout information
  • Support for 90+ languages (benchmark below)
  • Excellent handwriting support
  • Reconstructs forms accurately, including checkboxes
  • Strong performance with tables, math, and complex layouts
  • Extracts images and diagrams, and adds captions and structured data
  • Two inference modes: local (HuggingFace) and remote (vLLM server)

Quickstart

The easiest way to start is with the CLI tools:

pip install chandra-ocr

# With vLLM (recommended, lightweight install)
chandra_vllm
chandra input.pdf ./output

# With HuggingFace (requires torch)
pip install chandra-ocr[hf]
chandra input.pdf ./output --method hf

# Interactive streamlit app
pip install chandra-ocr[app]
chandra_app

Benchmarks

Multilingual performance was a focus for us with Chandra 2. There isn't a good public multilingual OCR benchmark, so we made our own. This tests tables, math, ordering, layout, and text accuracy.

See full scores below. We also have a full 90-language benchmark.

We also benchmarked Chandra 2 with the widely accepted olmocr benchmark:

See full scores below.

Examples

Type Name Link
Math CS229 Textbook View
Math Handwritten Math View
Math Chinese Math View
Tables Statistical Distribution View
Tables Financial Table View
Forms Registration Form View
Forms Lease Form View
Handwriting Cursive Writing View
Handwriting Handwritten Notes View
Languages Arabic View
Languages Japanese View
Languages Hindi View
Languages Russian View
Other Charts View
Other Chemistry View

Installation

Package

# Base install (for vLLM backend)
pip install chandra-ocr

# With HuggingFace backend (includes torch, transformers)
pip install chandra-ocr[hf]

# With all extras
pip install chandra-ocr[all]

If you're using the HuggingFace method, we also recommend installing flash attention for better performance.

From Source

git clone https://github.com/datalab-to/chandra.git
cd chandra
uv sync
source .venv/bin/activate

Usage

CLI

Process single files or entire directories:

# Single file, with vllm server (see below for how to launch vllm)
chandra input.pdf ./output --method vllm

# Process all files in a directory with local model
chandra ./documents ./output --method hf

CLI Options:

  • --method [hf|vllm]: Inference method (default: vllm)
  • --page-range TEXT: Page range for PDFs (e.g., "1-5,7,9-12")
  • --max-output-tokens INTEGER: Max tokens per page
  • --max-workers INTEGER: Parallel workers for vLLM
  • --include-images/--no-images: Extract and save images (default: include)
  • --include-headers-footers/--no-headers-footers: Include page headers/footers (default: exclude)
  • --batch-size INTEGER: Pages per batch (default: 28 for vllm, 1 for hf)

Output Structure:

Each processed file creates a subdirectory with:

  • <filename>.md - Markdown output
  • <filename>.html - HTML output
  • <filename>_metadata.json - Metadata (page info, token count, etc.)
  • Extracted images are saved directly in the output directory

Streamlit Web App

Launch the interactive demo for single-page processing:

chandra_app

vLLM Server (Optional)

For production deployments or batch processing, use the vLLM server:

chandra_vllm

This launches a Docker container with optimized inference settings. Configure via environment variables:

  • VLLM_API_BASE: Server URL (default: http://localhost:8000/v1)
  • VLLM_MODEL_NAME: Model name for the server (default: chandra)
  • VLLM_GPUS: GPU device IDs (default: 0)

You can also start your own vllm server with the datalab-to/chandra-ocr-2 model.

Configuration

Settings can be configured via environment variables or a local.env file:

# Model settings
MODEL_CHECKPOINT=datalab-to/chandra-ocr-2
MAX_OUTPUT_TOKENS=12384

# vLLM settings
VLLM_API_BASE=http://localhost:8000/v1
VLLM_MODEL_NAME=chandra
VLLM_GPUS=0

Commercial usage

This code is Apache 2.0, and our model weights use a modified OpenRAIL-M license (free for research, personal use, and startups under $2M funding/revenue, cannot be used competitively with our API). To remove the OpenRAIL license requirements, or for broader commercial licensing, visit our pricing page here.

Benchmark table

Model ArXiv Old Scans Math Tables Old Scans Headers and Footers Multi column Long tiny text Base Overall Source
Datalab API 90.4 90.2 90.7 54.6 91.6 83.7 92.3 99.9 86.7 ± 0.8 Own benchmarks
Chandra 2 86.9 89.1 92.1 51.1 91.4 82.1 93.7 99.9 85.8 ± 0.8 Own benchmarks
dots.ocr 1.5 85.9 85.5 90.7 48.2 94.0 85.3 81.6 99.7 83.9 dots.ocr repo
Chandra 1 82.2 80.3 88.0 50.4 90.8 81.2 92.3 99.9 83.1 ± 0.9 Own benchmarks
olmOCR 2 83.0 82.3 84.9 47.7 96.1 83.7 81.9 99.6 82.4 olmocr repo
dots.ocr 82.1 64.2 88.3 40.9 94.1 82.4 81.2 99.5 79.1 ± 1.0 dots.ocr repo
olmOCR v0.3.0 78.6 79.9 72.9 43.9 95.1 77.3 81.2 98.9 78.5 ± 1.1 olmocr repo
Datalab Marker v1.10.0 83.8 69.7 74.8 32.3 86.6 79.4 85.7 99.6 76.5 ± 1.0 Own benchmarks
Deepseek OCR 75.2 72.3 79.7 33.3 96.1 66.7 80.1 99.7 75.4 ± 1.0 Own benchmarks
Mistral OCR API 77.2 67.5 60.6 29.3 93.6 71.3 77.1 99.4 72.0 ± 1.1 olmocr repo
GPT-4o (Anchored) 53.5 74.5 70.0 40.7 93.8 69.3 60.6 96.8 69.9 ± 1.1 olmocr repo
Qwen 3 VL 8B 70.2 75.1 45.6 37.5 89.1 62.1 43.0 94.3 64.6 ± 1.1 Own benchmarks
Gemini Flash 2 (Anchored) 54.5 56.1 72.1 34.2 64.7 61.5 71.5 95.6 63.8 ± 1.2 olmocr repo

Multilingual benchmark table

The table below covers the 43 most common languages, benchmarked across multiple models. For a comprehensive evaluation across 90 languages (Chandra 2 vs Gemini 2.5 Flash only), see the full 90-language benchmark.

Language Datalab API Chandra 2 Chandra 1 Gemini 2.5 Flash GPT-5 Mini
ar 67.6% 68.4% 34.0% 84.4% 55.6%
bn 85.1% 72.8% 45.6% 55.3% 23.3%
ca 88.7% 85.1% 84.2% 88.0% 78.5%
cs 88.2% 85.3% 84.7% 79.1% 78.8%
da 90.1% 91.1% 88.4% 86.0% 87.7%
de 93.8% 94.8% 83.0% 88.3% 93.8%
el 89.9% 85.6% 85.5% 83.5% 82.4%
es 91.8% 89.3% 88.7% 86.8% 97.1%
fa 82.2% 75.1% 69.6% 61.8% 56.4%
fi 85.7% 83.4% 78.4% 86.0% 84.7%
fr 93.3% 93.7% 89.6% 86.1% 91.1%
gu 73.8% 70.8% 44.6% 47.6% 11.5%
he 76.4% 70.4% 38.9% 50.9% 22.3%
hi 80.5% 78.4% 70.2% 82.7% 41.0%
hr 93.4% 90.1% 85.9% 88.2% 81.3%
hu 88.1% 82.1% 82.5% 84.5% 84.8%
id 91.3% 91.6% 86.7% 88.3% 89.7%
it 94.4% 94.1% 89.1% 85.7% 91.6%
ja 87.3% 86.9% 85.4% 80.0% 76.1%
jv 87.5% 73.2% 85.1% 80.4% 69.6%
kn 70.0% 63.2% 20.6% 24.5% 10.1%
ko 89.1% 81.5% 82.3% 84.8% 78.4%
la 78.0% 73.8% 55.9% 70.5% 54.6%
ml 72.4% 64.3% 18.1% 23.8% 11.9%
mr 80.8% 75.0% 57.0% 69.7% 20.9%
nl 90.0% 88.6% 85.3% 87.5% 83.8%
no 89.2% 90.3% 85.5% 87.8% 87.4%
pl 93.8% 91.5% 83.9% 89.7% 90.4%
pt 97.0% 95.2% 84.3% 89.4% 90.8%
ro 86.2% 84.5% 82.1% 76.1% 77.3%
ru 88.8% 85.5% 88.7% 82.8% 72.2%
sa 57.5% 51.1% 33.6% 44.6% 12.5%
sr 95.3% 90.3% 82.3% 89.7% 83.0%
sv 91.9% 92.8% 82.1% 91.1% 92.1%
ta 82.9% 77.7% 50.8% 53.9% 8.1%
te 69.4% 58.6% 19.5% 33.3% 9.9%
th 71.6% 62.6% 47.0% 66.7% 53.8%
tr 88.9% 84.1% 68.1% 84.1% 78.2%
uk 93.1% 91.0% 88.5% 87.9% 81.9%
ur 54.1% 43.2% 28.1% 57.6% 16.9%
vi 85.0% 80.4% 81.6% 89.5% 83.6%
zh 87.8% 88.7% 88.3% 70.0% 70.4%
Average 80.4% 77.8% 69.4% 67.6% 60.5%

Full 90-language benchmark table

We also have a more comprehensive evaluation covering 90 languages, comparing Chandra 2 against Gemini 2.5 Flash. The average scores are lower than the 43-language table above because this includes many lower-resource languages. Chandra 2 averages 72.7% vs Gemini 2.5 Flash at 60.8%.

See the full 90-language results.

Throughput

Benchmarked with vLLM on a single NVIDIA H100 80GB GPU using a diverse mix of documents (math, tables, scans, multi-column layouts) from the olmOCR benchmark set. This set is significantly slower than real-world usage - we estimate 2 pages/s in real-world usage.

Configuration Pages/sec Avg Latency P95 Latency Failure Rate
vLLM, 96 concurrent sequences 1.44 60s 156s 0%

Credits

Thank you to the following open source projects:

View on GitHub

Recent activity

commits and pull requests

Releases and announcements

8 total
  1. Chandra OCR 2v0.2.0Mar 18, 2026

    Announcing Chandra OCR 2 - a 4B parameter OCR model that scores 85.9% on the olmOCR benchmark (state of the art) and 77.8% on our internal 43-language multilingual benchmark. It is smaller and more accurate than Chandra 1 (9B) across every category. ## Highlights - **4B parameters** (down from 9B), 2x throughput improvement - **85.9% olmOCR overall** (up from 83.1%) - **77.8% multilingual average** across 43 languages (up from 69.4%), 72.7% across 90 languages - **2 pages/sec** on H100 with 96 concurrent requests - **15+ layout block types** with bounding boxes - **Structured output** for diagrams (Mermaid), charts, and images ## olmOCR Benchmark | Category | Chandra 1 | Chandra 2 | Change | | -------------- | :-------: | :-------: | :----: | | ArXiv | 82.2% | 90.2% | +8.0 | | Old Scans Math | 80.3% | 89.3% | +9.0 | | Tables | 88.0% | 89.9% | +1.9 | | Multi column | 81.2% | 83.5% | +2.3 | | **Overall** | **83.1%** | **85.9%** | **+2.8** | ## Multilingual 43-language averages: Chandra 2 **77.8%**, Chandra 1 69.4%, Gemini 2.5 Flash 67.6%, GPT-5 Mini 60.5%. 90-language averages: Chandra

  2. Render pdf images properlyv0.1.7Oct 22, 2025
  3. Additional fixesv0.1.6Oct 21, 2025
  4. VLLM fixesv0.1.4Oct 21, 2025
  5. Fix attention settingv0.1.3Oct 21, 2025

Code frequency

additions and deletions
+3.2K-3.2KWeek of 2025-10-05: +2,203 linesWeek of 2025-10-05: -0 linesWeek of 2025-10-12: +1,708 linesWeek of 2025-10-12: -424 linesWeek of 2025-10-19: +3,198 linesWeek of 2025-10-19: -1,632 linesWeek of 2025-10-26: +183 linesWeek of 2025-10-26: -58 linesWeek of 2025-11-02: +18 linesWeek of 2025-11-02: -12 linesWeek of 2025-11-09: +99 linesWeek of 2025-11-09: -52 linesWeek of 2025-11-16: +7 linesWeek of 2025-11-16: -45 linesWeek of 2025-11-23: +0 linesWeek of 2025-11-23: -0 linesWeek of 2025-11-30: +0 linesWeek of 2025-11-30: -0 linesWeek of 2025-12-07: +0 linesWeek of 2025-12-07: -0 linesWeek of 2025-12-14: +0 linesWeek of 2025-12-14: -0 linesWeek of 2025-12-21: +0 linesWeek of 2025-12-21: -0 linesWeek of 2025-12-28: +0 linesWeek of 2025-12-28: -0 linesWeek of 2026-01-04: +0 linesWeek of 2026-01-04: -0 linesWeek of 2026-01-11: +93 linesWeek of 2026-01-11: -88 linesWeek of 2026-01-18: +0 linesWeek of 2026-01-18: -0 linesWeek of 2026-01-25: +0 linesWeek of 2026-01-25: -0 linesWeek of 2026-02-01: +0 linesWeek of 2026-02-01: -0 linesWeek of 2026-02-08: +0 linesWeek of 2026-02-08: -0 linesWeek of 2026-02-15: +0 linesWeek of 2026-02-15: -0 linesWeek of 2026-02-22: +0 linesWeek of 2026-02-22: -0 linesWeek of 2026-03-01: +0 linesWeek of 2026-03-01: -0 linesWeek of 2026-03-08: +156 linesWeek of 2026-03-08: -50 linesWeek of 2026-03-15: +469 linesWeek of 2026-03-15: -206 linesWeek of 2026-03-22: +0 linesWeek of 2026-03-22: -0 linesWeek of 2026-03-29: +0 linesWeek of 2026-03-29: -0 linesWeek of 2026-04-05: +5 linesWeek of 2026-04-05: -0 linesWeek of 2026-04-12: +0 linesWeek of 2026-04-12: -0 linesWeek of 2026-04-19: +15 linesWeek of 2026-04-19: -5 linesWeek of 2026-04-26: +0 linesWeek of 2026-04-26: -0 linesWeek of 2026-05-03: +0 linesWeek of 2026-05-03: -0 linesWeek of 2026-05-10: +0 linesWeek of 2026-05-10: -0 linesWeek of 2026-05-17: +0 linesWeek of 2026-05-17: -0 linesWeek of 2026-05-24: +0 linesWeek of 2026-05-24: -0 linesWeek of 2026-05-31: +0 linesWeek of 2026-05-31: -0 linesWeek of 2026-06-07: +0 linesWeek of 2026-06-07: -0 linesWeek of 2026-06-14: +0 linesWeek of 2026-06-14: -0 linesWeek of 2026-06-21: +328 linesWeek of 2026-06-21: -15 linesWeek of 2026-06-28: +0 linesWeek of 2026-06-28: -0 linesWeek of 2026-07-05: +0 linesWeek of 2026-07-05: -0 linesWeek of 2026-07-12: +0 linesWeek of 2026-07-12: -0 linesWeek of 2026-07-19: +0 linesWeek of 2026-07-19: -0 linesWeek of 2026-07-26: +0 linesWeek of 2026-07-26: -0 linesWeek of 2026-08-02: +0 linesWeek of 2026-08-02: -0 linesWeek of 2026-08-09: +0 linesWeek of 2026-08-09: -0 linesWeek of 2026-08-16: +0 linesWeek of 2026-08-16: -0 linesWeek of 2026-08-23: +0 linesWeek of 2026-08-23: -0 linesWeek of 2026-08-30: +0 linesWeek of 2026-08-30: -0 linesWeek of 2026-09-06: +0 linesWeek of 2026-09-06: -0 linesWeek of 2026-09-13: +0 linesWeek of 2026-09-13: -0 linesOct 5, 2025Sep 13, 2026
+8.5K lines added, -2.6K removed over the last year.

Commits per week

last 52 weeks
140Week of 2025-10-05: 2 commitsWeek of 2025-10-12: 5 commitsWeek of 2025-10-19: 14 commitsWeek of 2025-10-26: 5 commitsWeek of 2025-11-02: 4 commitsWeek of 2025-11-09: 6 commitsWeek of 2025-11-16: 2 commitsWeek of 2025-11-23: 0 commitsWeek of 2025-11-30: 0 commitsWeek of 2025-12-07: 0 commitsWeek of 2025-12-14: 0 commitsWeek of 2025-12-21: 0 commitsWeek of 2025-12-28: 0 commitsWeek of 2026-01-04: 0 commitsWeek of 2026-01-11: 5 commitsWeek of 2026-01-18: 0 commitsWeek of 2026-01-25: 0 commitsWeek of 2026-02-01: 0 commitsWeek of 2026-02-08: 0 commitsWeek of 2026-02-15: 0 commitsWeek of 2026-02-22: 0 commitsWeek of 2026-03-01: 0 commitsWeek of 2026-03-08: 1 commitsWeek of 2026-03-15: 11 commitsWeek of 2026-03-22: 0 commitsWeek of 2026-03-29: 0 commitsWeek of 2026-04-05: 1 commitsWeek of 2026-04-12: 0 commitsWeek of 2026-04-19: 1 commitsWeek of 2026-04-26: 0 commitsWeek of 2026-05-03: 0 commitsWeek of 2026-05-10: 0 commitsWeek of 2026-05-17: 0 commitsWeek of 2026-05-24: 0 commitsWeek of 2026-05-31: 0 commitsWeek of 2026-06-07: 0 commitsWeek of 2026-06-14: 0 commitsWeek of 2026-06-21: 1 commitsWeek of 2026-06-28: 0 commitsWeek of 2026-07-05: 0 commitsWeek of 2026-07-12: 0 commitsWeek of 2026-07-19: 0 commitsWeek of 2026-07-26: 0 commitsWeek of 2026-08-02: 0 commitsWeek of 2026-08-09: 0 commitsWeek of 2026-08-16: 0 commitsWeek of 2026-08-23: 0 commitsWeek of 2026-08-30: 0 commitsWeek of 2026-09-06: 0 commitsWeek of 2026-09-13: 0 commitsWeek of 2026-09-20: 0 commitsWeek of 2026-09-27: 0 commitsOct 5, 2025Sep 27, 2026
58 commits in the last 52 weeks.

When work happens

weekday and hour
SunMonTueWedThuFriSat036912151821Sun 0:00 — 0 commitsSun 1:00 — 0 commitsSun 2:00 — 0 commitsSun 3:00 — 0 commitsSun 4:00 — 0 commitsSun 5:00 — 0 commitsSun 6:00 — 0 commitsSun 7:00 — 0 commitsSun 8:00 — 0 commitsSun 9:00 — 0 commitsSun 10:00 — 2 commitsSun 11:00 — 0 commitsSun 12:00 — 0 commitsSun 13:00 — 0 commitsSun 14:00 — 0 commitsSun 15:00 — 0 commitsSun 16:00 — 0 commitsSun 17:00 — 0 commitsSun 18:00 — 0 commitsSun 19:00 — 0 commitsSun 20:00 — 0 commitsSun 21:00 — 0 commitsSun 22:00 — 0 commitsSun 23:00 — 0 commitsMon 0:00 — 0 commitsMon 1:00 — 0 commitsMon 2:00 — 0 commitsMon 3:00 — 0 commitsMon 4:00 — 0 commitsMon 5:00 — 0 commitsMon 6:00 — 0 commitsMon 7:00 — 0 commitsMon 8:00 — 0 commitsMon 9:00 — 0 commitsMon 10:00 — 0 commitsMon 11:00 — 1 commitsMon 12:00 — 0 commitsMon 13:00 — 0 commitsMon 14:00 — 0 commitsMon 15:00 — 1 commitsMon 16:00 — 2 commitsMon 17:00 — 3 commitsMon 18:00 — 1 commitsMon 19:00 — 0 commitsMon 20:00 — 0 commitsMon 21:00 — 0 commitsMon 22:00 — 0 commitsMon 23:00 — 0 commitsTue 0:00 — 0 commitsTue 1:00 — 0 commitsTue 2:00 — 0 commitsTue 3:00 — 0 commitsTue 4:00 — 0 commitsTue 5:00 — 0 commitsTue 6:00 — 0 commitsTue 7:00 — 1 commitsTue 8:00 — 0 commitsTue 9:00 — 0 commitsTue 10:00 — 6 commitsTue 11:00 — 4 commitsTue 12:00 — 1 commitsTue 13:00 — 2 commitsTue 14:00 — 0 commitsTue 15:00 — 2 commitsTue 16:00 — 1 commitsTue 17:00 — 0 commitsTue 18:00 — 0 commitsTue 19:00 — 0 commitsTue 20:00 — 0 commitsTue 21:00 — 0 commitsTue 22:00 — 0 commitsTue 23:00 — 0 commitsWed 0:00 — 0 commitsWed 1:00 — 0 commitsWed 2:00 — 0 commitsWed 3:00 — 0 commitsWed 4:00 — 0 commitsWed 5:00 — 0 commitsWed 6:00 — 0 commitsWed 7:00 — 0 commitsWed 8:00 — 2 commitsWed 9:00 — 1 commitsWed 10:00 — 0 commitsWed 11:00 — 4 commitsWed 12:00 — 2 commitsWed 13:00 — 1 commitsWed 14:00 — 0 commitsWed 15:00 — 1 commitsWed 16:00 — 4 commitsWed 17:00 — 4 commitsWed 18:00 — 2 commitsWed 19:00 — 0 commitsWed 20:00 — 0 commitsWed 21:00 — 0 commitsWed 22:00 — 0 commitsWed 23:00 — 0 commitsThu 0:00 — 0 commitsThu 1:00 — 0 commitsThu 2:00 — 0 commitsThu 3:00 — 0 commitsThu 4:00 — 0 commitsThu 5:00 — 0 commitsThu 6:00 — 0 commitsThu 7:00 — 0 commitsThu 8:00 — 0 commitsThu 9:00 — 0 commitsThu 10:00 — 1 commitsThu 11:00 — 0 commitsThu 12:00 — 2 commitsThu 13:00 — 1 commitsThu 14:00 — 0 commitsThu 15:00 — 0 commitsThu 16:00 — 1 commitsThu 17:00 — 0 commitsThu 18:00 — 1 commitsThu 19:00 — 0 commitsThu 20:00 — 2 commitsThu 21:00 — 0 commitsThu 22:00 — 0 commitsThu 23:00 — 0 commitsFri 0:00 — 0 commitsFri 1:00 — 0 commitsFri 2:00 — 0 commitsFri 3:00 — 0 commitsFri 4:00 — 0 commitsFri 5:00 — 0 commitsFri 6:00 — 0 commitsFri 7:00 — 0 commitsFri 8:00 — 0 commitsFri 9:00 — 0 commitsFri 10:00 — 0 commitsFri 11:00 — 0 commitsFri 12:00 — 0 commitsFri 13:00 — 1 commitsFri 14:00 — 0 commitsFri 15:00 — 0 commitsFri 16:00 — 0 commitsFri 17:00 — 0 commitsFri 18:00 — 0 commitsFri 19:00 — 0 commitsFri 20:00 — 0 commitsFri 21:00 — 0 commitsFri 22:00 — 0 commitsFri 23:00 — 0 commitsSat 0:00 — 0 commitsSat 1:00 — 0 commitsSat 2:00 — 0 commitsSat 3:00 — 0 commitsSat 4:00 — 0 commitsSat 5:00 — 0 commitsSat 6:00 — 0 commitsSat 7:00 — 0 commitsSat 8:00 — 0 commitsSat 9:00 — 0 commitsSat 10:00 — 0 commitsSat 11:00 — 0 commitsSat 12:00 — 0 commitsSat 13:00 — 0 commitsSat 14:00 — 1 commitsSat 15:00 — 0 commitsSat 16:00 — 0 commitsSat 17:00 — 0 commitsSat 18:00 — 0 commitsSat 19:00 — 0 commitsSat 20:00 — 0 commitsSat 21:00 — 0 commitsSat 22:00 — 0 commitsSat 23:00 — 0 commits
Commit volume by weekday and hour (UTC). Larger dots mean more commits.
DateListRankStars gained
Mar 27, 2026daily#24+80