🛠 AI-инструменты

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

Михаил ИванинМихаил Иванин5 августа 2026 г.7 мин чтения
pdf-inspector от Firecrawl: PDF в Markdown за 200 мс
✈️
Свежие гайды и обзоры выходят в моём Telegram первыми
Подписаться →

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.60.8750.9150.8140.7880.470 с
LiteParse 2.10.10.8730.9130.6930.8110.750 с
OpenDataLoader 2.2.10.8310.9020.4890.7392.569 с
PyMuPDF4LLM 0.2.00.7350.8860.4010.42417.117 с
MarkItDown 0.1.50.5890.8440.2730.00016.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. Разберу задачу и скажу, что реально автоматизируется, а что нет.

Бесплатный первый урок

Хочешь собрать это сам - с нуля до первого клиента?

В первом уроке показываю весь путь по шагам: ставим Claude Code, собираем первый рабочий инструмент и как на этом начать зарабатывать. Без воды и без кода.

Смотреть первый урок →
Михаил Иванин
Об авторе
Михаил Иванин

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

Telegram @mike_cmo →
#pdf-inspector#firecrawl#pdf в markdown#rust#opensource#rag#парсер pdf