StackMap
Subscribe

olmocr vs xberg

Open toolkit that linearizes messy PDFs — scans, tables, equations, handwriting — into clean ordered Markdown with a self-hosted vision-language model. Built for LLM training data and RAG ingestion. — versus — Rust-core document-intelligence engine with 15 language bindings: turns 96 formats — PDF, Office, images, audio, code — into clean text, tables and RAG-ready chunks. Library, CLI, REST or MCP.

The curated verdict

Same end goal — clean, ordered Markdown from PDFs for RAG/training ingestion. olmocr is a dedicated self-hosted vision-language model that excels on scans, tables and handwriting; Xberg is a general extraction framework where OCR is one pluggable backend. Use olmocr when OCR quality is the bottleneck, Xberg when you need many formats and language bindings.

olmocrxberg
Stars19k8.7k
Forks1.6k520
LanguagePythonRust
LicenseApache-2.0MIT
Last activity3 months ago2 days ago
Topicsrag, ocrocr, rag, local
Curated connections85

olmocr — the curator's take

Reach for olmocr when you have lots of messy PDFs to convert into high-quality text for a training corpus or RAG index and you have GPU to run the VLM. It is the parsing FRONT-END of a pipeline, not a RAG system itself — pair it with an indexer/retriever (LlamaIndex) and a vector store (Chroma). NOT worth it for clean, digital-native PDFs where a cheap text extractor does the job — running a vision-language model for those is overkill.

xberg — the curator's take

The polyglot pick: reach for Xberg when your stack spans Rust, Python, Node, Go, the JVM or WASM and you want ONE extraction engine instead of a per-language pipeline. Handles 96 formats — PDFs, Office, images, audio/video (Whisper), even source code (306 languages, syntax-aware chunking) — with pluggable OCR (Tesseract/PaddleOCR/VLM), no GPU, and library/CLI/REST/MCP entry points. It's the v1 successor to Kreuzberg. Don't reach for it if you only need max-fidelity parsing of messy scanned PDFs (a dedicated VLM like MinerU or olmocr wins there), or if you're Python-only and already committed to LlamaIndex's own readers.