How to Run North Micro Vision 2.4B Locally for OCR and Image Analysis

North Micro Vision is a compact 2.4-billion-parameter vision-language model that you can run on your own computer with Hugging Face Transformers. It accepts text and one or more images, then returns text for tasks such as image captioning, document questions, OCR, chart analysis and visual grounding.

The attractive part is not that it replaces a large hosted assistant. Cohere Labs released North Micro Vision Instruct on 12 August 2026 under Apache 2.0. Its checkpoint is about 4.63 GiB, and Cohere documents a standard Transformers path for local inference.

North Micro Vision 2.4B analysing a document, chart and photo on a local computer
North Micro Vision can analyse local photos, charts and documents through one compact vision-language checkpoint.

What North Micro Vision can and cannot do

Good fitPoor fit
Captioning and visual question answeringOpen-ended general chat
OCR, documents, charts and figuresHard mathematical reasoning
Multiple images in one promptCode generation
Object grounding and bounding boxesTool calling or autonomous agents
Multilingual image understandingVery long, untested multimodal prompts

Cohere describes the model as a compact foundation for prototyping and customisation. It combines a 2B language model with a 400M native-resolution vision encoder. The language backbone has a 128K-token context window, but its validated multimodal training context is 8K tokens. Do not turn the larger text-only number into a promise about long image conversations.

If your main goal is a general local chatbot, compare this with my Qwen3.8-27B local guide. For an easier graphical model manager, see how to install Unsloth Desktop.

Requirements

  • The commands below target Windows with Python 3.11. The Python API may also run in supported Linux or macOS PyTorch environments, but Cohere does not publish a macOS compatibility or performance guarantee.
  • Reserve about 12–15 GB of free space for the 4.63 GiB checkpoint, PyTorch, Transformers and package/download caches.
  • A recent NVIDIA GPU is the most practical route. CPU loading is possible through PyTorch, but generation may be slow.
  • Enough available VRAM or system memory for the bfloat16 checkpoint, image tokens and runtime overhead. File size is not the complete memory requirement.
  • A stable connection for the first model download.

The official checkpoint is bfloat16. Cohere does not publish a minimum-VRAM promise in the model card, so treat any exact number from a third-party blog as hardware-specific. Native-resolution images also use more memory as their dimensions grow.

Step 1: create a clean Windows environment

Open PowerShell in a new project folder:

mkdir north-micro-vision
cd north-micro-vision
py -3.11 -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install --upgrade pip

If PowerShell blocks the activation script, allow locally created scripts only for the current PowerShell session, then activate the environment again:

Set-ExecutionPolicy -Scope Process RemoteSigned

This setting ends when you close the current PowerShell window. If your device is managed by an employer, follow its security policy instead of overriding it.

Step 2: install PyTorch for your hardware

PyTorch packages depend on the operating system and accelerator. Use the command generated by the official PyTorch installation selector. For a CPU-only smoke test, the basic package is:

python -m pip install torch torchvision --index-url https://download.pytorch.org/whl/cpu

For an NVIDIA GPU, select the CUDA build that matches a supported PyTorch combination. Do not choose a CUDA wheel only because its version number resembles the driver version.

Check what PyTorch can see:

python -c "import torch; print('PyTorch:', torch.__version__); print('CUDA:', torch.cuda.is_available()); print('GPU:', torch.cuda.get_device_name(0) if torch.cuda.is_available() else 'CPU')"

Step 3: install the required Transformers build

Cohere’s release requires support currently present in the Transformers 5.16.0 development branch. Transformers 5.15.0 was the latest stable release when checked, so the official model card instructs users to install Transformers from the main GitHub repository:

python -m pip install accelerate pillow
python -m pip install "git+https://github.com/huggingface/transformers.git"

The model repository does not ship custom Python model code or declare an auto_map entry, so this guide intentionally does not use trust_remote_code=True. Installing Transformers from a Git development branch still executes package code from that branch, so keep it inside the isolated virtual environment and move to the released 5.16.0 package when it becomes available.

Once version 5.16.0 is published, replace the source installation with the pinned release:

python -m pip install accelerate pillow "transformers==5.16.0"

Pinning a released version is easier to reproduce than following a changing development branch. Check the official release first rather than assuming 5.16.0 is available.

Step 4: create the first image test

Create a file named run_north_micro.py with this documentation-based example:

import torch
from transformers import AutoModelForImageTextToText, AutoProcessor

model_id = "CohereLabs/North-Micro-Vision-Instruct"

processor = AutoProcessor.from_pretrained(model_id)
model = AutoModelForImageTextToText.from_pretrained(
    model_id,
    dtype="auto",
    device_map="auto",
)

image_url = "https://cdn-uploads.huggingface.co/production/uploads/66d732effe6684fc16b12c28/Io_5OCmftsmH-n158ZtPs.png"

messages = [{
    "role": "user",
    "content": [
        {"type": "image", "url": image_url},
        {"type": "text", "text": "Describe this image in three factual bullet points."},
    ],
}]

inputs = processor.apply_chat_template(
    messages,
    tokenize=True,
    add_generation_prompt=True,
    return_tensors="pt",
    return_dict=True,
).to(model.device)

with torch.inference_mode():
    outputs = model.generate(
        **inputs,
        max_new_tokens=160,
        do_sample=False,
    )

generated_ids = [
    output_ids[len(input_ids):]
    for input_ids, output_ids in zip(inputs.input_ids, outputs)
]

response = processor.batch_decode(
    generated_ids,
    skip_special_tokens=True,
    clean_up_tokenization_spaces=False,
)[0]

print(response)

Run it:

python run_north_micro.py

The first run downloads the model and tokenizer into the Hugging Face cache. A successful answer proves that Python, PyTorch, Transformers and the model package can work together. It does not yet prove OCR accuracy on your own documents.

Step 5: analyse a local image

After the official URL test works, place a harmless image named sample.png in the project folder. Avoid real invoices, identity documents or confidential screenshots until you have confirmed that every input remains local.

Replace the URL with a Pillow image:

from PIL import Image

local_image = Image.open("sample.png").convert("RGB")

messages = [{
    "role": "user",
    "content": [
        {"type": "image", "image": local_image},
        {"type": "text", "text": "Transcribe the visible text. Preserve line breaks and mark uncertain words with [unclear]."},
    ],
}]

The weights and inference run locally after download, but privacy still depends on your code. The URL example fetches a remote image. A local Pillow object avoids that fetch, while package downloads, telemetry settings and any surrounding application still deserve review.

Useful prompts for OCR, charts and grounding

Document extraction

Return JSON with these keys only: document_type, date, total, currency and supplier. Use null when a value is not visible.

Validate the returned JSON before passing it to another system. A vision model can misread digits or invent a missing field.

Chart analysis

State the chart title, both axis labels, the highest labelled value and two trends. Do not infer values that are not visible.

Bounding boxes

Locate the red warning icon and return one bounding box as [x1, y1, x2, y2].

North Micro Vision reports coordinates on a normalised 0–1000 scale. Convert them to pixels as follows:

x1_px = x1 / 1000 * image_width
y1_px = y1 / 1000 * image_height
x2_px = x2 / 1000 * image_width
y2_px = y2 / 1000 * image_height

Optional: deterministic versus sampled output

The first script uses do_sample=False so repeated tests are easier to compare. Cohere’s model card recommends these sampling values for a more varied response:

outputs = model.generate(
    **inputs,
    max_new_tokens=160,
    do_sample=True,
    temperature=0.7,
    top_p=0.8,
    top_k=20,
)

Use deterministic output for extraction tests. Sampling may be more natural for descriptions, but it can also make structured results less repeatable.

Troubleshooting

The model type is unknown or an import is missing

Check the installed Transformers version:

python -c "import transformers; print(transformers.__version__)"

If 5.16.0 is not available from PyPI yet, reinstall the current source build inside the active virtual environment. Confirm that python and pip point to .venv before changing packages.

CUDA runs out of memory

Close other GPU applications and begin with one smaller image. Native resolution is useful, but a large scan creates many image tokens and increases memory use. Resize a test copy rather than overwriting the original:

from PIL import Image
img = Image.open("sample.png").convert("RGB")
img.thumbnail((1600, 1600))
img.save("sample-test.png")

If automatic device placement still fails, use CPU inference for a smoke test or choose a smaller/quantised community conversion only after reviewing its publisher and licence. Do not imply that a third-party quant is Cohere’s official checkpoint.

Generation is very slow

Confirm that torch.cuda.is_available() is true on an NVIDIA setup and that the model is not fully assigned to the CPU. Reduce image dimensions and max_new_tokens. Flash Attention 2 is optional and should be installed only on a supported CUDA system using Cohere’s documented command.

The OCR answer contains invented text

Ask for uncertain words to be marked, use do_sample=False, crop irrelevant areas and compare important fields with a conventional OCR engine. Do not automate payments, identity checks or compliance decisions from one unverified model response.

A system prompt makes results worse

Cohere says the model was not trained with system prompts and does not recommend them, even though the chat template accepts the role. Put the task instruction in the user message.

vLLM will not load the model

Hugging Face currently displays a generic generated vLLM command, but Cohere’s model card and release article still say public vLLM support is coming soon. The vLLM repository did not contain a CohereCompass implementation when checked. Use Transformers until an official vLLM release or model-specific recipe confirms support.

Frequently asked questions

Is North Micro Vision open source?

The weights and model card are published under Apache 2.0. “Open source” can mean different things for model training data and the complete development process, so the precise claim is that the released model artefacts use the Apache 2.0 licence.

How large is the download?

The official manifest lists model.safetensors at 4,969,765,248 bytes, about 4.63 GiB, plus a roughly 18.6 MiB tokenizer and small configuration files. Leave extra space for packages and cache operations.

Does it run offline?

Inference can run without a hosted API after the model and dependencies are cached and your script uses local images. The first setup downloads packages and model files. Test offline operation before relying on it in a disconnected environment.

Can it read more than one image?

Yes. The official model card lists interleaved text and images and multi-image understanding. More and larger images consume more of the validated 8K multimodal context and increase memory use.

Can I use it as an agent?

Not directly. Cohere explicitly says tool calling and agentic workflows are unsupported. Use it as a vision component whose output your application validates.

How does it compare with LFM2.5-VL-3B?

Cohere’s published benchmark table did not test LFM2.5-VL-3B; it tested LFM2.5-VL-1.6B. Do not infer a direct 3B comparison from that table. Test both models on the same representative documents and compare accuracy, latency and memory on the same hardware.

What to do next

Start with the official image and deterministic output. Then try one non-sensitive local document, verify each extracted field manually and record the package versions. Only after that should you build a batch process or consider fine-tuning.

If you need to expose a local model through an OpenAI-compatible service, read my LocalAI Windows and Docker guide. For coding-agent integrations, my llama.cpp MCP guide explains the surrounding local-server pattern, although it does not add unsupported tool calling to North Micro Vision.

Primary sources

Leave a Reply

Scroll to Top

Discover more from Lachie's Lifestyle

Subscribe now to keep reading and get access to the full archive.

Continue reading