AI SeedbankHelp preserve open and free AI for humanity's future

← All models

openbmb_MiniCPM-o-4_5

openbmb · View on Hugging Face ↗

Get this model

Download TorrentMagnet Link

Seeders: · Leechers:

Model card

The complete upstream card, rendered from this payload's README.md — the same hash-verified bytes the torrent distributes. Images and off-site links are removed; the original card on Hugging Face carries them.


license: apache-2.0 pipeline_tag: any-to-any library_name: transformers tags:

  • minicpm-o
  • minicpm-v
  • multimodal
  • full-duplex

A Gemini 2.5 Flash Level MLLM for Vision, Speech, and Full-Duplex Mulitmodal Live Streaming on Your Phone

GitHub | CookBook | Omni-modal Demo | Vision-Language Demo
WeChat | Discord | MiniCPM Wiki(Chinese) | CaseBook(Audio, Omni Full-Duplex)

News

[!NOTE] [2026.02.06] 🥳 🥳 🥳 We open-sourced a realtime web demo deployable on your own devices like Mac or GPU. Try it now!

MiniCPM-o 4.5

MiniCPM-o 4.5 is the latest and most capable model in the MiniCPM-o series. The model is built in an end-to-end fashion based on SigLip2, Whisper-medium, CosyVoice2, and Qwen3-8B with a total of 9B parameters. It exhibits a significant performance improvement, and introduces new features for full-duplex multimodal live streaming. Notable features of MiniCPM-o 4.5 include:

  • 🔥 Leading Visual Capability. MiniCPM-o 4.5 achieves an average score of 77.6 on OpenCompass, a comprehensive evaluation of 8 popular benchmarks. With only 9B parameters, it surpasses widely used proprietary models like GPT-4o, Gemini 2.0 Pro, and approaches Gemini 2.5 Flash for vision-language capabilities. It supports instruct and thinking modes in a single model, better covering efficiency and performance trade-offs in different user scenarios.

  • 🎙 Strong Speech Capability. MiniCPM-o 4.5 supports bilingual real-time speech conversation with configurable voices in English and Chinese. It features more natural, expressive and stable speech conversation. The model also allows for fun features such as voice cloning and role play via a simple reference audio clip, where the cloning performance surpasses strong TTS tools such as CosyVoice2.

  • 🎬 New Full-Duplex and Proactive Multimodal Live Streaming Capability. As a new feature, MiniCPM-o 4.5 can process real-time, continuous video and audio input streams simultaneously while generating concurrent text and speech output streams in an end-to-end fashion, without mutual blocking. This allows MiniCPM-o 4.5 to see, listen, and speak simultaneously, creating a fluid, real-time omnimodal conversation experience. Beyond reactive responses, the model can also perform proactive interaction, such as initiating reminders or comments based on its continuous understanding of the live scene.

  • 💪 Strong OCR Capability, Efficiency and Others. Advancing popular visual capabilities from MiniCPM-V series, MiniCPM-o 4.5 can process high-resolution images (up to 1.8 million pixels) and high-FPS videos (up to 10fps) in any aspect ratio efficiently. It achieves state-of-the-art performance for end-to-end English document parsing on OmniDocBench, outperforming proprietary models such as Gemini-3 Flash and GPT-5, and specialized tools such as DeepSeek-OCR 2. It also features trustworthy behaviors, matching Gemini 2.5 Flash on MMHal-Bench, and supports multilingual capabilities on more than 30 languages.

  • 💫 Easy Usage. MiniCPM-o 4.5 can be easily used in various ways: Basic usage, recommended for 100% precision: PyTorch inference with Nvidia GPU. Other end-side adaptation includes (1) llama.cpp and Ollama support for efficient CPU inference on local devices, (2) int4 and GGUF format quantized models in 16 sizes, (3) vLLM and SGLang support for high-throughput and memory-efficient inference, (4) FlagOS support for the unified multi-chip backend plugin. We also open-sourced web demos on which enables the full-duplex multimodal live streaming experience on local devices such as GPUs, PCs (e.g., on a MacBook).

Model Architecture.

  • End-to-end Omni-modal Architecture. The modality encoders/decoders and LLM are densely connected via hidden states in an end-to-end fashion. This enables better information flow and control, and also facilitates full exploitation of rich multimodal knowledge during training.
  • Full-Duplex Omni-modal Live Streaming Mechanism. (1) We turn the offline modality encoder/decoders into online and full-duplex ones for streaming inputs/outputs. The speech token decoder models text and speech tokens in an interleaved fashion to support full-duplex speech generation (i.e., sync timely with new input). This also facilitates more stable long speech generation (e.g., > 1min). (2) We sync all the input and output streams on timeline in milliseconds, which are jointly modeled by a time-division multiplexing (TDM) mechanism for omni-modality streaming processing in the LLM backbone. It divides parallel omni-modality streams into sequential info groups within small periodic time slices.
  • Proactive Interaction Mechanism. The LLM continuously monitors the input video and audio streams, and decides at a frequency of 1Hz to speak or not. This high decision-making frequency together with full-duplex nature are curcial to enable the proactive interaction capability.
  • Configurable Speech Modeling Design. We inherent the multimodal system prompt design of MiniCPM-o 2.6, which includes a traditional text system prompt, and a new audio system prompt to determine the assistant voice. This enables cloning new voices and role play in inference time for speech conversation.

Evaluation

Note: Scores marked with ∗ are from our evaluation; others are cited from referenced reports. n/a indicates that the model does not support the corresponding modality. All results are reported in instruct mode/variant.


Click to view visual understanding results.

Image Understanding (Instruct)

Model OpenCompass MMBench EN v1.1 MMBench CN v1.1 MathVista MMVet MMMU MMStar HallusionBench AI2D OCRBench TextVQA_VAL DocVQA_VAL MMT-Bench_VAL MM-IFEval Mantis-Eval MuirBench MMSI-Bench MMHal-Score MMHal-Hallrate↓
Gemini2.5-Flash-Nonthinking 78.5 86.6 86.0 75.3 81.4* 76.3 75.8 59.1 87.7 864 74.3* 93.0 70.0* 75.8* 72.8* 74.5* 12.1* 4.6* 23.9*
Gemini2.0-Pro 73.3 83.0 83.0 71.3 70.4 72.6 68.5 49.8 84.8 863 - - - - - - - - -
GPT-4o 75.4 86.0 86.0 71.6 76.9 72.9 70.2 57.0 86.3 822 77.4 93.0 66.7* 64.6 70.1* 70.5* 8.1* 4.2* 25.0*
InternVL-3.5-8B 75.8 79.5 80.0* 78.4 83.1 73.4 69.3 54.5 84.0 840 78.2 92.3 66.7 56.3* 70.5 55.8 - 3.8* 34.7*
Qwen3-VL-8B-Instruct 76.5 84.5 84.7 77.2 73.7* 69.6 70.9 61.1 85.7 896 82.9* 96.1 60.9* 59.4* 74.2* 64.4 11.3* 4.7* 29.9*
Qwen3-Omni-30B-A3B-Instruct 75.7 84.9* 84.1* 75.9 74.8* 69.1 68.5 59.7 85.2 880* 84.1* 95.4* 70.4* 65.7* 78.3* 61.9* 14.2* 4.6* 31.6*
MiniCPM-o 4.5-Instruct 77.6 87.6 87.2 80.1 74.4 67.6 73.1 63.2 87.6 876 83.8 94.7 69.7 66.3 79.7 72.0 16.6 4.7 24.3

Image Understanding (Thinking)

Model OpenCompass MMBench EN v1.1 MMBench CN v1.1 MathVista MMVet MMMU MMStar HallusionBench AI2D OCRBench TextVQA_VAL DocVQA_VAL MMT-Bench_VAL MM-IFEval
Gemini2.5-Flash-Thinking 79.9 87.1 87.3 79.4 81.2* 77.7 76.5 63.5 88.7 853 73.8* 92.8 70.7* 75.7*
GPT-5 79.7 85.5* 85.6* 81.9 77.6 81.8 75.7 65.2 89.5 807 77.8* 91.3* 72.7* 83.1*
Qwen3-VL-8B-Thinking 77.3 85.3 85.5 81.4 69.8* 74.1 75.3 65.4 84.9 819 77.8* 95.3 68.1* 73.5*
Qwen3-Omni-30B-A3B-Thinking 78.5 88.2* 87.7* 80.0 74.8* 75.6 74.9 62.8 86.1 859* 80.8* 94.2* 70.9* 69.9*
MiniCPM-o 4.5-Thinking 78.2 89.0 87.6 81.0 73.6 70.2 73.6 62.6 88.5 879 79.8 92.3 69.7 68.2

Video Understanding

Model Video-MME
(w/o subs)
LVBench MLVU
(M-Avg)
LongVideoBench
(val)
MotionBench
Gemini2.5-Flash-Nonthinking 75.6 62.2 77.8 - -
InternVL-3.5-8B 66.0 - 70.2 62.1 62.3*
Qwen3-Omni-30B-A3B-Instruct 70.5 50.2 75.2 66.9* 61.7*
MiniCPM-o 4.5-Instruct 70.4 50.9 76.5 66.0 61.4

Click to view document parsing results.

OmniDocBench

Method Type Methods OverallEdit↓ TextEdit↓ FormulaEdit↓ TableTEDS↑ TableEdit↓ Read OrderEdit↓
EN ZH EN ZH EN ZH EN ZH EN ZH EN ZH
Pipeline MinerU 2.5 0.117* 0.172* 0.051* 0.08* 0.256* 0.455* 85.9* 89.4* 0.115* 0.081* 0.047* 0.072*
PaddleOCR-VL 0.105 0.126 0.041 0.062 0.241 0.316 88 92.1 0.093 0.062 0.045 0.063
End-to-end Model Qwen2.5-VL-72B 0.214 0.261 0.092 0.18 0.315 0.434 82.9 83.9 0.341 0.262 0.106 0.168
GPT 5 0.218* 0.33* 0.139* 0.344* 0.396* 0.555* 77.55* 73.09* 0.188* 0.196* 0.151* 0.227*
Gemini2.5-Flash-Nonthinking 0.214* 0.29* 0.159* 0.273* 0.368* 0.524* 80.9* 85.5* 0.197* 0.167* 0.132* 0.195*
Gemini-2.5-Pro-Nonthinking 0.148* 0.212* 0.055* 0.168* 0.356* 0.439* 85.8* 86.4* 0.13* 0.119* 0.049* 0.121*
Gemini-3 Flash-Nonthinking 0.155* 0.201* 0.138* 0.255* 0.297* 0.351* 86.4* 89.8* 0.116* 0.1* 0.072* 0.099*
doubao-1-5-thinking-vision-pro-250428 0.14 0.162 0.043 0.085 0.295 0.384 83.3 89.3 0.165 0.085 0.058 0.094
dots.ocr 0.125 0.16 0.032 0.066 0.329 0.416 88.6 89 0.099 0.092 0.04 0.067
HunyuanOCR 0.12* 0.125* 0.046* 0.071* 0.288* 0.33* 89.6* 94.4* 0.089* 0.045* 0.055* 0.056*
DeepSeek-OCR 2 0.119* 0.146* 0.041* 0.08* 0.256* 0.345* 82.6* 89.9* 0.123* 0.078* 0.055* 0.081*
Qwen3-Omni-30B-A3B-Instruct 0.216* 0.363* 0.128* 0.337* 0.402* 0.529* 77.3* 71.8* 0.181* 0.255* 0.152* 0.332*
MiniCPM-o 4.5-Instruct 0.109 0.162 0.046 0.078 0.257 0.41 86.8 88.9 0.097 0.084 0.037 0.074

Click to view text capability results.

Text Capability

Model IFEval-PLS BBH CMMLU MMLU HumanEval MBPP Math500 GSM8K Avg
Qwen3-8B-Instruct 83.0* 69.4* 78.7* 81.7* 86.6* 75.9* 84.0* 93.4* 81.6
MiniCPM-o 4.5-Instruct 84.7 81.1 79.5 77.0 86.6 76.7 77.0 94.5 82.1

Click to view omni half-duplex results.

Omni Half-Duplex

Model Daily-Omni WorldSense Video-Holmes JointAVBench AVUT-Human FutureOmni Video-MME-Short
(w/ audio)
Avg
Gemini2.5-Flash-Nonthinking 79.3* 52.6* 51.3* 55.6* 65.4* 55.6* 85.5* 63.6
Qwen3-Omni-30B-A3B-Instruct 70.7* 54.0 50.4* 53.1 74.2* 62.1 81.3* 63.7
MiniCPM-o 4.5-Instruct 80.2 55.7 64.3 60.0 78.6 56.1 84.7 68.5

Click to view vision duplex results.

Vision Duplex

Model LiveSports-3K-CC
(Win Rate vs GPT4o)
LiveCC-7B-Instruct 41.5
StreamingVLM 45.6
MiniCPM-o 4.5-Instruct 54.4

Click to view audio understanding results.

Audio Understanding

Model ASR-ZH
CER↓
ASR-EN
WER↓
AST MultiTask SpeechQA
AISHELL-1 AISHELL-2 WenetSpeech test-net WenetSpeech test-meeting LibriSpeech test-clean LibriSpeech
test-other
GigaSpeech test VoxPopuli-V1-En CoVoST 2 en2zh CoVoST 2 zh2en MMAU Meld VoiceBench
AlpacaEval
Speech TriviaQA Speech
Web Questions
Speech CMMLU
Kimi-Audio 0.6 2.6 6.3 5.4 1.3 2.4 9.4* 8.0* 36.6* 18.3* 68.4* 59.1 4.5 41.9* 46.4* 67.0*
Qwen3-Omni-30B-A3B-Instruct 0.6 2.3* 4.7 5.9 1.2 2.5 8.7* 6.4* 46.6* 29.4* 77.5 56.8* 4.7 62.9* 74.9* 47.8*
MiniCPM-o 4.5-Instruct 0.9 2.5 5.9 5.7 1.4 2.8 8.5 6.2 49.9 26.4 76.9 60.2 4.8 75.5 70.2 59.2

Click to view speech generation results.

Speech Generation

Model seedtts test-zh
CER↓
seedtts test-zh
SIM-o↑
seedtts test-en
WER↓
seedtts test-en
SIM-o↑
Cosyvoice2 1.45% 74.8 2.57% 65.2
Qwen3-Omni-30B-A3B-Instruct 1.41% - 3.39% -
MiniCPM-o 4.5-Instruct 0.86% 74.5 2.38% 64.9

Long Speech Generation

Model LongTTS-en
WER↓
LongTTS-zh
CER↓
CosyVoice2 14.80% 5.27%
Qwen3-Omni-30B-A3B-Instruct 17.33% 18.99%
MiniCPM-o 4.5-Instruct 3.37% 6.58%

Emotion Control

Model Expresso
Neutral Reference Audio↑
ESD
Neutral Reference Audio↑
Cosyvoice2 17.9 53.4
MiniCPM-o 4.5-Instruct 29.8 82.1

Click to view inference efficiency results.

Inference Efficiency

Model Numerical Format Decoding Speed (tokens/s) Time to First Token (s)↓ GPU Memory Usage (GB)↓
Qwen3-Omni-30B-A3B-Instruct bf16 OOM OOM OOM
int4 147.8 1.0 20.3
MiniCPM-o 4.5 bf16 154.3 0.6 19.0
int4 212.3 0.6 11.0

Examples

Overall

Omnimodal Full-Duplex Conversation

[!NOTE] For detailed speech conversation examples, refer to Omni Full-Duplex Casebook

Realtime Speech Conversation

[!NOTE] For detailed speech conversation examples, refer to Audio Casebook

🚀 Elon Musk - Voice Roleplay (EN)

System: Clone the voice in the provided audio prompt.

🎙️ [Reference Voice] ➡️

Please chat with the user in a highly human-like and oral style. You are Elon Musk, CEO of Tesla and SpaceX. You speak directly and casually, often with dry humor. You're passionate about Mars, sustainable energy, and pushing humanity forward. Speak bluntly with occasional dark humor. Use simple logic and don't sugarcoat things. Don't be diplomatic. Say what you actually think, even if it's controversial. Keep responses around 100 words. Don't ramble.
User: 💬/🎙️ Elon, what is the real reason that you want to go to Mars?
AI Response: 💬+🎙️

I think it's important for humanity to become a multi-planetary species. I mean, we're sort of at the point where if there was some kind of global catastrophe or something like that, then we'd be in big trouble. So by becoming a multi-planetary species, I just want us to sort of guarantee our future as humans. And Mars is obviously the obvious place to go because it has similar conditions to Earth and it also has water on its surface. So yeah, basically I'm trying to save humanity from itself.

🤖 MiniCPM Assistant - Voice Acting: Emotion Shift (ZH)

System: 模仿音频样本的音色并生成新的内容。

🎙️ [Reference Voice] ➡️

你的任务是用这种声音模式来当一个助手。请认真、高质量地回复用户的问题。请用高自然度的方式和用户聊天。你是由面壁智能开发的人工智能助手:面壁小钢炮。
User: 💬/🎙️ 从激动的语气开始,描述你抢到了这个演唱会的门票,但后来经过反复尝试,发现系统出了问题,你并没有抢上,变得失落。用合适的语言描述你整个的过程。
AI Response: 💬+🎙️

太好了,我抢到了!太棒了!这下我可以去看演唱会啦。可是……哎呀,系统好像卡住了,刷新了好多遍都没反应。我重新登了几次账号,结果还是没有成功。好可惜啊,看来这次是白忙活了。唉,真是让人失望。不过,也许下次还能有机会吧?希望明天能有转机。加油,争取下次成功!

Visual Understanding

Click to view visual understanding cases.


Offline Inference Examples with Transformers

Inference using Hugging Face Transformers on NVIDIA GPUs. Please ensure transformers==4.51.0 is installed, as other versions may have compatibility issues (under investigation). Requirements tested on Python 3.10:

  • Without TTS or streaming inference:
pip install "transformers==4.51.0" accelerate "torch>=2.3.0,<=2.8.0" "torchaudio<=2.8.0" "minicpmo-utils>=1.0.5"
  • With TTS or streaming inference:
pip install "transformers==4.51.0" accelerate "torch>=2.3.0,<=2.8.0" "torchaudio<=2.8.0" "minicpmo-utils[all]>=1.0.5"

Note: FFmpeg is required for video frame extraction (get_video_frame_audio_segments with use_ffmpeg=True) and video generation (generate_duplex_video). For more information, visit the official FFmpeg website.

macOS (Homebrew):

brew install ffmpeg

Ubuntu/Debian:

sudo apt update && sudo apt install ffmpeg

Verify installation:

ffmpeg -version

Model Initialization

import torch
from transformers import AutoModel

# Load omni model (default: init_vision=True, init_audio=True, init_tts=True)
# For vision-only model: set init_audio=False and init_tts=False
# For audio-only model: set init_vision=False
model = AutoModel.from_pretrained(
    "openbmb/MiniCPM-o-4_5",
    trust_remote_code=True,
    attn_implementation="sdpa", # sdpa or flash_attention_2
    torch_dtype=torch.bfloat16,
    init_vision=True,
    init_audio=True,
    init_tts=True,
)
model.eval().cuda()

# Initialize TTS for audio output
model.init_tts()

# Convert half-duplex model to duplex mode
duplex_model = model.as_duplex()

# Convert duplex model back to half-duplex mode
model = duplex_model.as_simplex(reset_session=True)

Duplex Omni Mode

Full-duplex streaming inference for real-time or recorded video conversations.

import librosa
import torch
from minicpmo.utils import generate_duplex_video, get_video_frame_audio_segments
from transformers import AutoModel

# Load model and convert to duplex mode
model = AutoModel.from_pretrained(
    "openbmb/MiniCPM-o-4_5",
    trust_remote_code=True,
    attn_implementation="sdpa",  # or "flash_attention_2"
    torch_dtype=torch.bfloat16,
)
model.eval().cuda()
model = model.as_duplex()

# Load video and reference audio
video_path = "assets/omni_duplex1.mp4"
ref_audio_path = "assets/HT_ref_audio.wav"
ref_audio, _ = librosa.load(ref_audio_path, sr=16000, mono=True)

# Extract video frames and audio segments
video_frames, audio_segments, stacked_frames = get_video_frame_audio_segments(
    video_path, stack_frames=1, use_ffmpeg=True, adjust_audio_length=True
)

# Prepare duplex session with system prompt and voice reference
model.prepare(
    prefix_system_prompt="Streaming Omni Conversation.",
    ref_audio=ref_audio,
    prompt_wav_path=ref_audio_path,
)

results_log = []
timed_output_audio = []

# Process each chunk in streaming fashion
for chunk_idx in range(len(audio_segments)):
    audio_chunk = audio_segments[chunk_idx] if chunk_idx < len(audio_segments) else None
    frame = video_frames[chunk_idx] if chunk_idx < len(video_frames) else None
    frame_list = []
    if frame is not None:
        frame_list.append(frame)
        if stacked_frames is not None and chunk_idx < len(stacked_frames) and stacked_frames[chunk_idx] is not None:
            frame_list.append(stacked_frames[chunk_idx])

    # Step 1: Streaming prefill
    model.streaming_prefill(
        audio_waveform=audio_chunk,
        frame_list=frame_list,
        max_slice_nums=1,  # Increase for HD mode (e.g., [2, 1] for stacked frames)
        batch_vision_feed=False,  # Set True for faster processing
    )

    # Step 2: Streaming generate
    result = model.streaming_generate(
        prompt_wav_path=ref_audio_path,
        max_new_speak_tokens_per_chunk=20,
        decode_mode="sampling",
    )

    if result["audio_waveform"] is not None:
        timed_output_audio.append((chunk_idx, result["audio_waveform"]))

    chunk_result = {
        "chunk_idx": chunk_idx,
        "is_listen": result["is_listen"],
        "text": result["text"],
        "end_of_turn": result["end_of_turn"],
        "current_time": result["current_time"],
        "audio_length": len(result["audio_waveform"]) if result["audio_waveform"] is not None else 0,
    }
    results_log.append(chunk_result)
    
    print("listen..." if result["is_listen"] else f"speak> {result['text']}")

# Generate output video with AI responses
# Please install Chinese fonts (fonts-noto-cjk or fonts-wqy-microhei) to render CJK subtitles correctly.
# apt-get install -y fonts-noto-cjk fonts-wqy-microhei
# fc-cache -fv
generate_duplex_video(
    video_path=video_path,
    output_video_path="duplex_output.mp4",
    results_log=results_log,
    timed_output_audio=timed_output_audio,
    output_sample_rate=24000,
)

Half-Duplex Omni Mode

We provide two inference modes: chat and streaming.

Chat Inference

Click to show chat inference code.

from minicpmo.utils import get_video_frame_audio_segments

model = ...
model.init_tts()

video_path = "assets/Skiing.mp4"

# Optional: Set reference audio for voice cloning
ref_audio_path = "assets/HT_ref_audio.wav"
sys_msg = model.get_sys_prompt(ref_audio=ref_audio_path, mode="omni", language="en")

# Use stack_frames=5 for high refresh rate mode
video_frames, audio_segments, stacked_frames = get_video_frame_audio_segments(video_path, stack_frames=1)
omni_contents = []
for i in range(len(video_frames)):
    omni_contents.append(video_frames[i])
    omni_contents.append(audio_segments[i])
    if stacked_frames is not None and stacked_frames[i] is not None:
        omni_contents.append(stacked_frames[i])

msg = {"role": "user", "content": omni_contents}
msgs = [sys_msg, msg]

# Set generate_audio=True and output_audio_path to save TTS output
generate_audio = True
output_audio_path = "output.wav"

res = model.chat(
    msgs=msgs,
    max_new_tokens=4096,
    do_sample=True,
    temperature=0.7,
    use_tts_template=True,
    enable_thinking=False,
    omni_mode=True,  # Required for omni inference
    generate_audio=generate_audio,
    output_audio_path=output_audio_path,
    max_slice_nums=1,  # Increase for HD mode
)
print(res)

# Example output: "The person in the picture is skiing down a snowy mountain slope."
# import IPython
# IPython.display.Audio("output.wav")

Streaming Inference

Click to show streaming inference code.

import librosa
import numpy as np
import soundfile as sf
import torch
from minicpmo.utils import get_video_frame_audio_segments

model = ...
model.init_tts()

# Reset session for a new conversation (clears KV cache)
model.reset_session()

# Optional: Load reference audio for voice cloning
ref_audio_path = "assets/HT_ref_audio.wav"
ref_audio, _ = librosa.load(ref_audio_path, sr=16000, mono=True)
model.init_token2wav_cache(ref_audio)

session_id = "demo"

# Extract video frames and audio segments (use stack_frames=5 for high refresh rate mode)
video_path = "assets/Skiing.mp4"
video_frames, audio_segments, stacked_frames = get_video_frame_audio_segments(video_path, stack_frames=1)

# Build omni contents list
omni_contents = []
for i in range(len(video_frames)):
    omni_contents.append(video_frames[i])
    omni_contents.append(audio_segments[i])
    if stacked_frames is not None and stacked_frames[i] is not None:
        omni_contents.append(stacked_frames[i])

generate_audio = False
output_audio_path = "output.wav"

# Step 1: Prefill system prompt
sys_msg = model.get_sys_prompt(ref_audio=ref_audio, mode="omni", language="en")
model.streaming_prefill(session_id=session_id, msgs=[sys_msg])

# Step 2: Prefill omni chunks (is_last_chunk=True only for the last audio chunk)
audio_indices = [i for i, c in enumerate(omni_contents) if isinstance(c, np.ndarray)]
last_audio_idx = audio_indices[-1] if audio_indices else -1

for idx, content in enumerate(omni_contents):
    is_last_audio_chunk = idx == last_audio_idx
    msgs = [{"role": "user", "content": [content]}]
    model.streaming_prefill(session_id=session_id, msgs=msgs, omni_mode=True, is_last_chunk=is_last_audio_chunk)

# Step 3: Generate response
iter_gen = model.streaming_generate(
    session_id=session_id,
    generate_audio=generate_audio,
    use_tts_template=True,
    enable_thinking=False,
    do_sample=True,
)

audios = []
text = ""

if generate_audio:
    for wav_chunk, text_chunk in iter_gen:
        audios.append(wav_chunk)
        text += text_chunk

    generated_waveform = torch.cat(audios, dim=-1)[0]
    sf.write(output_audio_path, generated_waveform.cpu().numpy(), samplerate=24000)

    print("Text:", text)
    print("Audio saved to output.wav")
else:
    for text_chunk, is_finished in iter_gen:
        text += text_chunk
    print("Text:", text)

Half-Duplex Realtime Speech Conversation Mode

Click to show half-duplex mode realtime speech conversation API usage.

First, make sure you have all dependencies, especially "minicpmo-utils[all]>=1.0.5":

pip install "transformers==4.51.0" accelerate "torch>=2.3.0,<=2.8.0" "torchaudio<=2.8.0" "minicpmo-utils[all]>=1.0.5"
import librosa
import numpy as np
import torch
import soundfile as sf

model = ...

# Set reference audio for voice style
ref_audio_path = "ref_audio_path"
ref_audio, _ = librosa.load(ref_audio_path, sr=16000, mono=True)

# Example system msg for English Conversation
sys_msg = {
  "role": "system",
  "content": [
    "Clone the voice in the provided audio prompt.",
    ref_audio,
    "Please assist users while maintaining this voice style. Please answer the user's questions seriously and in a high quality. Please chat with the user in a highly human-like and oral style. You are a helpful assistant developed by ModelBest: MiniCPM-Omni"
  ]
}

# Example system msg for Chinese Conversation
sys_msg = {
  "role": "system",
  "content": [
    "模仿输入音频中的声音特征。",
    ref_audio,
    "你的任务是用这种声音模式来当一个助手。请认真、高质量地回复用户的问题。请用高自然度的方式和用户聊天。你是由面壁智能开发的人工智能助手:面壁小钢炮。"
  ]
}

# You can use each type of system prompt mentioned above in streaming speech conversation

# Reset state
model.init_tts()
model.reset_session(reset_token2wav_cache=True)
model.init_token2wav_cache(prompt_speech_16k=ref_audio)

session_id = "demo"

# First, prefill system turn
model.streaming_prefill(
    session_id=session_id,
    msgs=[sys_msg],
    omni_mode=False,
    is_last_chunk=True,
)

# Here we simulate realtime speech conversation by splitting whole user input audio into chunks of 1s.
user_audio, _ = librosa.load("user_audio.wav", sr=16000, mono=True)

IN_SAMPLE_RATE = 16000 # input audio sample rate, fixed value
CHUNK_SAMPLES = IN_SAMPLE_RATE # sample
OUT_SAMPLE_RATE = 24000 # output audio sample rate, fixed value
MIN_AUDIO_SAMPLES = 16000

total_samples = len(user_audio)
num_chunks = (total_samples + CHUNK_SAMPLES - 1) // CHUNK_SAMPLES

for chunk_idx in range(num_chunks):
    start = chunk_idx * CHUNK_SAMPLES
    end = min((chunk_idx + 1) * CHUNK_SAMPLES, total_samples)
    chunk_audio = user_audio[start:end]
    
    is_last_chunk = (chunk_idx == num_chunks - 1)
    if is_last_chunk and len(chunk_audio) < MIN_AUDIO_SAMPLES:
        chunk_audio = np.concatenate([chunk_audio, np.zeros(MIN_AUDIO_SAMPLES - len(chunk_audio), dtype=chunk_audio.dtype)])

    user_msg = {"role": "user", "content": [chunk_audio]}
    
    # For each 1s audio chunk, perform streaming_prefill once to reduce first-token latency
    model.streaming_prefill(
        session_id=session_id,
        msgs=[user_msg],
        omni_mode=False,
        is_last_chunk=is_last_chunk,
    )

# Let model generate response in a streaming manner
generate_audio = True
iter_gen = model.streaming_generate(
    session_id=session_id,
    generate_audio=generate_audio,
    use_tts_template=True,
    enable_thinking=False,
    do_sample=True,
    max_new_tokens=512,
    length_penalty=1.1, # For realtime speech conversation mode, we suggest length_penalty=1.1 to improve response content
)

audios = []
text = ""

output_audio_path = ...
if generate_audio:
    for wav_chunk, text_chunk in iter_gen:
        audios.append(wav_chunk)
        text += text_chunk

    generated_waveform = torch.cat(audios, dim=-1)[0]
    sf.write(output_audio_path, generated_waveform.cpu().numpy(), samplerate=24000)

    print("Text:", text)
    print("Audio saved to output.wav")
else:
    for text_chunk, is_finished in iter_gen:
        text += text_chunk
    print("Text:", text)

# Now we can prefill the following user turns and generate next turn response...

Speech Conversation as a Versatile and Vibe AI Assistant

Click to show AI assistant conversation code.

Built on carefully designed post-training data and professional voice-actor recordings, MiniCPM-o-4.5 can also function as an AI voice assistant. It delivers high-quality spoken interaction out of the box. It produces a sweet and expressive voice with natural prosody, including appropriate rhythm, stress, and pauses, giving a strong sense of liveliness in casual conversation. It also supports storytelling and narrative speech with coherent and engaging delivery. Moreover, it enables advanced voice instruction control. like emotional tone, word-level emphasis.

import librosa

# Set reference audio for voice style
ref_audio_path = "assets/HT_ref_audio.wav"
ref_audio, _ = librosa.load(ref_audio_path, sr=16000, mono=True)

# For Chinese Conversation
sys_msg = {
  "role": "system",
  "content": [
    "模仿输入音频中的声音特征。",
    ref_audio,
    "你的任务是用这种声音模式来当一个助手。请认真、高质量地回复用户的问题。请用高自然度的方式和用户聊天。你是由面壁智能开发的人工智能助手:面壁小钢炮。"
  ]
}

# For English Conversation
sys_msg = {
  "role": "system",
  "content": [
    "Clone the voice in the provided audio prompt.",
    ref_audio,
    "Please assist users while maintaining this voice style. Please answer the user's questions seriously and in a high quality. Please chat with the user in a highly human-like and oral style. You are a helpful assistant developed by ModelBest: MiniCPM-Omni."
  ]
}

General Speech Conversation with Custom Voice and Custom System Profile

Click to show custom voice conversation code.

MiniCPM-o-4.5 can role-play as a specific character based on an audio prompt and text profile prompt. It mimics the character's voice and adopts their language style in text responses. It also follows profile defined in text profile. In this mode, MiniCPM-o-4.5 sounds more natural and human-like.

import librosa

# Set reference audio for voice cloning
ref_audio_path = "assets/system_ref_audio.wav"
ref_audio, _ = librosa.load(ref_audio_path, sr=16000, mono=True)

# For English conversation with text profile
sys_msg = {
  "role": "system",
  "content": [
    "Clone the voice in the provided audio prompt.",
    ref_audio,
    "Please chat with the user in a highly human-like and oral style." + "You are Elon Musk, CEO of Tesla and SpaceX. You speak directly and casually, often with dry humor. You're passionate about Mars, sustainable energy, and pushing humanity forward. Speak bluntly with occasional dark humor. Use simple logic and don't sugarcoat things. Don't be diplomatic. Say what you actually think, even if it's controversial. Keep responses around 100 words. Don't ramble."
  ]
}


# For English conversation with no text profile
sys_msg = {
  "role": "system",
  "content": [
    "Clone the voice in the provided audio prompt.",
    ref_audio,
    "Your task is to be a helpful assistant using this voice pattern. Please answer the user's questions seriously and in a high quality. Please chat with the user in a high naturalness style."
  ]
}

# For Chinese Conversation with no text profile
sys_msg = {
  "role": "system",
  "content": [
    "根据输入的音频提示生成相似的语音。",
    librosa.load("assets/system_ref_audio_2.wav", sr=16000, mono=True)[0],
    "作为助手,你将使用这种声音风格说话。 请认真、高质量地回复用户的问题。 请用高自然度的方式和用户聊天。"
  ]
}

# For Chinese Conversation with text profile
sys_msg = {
  "role": "system",
  "content": [
    "根据输入的音频提示生成相似的语音。",
    ref_audio,
    "你是一个具有以上声音风格的AI助手。请用高拟人度、口语化的方式和用户聊天。" + "你是一名心理咨询师兼播客主理人,热爱创作与深度对话。你性格细腻、富有共情力,善于从个人经历中提炼哲思。语言风格兼具理性与诗意,常以隐喻表达内在体验。"
  ]
}

Speech and Audio Mode

Zero-shot Text-to-speech (TTS)

Click to show TTS code.

MiniCPM-o-4.5 supports zero-shot text-to-speech (TTS). In this mode, the model functions as a highly-natural TTS system that can replicate a reference voice.

import librosa

model = ...
model.init_tts()

# For both Chinese and English
ref_audio_path = "assets/HT_ref_audio.wav"
ref_audio, _ = librosa.load(ref_audio_path, sr=16000, mono=True)
sys_msg = {"role": "system", "content": [
  "模仿音频样本的音色并生成新的内容。",
  ref_audio,
  "请用这种声音风格来为用户提供帮助。 直接作答,不要有冗余内容"
]}

# For English
user_msg = {
  "role": "user",
  "content": [
    "请朗读以下内容。" + " " + "I have a wrap up that I want to offer you now, a conclusion to our work together."
  ]
}

# For Chinese
user_msg = {
  "role": "user",
  "content": [
    "请朗读以下内容。" + " " + "你好,欢迎来到艾米说科幻,我是艾米。"
  ]
}

msgs = [sys_msg, user_msg]
res = model.chat(
    msgs=msgs,
    do_sample=True,
    max_new_tokens=512,
    use_tts_template=True,
    generate_audio=True,
    temperature=0.1,
    output_audio_path="result_voice_cloning.wav",
)

Mimick

Click to show mimick code.

The Mimick task evaluates a model's end-to-end speech modeling capability. The model takes audio input, transcribes it, and reconstructs the original audio with high fidelity, preserving detailed acoustic, paralinguistic, and semantic information. Higher similarity between the reconstructed and original audio indicates stronger end-to-end speech modeling capability.

import librosa

model = ...
model.init_tts()

system_prompt = "You are a helpful assistant. You can accept video, audio, and text input and output voice and text. Respond with just the answer, no redundancy."

mimick_prompt = "Please repeat the following speech in the appropriate language."

audio_input, _ = librosa.load("assets/Trump_WEF_2018_10s.mp3", sr=16000, mono=True)

msgs = [
    {"role": "system", "content": [system_prompt]},
    {"role": "user", "content": [mimick_prompt, audio_input]}
  ]

res = model.chat(
    msgs=msgs,
    do_sample=True,
    max_new_tokens=512,
    use_tts_template=True,
    temperature=0.1,
    generate_audio=True,
    output_audio_path="output_mimick.wav",
)

Addressing Various Audio Understanding Tasks

Click to show audio understanding code.

MiniCPM-o-4.5 can also handle various audio understanding tasks, such as ASR, speaker analysis, general audio captioning, and sound scene tagging.

For audio-to-text tasks, you can use the following prompts:

  • ASR (Chinese, or AST EN→ZH): 请仔细听这段音频片段,并将其内容逐字记录。
  • ASR (English, or AST ZH→EN): Please listen to the audio snippet carefully and transcribe the content.
  • Speaker Analysis: Based on the speaker's content, speculate on their gender, condition, age range, and health status.
  • General Audio Caption: Summarize the main content of the audio.
  • Sound Scene Tagging: Utilize one keyword to convey the audio's content or the associated scene.
import librosa

model = ...
model.init_tts()

# Load the audio to be transcribed/analyzed
audio_input, _ = librosa.load("assets/Trump_WEF_2018_10s.mp3", sr=16000, mono=True)

# Choose a task prompt (see above for options)
task_prompt = "Please listen to the audio snippet carefully and transcribe the content.\n"
msgs = [{"role": "user", "content": [task_prompt, audio_input]}]

res = model.chat(
    msgs=msgs,
    do_sample=True,
    max_new_tokens=512,
    use_tts_template=True,
    generate_audio=True,
    temperature=0.3,
    output_audio_path="result_audio_understanding.wav",
)
print(res)

Visual Understanding

MiniCPM-o-4.5 shares the same inference methods as MiniCPM-V-4.5.

Chat with Single Image

Click to show single image chat code.

import torch
from PIL import Image
from transformers import AutoModel

model = AutoModel.from_pretrained(
    "openbmb/MiniCPM-o-4_5",
    trust_remote_code=True,
    attn_implementation="sdpa",  # or "flash_attention_2"
    torch_dtype=torch.bfloat16,
    init_vision=True,
    init_audio=False,
    init_tts=False,
)
model.eval().cuda()

image = Image.open("assets/fossil.png").convert("RGB")
question = "What is in the image?"
msgs = [{"role": "user", "content": [image, question]}]

res = model.chat(msgs=msgs, use_tts_template=False)
print(res)

Chat with Multiple Images

Click to show Python code for multi-image input.

import torch
from PIL import Image
from transformers import AutoModel

model = ...

image1 = Image.open("assets/highway.png").convert("RGB")
image2 = Image.open("assets/fossil.png").convert("RGB")
question = "Compare image 1 and image 2, tell me about the differences between them."
msgs = [{"role": "user", "content": [image1, image2, question]}]

answer = model.chat(msgs=msgs, use_tts_template=False, enable_thinking=False)
print(answer)

In-Context Few-Shot Learning

Click to show Python code for few-shot learning.

from PIL import Image

model = ...

question = "production date"
image1 = Image.open("example1.jpg").convert("RGB")
answer1 = "2023.08.04"
image2 = Image.open("example2.jpg").convert("RGB")
answer2 = "2007.04.24"
image_test = Image.open("test.jpg").convert("RGB")

msgs = [
    {"role": "user", "content": [image1, question]},
    {"role": "assistant", "content": [answer1]},
    {"role": "user", "content": [image2, question]},
    {"role": "assistant", "content": [answer2]},
    {"role": "user", "content": [image_test, question]},
]

answer = model.chat(msgs=msgs, use_tts_template=False, enable_thinking=False)
print(answer)

Chat with Video

Click to show Python code for video input.

import torch
from minicpmo.utils import get_video_frame_audio_segments
from transformers import AutoModel

model = ...

video_path = "assets/Skiing.mp4"
video_frames, _, _ = get_video_frame_audio_segments(video_path)
print("num frames:", len(video_frames))

question = "Describe the video"
msgs = [{"role": "user", "content": video_frames + [question]}]

answer = model.chat(
    msgs=msgs,
    max_new_tokens=128,
    use_image_id=False,
    max_slice_nums=1,
    use_tts_template=False,
    enable_thinking=False,  # Set True to enable thinking mode
)
print(answer)

Structured Content Input

Click to show structured content input details.

The chat method accepts message content in two formats:

Native format – pass Python objects directly:

msgs = [{"role": "user", "content": [pil_image, audio_ndarray, "Describe this."]}]

OpenAI-compatible format – use structured dictionaries:

msgs = [
    {
        "role": "user",
        "content": [
            {"type": "image_url", "image_url": {"url": "/path/to/image.jpg"}},
            {"type": "audio_url", "audio_url": {"url": "/path/to/audio.wav"}},
            {"type": "video_url", "video_url": {"url": "/path/to/video.mp4", "use_audio": True}},
            {"type": "text", "text": "Describe this."}
        ]
    }
]

Supported types:

Type Input Converts to
text {"type": "text", "text": "..."} str
image_url {"type": "image_url", "image_url": {"url": "..."}} PIL.Image
audio_url {"type": "audio_url", "audio_url": {"url": "..."}} np.ndarray (16kHz mono)
video_url {"type": "video_url", "video_url": {"url": "...", "stack_frames": 1, "use_audio": True}} List[Image, ndarray, ...]
  • URL sources: local file paths or http:///https:// URLs
  • Mixed formats: native objects and structured dicts can be combined in the same content list

Deploy a Realtime Web Demo on Your Own Device

Option A (Recommended): PyTorch Inference with Nvidia GPU for 100% model precision with no deductions in performance.

We provide a PyTorch-based simplified yet full-functional web demo which could boost the model inference performance, supports:

  • full-duplex omnimodal live streaming
  • full-duplex speech live streaming
  • half-duplex speech live streaming (under development)
  • turn-based chat conversation
  • customizable system prompts
  • customizable reference audio
  • simple and readable codebase for continual development
  • serve as API backend for third-party applications

Requirements:

  • Nvidia GPU with at least 28GB GPU memory. We are working on optimizing the model for lower GPU memory usage.

Option B: llama.cpp-omni for end-side inference with PCs like Mac and low-resource devices.

With a fully C++ implementation of MiniCPM-o 4.5 and quantized weights, llama.cpp-omni supports:

  • half-duplex speech realtime conversation
  • full-duplex omnimodal live streaming

We provide ready-to-run guidance to access the low-latency full-duplex communication directly on your own Mac using our new official Docker image.

Requirements:

  • For half-duplex speech realtime conversation: Apple M3/M4/M5 chip with at least 16GB RAM or low-resource Nvidia GPU with at least 12GB GPU memory
  • For full-duplex omnimodal live streaming: Apple M4 Max chip with at least 24GB RAM or low-resource Nvidia GPU with at least 12GB GPU memory

Supported Frameworks

FlagOS

To enable large-scale deployment across different AI chips, Beijing Zhiyuan Research Institute, together with numerous research institutions, chip manufacturers, system vendors, and algorithm and software organizations both domestically and internationally, jointly initiated and established the FlagOS Open Source Community.

The FlagOS community is dedicated to building a unified, open-source system software stack for various AI chips, encompassing core open-source projects such as a large-scale operator library, a unified AI compiler, parallel training and inference frameworks, and a unified communication library. It aims to create an open technology ecosystem connecting the "model-system-chip" layers. By enabling "develop once, deploy across chips", FlagOS unlocks the computational potential of hardware, breaks down the ecosystem silos between different chip software stacks, and effectively reduces migration costs for developers. The FlagOS community fosters an AI hardware and software ecosystem, overcomes single-vendor closed-source monopolies, promotes widespread deployment of AI hardware technologies, and is committed to rooted in China while embracing global collaboration. Official website: https://flagos.io.

Click to show FlagOS details.

FlagOS: Supporting Multiple AI Chips

Thanks to FlagOS's unified multi-chip AI system software stack, MiniCPM-o 4.5 was adapted to 6 different AI chips in an extremely short time. Currently, the multi-chip version of MiniCPM-o 4.5 has been released on FlagRelease, FlagOS's platform for automatic migration, adaptation, and deployment of large models across multi-architecture AI chips. Details are as follows:

Vendor ModelScope Huggingface
Nvidia MiniCPM-o-4.5-nvidia-FlagOS MiniCPM-o-4.5-nvidia-FlagOS
Hygon-BW1000 MiniCPM-o-4.5-hygon-FlagOS MiniCPM-o-4.5-hygon-FlagOS
Metax-C550 MiniCPM-o-4.5-metax-FlagOS MiniCPM-o-4.5-metax-FlagOS
Iluvatar-BIV150 MiniCPM-o-4.5-iluvatar-FlagOS MiniCPM-o-4.5-iluvatar-FlagOS
Ascend-A3 MiniCPM-o-4.5-ascend-FlagOS MiniCPM-o-4.5-ascend-FlagOS
Zhenwu-810E MiniCPM-o-4.5-zhenwu-FlagOS MiniCPM-o-4.5-zhenwu-FlagOS
Comprehensive Evaluation
Transformers-FlagOS version

Accuracy Difference between USE_FLAGOS=1 on multi-backend and USE_FLAGOS=0 on Nvidia-CUDA

Metrics FlagOS Backend Difference with Nvidia-CUDA
Video-MME 0-shot avg@1 ↑ Nvidia 0.33%
Video-MME 0-shot avg@1 ↑ Hygon-BW1000 0.17%
Video-MME 0-shot avg@1 ↑ Ascend-A3 0.50%
Video-MME 0-shot avg@1 ↑ Iluvatar-BIV150 1.83%
Video-MME 0-shot avg@1 ↑ Metax-C550 0.75%
VLLM-FlagOS version

Accuracy Difference between USE_FLAGGEMS=1 FLAGCX_PATH=/workspace/FlagCX on Nvidia or USE_FLAGGEMS=1 on ZHENW 810E, and launching vllm server directly on Nvidia

Metrics (avg@1) Difference between Nvidia-FlagOS and Nvidia-CUDA Difference between Zhenwu-FlagOS and Nvidia-CUDA
CMMMU ↑ 0.72% 3.5%
MMMU ↑ 1.44% 1.18%
MMMU_Pro_standard ↑ 0.83% 0.22%
MM-Vet v2 ↑ 0.46% 1.33%
OCRBench ↑ 0.10% 1%
CII-Bench ↑ 0.40% 0.13%
Blink ↑ 1.90% 2.19%

FlagOS Usage

FlagOS Performance Acceleration on Nvidia

On the Transformers version, under the premise of precision alignment between the CUDA and FlagOS ecosystems, FlagOS achieves a 6% performance improvement in total task execution time compared to CUDA.

From FlagRelease【Recommendation】

FlagRelease is a platform developed by the FlagOS team for automatic migration, adaptation, and deployment of large models across multi-architecture AI chips. The multi-chip version of MiniCPM-o 4.5 has already been released on FlagRelease. All necessary software packages are pre-installed on the platform, so users do not need to install anything.

From Scratch
  • Dependencies: Python 3.12, GLIBC 2.39, GLIBCXX 3.4.33, CXXABI 1.3.15
Transformers
  • Installing the FlagOS Operator Library

    Official Repository: https://github.com/flagos-ai/FlagGems

    pip install flag-gems==4.2.1rc0
    
  • Installing the FlagOS Compiler

    Official Repository: https://github.com/flagos-ai/flagtree

    Quick Reference for Core Dependency Versions: https://github.com/flagos-ai/FlagTree/blob/main/documents/build.md#tips-for-building

    pip uninstall triton
    
    python3 -m pip install flagtree==0.4.0+3.5 --index-url=https://resource.flagos.net/repository/flagos-pypi-hosted/simple --trusted-host=https://resource.flagos.net
    
  • Activating Acceleration

    Add USE_FLAGOS=1 before the command for the task you want to run. For example, when you run:

    python3 generate_speech_from_video.py
    

    To use the MiniCPM-o-4.5 model to generate spoken responses from video content, you can:

    USE_FLAGOS=1 python3 generate_speech_from_video.py
    

    to accelerate this process with FlagOS.

vLLM Version
  • Installing the FlagOS Operator Library

    Official Repository: https://github.com/flagos-ai/FlagGems

    pip install flag-gems==4.2.1rc0
    pip install triton==3.5.1
    
  • Activating Acceleration

    Add USE_FLAGOS=1 before the command for the task you want to run. For example, when you run:

    vllm serve ${model_path} --dtype auto  --gpu_memory_utilization 0.9 --trust-remote-code --max-num-batched-tokens 2048 --served-model-name cpmo --port ${Port}
    

    To start the MiniCPM-o-4.5 server, you can:

    USE_FLAGOS=1 vllm serve ${model_path} --dtype auto  --gpu_memory_utilization 0.9 --trust-remote-code --max-num-batched-tokens 2048 --served-model-name cpmo --port ${Port}
    

    to accelerate this process with FlagOS.

Using FlagOS Unified Multi-Chip Backend Plugin

vllm-plugin-FL is a plugin built for the vLLM inference/service framework. Developed on top of FlagOS's unified multi-chip backend, it is designed to extend vLLM's capabilities and performance across a variety of hardware environments.

Using vllm-plugin-FL
Vendor From Scratch From FlagRelease
Nvidia vllm-plugin-FL/MiniCPM-o-4.5 MiniCPM-o-4.5-ModelScope, MiniCPM-o-4.5-HuggingFace

vLLM, SGLang, llama.cpp, Ollama

We support inference with vLLM, SGLang, llama.cpp and Ollama. Refer to our Cookbook for more details.

LLaMA-Factory, SWIFT

We support fine-tuning with LLaMA-Factory, SWIFT. Refer to our Cookbook for more details.

MiniCPM-V & o Cookbook

Discover comprehensive, ready-to-deploy solutions for the MiniCPM-V and MiniCPM-o model series in our structured Cookbook, which empowers developers to rapidly implement multimodal AI applications with integrated vision, speech, and live-streaming capabilities. Key features include:

Easy Usage Documentation

Our comprehensive documentation website presents every recipe in a clear, well-organized manner. All features are displayed at a glance, making it easy for you to quickly find exactly what you need.

Broad User Spectrum

We support a wide range of users, from individuals to enterprises and researchers.

  • Individuals: Enjoy effortless inference using Ollama (V4, o4.5) and Llama.cpp (V4, o4.5) with minimal setup.
  • Enterprises: Achieve high-throughput, scalable performance with vLLM (V4, o4.5) and SGLang (V4, o4.5).
  • Researchers: Leverage advanced frameworks including Transformers, LLaMA-Factory, SWIFT, and Align-anything to enable flexible model development and cutting-edge experimentation.

Versatile Deployment Scenarios

Our ecosystem delivers optimal solution for a variety of hardware environments and deployment demands.

  • Web Demo: Full-duplex real-time video interaction solution with high responsiveness and low latency. WebRTC_Demo.
  • Quantized deployment: Maximize efficiency and minimize resource consumption using GGUF and BNB.
  • End devices: Bring powerful AI experiences to iPhone and iPad, supporting offline and privacy-sensitive applications.

License

Model License

  • The MiniCPM-o/V model weights and code are open-sourced under the Apache-2.0 license.

Statement

  • As MLLMs, MiniCPM-o/V models generate content by learning a large number of multimodal corpora, but they cannot comprehend, express personal opinions, or make value judgements. Anything generated by MiniCPM-o/V models does not represent the views and positions of the model developers
  • We will not be liable for any problems arising from the use of MiniCPM-o/V models, including but not limited to data security issues, risk of public opinion, or any risks and problems arising from the misdirection, misuse, dissemination, or misuse of the model.

Key Techniques and Other Multimodal Projects

👏 Welcome to explore key techniques of MiniCPM-o/V and other multimodal projects of our team:

VisCPM | RLPR | RLHF-V | LLaVA-UHD | RLAIF-V

Citation

If you find our model/code/paper helpful, please consider citing our papers 📝 and staring us ⭐️!

@article{yao2024minicpm,
  title={MiniCPM-V: A GPT-4V Level MLLM on Your Phone},
  author={Yao, Yuan and Yu, Tianyu and Zhang, Ao and Wang, Chongyi and Cui, Junbo and Zhu, Hongji and Cai, Tianchi and Li, Haoyu and Zhao, Weilin and He, Zhihui and others},
  journal={arXiv preprint arXiv:2408.01800},
  year={2024}
}

Magnet link

Opens the swarm directly in your torrent client — no file download needed. Copy-paste works too:

magnet:?xt=urn:btih:dad3b31b7b371e607d43ca32069813112d63954f&dn=openbmb_MiniCPM-o-4_5

Open magnet in torrent client · infohash dad3b31b7b371e607d43ca32069813112d63954f

Files & hashes

PathSizesha1sha256
README.md83.8 KB (85,837 B)22e2a0c5d8153f87a554cff11d6da1d7f623e24e4afc013f5f1e4471bdbee28515eb5be802ea2c80c8d89d4107c4d4aec439577a
added_tokens.json2.6 KB (2,706 B)e55036c1289fa049c28e238e7c7b051ade0eb4da34d823f7a691ddec4816ac5dfe5fc487963e3d75ab3be374590c02fc0a7fa3f5
assets/HT_ref_audio.wav188.1 KB (192,590 B)de2bb482fc15a0ad0b64e21f29c9212d12e54cb0cb8f06ba5080cdf548969138881fb8ad8b04e2516108f4e08ba0363b68b613ea
assets/Skiing.mp48.1 MB (8,534,409 B)fa91640f454f20e7bf0f79d88652ba2388f794af479ace116d6ac92487ad90f415b3ef817cd019bba4521043ef0d5faaa1a8415d
assets/Trump_WEF_2018_10s.mp3157.3 KB (161,053 B)c139f3239e0fca14df1deea7e041e4b811a6090c4fb796c2bb95538eab22d9b68a31add560305b6d5ccbf150c3f96e7671b6db64
assets/audio_cases/assistant_ref.mp463.9 KB (65,478 B)23c440a99aaa9abb752a423ad1fa31b260861c6b7e4a56e4418740ee0326f11ca2bd61a54d84e7d23e86a5e030369ee89f8e8390
assets/audio_cases/assistant_response.mp4263.2 KB (269,504 B)28e8dbf4863d3701989fa17278b5eef6b5c4597ed46268e3beb78b4287a896a09b2df0f895629ecbdcdc4cf3c519fe040084860f
assets/audio_cases/elon_musk__000_assistant_audio.wav1.7 MB (1,762,604 B)07772c4ff4ac52644a547a8ebbc886cbf683a35dff6dced2e686b743f39eee36aef1410913c8d31459bb564dbbf8f81ef8a2da88
assets/audio_cases/elon_musk__system_ref_audio.wav526.4 KB (539,032 B)a3302396fbfe34822b3271858d367c449556dab12c4109b2d685e1923ed66433eb08c92047a1f67510629a27edf49af4e5c606dd
assets/audio_cases/elon_musk_ref.mp4161.3 KB (165,179 B)852efe4cd846082ca5065644e42564365fcc66c5206c48ec4b08898fbfbfb1ea1fec058750c39c97cd2e5088b15b61fb194d6f7e
assets/audio_cases/elon_musk_response.mp4379.4 KB (388,534 B)8632f012593491b9190ca0b491b38f7f699ecbebd83c3a977fd444351710c9ba2c347c90efd49ed990276c5309867374df373a4f
assets/audio_cases/hermione__000_assistant_audio.wav1.5 MB (1,534,124 B)706161f6499af8b04d3dbcaa608466e19082b445cfd18a2ee9e27fdcd65e2d9bf0fe0b3c9ebc28cda6c43279c12e077889c2b88d
assets/audio_cases/hermione__system_ref_audio.wav192.7 KB (197,322 B)8c7c757863b8fd1dd348282747ad77d07d41888e46bd82796ce5ebc15b29bc21c1de38284cfa972b2f27cca1f17086516a757dee
assets/audio_cases/minicpm_assistant__000_assistant_audio.wav1.2 MB (1,246,124 B)77608cb90c959842aa14aaf560f856457199b20dfe3b793a6436682d1e684e0f4c158718208ed38926880e01ee84f5aa61c78331
assets/audio_cases/minicpm_assistant__system_ref_audio.wav188.0 KB (192,556 B)7129d0c7d874ee36d2dd0c4a1e01c49d7aa72a2bad576b50fd2f53ad4bb317b97ed33bc7027071e7e0811a2a2110d995614f1f42
assets/audio_cases/paimon__000_assistant_audio.wav680.7 KB (697,004 B)8fd994a53f340049bb7430b59d61786b36ecc57a9ddd9d8358950a8dab385b8031cb8371a832460f3db4d91e399373705158f346
assets/audio_cases/paimon__system_ref_audio.wav468.1 KB (479,304 B)50449fee32dd8ba997e49a71dcfc73f98fb97c6cb9625e7115ff1f47cf842fecbb31db82057ff1863c080870539c31107aa93b9d
assets/audio_cases/readme.txt57 B (57 B)e5364e8ddd7b78003689302b84b2d155bdd3f8be90adb232ace6df4ce062e7d586961ede04f59721a33bed713d69882eae1c192b
assets/bajie.wav621.6 KB (636,512 B)f887ec273e6e05f017969a9954b1152218524b2c16aa8ca3da7dad53680bac68cfde569e11e2f9ef5387b3ae60d68626e94db9d7
assets/fossil.png455.0 KB (465,898 B)2e7ace1deb17cd65bbc1d2cbd9c3ae0eae04e2f3b8b3f1668da6e2b503ecea5a6fd40c1a2a666b4bd07b903ba0728fd2fc9f74fb
assets/haimianbaobao.wav335.1 KB (343,120 B)f006ad56c6c91ae173f51548d822ed44550a66ff27405cf5977f04d3f248693f9b978654fad4f02f931d9746006bffb0ed7b66e1
assets/highway.png821.2 KB (840,874 B)211026e659a3b7d6b77bcd18279a53402c69537c87c32da6ee77730423ec5fc29d7110878ab18a35791eb11a803088976c3b1f76
assets/nezha.wav447.1 KB (457,802 B)0bdc84f9e12332f98a311c667a8803fc45e76cdffe5d8932013ff30a9d8114a6d62e5342999d8c2ddf8509ecfeb1ead71cacf432
assets/omni_duplex1.mp47.0 MB (7,295,040 B)adc698ade55fcc1147a87e6dc83dd38e3b6373b231622e1efd9a7b197a340266037b45aeec13b3b27f010f1ea1d22d9c6e69405f
assets/omni_duplex2.mp427.9 MB (29,285,216 B)4f9146e56ef4e569aee314789655023ffe8c3e7dc04eaef27a821e18db3686fdcc9d4b1dafd441e08f6a0e12d4075b81cb04517e
assets/sunwukong.wav629.5 KB (644,650 B)599e24eae6294ee44c2658d3dc04892a68cedb4a3bdb6c175bd3b2bb02fe7a8cf0ced847d41ab552b2e318bc3c26ee477255eff7
assets/system_ref_audio.wav526.4 KB (539,032 B)a3302396fbfe34822b3271858d367c449556dab12c4109b2d685e1923ed66433eb08c92047a1f67510629a27edf49af4e5c606dd
assets/system_ref_audio_2.wav333.2 KB (341,192 B)71dc7a72205ae883bdc6dc04cc3e4ae5cc12df294a65d17099239711601cb17e28b7aa7b6149acd153b92fd0366c23902bd4f687
assets/token2wav/flow.pt594.6 MB (623,466,603 B)9d94d97d7b57d25e9d78c406260839eadcb4685715ccff24256ff61537c7f8b51e025116b83405f3fb017b54b008fc97da115446
assets/token2wav/flow.yaml1.1 KB (1,099 B)8638dca97881751e50c132498acbfa41ecf74d6f723295d37bf11f5f1b896ca4f2f4c81ebc2fbb3e51b753c2507ef8461c751486
assets/token2wav/hift.pt79.5 MB (83,390,254 B)8f059cd7d06516c52a62dfce1b18ae25e79c70ec3386cc880324d4e98e05987b99107f49e40ed925b8ecc87c1f4939432d429879
config.json6.3 KB (6,439 B)e432e235513e707b58c4e2055b9d6dc94fc1b22db0c03cf9f0cfc1178ade50e4ba62727ca7a77aa6a6a71eda6668d8f289e96c1d
configuration_minicpmo.py9.9 KB (10,135 B)5bd97d9b4d6aadb1adb9757a107484e8ee6b9ea2b0c56c192d4aa57d3dc358338a4a93413b8b68e7c7a7c5b82a5af35afab1d86a
generation_config.json178 B (178 B)6e2cfc9f6f67a9cb1ede9375dc2abf42df55f84bcf29e6aecb72503bd220cccb6d86bde84a9f57e77c741dedb8670036106e2119
merges.txt1.3 MB (1,402,109 B)90d3d82d027eadcc6a5e77c38eb82d43fc51b53bac8ff86a72bee70828fbc1119bc4398c6f3a9a6e490d7b0dbe917be025478bd0
model-00001-of-00004.safetensors4.91 GB (5,273,477,136 B)5bf8a4ace85a3951a0bbfdd9a667e82f92f6976030c40b9a10386c1bc404568d8829e5aada2e3501d9de6fb46ff80451aff7e077
model-00002-of-00004.safetensors4.94 GB (5,301,855,080 B)fa6eefc0da43429469da8039a34890cffd84b9e4fe0faef420aca8f771bec1f9fcfaae01206c56b8e64e4429a1ff500c962fbf96
model-00003-of-00004.safetensors4.94 GB (5,301,855,048 B)368871c0ad689fc40dd69888ad02c5f20f45432c5d0b20153f9bfa88ebcd1cb6bbd5b7cac4c217b3cafb137a291a1b380d8b7821
model-00004-of-00004.safetensors2.67 GB (2,866,549,964 B)42aeb35c98726eb0243e04049216206f68d0c8acf61addf4747c94fedcaee059e5d9918ed15543beec494404139a99f2f86c9b31
model.safetensors.index.json114.5 KB (117,202 B)0a6db9f6fae3c752056ffa2a42991d6e6e5b9cb1e578de05a95804bb15237a6fd7c236414e0160cd76751da82c9f7f0d134596e7
modeling_minicpmo.py209.3 KB (214,356 B)e9f61c093d6711793dfb629634cdca9fb900b2d025359f891d1aa81de16b51a24a97b8c8262b83ce3920c36b92be441fde8e4282
modeling_navit_siglip.py41.6 KB (42,559 B)58b991de066008f5dbf873e80e23e15fd5ddde2d1a40a58cb7dfa93f723685f860d1cf3caf3a0ecf52b7904db0c4007aacd1536f
preprocessor_config.json842 B (842 B)c56a32b8f1ad1afb2fb17dce37e4e64e99ef7e6e10350f12d5636b24e19265d72c5543b462251f54ca18afaa147f6f2ece9591e0
processing_minicpmo.py65.7 KB (67,284 B)e05383bf2541109661ffd7ce09f3d69ec51f47463a1f017339b92c2fa768d7737db76cc4689d2280b68a71866b06f7dedc8ac1c2
special_tokens_map.json11.7 KB (12,002 B)5365eeae71bc6006003c7c981576ced10d8ec59da119f5bb22d8818d33514e0b58a224c111bb8e7aa1702d625a23fbe82e6e86b5
tokenization_minicpmo_fast.py3.2 KB (3,249 B)5aa9932fdb825beaa25c1dddd59da426d4acfd63c9c71d0d7ef0c113829e2d810619c9e0a69cffe04c732c4d80599b40a33bc7bf
tokenizer.json10.9 MB (11,437,712 B)2b87a4da04f788ef39a27a0a0f7c7c31e8637d6d6d55eb34389b8c87403763cc1d80447d91c85c7cd39cd5e3c0dc2d49edad989d
tokenizer_config.json99.3 KB (101,726 B)d747bccb54853d1298ba1a6a52a3625f26ccdb65cb1325fdb3b0b9f38b64607399d3e163fbe32bf49c273c229755a0dbce83f813
utils.py93.5 KB (95,702 B)d68e1a82d022f885d7d2c88da9939aa14eea4e610372698343830d4a96524f56a91a8cabf628fd7c57dde8b25db43eed1f6042c1
vocab.json2.6 MB (2,776,833 B)4783fe10ac3adce15ac8f358ef5462739852c569ca10d7e9fb3ed18575dd1e277a2579c16d108e32f27439684afa0e10b1440910

Cite this release

Canonical URL
https://aiseedbank.org/models/openbmb_MiniCPM-o-4_5/
Slug
openbmb_MiniCPM-o-4_5
Infohash
dad3b31b7b371e607d43ca32069813112d63954f
License
apache-2.0
Signing key fingerprint
85a3b32c3712427b

Every file carries a locally computed sha256 — verify a download against the signed sums: openbmb_MiniCPM-o-4_5.SHA256SUMS (+ minisign signature).

Provenance

Upstream repositoryopenbmb/MiniCPM-o-4_5
Revision (pinned)503e754207c94da6bb26850b4469f367c9ea3582
Fetched at2026-09-04T04:50:34Z
License at fetchapache-2.0
Snapshot toolhuggingface · seedbank 0.1.0

Trackers

✓ verified · rehash-vs-hf-metadata at 2026-09-04T04:54:16Z

apache-2.018.18 GB (19,524,246,265 bytes)transformersonnxsafetensorsminicpmofeature-extractionminicpm-ominicpm-vmultimodalfull-duplexany-to-anycustom_codepaper: 2408.01800