pdf-inspector от Firecrawl: PDF в Markdown за 200 мс

pdf-inspector от Firecrawl: PDF в Markdown за 200 мс, локально и без OCR
pdf-inspector - опенсорсная Rust-библиотека от команды Firecrawl, которая конвертирует текстовый PDF в чистый Markdown с сохранением заголовков, списков и таблиц. Скорость: до 200 миллисекунд на документ на обычном ноутбуке, 200 PDF из бенчмарк-корпуса - за 0.47 секунды на Apple M4 Pro. Внутри - PDF-классификатор: перед парсингом библиотека сама определяет, текстовый это PDF или скан, и предлагает OCR-роутинг для тех ~46% файлов, где OCR реально нужен. Лицензия MIT, 11 300+ звёзд на GitHub. Ставится одной командой через crates.io, npm или pip. Есть биндинги под Node.js, Python и WebAssembly в браузере.
Что делает pdf-inspector и зачем он отдельно от anydoc
У Firecrawl уже есть anydoc - конвертер всего офисного мусора в Markdown: Word, PowerPoint, Excel, RTF, EPUB. Логичный вопрос: зачем ещё отдельный PDF-инструмент?
Потому что PDF - это не документ, а контейнер, в который может быть залито что угодно: настоящий текст с координатами букв, картинки со сканами страниц, или мешанина из того и другого. Универсальный парсер тут ломается на 40% файлов. pdf-inspector глубоко сидит именно в PDF: он не только читает текстовый слой, но и сначала классифицирует файл, потом выстраивает reading order для многоколоночных верстков, отдельно находит таблицы двумя разными алгоритмами (rectangle-based + heuristic по выравниванию текста), поддерживает CID-шрифты и RTL. Anydoc в PDF работает поверхностно, только текстовые слои и без position-aware извлечения. Так что связка простая: anydoc - для офисного зоопарка, pdf-inspector - когда в пайплайне PDF и их надо парсить хорошо.
Как pdf-inspector отличает скан от текстового PDF
Это фича, ради которой стоит его брать в RAG-пайплайн. Библиотека сэмплит поток операторов PDF и за 10-50 миллисекунд возвращает одно из четырёх значений:
- TextBased - настоящий текст, можно сразу парсить.
- Scanned - страницы это картинки, нужен OCR.
- ImageBased - смешанное, вставленные изображения, надо OCR по конкретным страницам.
- Mixed - часть страниц текстовые, часть сканы, per-page routing.
К каждому вердикту прилагается confidence score от 0 до 1 и per-page рекомендация: какие страницы гнать через OCR, какие - нет. По данным авторов, ~54% PDF в реальных корпусах - чисто текстовые, и на них OCR-сервис (типа AWS Textract, Google Document AI) вообще не нужен. pdf-inspector позволяет проредить пайплайн и не платить за OCR половины файлов. Для команд, которые крутят RAG на регуляторной, юридической, медицинской документации - это прямая экономия на инфраструктуре.
Насколько быстро на самом деле - бенчмарк против markitdown и pymupdf4llm
Авторы прогнали pdf-inspector на корпусе opendataloader-bench из 200 PDF-файлов (научные статьи, отчёты, финансы, счета). OCR отключён, все парсеры без ML-моделей. Обновлённые цифры на 31 июля 2026:
| Парсер | Общий балл | Reading Order | Таблицы (TEDS) | Заголовки | 200 PDF |
|---|---|---|---|---|---|
| pdf-inspector 0.2.6 | 0.875 | 0.915 | 0.814 | 0.788 | 0.470 с |
| LiteParse 2.10.1 | 0.873 | 0.913 | 0.693 | 0.811 | 0.750 с |
| OpenDataLoader 2.2.1 | 0.831 | 0.902 | 0.489 | 0.739 | 2.569 с |
| PyMuPDF4LLM 0.2.0 | 0.735 | 0.886 | 0.401 | 0.424 | 17.117 с |
| MarkItDown 0.1.5 | 0.589 | 0.844 | 0.273 | 0.000 | 16.165 с |
Железо - Apple M4 Pro, медиана из пяти прогонов после прогрева. pdf-inspector обгоняет markitdown (тот, что от Microsoft) в 34 раза по скорости и в полтора раза по общему баллу. По качеству таблиц - в 3 раза выше. Пересчёт: 0.47 с на 200 документов - это 2.3 миллисекунды медианы на документ. Обещанные "под 200 мс" - это верхняя граница на тяжёлых файлах.
Лайфхак: если у тебя горит на скорости и качество вторично - pdf-inspector. Если критичнее заголовки - LiteParse обошёл его на 0.023 балла именно по заголовкам, но проиграл на таблицах и в полтора раза по времени.
Как установить pdf-inspector за минуту
Библиотека собрана как один Rust-бинарник и разошлась через три пакетных менеджера. Выбирай по стеку.
Node.js / TypeScript:
npm install @firecrawl/pdf-inspector
import { readFileSync } from 'fs';
import { processPdf } from '@firecrawl/pdf-inspector';
const result = processPdf(readFileSync('report.pdf'));
console.log(result.pdfType); // TextBased / Scanned / ImageBased / Mixed
console.log(result.markdown); // markdown или null (если скан)
Python:
pip install maturin
maturin develop --release
Rust:
cargo add pdf-inspector
CLI, чтобы дёргать из терминала или шелл-пайплайна:
cargo install pdf-inspector
pdf2md document.pdf # markdown в stdout
pdf2md document.pdf --json # JSON с метаданными
pdf2md document.pdf --pages # с page break markers
pdf2md document.pdf --select-pages 1,3,5-10
detect-pdf document.pdf --analyze --json # только классификация + разметка
Если лень ставить локально - открывай firecrawl.github.io/pdf-inspector, там та же библиотека собрана в WebAssembly и работает прямо в браузере. Файл никуда не отправляется, всё считается в твоей вкладке. Удобно проверить один-два документа, не разворачивая пайплайн.
Как встроить pdf-inspector в RAG на Node.js через Claude Code
Для тех, кто собирает свой RAG или пайплайн подготовки документов под LLM - вот готовый промпт, который выкатит рабочий скелет за одну итерацию.
В Claude Code вставь запрос:
Собери на Node.js RAG-пайплайн для PDF-документов на базе @firecrawl/pdf-inspector:
1. Функция ingestPdf(filepath) - читает файл, вызывает processPdf, возвращает объект { type, markdown, pages }
2. Если result.pdfType === "Scanned" или "ImageBased" - кидай ошибку "нужен OCR" с заглушкой под будущий OCR-хук
3. Разбей markdown на чанки по заголовкам H1/H2 через простой сплит, добавь метаданные (page range, heading path)
4. Клади чанки в эмбеддинги через text-embedding-3-small и локальный Chroma
5. Напиши search(query, topK=5) - возвращает чанки с source-путём и заголовком
6. Юнит-тест на sample-report.pdf в /fixtures: должен вернуть markdown с сохранёнными таблицами
7. Обработай кейс Mixed - парсить только TextBased-страницы через опции select_pages
Claude Code сам подтянет README библиотеки, соберёт скелет и напишет тесты. За полчаса у тебя рабочий локальный RAG, который умеет отличать сканы и не отправляет их в API впустую.
Чего pdf-inspector НЕ делает
Честно про ограничения, чтобы не тратить время зря.
- Нет OCR. Если файл - скан, библиотека вернёт
pdfType: "Scanned"иmarkdown: null. OCR надо прикручивать отдельно (Tesseract локально, или AWS Textract, Google Document AI, платный Firecrawl Parse). pdf-inspector не претендует быть OCR-движком, он решает задачу роутинга. - Нет ML-моделей. Это чистый Rust на одной зависимости
lopdf. Никаких Transformers, никакого GPU. Плюс - крохотный бинарник и скорость. Минус - сложные научные PDF с формулами извлекаются как текст, но структуру формул не читает. - Нет reasoning над содержимым. Он парсит, а не понимает. Если нужно "вытащить таблицы с финпоказателями и посчитать" - это уже задача для LLM поверх Markdown-вывода, а не для pdf-inspector.
Когда pdf-inspector - в самый раз, а когда - overkill
Бери, если:
- RAG или дообучение на большом корпусе текстовых PDF (научные статьи, договоры, отчёты, счета, регуляторка). Экономия времени и денег - в разы.
- Нужен локальный парсер без отправки файлов наружу (compliance, чувствительные данные, банковская тайна, врачебная тайна).
- В корпусе смесь: часть сканов, часть текст. pdf-inspector сортирует за копейки и оставляет OCR только тому, кому реально надо.
- Пишешь агента, который читает PDF - парсер должен работать за миллисекунды, а не за 15 секунд как markitdown.
Не бери, если:
- Пять файлов в неделю руками - открой WASM-демо в браузере, не разворачивай пайплайн.
- Все документы - сканы. Тут нужен OCR-первый инструмент, pdf-inspector только определит, что это скан, и всё.
- Нужен JSON-в-JSON, а не Markdown - посмотри lift datalab, он заточен под структурированное извлечение полей.
FAQ
pdf-inspector бесплатный? Да, лицензия MIT. Можно использовать в коммерческих проектах, форкнуть, встроить в свой продукт - без ограничений. У Firecrawl есть параллельно платный хостед-сервис для тех, кому нужен OCR из коробки, но это отдельная история, а не про эту библиотеку.
Работает ли pdf-inspector на Windows, Mac, Linux? Да. Rust собирается под все три платформы, npm-пакет тянет предсобранный бинарник под систему автоматически. WebAssembly-версия работает в любом современном браузере.
Как pdf-inspector сравнивается с pymupdf4llm или markitdown? По бенчмарку авторов - в 34 раза быстрее markitdown (0.47 с против 16.2 с на 200 PDF), в 36 раз быстрее pymupdf4llm, и обгоняет обоих по всем метрикам качества - reading order, таблицы, заголовки. При этом markitdown и pymupdf4llm - это Python-стек, pdf-inspector - Rust с биндингами, отсюда основная разница в скорости.
Сохраняет ли pdf-inspector таблицы правильно? Да, это его сильная сторона. Есть два независимых алгоритма: rectangle-based (по операторам рисования линий) и heuristic (по выравниванию текста). Работают вместе, покрывают финансовые таблицы, footnotes, продолжающиеся между страницами. По TEDS-метрике на бенчмарке (0.814) обгоняет всех - у ближайшего конкурента 0.693.
Можно ли использовать pdf-inspector в браузере без сервера?
Да, через пакет @firecrawl/pdf-inspector-wasm. Файл не улетает на сервер, всё парсится локально в WebAssembly. Удобно для приватности и для тонких SaaS без бэкенда под PDF.
Вывод
pdf-inspector - редкий случай, когда узкоспециализированный опенсорс делает работу лучше, чем универсальные конвертеры, и делает её локально. Rust, MIT, миллисекунды на документ, честная классификация скан-vs-текст, живой бенчмарк с публичными цифрами. Ставится за минуту, встраивается за полчаса. Если ты собираешь RAG на PDF или готовишь корпус под дообучение - выкидывай pymupdf4llm или markitdown и попробуй эту библиотеку. Если только присматриваешься - открой WASM-демо и брось туда самый уродский отчёт на 60 страниц с таблицами, всё сразу станет понятно.
Что дальше
Если хочешь собрать такую систему у себя - у меня есть курс по вайбкодингу и работе с нейросетями в клубе Мандарин Лаб: mandarinedu.ru. Первые уроки открыты бесплатно.
Если нужно внедрить ИИ в бизнес - процессы, агентов, автоматизацию под вашу задачу - пишите мне напрямую: t.me/Philigranchik. Разберу задачу и скажу, что реально автоматизируется, а что нет.

Вайбкодер-разработчик и маркетолог с 9-летним опытом, основатель «Мандарин Лаб». Собирает на ИИ то, за что раньше платили подрядчикам сотни тысяч: CRM, ботов, автоматизации, монтаж. Одну из систем строил под агентство недвижимости с базой в 400 000 лидов. Теперь учит этому с нуля - как за вечер собрать свой инструмент через Claude Code и зарабатывать на нейросетях.
Telegram @mike_cmo →