Chandra 2 turns page structure into usable output
Chandra does more than read a line of text from an image. It converts a page into Markdown, HTML, or JSON and retains layout information for sections, tables, forms, images, equations, code, and other page blocks. That makes it relevant when reading order and structure matter as much as the words. The project also extracts images and can describe diagrams or charts, which moves it closer to document reconstruction than plain OCR.
The current Chandra 2 release uses a 4-billion-parameter model. Datalab publishes benchmark tables for 43 and 90 languages, plus results on the olmOCR set, but those figures come from the project. Our 3-CPU, 8 GB sandbox did not measure recognition accuracy, page throughput, or language quality. Buyers should build a private sample containing their worst scans, handwriting, tables, and scripts before treating a public average as a deployment forecast.
The base CLI expects vLLM, while local inference adds PyTorch
The quickest install is pip install chandra-ocr. By default, the CLI sends requests to a vLLM endpoint, and chandra_vllm starts a Docker container configured for NVIDIA GPUs. The alternative hf extra adds Hugging Face inference and PyTorch inside the local Python environment. Input can be one file or a directory; output includes Markdown, HTML, metadata JSON, and any extracted images.
Our source checkout was modest: 53 files, about 1,985 lines of source, and 10.3 MB. Installation changed the picture. The environment pulled 123 packages and occupied 5,829 MB. Model weights and production serving come after that total. A team choosing the Hugging Face path should budget for PyTorch and optional FlashAttention; a vLLM team needs Docker, compatible NVIDIA drivers, GPU capacity, and a pinned serving image.
What happened when we ran it
We cloned and ran commit d4f7467 in a fresh, unprivileged Python 3.12 container. Installation succeeded in 129 seconds. The build also succeeded in 4 seconds, and pip-audit reported 0 known vulnerabilities. Those results show that the package can be installed and built in the lab image. They do not show that Chandra can process a production document within an acceptable time or memory budget.
Pytest ran one integration case, test_inference_image, and it failed when pytest-timeout stopped it after 120 seconds. The whole test step took 138 seconds and finished with 0 passed and 1 failed. The log tail also listed several mtp weights as unexpected and explained that such weights can be ignored across different tasks or architectures, but not when identical architecture is expected. The log does not establish whether those weights caused the timeout, so we will not connect them.
A 4-second build does not validate OCR output
The build result is clean but narrow. Chandra's only test in our run attempted image inference, and that is precisely where the 120-second cap ended the suite. There were no passing unit tests around file ranges, output structure, table markup, or repeated-token handling in the supplied run. A production evaluation needs known-answer documents and checks for empty pages, duplicated text, missing regions, malformed markup, and output that expands far beyond the source.
Open issue 116 gives that caution a concrete shape: the reporter supplied a specific text combination that produced a large block of gibberish. Other open reports describe repeated tokens and no-response behavior. These are user reports, not outcomes from our sandbox. Still, the 1 failed test out of 1 means our run offers no counterweight. Put human review or automated document checks between Chandra and any archive, search index, or customer-facing export.
The model license draws a commercial boundary
The Python code uses Apache-2.0, but the model weights use a modified OpenRAIL-M license. The README says research, personal use, and startups under $2 million in funding or revenue may use the weights for free. It also bars competitive use against Datalab's API under those terms. Larger companies, competing services, and teams needing different rights must arrange a commercial license.
That distinction matters because the useful artifact is the model, not only the 1,985 lines in the repository. Legal review should cover the exact model revision and your product, especially if documents flow through a paid service. Datalab also says its managed platform runs an improved model rather than exactly the open weights, so API results should not be treated as proof of self-hosted output. Compare the route you intend to deploy.
Recent issue work continues after the June code push
GitHub showed 12,392 stars and 61 combined open issues and pull requests. The repository's last push was June 26, 2026, while an open pull request was updated on September 10. Release v0.2.0 arrived on March 18. That is not an abandoned project, but the public code has moved less recently than the issue queue. One open pull request proposes saving per-page layout chunks beside the transcript.
Chandra is worth a controlled trial when tables, forms, handwriting, or page geometry defeat simpler OCR. Keep the trial honest: the 129-second install and 5,829 MB environment were successful, while the one supplied integration test did not finish under its 120-second limit. The deciding evidence should come from your documents on your GPU, checked against expected text and layout. Public benchmark tables cannot make that decision for you.

