Tools,

Obsidian OCR, tested on a real scanned PDF

0

of 1,955 scan words, searchable in Omnisearch

Get the fix

Omnisearch reads PDF text, not scans

Omnisearch reads PDFs and images through the Text Extractor plugin. "PDFs content indexing" and "Images OCR indexing" are off by default.

Text Extractor reads PDFs with pdf-extract, with no OCR. I ran the PDF code from its 0.7.0 release on a 10-page scan. It gave back 10 empty pages.

In the 11-page file, it read the typed cover page, 13 of 13 words, and nothing on the scanned pages.

The fix: OCRmyPDF first

fix.sh adds a hidden text layer. --skip-text leaves typed pages as they are:

ocrmypdf --skip-text --jobs 2 book.pdf book-ocr.pdf

Then put book-ocr.pdf in your vault.

1,864 of 1,955 words, in order

29 s for 10 pages

The 11-page file kept all 13 cover words. Text Extractor caches by file path. If you replace a PDF under the same name, right-click it: Text Extractor, then Clear cache for this file.

Page images: turn on system OCR

Text Extractor reads images with tesseract.js 3.0.3. On a Mac, its "Use system OCR" setting uses Apple's OCR instead. I gave both the scan's 10 page JPGs.

10 page images, English
Setting Words in order Time
Default (tesseract.js) 1,857 61 s
Use system OCR 1,929 23 s

System OCR is for Macs only. On phones, Text Extractor reads no files. It uses text that a computer read and synced.

German: set the language first

The default OCR language is English. I gave it 3 German pages. One is a magazine page with two columns.

3 German page images
Setting Umlauts, of 206 Two columns, of 972
English (default) 0 398
German 146 486
Use system OCR 153 595

System OCR finds the language by itself.

Apple's OCR beat our Actor on English

Our Actor makes Markdown from a file URL, with no install:

curl -s -X POST "https://api.apify.com/v2/acts/brasspage~pdf-ocr-to-markdown/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"documentUrls": ["https://api.apify.com/v2/key-value-stores/sTnmNrGoSsi7tLQvs/records/anythingllm-mixed-11-pages.pdf"]}' \
  | jq -r '.[].markdown' > mixed.md
Same files, the best Obsidian setting
Test System OCR Actor
Scan words in order 1,929 1,874
Umlauts 153 192
Two columns, in order 595 954
Time a page 2.3 s 12.1 s

Apple's OCR is free and stays on your Mac. The Actor works on any computer, read German and two columns better, and costs $0.006 a page.

How I tested it
  • Scan: the 10 pages of OCR in n8n, proofread Wikisource book scans, 1,955 true words. The 11-page file adds the 13-word typed cover page of AnythingLLM OCR.
  • German: the 3 pages of Paperless-ngx OCR, 1,887 words, 206 umlauts. Page images: the scans' own JPGs, from pdfimages.
  • Obsidian itself did not run. I ran Text Extractor 0.7.0's code in Node: the PDF worker from its main.js, its tesseract.js 3.0.3 calls, and its system OCR AppleScript.
  • Score: true words found in order, with the scorer of the tessdata test. German: the scorer of Tesseract German.
  • OCRmyPDF 17.13.0, Tesseract 5.5.4, macOS 26.6, Apple Silicon. One worker at the lowest priority. The code blocks above are the files that ran. The Actor: two real runs, build 0.1.65.
What I did not test
  • The Obsidian app, phones, Windows and Linux.
  • AI plugins that send images to a model service.
  • Handwriting.
Sources

Two ways to skip the work

Run it yourself. Our Apify Actor turns scanned PDFs into Markdown, tables included.

Try the Actor

Or send us the scan. Tack, our AI, does the job for $29, up to 50 pages. First page free.

Get one page free

Questions people ask

Can Omnisearch search scanned PDFs?

Not as they are. Text Extractor, which reads PDFs for Omnisearch, has no OCR for PDFs. It found 0 of 1,955 words in a 10-page scan, and 1,864 after OCRmyPDF.

Which Text Extractor setting reads images best?

On a Mac, Use system OCR. On 10 page images it read 1,929 of 1,955 words in order in 23 s. The default, tesseract.js, read 1,857 in 61 s.

How do I OCR German in Obsidian?

Add German to Text Extractor's OCR languages, or turn on system OCR on a Mac. With the default English, 3 German pages kept 0 of 206 umlauts. German kept 146, system OCR 153.