Skip to main content

MiniCPM-V 4.6

MiniCPM-V Multimodal Series

MiniCPM-V 4.6 is OpenBMB's most edge-deployment-friendly multimodal model to date. Built on SigLIP2-400M and the Qwen3.5-0.8B LLM with 1.3B total parameters, it inherits the single-image, multi-image and video understanding of the MiniCPM-V family while focusing on computation efficiency: based on the intra-ViT early compression technique from LLaVA-UHD v4, it cuts visual encoding FLOPs by more than 50% and reaches ~1.5x the token throughput of Qwen3.5-0.8B. It is also the first in the series to support mixed 4×/16× visual token compression, letting you trade accuracy against speed per task.

On capability, 4.6 scores 13 on the Artificial Analysis Intelligence Index, beating Qwen3.5-0.8B's 10 with 19x fewer tokens and surpassing the larger Ministral 3 3B. It reaches Qwen3.5 2B-level results on benchmarks including OpenCompass, RefCOCO, HallusionBench, MUIRBench and OCRBench. The model runs on all three mainstream mobile platforms — iOS, Android and HarmonyOS — with every edge adaptation path open-sourced, and has been merged into Ollama's official model library.

What's new in 4.6​

  • Two checkpoints, one architecture. Unlike 4.5 (one model, two modes via enable_thinking), 4.6 ships two independent checkpoints — pick whichever matches your use case.
  • Qwen3.5 hybrid backbone. Mixed linear / full-attention layers, with up to 256K context window.
  • LLaVA-UHD v4 vision tower. Replaces the Perceiver resampler with slice-based encoding plus intra-ViT early compression (mixed 4×/16× token compression) — simpler GGUF conversion, fewer surgery scripts. See LLaVA-UHD v4 paper.
  • Standalone transformers architecture. Registered as MiniCPMV4_6ForConditionalGeneration in transformers >= 5.7.0. Standard AutoProcessor + AutoModelForImageTextToText flow works out of the box.

Quick start​

Inference (HF Transformers)​

Python
import torch
from PIL import Image
from transformers import AutoProcessor, AutoModelForImageTextToText

model_path = "openbmb/MiniCPM-V-4.6" # or MiniCPM-V-4.6-Thinking
processor = AutoProcessor.from_pretrained(model_path)
model = AutoModelForImageTextToText.from_pretrained(
model_path, torch_dtype=torch.bfloat16, attn_implementation="sdpa",
).eval().cuda()

image = Image.open("example.jpg").convert("RGB")
messages = [{"role": "user", "content": [
{"type": "image", "image": image},
{"type": "text", "text": "Describe the image."},
]}]
inputs = processor.apply_chat_template(
messages, add_generation_prompt=True, tokenize=True,
return_dict=True, return_tensors="pt",
).to(model.device)

out = model.generate(**inputs, max_new_tokens=256)
print(processor.decode(out[0][inputs["input_ids"].shape[-1]:], skip_special_tokens=True))

Serve with vLLM​

Bash
# v4.6 is merged into upstream vLLM main (PR #41254, merged on 2026-05-12); install from upstream directly.
git clone https://github.com/vllm-project/vllm.git
cd vllm
MAX_JOBS=6 VLLM_USE_PRECOMPILED=1 pip install --editable . -v

vllm serve openbmb/MiniCPM-V-4.6 --trust-remote-code --max-model-len 8192

See the vLLM guide for full details.

Run with llama.cpp​

Bash
# release b9049 or newer ships v4.6 support
git clone https://github.com/ggml-org/llama.cpp.git && cd llama.cpp
cmake -B build && cmake --build build --config Release

# convert with the standard script (no surgery script needed for v4.6!)
python ./convert_hf_to_gguf.py /path/to/MiniCPM-V-4.6 \
--outfile /path/to/MiniCPM-V-4.6-F16.gguf --outtype f16
python ./convert_hf_to_gguf.py /path/to/MiniCPM-V-4.6 \
--mmproj --outfile /path/to/mmproj-MiniCPM-V-4.6-F16.gguf

./build/bin/llama-mtmd-cli \
-m /path/to/MiniCPM-V-4.6-F16.gguf \
--mmproj /path/to/mmproj-MiniCPM-V-4.6-F16.gguf \
-c 8192 --reasoning off --image example.jpg -p "Describe the image."
# Note: pass --reasoning off for the Instruct checkpoint; recent llama.cpp auto-enables thinking from the template.

See the llama.cpp guide for full details.

Important differences from v4.5​

Topicv4.5v4.6
Thinking modeOne model, switch via enable_thinkingTwo separate checkpoints (Instruct, Thinking)
LM backboneQwen3Qwen3.5 hybrid (linear + full attention)
Max context32K256K
Vision towerPerceiver resamplerLLaVA-UHD v4 (slice-based + intra-ViT compression)
GGUF conversionminicpmv-surgery.py + image encoder scriptStandard convert_hf_to_gguf.py
Stop tokens (vLLM)[1, 151645][248044, 248046]
Audio support— (vision only)— (vision only)

If you're migrating from v4.5, the most common runtime gotchas are:

  1. Update stop_token_ids to [248044, 248046] (the vocab is different — Qwen3.5 instead of Qwen3).
  2. Drop the enable_thinking request flag and instead deploy the right checkpoint from the start.
  3. The legacy minicpmv-surgery.py flow is no longer needed for GGUF — use convert_hf_to_gguf.py directly.
TopicLink
InferenceMiniCPM-V 4.6 inference guide
Fine-tuningMiniCPM-V 4.6 fine-tuning guide
Code repositoryOpenBMB/MiniCPM-V
On-device apps and downloadsMiniCPM-V-Apps downloads
API accessAPI guide