TLDR: https://no-ocr.com/about
Motivation: OCR – have you heard about it?
Solved problem, right. Apparently not! I was amazed at how many companies are still struggling with PDFs and processing information.
At the beginning, I thought – okay, those are not advanced companies, or don’t put priority on it, or don’t have the right team, or something else. But for god’s sake – how in 2025 can you not process PDFs? AI is supposed to replace all of us (true story), and we’re still struggling with PDFs?
So I complained a lot, but there is a limit at which you stop complaining and actually do something!
And here we go: https://github.com/kyryl-opens-ml/no-ocr
NoOCR project for efficient search over PDFs, completely open source, relying on open source models, no OCR, easily installable, and usable from any enterprise environment!
Flow: Upload + Search
The current flow is simple
- upload multiple PDFs
- search over them
- that’s it.
The search engine handles highly complex visuals, layouts, tables, plots, diagrams, and more – no OCR, no unnecessary complexity. It uses just two LLMs: one to identify the most relevant pages and another to interpret them.

When to use (and not to use):
- If your documents are visually rich, such as tables, plots, diagrams, etc., NoOCR is a good tool for you.
- If your documents are mostly text-based, NoOCR is probably overkill for you. It is better to use old school BM25.
- If it is a mix, you may need to tune the solution, but this is why NoOCR is open source: https://github.com/kyryl-opens-ml/no-ocr
Why is the main entity in the application called “Case“? Two reasons: it is short and familiar to many people in the legal and insurance domains.
Architecture: Keep it simple.
Full diagram of all services:

Simple API + UI pattern! No databases, no queue, very basic stuff. All persistence happens on the file system and uses 3 services:
Here is what happens when you create the case:

and here is what happens when you search over the case:

LLM part: Keep it open.
I love open models. For some stages/companies, they might be suboptimal to use, but the fact you control your own destiny is always good. So which models do we have here? Just two, apparently: ColPali family and Qwen2-VL family
- ColPali family: To be very concrete: ColQwen2. ColPali is a visual retriever model that processes images and represents them in a searchable format. I wrote a detailed explanation about it here: Remove Complexity from Your RAG Applications.
- Qwen2-VL family: To be very concrete, Qwen2-VL-7B-Instruct. The Qwen model family is extremely popular nowadays, especially their QVQ-72B-Preview model, an open-source reasoning model with vision capabilities. As far as I know, this is the most advanced open visual model as of now.
Next: Roadmap
This project has basic functionality, but by no means is it complete. The current roadmap looks like this. Let’s see where we can take it!
- Better models for reasoning and retrieval 72B and QVQ.
- Agentic workflows – go beyond search and toward complete peace of work.
- Training models per case – turn your workflow into data moat and train unique models.
- UI/UX improvement – simplify, simplify, simplify.
If you have any strong opinions, I’m always happy to discuss in GitHub issues.
Takeaways:
Go ahead and try it: https://no-ocr.com/about, or deep dive into the code at https://github.com/kyryl-opens-ml/no-ocr!
If you like what you read -> consider joining my course where I teach how to build similar ML-based systems. Or feel free to contact me, I am always open to collaboration.