Independent guide — not affiliated with IBM or the Docling project. Every command verified on Docling 2.143.1.
  1. Home
  2. VLM & Granite-Docling
VLM pipeline

Docling's VLM pipeline and Granite-Docling, explained

Instead of a chain of specialised models, the VLM pipeline asks one vision-language model to read each page image and write the structure out. Docling 2.143.1 ships 22 presets, from IBM's 258M-parameter Granite-Docling to 27B general models.

Verified on Docling 2.143.1Updated 27 Oct 20269 min read
In short
  • Turn it on with --pipeline vlm; the default preset is granite_docling (IBM Granite-Docling-258M, Apache-2.0).
  • Install pip install "docling[vlm]". A GPU or Apple Silicon is strongly recommended.
  • 22 presets cover DocTags models, Markdown-writing VLMs and layout parsers; some need --trust-remote-code.
  • Use the standard pipeline for born-digital PDFs and speed; try a VLM for formulas, unusual layouts, charts or when the standard pipeline struggles.

Standard vs VLM pipeline#

--pipeline standardParsedocling-parseLayoutheronTablesTableFormerOCR (if needed)autoDoclingDocument--pipeline vlm --vlm-model granite_doclingRender pageimageOne vision-language model reads the whole pageDocTags → layout, text, tables, code, formulasDoclingDocument
Same output type, different engines: the VLM pipeline replaces several specialised models with one generative model.
Standard pipelineVLM pipeline
HowParser + layout model + TableFormer + OCROne vision-language model per page image
Uses the PDF's own textYes — exact characters from born-digital PDFsNo — the model reads the rendered page
Speed on CPU2.3 s/page in our test (OCR off)Granite-Docling took 310 s for a 2-page excerpt in our test (model load included) — plan for a GPU or Apple Silicon
StrengthsFast, faithful text, bounding boxes for every itemFormulas, code, charts, odd layouts; one model to deploy
RisksComplex tables can merge rows (see our table test)Generative errors: skipped or repeated text, especially on long pages

Run it#

bashCLI
pip install "docling[vlm]"
docling convert report.pdf --pipeline vlm                       # default preset: granite_docling
docling convert report.pdf --pipeline vlm --vlm-model smoldocling
docling convert report.pdf --pipeline vlm --to html_split_page --show-layout
pythonPython
from docling.datamodel.base_models import InputFormat
from docling.datamodel.pipeline_options import VlmConvertOptions, VlmPipelineOptions
from docling.document_converter import DocumentConverter, PdfFormatOption
from docling.pipeline.vlm_pipeline import VlmPipeline

opts = VlmPipelineOptions()
opts.vlm_options = VlmConvertOptions.from_preset("granite_docling")

converter = DocumentConverter(format_options={
    InputFormat.PDF: PdfFormatOption(pipeline_cls=VlmPipeline, pipeline_options=opts)
})
doc = converter.convert("report.pdf").document
print(doc.export_to_markdown())

VlmConvertOptions.list_presets() returns every preset with its model and description; from_preset() is exactly what the CLI calls for --vlm-model.

Granite-Docling-258M in brief#

  • Made by: IBM Research · licence: Apache 2.0 · released: 17 September 2025.
  • Architecture: Idefics3 design with a siglip2-base-patch16-512 vision encoder and a Granite 165M language model.
  • Output: DocTags — compact markup for layout, text, tables, code, formulas and charts that maps onto a DoclingDocument.
  • Languages: English; Japanese, Arabic and Chinese are marked experimental.
  • Prompts: “Convert this page to docling.” for full pages; short instructions such as “Convert chart to table.” for single elements.
Granite-Docling-258M vs its predecessorScores published by IBM on the model card (higher is better; OCRBench scaled to 0–1).
SmolDocling-256M-previewGranite-Docling-258M
00.250.50.751Layout F10.86Layout recall0.88Layout precision0.92MMStar0.3OCRBench ÷ 10000.5

Source: ibm-granite/granite-docling-258M model card

Show data table
Granite-Docling evals
SmolDocling-256M-previewGranite-Docling-258M
Layout F10.850.86
Layout recall0.840.88
Layout precision0.90.92
MMStar0.170.3
OCRBench ÷ 10000.3380.5

All 22 presets#

Read from VlmConvertOptions.list_presets() in Docling 2.143.1. “Remote code” presets only run with --trust-remote-code — review the model's code first.

How big is each VLM preset?Parameters in billions, as stated in each preset's description in Docling 2.143.1. Presets without a stated size are omitted.
0102030smoldocling0.26Bgranite_docling0.26Bfalcon_ocr0.30Bnemotron_parse_v3_50.60Bnemotron_parse_v20.90Bglm_ocr0.90Blightonocr1.00Bmineru2_pro1.20Bgranite_vision2.00Bdeepseek_ocr3.00Bqwen3.00Bnanonets_ocr23.00Bdots_ocr3.00Bdots_mocr3.00Bunlimited_ocr3.34Bchandra_ocr25.30Bpixtral12.00Bgemma_12b12.00Bgemma_27b27.00B

VlmConvertOptions.list_presets(), read by docling.org.

Show data table
How big is each VLM preset?
Billion parameters
smoldocling0.26B
granite_docling0.26B
falcon_ocr0.30B
nemotron_parse_v3_50.60B
nemotron_parse_v20.90B
glm_ocr0.90B
lightonocr1.00B
mineru2_pro1.20B
granite_vision2.00B
deepseek_ocr3.00B
qwen3.00B
nanonets_ocr23.00B
dots_ocr3.00B
dots_mocr3.00B
unlimited_ocr3.34B
chandra_ocr25.30B
pixtral12.00B
gemma_12b12.00B
gemma_27b27.00B
--vlm-modelModelSizeOutputNotes
granite_doclingibm-granite/granite-docling-258M258MDocTagsDefault · MLX build
smoldoclingdocling-project/SmolDocling-256M-preview256MDocTagsPredecessor · MLX build
falcon_ocrtiiuae/Falcon-OCR0.3BMarkdownRemote code · MLX
glm_ocrzai-org/GLM-OCR0.9BMarkdownMLX
lightonocrlightonai/LightOnOCR-2-1B1BMarkdownMLX
mineru2_proopendatalab/MinerU2.5-Pro-2604-1.2B1.2BMinerU two-stepTransformers, MLX, API
granite_visionibm-granite/granite-vision-3.3-2b2BMarkdownTransformers, vLLM, Ollama, LM Studio
deepseek_ocrdeepseek-ocr:3b3BMarkdownVia Ollama or LM Studio only
qwenQwen/Qwen2.5-VL-3B-Instruct3BMarkdownMLX
nanonets_ocr2nanonets/Nanonets-OCR2-3B3BMarkdownMLX
dots_ocrrednote-hilab/dots.ocr3BJSON with boxesRemote code
dots_mocrrednote-hilab/dots.mocr3BJSON with boxesRemote code; needs flash-attn with Transformers
unlimited_ocrbaidu/Unlimited-OCR3.34B MoEMarkdown with boxes
chandra_ocr2datalab-to/chandra-ocr-25.3BHTML with boxesRemote code · MLX
pixtralmistral-community/pixtral-12b12BMarkdownMLX
gemma_12bgoogle/gemma-3-12b-it12BMarkdownMLX only
gemma_27bgoogle/gemma-3-27b-it27BMarkdownMLX only
phi4microsoft/Phi-4-multimodal-instruct—MarkdownRemote code · Transformers, vLLM
got_ocrstepfun-ai/GOT-OCR-2.0-hf—MarkdownTransformers
dolphinByteDance/Dolphin—Markdown
nemotron_parse_v2nvidia/NVIDIA-Nemotron-Parse-2.0—Nemotron ParseRemote code · Transformers, MLX, vLLM
nemotron_parse_v3_5nvidia/Nemotron-3.5-Parse—Nemotron ParseTransformers, API

“MLX only” and similar notes come from each preset's list of supported engines. Licences differ per model — check the model card before commercial use.

Choosing between standard and VLM#

  1. Start with the standard pipeline. It is the default for a reason: fast, exact text on born-digital PDFs, provenance for every element.
  2. Check the result visually. --to html_split_page --show-layout puts each page next to what Docling extracted.
  3. Try Granite-Docling on the pages that fail. Combine with --page-range to test a few pages before committing GPU time.
  4. Compare on your own documents. Published scores are averages over other people's documents; ten of yours tell you more.

Picture descriptions and chart extraction#

You do not need the full VLM pipeline to use vision models. The standard pipeline can call a small VLM only for pictures:

bash
docling convert report.pdf --enrich-picture-description          # captions for figures
docling convert report.pdf --enrich-chart-extraction             # bar/pie/line charts → tables
docling convert report.pdf --enrich-chart-extraction --chart-extraction-preset granite_vision_v4

Chart extraction presets in 2.143.1: granite_vision_v3_3, granite_vision_v4 (default) and granite_vision_v4_mlx. The default resolves to IBM Granite-Vision-4.1-4B (ibm-granite/granite-vision-4.1-4b) and granite_vision_v3_3 to a 2B chart-to-CSV model — plan for a GPU or Apple Silicon. We checked these preset names against 2.143.1 but did not run chart extraction on our CPU test machine.

Frequently asked questions

What is Granite-Docling?

Granite-Docling-258M is a compact vision-language model from IBM Research, released on 17 September 2025 under Apache 2.0. It converts a page image into DocTags markup, which Docling turns into a DoclingDocument. It builds on the Idefics3 architecture with a SigLIP2 vision encoder and a Granite 165M language model.

How do I use Granite-Docling with Docling?

Install docling[vlm] and run docling convert file.pdf --pipeline vlm --vlm-model granite_docling. In Python, set VlmPipelineOptions().vlm_options = VlmConvertOptions.from_preset('granite_docling') and use VlmPipeline as the pipeline class.

Is the VLM pipeline better than the standard pipeline?

Not always. The standard pipeline is faster and very good on born-digital PDFs. A VLM can do better on complex layouts, formulas and code, and a single model is easier to deploy, but it is much slower without a GPU and can hallucinate or repeat text.

What replaced SmolDocling?

Granite-Docling-258M is the successor to SmolDocling-256M-preview and is the default VLM preset. The smoldocling preset is still available.

Can I run the VLM pipeline on a Mac?

Yes. Most DocTags and several Markdown presets have MLX builds that Docling uses automatically on Apple Silicon, for example ibm-granite/granite-docling-258M-mlx.

Sources