Model reference · open weights
LightOnOCR-3 is an open-weight language model from lightonai. LightOnOCR-3-4B (BF16) weighs 9.1 GB; the smallest configuration that runs it is RTX 3060 12 GB.
For self-hosting, compare this build's requirements below with the GPU you plan to rent.
Summary of the lightonai/LightOnOCR-3-0.8B model card, 2026-10-09. The estimate below is for another build of the family.
What it is
| Released by | lightonai |
|---|---|
| Released | 2026-10-07 |
| Parameters | 853M |
| VRAM | 9.1 GB for the weights |
What it runs on
| Card | Requests at once | Context max | Memory | |
|---|---|---|---|---|
| 8K each | 32K each | |||
| RTX 3060 12 GB | 1 | 10K | 11.6 GB | |
| RTX 4060 Ti 16 GB | 11 | 3 | 123K | 15.4 GB |
| RTX 3090 24 GB | 32 | 10 | all 256K | 23.4 GB |
| RTX 4090 24 GB | 32 | 10 | all 256K | 23.4 GB |
| RTX 5090 32 GB | 53 | 16 | all 256K | 31.0 GB |
| L40S 48 GB | 88 | 27 | all 256K | 44.0 GB |
| A100 80 GB | 180 | 56 | all 256K | 78.2 GB |
| H100 80 GB | 166 | 52 | all 256K | 78.1 GB |
| RTX PRO 6000 Blackwell 96 GB | 208 | 65 | all 256K | 93.8 GB |
| DGX Spark (GB10) 128 GB unified | 244 | 77 | all 256K | 107 GB |
| H200 141 GB | 327 | 103 | all 256K | 138 GB |
| B200 180 GB | 428 | 135 | all 256K | 176 GB |
| 2× RTX 3060 12 GB tensor parallel | 26 | 8 | all 256K | 11.6 GB a card |
| Requests at once | 8K tokens each | 32K tokens each |
|---|---|---|
| 1 | 11.5 GB | 12.3 GB |
| 5 | 13.0 GB | 17.1 GB |
| 8 | 14.1 GB | 20.6 GB |
| 16 | 17.1 GB | 30.0 GB |
| 32 | 23.1 GB | 48.8 GB |
| 64 | 34.9 GB | 86.5 GB |
One card, with vLLM's small-card settings.
Builds
| Build | Params | Precision | Weights | Smallest setup |
|---|---|---|---|---|
| LightOnOCR-3-0.8B ↗ | 853M | BF16 | 1.7 GB | RTX 3060 12 GB |
| LightOnOCR-3-4B (above) ↗ | 4.5B | BF16 | 9.1 GB | RTX 3060 12 GB |
| LightOnOCR-3-1B ↗ | 1.0B | BF16 | 2.0 GB | RTX 3060 12 GB |
From the model card
📄 Paper | 📝 Blog | 🚀 Demo | 💻 GitHub | 🤗 LightOnOCR-2-1B
Smallest model. LightOnOCR-3-0.8B is the lightest model of LightOn's LightOnOCR-3 family, with the same layout and visual understanding features.
LightOnOCR-3 is a new family of highly performant lightweight OCR models. Compared to the previous generation, they bring significant improvements in speed and transcription quality and introduce new visual understanding features: the models now output bounding box coordinates with labels for all visual elements of a document, short descriptions of images, and the numerical data of figures and charts. With these capabilities, they offer a ready-to-use, easier-to-maintain alternative to complex document understanding pipelines.
The models come in three sizes. The 1B keeps the LightOnOCR-2-1B architecture, while the 0.8B and 4B adopt the Qwen3.5 vision-language architecture, which simplifies integration with existing tools and brings a significant speed-up. All models are released under the Apache 2.0 license for research and commercial use.
grounding prompt and every block comes back with a label and a bounding box| Variant | Description |
|---|---|
| LightOnOCR-3-4B | Best OCR model, recommended for most tasks |
| LightOnOCR-3-1B | LightOnOCR-2 architecture, drop-in upgrade for existing deployments |
| LightOnOCR-3-0.8B | Fast and Efficient model |
The models can be used as before in a transcription-only mode: called with an empty prompt (the image only), they output all textual elements of the page as markdown. If you are currently using our previous models, switching to LightOnOCR-3 requires no change, as this is the default behavior.
The new usage mode is to call the models with the grounding prompt. They then output the new vision features alongside the transcribed text. Each block of content is prepended with a placeholder giving its type and its bounding box, in page coordinates normalized to 0–1000:
# Company report 2025
Revenue rose 20%.
A solar-powered factory.
The placeholder label is one of:
| Label | Definition |
|---|---|
text | Ordinary body text and paragraphs. |
title | Document, section, or paragraph headings. |
list | Bulleted or numbered-list content. |
header | Text in the page header. |
footer | Text in the page footer. |
page_number | Page-number regions. |
footnote | Footnote text. |
caption | Captions associated with figures, tables, or other visual elements. |
formula | Mathematical formulas and equations. |
code | Code blocks or code-like text. |
table | Table regions and their content. |
image | Illustrations, photographs, and other image regions. |
chart | Charts, graphs, and plotted visual data. |
header_image | Image regions in page headers, such as logos. |
footer_image | Image regions in page footers. |
aside_text | Marginal or side text outside the main text flow. |
+ suffix | Marks a continuation block, not a separate semantic class. |
Grounding adds about 25% output tokens over plain transcription (1,433 vs 1,158 tokens per page on average for the 4B). Other instructions are out of distribution: use the empty prompt or grounding.
Note: LightOnOCR-3-0.8B loads with the Qwen3.5 classes (Transformers ≥ 5.2, saved with 5.5.4). It is trained and evaluated with thinking disabled, which is the chat template default.
uv pip install "transformers>=5.5.4" pillow pypdfium2
import torch
from transformers import AutoProcessor, Qwen3_5ForConditionalGeneration
model_id = "lightonai/LightOnOCR-3-0.8B"
model = Qwen3_5ForConditionalGeneration.from_pretrained(model_id, dtype=torch.bfloat16, device_map="auto")
processor = AutoProcessor.from_pretrained(model_id)
url = "https://huggingface.co/datasets/hf-internal-testing/fixtures_ocr/resolve/main/SROIE-receipt.jpeg"
mode = "grounding" # or "plain"
content = [{"type": "image", "url": url}]
if mode == "grounding":
content.append({"type": "text", "text": "grounding"})
conversation = [{"role": "user", "content": content}]
inputs = processor.apply_chat_template(
conversation,
add_generation_prompt=True,
tokenize=True,
return_dict=True,
return_tensors="pt",
enable_thinking=False,
).to(model.device)
output_ids = model.generate(**inputs, max_new_tokens=1024, do_sample=True, temperature=0.2)
generated_ids = output_ids[0, iQuoted from the model card on Hugging Face. The full card is behind the Hugging Face link above.