Skip to content
Raj
All work

Meridian

Scans, photocopies, tables that fall apart, diagrams and equations that get skipped. Meridian reads them anyway. Layout detection, then a vision model writes out every table, figure and formula it finds, then it all becomes searchable. Measured at up to 118 pages a minute on a single H200, and it runs the whole stack on that one card. Free and open source.

118/min
pages, measured
1
GPU for the whole stack
4
kinds of content extracted

What the problem was

Almost every document tool is really just pulling out the text layer. That works on something exported last week and falls apart on anything older.

In a real archive it’s worse than useless, because what you actually want is in the tables, the diagrams and the equations, and a large chunk of any old archive is a scan of a photocopy with no text layer at all. The documents that matter most come back empty.

How I built it

Stop making every job load its own model

The obvious design, one worker that loads a model and reads a document, wastes nearly the whole card. Loading takes longer than the work, and you can only ever do one thing at a time.

So the models load once and sit there as services, and a lot of small stateless workers queue up and ask them for things. Eight parallel readers, a vision model and the embedding model all share one GPU. The card stops being something jobs fight over and becomes something they all use.

The trick that made equations work

Vision models get confused by a page with eleven equations on it. Ask for the equations and you get a confident, useless jumble.

The fix was almost silly: draw numbered boxes onto the page first, then ask for box three specifically. Suddenly you’re pointing at something instead of describing it. That one change is what made formula extraction reliable.

Everything it gets out, and nothing skipped

Tables come back as clean markdown with row spans, column spans and nested headers preserved. Figures and charts get described in detail, so a bar chart becomes searchable text rather than a hole in the page. Formulas come out as LaTeX with their equation numbers.

The text itself arrives in reading order with the heading hierarchy intact, every chunk carrying its page number and where on the page it sat.

Measured, not projected

The published benchmarks are three real runs, not an estimate: 118.7 pages a minute on a batch of academic papers, then 82.9 and 77.2 on scanned Apollo-era NASA reports, which are much harder. The repo ships the full table with hardware, document counts and config so anyone can reproduce it.

That distinction matters more than it sounds. The earlier README quoted a throughput number that turned out to be a hardcoded estimate the setup tool prints before it processes anything. It now publishes only what was actually measured.

How it turned out

  • Up to 118 pages a minute on a single H200, sustained across multi-document batches.
  • Runs Docling, the vision model and the embedding model together on one GPU.
  • Open source and reproducible. Every published number ships with the hardware and config that produced it.
  • It is the engine under both IntraParse and Deep Field.