# deepseek-ai/deepseek-ocr architecture

> Architecture diagram of the GitHub repository deepseek-ai/deepseek-ocr, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-09). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/deepseek-ai/deepseek-ocr
- Repository: https://github.com/deepseek-ai/deepseek-ocr

## Overview

DeepSeek-OCR is a visual-text model with Transformers and vLLM inference paths for OCR, document-to-Markdown conversion, grounding, image description, and PDF or batch processing. The principal workflow is to provide an image and task prompt, preprocess image tokens and crops, run model inference, then save or render the generated result. Edges follow the sampled calls and README; the Transformers model internals and some vLLM runtime details are not shown, so those connections are omitted.

Main entry points: [`DeepSeek-OCR-master/DeepSeek-OCR-vllm/deepseek_ocr.py`](https://github.com/deepseek-ai/deepseek-ocr/blob/main/DeepSeek-OCR-master/DeepSeek-OCR-vllm/deepseek_ocr.py) (OCR model), [`DeepSeek-OCR-master/DeepSeek-OCR-vllm/run_dpsk_ocr_image.py`](https://github.com/deepseek-ai/deepseek-ocr/blob/main/DeepSeek-OCR-master/DeepSeek-OCR-vllm/run_dpsk_ocr_image.py) (Image inference), [`DeepSeek-OCR-master/DeepSeek-OCR-vllm/run_dpsk_ocr_pdf.py`](https://github.com/deepseek-ai/deepseek-ocr/blob/main/DeepSeek-OCR-master/DeepSeek-OCR-vllm/run_dpsk_ocr_pdf.py) (PDF inference), [`DeepSeek-OCR-master/DeepSeek-OCR-vllm/run_dpsk_ocr_eval_batch.py`](https://github.com/deepseek-ai/deepseek-ocr/blob/main/DeepSeek-OCR-master/DeepSeek-OCR-vllm/run_dpsk_ocr_eval_batch.py) (Batch evaluation)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_inputs["Inference Inputs"]
  node_hfentry["Transformers runner<br/>[run_dpsk_ocr.py]"]
  node_config["Inference settings<br/>[config.py]"]
  node_pdf["PDF document"]
end

subgraph group_vision["Vision Model"]
  node_imageproc["Image tokenization<br/>[image_process.py]"]
  node_model["OCR model<br/>[deepseek_ocr.py]"]
  node_clip["CLIP vision encoder<br/>[clip_sdpa.py]"]
  node_sam["SAM vision encoder<br/>[sam_vary_sdpa.py]"]
  node_projector["Feature projector<br/>[build_linear.py]"]
end

subgraph group_serving["Inference Serving"]
  node_imagecli["Image inference"]
  node_pdfcli["PDF inference"]
  node_batchcli["Batch evaluation"]
  node_ngram["N-gram suppression<br/>[ngram_norepeat.py]"]
end

subgraph group_outputs["OCR Outputs"]
  node_result["OCR text"]
  node_layout["Layout rendering"]
  node_markdown["Markdown files"]
end

node_user(("Image or PDF user"))

node_user -->|"supplies image"| node_hfentry
node_hfentry -.->|"runs inference"| node_model
node_user -->|"supplies image"| node_imagecli
node_user -->|"supplies PDF"| node_pdf
node_pdf -->|"processes pages"| node_pdfcli
node_config -->|"configures run"| node_imagecli
node_config -->|"configures run"| node_pdfcli
node_config -->|"configures run"| node_batchcli
node_imagecli -->|"tokenizes image"| node_imageproc
node_pdfcli -->|"tokenizes pages"| node_imageproc
node_batchcli -->|"tokenizes images"| node_imageproc
node_imagecli -->|"registers model"| node_model
node_pdfcli -->|"registers model"| node_model
node_batchcli -->|"registers model"| node_model
node_imagecli -->|"uses logits filter"| node_ngram
node_batchcli -->|"uses logits filter"| node_ngram
node_model -->|"uses processor"| node_imageproc
node_model -->|"imports encoder"| node_clip
node_model -->|"imports encoder"| node_sam
node_model -->|"imports projector"| node_projector
node_imagecli -.->|"generates text"| node_result
node_pdfcli -->|"generates text"| node_result
node_pdfcli -->|"renders layouts"| node_layout
node_batchcli -->|"writes Markdown"| node_markdown

click node_hfentry "https://github.com/deepseek-ai/deepseek-ocr/blob/main/DeepSeek-OCR-master/DeepSeek-OCR-hf/run_dpsk_ocr.py"
click node_config "https://github.com/deepseek-ai/deepseek-ocr/blob/main/DeepSeek-OCR-master/DeepSeek-OCR-vllm/config.py"
click node_imageproc "https://github.com/deepseek-ai/deepseek-ocr/blob/main/DeepSeek-OCR-master/DeepSeek-OCR-vllm/process/image_process.py"
click node_model "https://github.com/deepseek-ai/deepseek-ocr/blob/main/DeepSeek-OCR-master/DeepSeek-OCR-vllm/deepseek_ocr.py"
click node_clip "https://github.com/deepseek-ai/deepseek-ocr/blob/main/DeepSeek-OCR-master/DeepSeek-OCR-vllm/deepencoder/clip_sdpa.py"
click node_sam "https://github.com/deepseek-ai/deepseek-ocr/blob/main/DeepSeek-OCR-master/DeepSeek-OCR-vllm/deepencoder/sam_vary_sdpa.py"
click node_projector "https://github.com/deepseek-ai/deepseek-ocr/blob/main/DeepSeek-OCR-master/DeepSeek-OCR-vllm/deepencoder/build_linear.py"
click node_imagecli "https://github.com/deepseek-ai/deepseek-ocr/blob/main/DeepSeek-OCR-master/DeepSeek-OCR-vllm/run_dpsk_ocr_image.py"
click node_pdfcli "https://github.com/deepseek-ai/deepseek-ocr/blob/main/DeepSeek-OCR-master/DeepSeek-OCR-vllm/run_dpsk_ocr_pdf.py"
click node_batchcli "https://github.com/deepseek-ai/deepseek-ocr/blob/main/DeepSeek-OCR-master/DeepSeek-OCR-vllm/run_dpsk_ocr_eval_batch.py"
click node_ngram "https://github.com/deepseek-ai/deepseek-ocr/blob/main/DeepSeek-OCR-master/DeepSeek-OCR-vllm/process/ngram_norepeat.py"
click node_layout "https://github.com/deepseek-ai/deepseek-ocr/blob/main/DeepSeek-OCR-master/DeepSeek-OCR-vllm/run_dpsk_ocr_pdf.py"
click node_markdown "https://github.com/deepseek-ai/deepseek-ocr/blob/main/DeepSeek-OCR-master/DeepSeek-OCR-vllm/run_dpsk_ocr_eval_batch.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_hfentry,node_config,node_pdf,node_user toneBlue
class node_imageproc,node_model,node_clip,node_sam,node_projector toneAmber
class node_imagecli,node_pdfcli,node_batchcli,node_ngram toneMint
class node_result,node_layout,node_markdown toneRose
```

## Components

### Inference Inputs

- [Transformers runner](https://github.com/deepseek-ai/deepseek-ocr/blob/main/DeepSeek-OCR-master/DeepSeek-OCR-hf/run_dpsk_ocr.py): `DeepSeek-OCR-master/DeepSeek-OCR-hf/run_dpsk_ocr.py`
- [Inference settings](https://github.com/deepseek-ai/deepseek-ocr/blob/main/DeepSeek-OCR-master/DeepSeek-OCR-vllm/config.py): `DeepSeek-OCR-master/DeepSeek-OCR-vllm/config.py`
- **PDF document**

### Vision Model

- [Image tokenization](https://github.com/deepseek-ai/deepseek-ocr/blob/main/DeepSeek-OCR-master/DeepSeek-OCR-vllm/process/image_process.py): `DeepSeek-OCR-master/DeepSeek-OCR-vllm/process/image_process.py`
- [OCR model](https://github.com/deepseek-ai/deepseek-ocr/blob/main/DeepSeek-OCR-master/DeepSeek-OCR-vllm/deepseek_ocr.py): `DeepSeek-OCR-master/DeepSeek-OCR-vllm/deepseek_ocr.py`
- [CLIP vision encoder](https://github.com/deepseek-ai/deepseek-ocr/blob/main/DeepSeek-OCR-master/DeepSeek-OCR-vllm/deepencoder/clip_sdpa.py): `DeepSeek-OCR-master/DeepSeek-OCR-vllm/deepencoder/clip_sdpa.py`
- [SAM vision encoder](https://github.com/deepseek-ai/deepseek-ocr/blob/main/DeepSeek-OCR-master/DeepSeek-OCR-vllm/deepencoder/sam_vary_sdpa.py): `DeepSeek-OCR-master/DeepSeek-OCR-vllm/deepencoder/sam_vary_sdpa.py`
- [Feature projector](https://github.com/deepseek-ai/deepseek-ocr/blob/main/DeepSeek-OCR-master/DeepSeek-OCR-vllm/deepencoder/build_linear.py): `DeepSeek-OCR-master/DeepSeek-OCR-vllm/deepencoder/build_linear.py`

### Inference Serving

- [Image inference](https://github.com/deepseek-ai/deepseek-ocr/blob/main/DeepSeek-OCR-master/DeepSeek-OCR-vllm/run_dpsk_ocr_image.py): `DeepSeek-OCR-master/DeepSeek-OCR-vllm/run_dpsk_ocr_image.py`
- [PDF inference](https://github.com/deepseek-ai/deepseek-ocr/blob/main/DeepSeek-OCR-master/DeepSeek-OCR-vllm/run_dpsk_ocr_pdf.py): `DeepSeek-OCR-master/DeepSeek-OCR-vllm/run_dpsk_ocr_pdf.py`
- [Batch evaluation](https://github.com/deepseek-ai/deepseek-ocr/blob/main/DeepSeek-OCR-master/DeepSeek-OCR-vllm/run_dpsk_ocr_eval_batch.py): `DeepSeek-OCR-master/DeepSeek-OCR-vllm/run_dpsk_ocr_eval_batch.py`
- [N-gram suppression](https://github.com/deepseek-ai/deepseek-ocr/blob/main/DeepSeek-OCR-master/DeepSeek-OCR-vllm/process/ngram_norepeat.py): `DeepSeek-OCR-master/DeepSeek-OCR-vllm/process/ngram_norepeat.py`

### OCR Outputs

- **OCR text**
- [Layout rendering](https://github.com/deepseek-ai/deepseek-ocr/blob/main/DeepSeek-OCR-master/DeepSeek-OCR-vllm/run_dpsk_ocr_pdf.py): `DeepSeek-OCR-master/DeepSeek-OCR-vllm/run_dpsk_ocr_pdf.py`
- [Markdown files](https://github.com/deepseek-ai/deepseek-ocr/blob/main/DeepSeek-OCR-master/DeepSeek-OCR-vllm/run_dpsk_ocr_eval_batch.py): `DeepSeek-OCR-master/DeepSeek-OCR-vllm/run_dpsk_ocr_eval_batch.py`

### Other components

- **Image or PDF user**

## Connections

- Image or PDF user → Transformers runner: supplies image (evidence: `DeepSeek-OCR-master/DeepSeek-OCR-hf/run_dpsk_ocr.py`)
- Transformers runner → OCR model: runs inference
- Image or PDF user → Image inference: supplies image (evidence: `README.md`)
- Image or PDF user → PDF document: supplies PDF (evidence: `README.md`)
- PDF document → PDF inference: processes pages (evidence: `DeepSeek-OCR-master/DeepSeek-OCR-vllm/run_dpsk_ocr_pdf.py`)
- Inference settings → Image inference: configures run (evidence: `DeepSeek-OCR-master/DeepSeek-OCR-vllm/run_dpsk_ocr_image.py`)
- Inference settings → PDF inference: configures run (evidence: `DeepSeek-OCR-master/DeepSeek-OCR-vllm/run_dpsk_ocr_pdf.py`)
- Inference settings → Batch evaluation: configures run (evidence: `DeepSeek-OCR-master/DeepSeek-OCR-vllm/run_dpsk_ocr_eval_batch.py`)
- Image inference → Image tokenization: tokenizes image (evidence: `DeepSeek-OCR-master/DeepSeek-OCR-vllm/run_dpsk_ocr_image.py`)
- PDF inference → Image tokenization: tokenizes pages (evidence: `DeepSeek-OCR-master/DeepSeek-OCR-vllm/run_dpsk_ocr_pdf.py`)
- Batch evaluation → Image tokenization: tokenizes images (evidence: `DeepSeek-OCR-master/DeepSeek-OCR-vllm/run_dpsk_ocr_eval_batch.py`)
- Image inference → OCR model: registers model (evidence: `DeepSeek-OCR-master/DeepSeek-OCR-vllm/run_dpsk_ocr_image.py`)
- PDF inference → OCR model: registers model (evidence: `DeepSeek-OCR-master/DeepSeek-OCR-vllm/run_dpsk_ocr_pdf.py`)
- Batch evaluation → OCR model: registers model (evidence: `DeepSeek-OCR-master/DeepSeek-OCR-vllm/run_dpsk_ocr_eval_batch.py`)
- Image inference → N-gram suppression: uses logits filter (evidence: `DeepSeek-OCR-master/DeepSeek-OCR-vllm/run_dpsk_ocr_image.py`)
- Batch evaluation → N-gram suppression: uses logits filter (evidence: `DeepSeek-OCR-master/DeepSeek-OCR-vllm/run_dpsk_ocr_eval_batch.py`)
- OCR model → Image tokenization: uses processor (evidence: `DeepSeek-OCR-master/DeepSeek-OCR-vllm/deepseek_ocr.py`)
- OCR model → CLIP vision encoder: imports encoder (evidence: `DeepSeek-OCR-master/DeepSeek-OCR-vllm/deepseek_ocr.py`)
- OCR model → SAM vision encoder: imports encoder (evidence: `DeepSeek-OCR-master/DeepSeek-OCR-vllm/deepseek_ocr.py`)
- OCR model → Feature projector: imports projector (evidence: `DeepSeek-OCR-master/DeepSeek-OCR-vllm/deepseek_ocr.py`)
- Image inference → OCR text: generates text
- PDF inference → OCR text: generates text (evidence: `DeepSeek-OCR-master/DeepSeek-OCR-vllm/run_dpsk_ocr_pdf.py`)
- PDF inference → Layout rendering: renders layouts (evidence: `DeepSeek-OCR-master/DeepSeek-OCR-vllm/run_dpsk_ocr_pdf.py`)
- Batch evaluation → Markdown files: writes Markdown (evidence: `DeepSeek-OCR-master/DeepSeek-OCR-vllm/run_dpsk_ocr_eval_batch.py`)
