How it works
From a highlighted PDF to clean Markdown in five steps — without your document ever leaving the browser.
-
You upload the PDF
Drag & drop or select a PDF with highlighted text of any color. The file is read locally by PDF.js: nothing is transmitted anywhere — you can even test it with your most confidential documents.
-
MarkOut detects the highlights
Every PDF — digital or scanned, with or without annotations — goes through the same neural pipeline: a custom YOLO26 model (self-hosted ONNX) detects the highlighted areas visually on the rendered page.
-
Reading order is reconstructed
Detected text rows are organized with a gap-tree layout algorithm: paragraphs and columns are identified, and every highlight is assigned to the row that contains it. The result is a proper reading order — even for two-column academic papers.
-
OCR recognizes the text
Each highlighted fragment is cropped (deskewed per row) and recognized by PaddleOCR, running locally via WebAssembly — or WebGPU on desktop for faster AI inference. The recognition model covers English and the most common Latin-script languages (it, fr, de, es, pt, nl…).
-
You get clean Markdown
Highlights are merged in reading order into a Markdown document: YAML front-matter with source and date,
## Page Nsections, and stable citeable IDs ([H12]) per line — ideal for notes apps and LLM workflows. Copy it or download the.mdfile.
What makes the output reliable
- One pipeline for every PDF — the same YOLO detection + OCR flow runs on every document, scanned or digital: consistent behavior, no hidden paths.
- Deterministic layout — the same algorithm drives the pipeline and the debug views: no hidden logic.
- Quality flags — lines the OCR couldn't read are marked (
⚠️ no text) instead of silently dropped, with an extraction-notes section. - Low memory profile — on mobile, pages are processed one at a time and models are released at the end.