Live demo · Document OCR

From resume PDF
to structured data.

Drop in a resume, even a crooked scan. OCR finds every word on the page, and a language model turns them into clean JSON while you watch. Both models run on one GPU that Chalk deploys from a single Python file, in your own cloud.

Pick a resume

Try the three fictional samples, including a scanned page with no text layer, or upload your own PDF. Hover an extracted field to see the words it came from.

docTR + qwen3-4b fp8 · nvidia l4Open in new tab

How it works

A PDF's text layer is often missing, out of order, or wrong. Reading the page the way a person does, from pixels, works the same for every document.

Render

Each PDF page is rasterized at 150 DPI with PDFium. Scans, photos and born-digital files all become the same thing: pixels.

Read

docTR finds every word on the page and recognizes it, returning text with a bounding box and confidence. Two-column layouts are read column by column.

Extract

Qwen3-4B, served by vLLM on the same GPU, turns the OCR text into resume JSON. A JSON schema constrains decoding, so the output always parses.

Getting started

Run your own extraction service

Clone the example, log in, and run the deploy script. Chalk builds one image with OCR and vLLM, provisions an L4, and prints a URL that serves this exact demo and its API.

The extraction schema is a plain JSON Schema in extract.py. Change it to pull line items from invoices or fields from intake forms, and redeploy.

chalk-ai/resume-ocr
git clone https://github.com/chalk-ai/resume-ocr
cd resume-ocr

# Or export CHALK_CLIENT_ID and CHALK_CLIENT_SECRET.
chalk login

# Builds the image on top of the official vLLM image, provisions an
# L4, and prints the URL of your own copy of this demo.
./deploy.py --gpu nvidia-l4

What Chalk handles

You write the schema. Chalk runs the GPUs, the images and the endpoint.

Two models, one replica

OCR and the language model share one L4. The image builds on the official vLLM image, and the server starts vLLM next to itself.

Streamed, not batched

The page sees every stage as it happens: rendered pages, then OCR boxes, then each field as the model writes it.

Documents stay in your cloud

PII never leaves your Chalk environment. Uploads are processed in memory and never written to disk or sent to a third-party API.

Output you can trust the shape of

Schema-constrained decoding means every response has every field, typed as declared. Missing information comes back empty, not invented.

Scale when it matters

Raise max_replicas to process a backlog of applications. vLLM batches concurrent requests on each GPU.

Open source

The server, page, sample generator and deploy script are Apache-2.0 on GitHub. Swap the schema for invoices, forms or contracts.

Turn your documents into data

Applications, invoices, claims or contracts. Talk to an engineer about running document extraction on GPUs in your cloud.