Skip to page content
SAVRN
Search Plan a project

Open-weight model · Any to any

Realtime-Venus

by inclusionAI inclusionAI/Realtime-Venus

Realtime-Venus is an open-weight model for any to any from inclusionAI, released under Apache License 2.0. Its published files total 40.1 GB.

This repository hosts two checkpoints of the Realtime-Venus system: - Realtime-Venus-Omni (Realtime-Venus-Omni/): the 9B audio-visual interaction model.

Parameters—
Context—
Weights40.0 GB
Licenseapache-2.0
AccessOpen weights
Monthly Downloads—

Model Card

By inclusionAI, published under apache-2.0, revision d9c6836e791b.

This repository hosts two checkpoints of the Realtime-Venus system: - Realtime-Venus-Omni (Realtime-Venus-Omni/): the 9B audio-visual interaction model. It continuously watches and listens, decides whether and when to respond, and generates text and speech on a shared causal timeline. Adapted from MiniCPM-o 4.5, it supports proactive interaction, semantic interruption handling, and training-free long-video memory. - Realtime-Venus-Audio (Realtime-Venus-Audio/): the audio-focused checkpoint on the same streaming backbone, for audio understanding and audio-driven conversation with text or speech output. Both directories contain model weights and custom Hugging Face Transformers code. The…

Read inclusionAI's full model card

A full-duplex interaction system with asynchronous delegation

English | 简体中文

Realtime-Venus supports proactive audio-visual interaction, asynchronous delegation, and interruption-aware full-duplex dialogue.

1. Overview

This repository hosts two checkpoints of the Realtime-Venus system:

  • Realtime-Venus-Omni (Realtime-Venus-Omni/): the 9B audio-visual interaction model. It continuously watches and listens, decides whether and when to respond, and generates text and speech on a shared causal timeline. Adapted from MiniCPM-o 4.5, it supports proactive interaction, semantic interruption handling, and training-free long-video memory.
  • Realtime-Venus-Audio (Realtime-Venus-Audio/): the audio-focused checkpoint on the same streaming backbone, for audio understanding and audio-driven conversation with text or speech output.

Both directories contain model weights and custom Hugging Face Transformers code. The asynchronous Realtime-Venus-Harness and its external tool integrations live in the GitHub repository.

2. Highlights

  • Native full-duplex conversation: keeps perceiving while speaking and distinguishes backchannels, interruptions, corrections, and redirections.
  • Omni-Proactive interaction: continuously processes temporally aligned video and audio, and initiates a response when an event warrants it — without waiting for a user prompt.
  • Delegation: emits in-stream <delegate> requests on the shared causal timeline and consumes asynchronous backend results the same way, so external tasks never block the ongoing conversation. (Executing requests requires the Realtime-Venus-Harness runtime, available in the GitHub repository.)
  • Training-free long-video Memory: archives visually informative moments, retrieves query-relevant and non-redundant evidence, and reassembles the corresponding audio-visual context — no additional training required.
  • Text and speech output: generates response text together with native speech through the bundled Token2wav resources and a reference voice.

3. Model Details

Item Realtime-Venus-Omni Realtime-Venus-Audio
Parameters 9B 9B
Base architecture MiniCPM-o 4.5 / Omni-Flow MiniCPM-o 4.5 / Omni-Flow
Visual encoder SigLIP2 not used at inference
Audio encoder Whisper-Medium Whisper-Medium
Language backbone Qwen3-8B Qwen3-8B
Speech generation Discrete S3 speech tokens with a streaming flow-matching decoder same decoder, enabled in full-duplex mode
Inputs Video/images, audio, and text Audio and text
Outputs Text and optional speech waveform Text and speech waveform
Context length 40,960 tokens 40,960 tokens
Weight dtype BF16 BF16

4. Evaluation

All values are reported in the Realtime-Venus technical report.


Figure 1. Video and audio understanding results from the paper.


Figure 2. Full-duplex interaction results from the paper.

5. Repository Layout

.
├── Realtime-Venus-Omni/          # Audio-visual full-duplex checkpoint
│   ├── model-*.safetensors       # Sharded model weights
│   ├── config.json, *.py         # Model config and custom Transformers code
│   ├── realtime_venus_omni_memory.py  # Public Memory entry point
│   ├── memory_adapter/           # Chat and Duplex Memory runtime
│   ├── assets/                   # Reference voice, Token2wav, demo videos
│   └── requirements.txt
├── Realtime-Venus-Audio/         # Audio-focused checkpoint
│   ├── model-*.safetensors       # Sharded model weights
│   ├── config.json, *.py         # Model config and custom Transformers code
│   └── assets/                   # Reference voice, Token2wav, demo audio
├── assets/                   # Brand resources (logo)
├── README.md
├── README_zh.md
└── LICENSE

The examples below write generated media to output/. Use a new filename or a new output directory when repeating an experiment.

6. Installation

Requires Python 3.10, CUDA, and FFmpeg. Download the repository (the two checkpoints live in its sub-directories) and install the Python dependencies:

huggingface-cli download inclusionAI/Realtime-Venus --local-dir .
# or: modelscope download --model inclusionAI/Realtime-Venus --local_dir .

python -m pip install -r Realtime-Venus-Omni/requirements.txt

All example paths below are relative to the downloaded repository's root directory. The examples load the local Realtime-Venus-Omni/ and Realtime-Venus-Audio/ checkpoints through Hugging Face Transformers.

7. Realtime-Venus-Omni Usages

Runnable standalone versions of these examples live in the Omni cookbook on GitHub.

7.1 Model Initialization

The examples below share the following model initialization; run each example in a fresh Python process. Chat and Duplex automatically load the default reference voice.

Click to show Omni model loading code.
from pathlib import Path

import torch
from transformers import AutoModel, set_seed

Path("output").mkdir(exist_ok=True)
set_seed(42)
print("Loading model ...")
model = AutoModel.from_pretrained(
    "./Realtime-Venus-Omni",  # or an absolute path to the sub-directory
    trust_remote_code=True,
    local_files_only=True,
    attn_implementation="sdpa",
    torch_dtype=torch.bfloat16,
)
model.eval().cuda()
print("Model loaded.")

7.2 Duplex Omni Mode

model = model.as_duplex() switches the model to full-duplex streaming: prepare() initializes the session, then each second of input is handled by one streaming_prefill() + streaming_generate() pair, and as_simplex() switches back to offline mode. Set MAX_NUM_FRAMES before importing minicpmo.utils, otherwise videos longer than 64 seconds are truncated to the default frame cap.

Subtitle font note: Duplex examples burn the response text into the output video through FFmpeg/libass, which resolves fonts via fontconfig. Rendering non-Latin responses (e.g. Chinese) requires a CJK-capable font on the system, otherwise those glyphs show up as empty boxes. On any Linux distribution, install one without root and refresh the font cache:

mkdir -p ~/.local/share/fonts
curl --fail --location --retry 3 \
  --output ~/.local/share/fonts/NotoSansCJKsc-Regular.otf \
  https://raw.githubusercontent.com/notofonts/noto-cjk/main/Sans/OTF/SimplifiedChinese/NotoSansCJKsc-Regular.otf
fc-cache -f

Package-manager equivalents: apt install -y fonts-noto-cjk (Debian/Ubuntu) or yum install -y cjkuni-ukai-fonts cjkuni-uming-fonts (RHEL/Alibaba Cloud Linux). No code changes are needed.

7.2.1 Duplex Chat

Stream the demo video second by second and inject text questions at the seconds given by question_times (paired with questions). The model listens continuously and speaks when it answers.

Click to show the Duplex Chat code.
import os

os.environ["MAX_NUM_FRAMES"] = "100000"

from minicpmo.utils import get_video_frame_audio_segments, generate_duplex_video

model = model.as_duplex()  # switch to full-duplex streaming
model.prepare()

video_path = "Realtime-Venus-Omni/assets/sample_1_real.mp4"
# each question is injected at the corresponding second
question_times = [60, 128]
questions = [
    "What do you see in the video so far?",
    "What is the color of the cooler labeled PRIME near the team bench?",
]
question_plan = dict(zip(question_times, questions))
print(f"Extracting per-second audio and frames from {video_path} ...")
frames, audios, _ = get_video_frame_audio_segments(
    video_path, stack_frames=1, use_ffmpeg=True, adjust_audio_length=True
)
print(f"Streaming {len(audios)} seconds; questions are injected at {question_times}.")
results, output_audio = [], []
for second, (frame, audio) in enumerate(zip(frames, audios), start=1):
    model.streaming_prefill(
        audio_waveform=audio,
        frame_list=[frame] if frame is not None else None,
        text_list=[question_plan[second]] if second in question_plan else None,
    )
    result = model.streaming_generate()
    print(
        f"[{second}/{len(audios)}]",
        "listen..." if result["is_listen"] else f"speak> {result['text']}",
        flush=True,
    )
    results.append({"chunk_idx": second - 1, **result})
    if result["audio_waveform"] is not None:
        output_audio.append((second - 1, result["audio_waveform"]))

model = model.as_simplex()
print("Muxing the spoken responses into the output video ...")
generate_duplex_video(
    video_path=video_path,
    output_video_path="output/duplex_chat.mp4",
    results_log=results,
    timed_output_audio=output_audio,
)
7.2.2 Speech-In Duplex Chat

Same as above, except the question is spoken and already mixed into the video's audio track (at ~3 s, asking for an alert when the water boils), so no text is injected — the model must hear it.

Click to show the Speech-In Duplex Chat code.
import os

os.environ["MAX_NUM_FRAMES"] = "100000"

from minicpmo.utils import get_video_frame_audio_segments, generate_duplex_video

model = model.as_duplex()  # switch to full-duplex streaming
model.prepare()

video_path = "Realtime-Venus-Omni/assets/speech_in.mp4"
print(f"Extracting per-second audio and frames from {video_path} ...")
frames, audios, _ = get_video_frame_audio_segments(
    video_path, stack_frames=1, use_ffmpeg=True, adjust_audio_length=True
)
print(f"Streaming {len(audios)} seconds; the spoken question is already in the audio track.")
results, output_audio = [], []
for second, (frame, audio) in enumerate(zip(frames, audios), start=1):
    model.streaming_prefill(
        audio_waveform=audio,
        frame_list=[frame] if frame is not None else None,
    )
    result = model.streaming_generate()
    print(
        f"[{second}/{len(audios)}]",
        "listen..." if result["is_listen"] else result["text"],
        flush=True,
    )
    results.append({"chunk_idx": second - 1, **result})
    if result["audio_waveform"] is not None:
        output_audio.append((second - 1, result["audio_waveform"]))

model = model.as_simplex()
print("Muxing the spoken responses into the output video ...")
generate_duplex_video(
    video_path=video_path,
    output_video_path="output/duplex_speech_in_chat.mp4",
    results_log=results,
    timed_output_audio=output_audio,
)
7.2.3 Memory Duplex Chat

model.use_memory(memory_minutes=40) enables the long-video Memory before entering duplex mode.

Click to show the Memory Duplex Chat code.
import os

os.environ["MAX_NUM_FRAMES"] = "100000"

from minicpmo.utils import get_video_frame_audio_segments, generate_duplex_video

model.use_memory(memory_minutes=40)  # enable long-video memory
model = model.as_duplex()  # switch to full-duplex streaming
model.prepare()

video_path = "Realtime-Venus-Omni/assets/sample_1_real.mp4"
question = "What is the color of the cooler labeled PRIME near the team bench?"
print(f"Extracting per-second audio and frames from {video_path} ...")
frames, audios, _ = get_video_frame_audio_segments(
    video_path, stack_frames=1, use_ffmpeg=True, adjust_audio_length=True
)
print(f"Streaming {len(audios)} seconds; the text question is injected at second 128.")
results, output_audio = [], []
for second, (frame, audio) in enumerate(zip(frames, audios), start=1):
    model.streaming_prefill(
        audio_waveform=audio,
        frame_list=[frame] if frame is not None else None,
        text_list=[question] if second == 128 else None,
    )
    result = model.streaming_generate()
    print(
        f"[{second}/{len(audios)}]",
        "listen..." if result["is_listen"] else f"speak> {result['text']}",
        flush=True,
    )
    results.append({"chunk_idx": second - 1, **result})
    if result["audio_waveform"] is not None:
        output_audio.append((second - 1, result["audio_waveform"]))

model = model.as_simplex()
print("Muxing the spoken responses into the output video ...")
generate_duplex_video(
    video_path=video_path,
    output_video_path="output/duplex_memory_chat.mp4",
    results_log=results,
    timed_output_audio=output_audio,
)

7.3 Half-Duplex Omni Mode

model.chat(...) answers one turn at a time over the whole video. model.init_tts() enables speech output.

7.3.1 Offline Chat

Sampled frames, per-second audio, and the question go into a single chat() call. The 128-frame cap (MAX_NUM_FRAMES) limits the visual load, while max_inp_length=32768 sets the input-token budget. Full audio is still retained, so very long videos can exceed that budget even with frame sampling.

Click to show the Offline Chat code.
import os

os.environ.setdefault("MAX_NUM_FRAMES", "128")

from minicpmo.utils import get_video_frame_audio_segments

model.init_tts()  # enable speech output

video_path = "Realtime-Venus-Omni/assets/sample_1_real.mp4"
question = "What is the color of the cooler labeled PRIME near the team bench?"
print(f"Extracting audio and frames from {video_path} ...")
frames, audios, _ = get_video_frame_audio_segments(
    video_path, stack_frames=1
)
content = []
for frame, audio in zip(frames, audios):
    if frame is not None:
        content.append(frame)
    content.append(audio)
content.append(question)

print("Running chat inference ...")
response = model.chat(
    msgs=[{"role": "user", "content": content}],
    max_new_tokens=4096,
    max_inp_length=32768,
    do_sample=True,
    temperature=0.7,
    use_image_id=False,
    max_slice_nums=1,
    use_tts_template=True,
    enable_thinking=False,
    omni_mode=True,
    generate_audio=True,
    output_audio_path="output/offline_chat.wav",
)
print(response)
7.3.2 Memory Offline Chat

model.use_memory() enables Memory before the chat call; retrieval selects up to 96 historical frames plus 4 recent frames, each with ±1 s of audio.

Click to show the Memory Offline Chat code.
import os

os.environ["MAX_NUM_FRAMES"] = "100000"

from minicpmo.utils import get_video_frame_audio_segments

model.use_memory()  # enable long-video memory
model.init_tts()  # enable speech output

video_path = "Realtime-Venus-Omni/assets/sample_1_real.mp4"
question = "What is the color of the cooler labeled PRIME near the team bench?"
print(f"Extracting audio and frames from {video_path} ...")
frames, audios, _ = get_video_frame_audio_segments(
    video_path, stack_frames=1, use_ffmpeg=True, adjust_audio_length=True
)
content = []
for frame, audio in zip(frames, audios):
    if frame is not None:
        content.append(frame)
    content.append(audio)
content.append(question)

print("Running chat inference ...")
response = model.chat(
    msgs=[{"role": "user", "content": content}],
    max_new_tokens=4096,
    max_inp_length=32768,
    do_sample=True,
    temperature=0.7,
    use_image_id=False,
    max_slice_nums=1,
    use_tts_template=True,
    enable_thinking=False,
    omni_mode=True,
    generate_audio=True,
    output_audio_path="output/offline_memory_chat.wav",
)
print(response)

8. Realtime-Venus-Audio Usages

Runnable standalone versions of these examples live in the Audio cookbook on GitHub.

The Audio checkpoint runs audio-only inference in two ways: turn-based model.chat (text response) and the full-duplex streaming API (spoken response). Inputs are decoded as 16 kHz mono audio from any audio or video file.

8.1 Model Initialization

Speech output is enabled with init_tts=True so the same model serves both examples; use init_tts=False for text-only chat to load faster.

Click to show Audio model loading code.
from pathlib import Path

import torch
from transformers import AutoModel, AutoTokenizer, set_seed

Path("output").mkdir(exist_ok=True)
set_seed(42)
print("Loading model ...")
tokenizer = AutoTokenizer.from_pretrained(
    "./Realtime-Venus-Audio", trust_remote_code=True, local_files_only=True,
    fix_mistral_regex=True,
)
model = AutoModel.from_pretrained(
    "./Realtime-Venus-Audio",
    trust_remote_code=True,
    local_files_only=True,
    attn_implementation="sdpa",
    torch_dtype=torch.bfloat16,
    init_vision=False,  # audio-only usage
    init_audio=True,
    init_tts=True,      # speech output; set False for text-only chat
).eval().cuda()
print("Model loaded.")

8.2 Offline Chat

One deterministic turn over the full audio input: the audio (plus an optional text instruction) goes into a single model.chat() call.

Click to show the Offline Chat code.
import librosa

print("Loading audio ...")
audio, _ = librosa.load(
    "Realtime-Venus-Audio/assets/case_offline.wav", sr=16000, mono=True
)
msgs = [
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": [audio, "What is the speaker asking about?"]},
]

print("Running chat inference ...")
answer = model.chat(
    msgs=msgs,
    tokenizer=tokenizer,
    do_sample=False,
    max_new_tokens=2048,
    enable_thinking=False,
    use_tts_template=True,
    generate_audio=False,
)
print(answer)

8.3 Duplex Chat

model.as_duplex(generate_audio=True) switches to full-duplex streaming: audio is fed second by second, the model listens continuously and speaks when it answers. The example appends 10 s of trailing silence so the model can finish its response after the input ends, and writes the generated speech to output/audio_full_duplex.wav.

Click to show the Duplex Chat code.
import librosa
import numpy as np
import soundfile as sf

duplex = model.as_duplex(generate_audio=True)  # full-duplex with speech output
duplex.prepare(prompt_wav_path="Realtime-Venus-Audio/assets/HT_ref_audio.wav")

audio, _ = librosa.load(
    "Realtime-Venus-Audio/assets/case_duplex.wav", sr=16000, mono=True
)
audio = np.concatenate([audio, np.zeros(10 * 16000, dtype=np.float32)])

chunk_samples = int(duplex.CHUNK_MS * duplex.SAMPLE_RATE / 1000)
total_chunks = max(1, (len(audio) + chunk_samples - 1) // chunk_samples)
timed_audio = []
for chunk_index in range(total_chunks):
    chunk = audio[chunk_index * chunk_samples:(chunk_index + 1) * chunk_samples]
    if len(chunk) < chunk_samples:
        chunk = np.pad(chunk, (0, chunk_samples - len(chunk)))
    duplex.streaming_prefill(audio_waveform=chunk)
    result = duplex.streaming_generate(
        max_new_speak_tokens_per_chunk=20,
        decode_mode="sampling",
        temperature=0.7,
        top_k=20,
        top_p=0.8,
        listen_prob_scale=1.0,
    )
    state = "listen" if result["is_listen"] else f"speak> {result['text']}"
    print(f"[{chunk_index + 1}/{total_chunks}] {state}", flush=True)
    if result["audio_waveform"] is not None and not result["is_listen"]:
        timed_audio.append((chunk_index, result["audio_waveform"]))

# stitch the generated speech on its original timeline (24 kHz)
sample_rate = 24000
total_samples = max(
    t * sample_rate + len(np.asarray(w, dtype=np.float32).squeeze())
    for t, w in timed_audio
)
output = np.zeros(total_samples, dtype=np.float32)
for t, waveform in timed_audio:
    w = np.asarray(waveform, dtype=np.float32).squeeze()
    output[t * sample_rate: t * sample_rate + len(w)] += w
sf.write("output/audio_full_duplex.wav", np.clip(output, -1.0, 1.0), sample_rate)
print("Saved generated speech to output/audio_full_duplex.wav")

9. Citation

If you find Realtime-Venus useful, please cite the technical report:

@article{zhao2026realtime,
  title={{Realtime-Venus}: A full-duplex interaction system with asynchronous delegation},
  author={{Venus Team(Ant Group), Tsinghua University}},
  journal={arXiv preprint arXiv:2609.13814},
  year={2026}
}

10. License

This repository includes an Apache License 2.0. Please also review the licenses and acceptable-use terms of the upstream model, third-party libraries, and any data used with this checkpoint.

Identity and Version

Repository
inclusionAI/Realtime-Venus
Publisher
inclusionAI
Task
Any to any
Modality
Multimodal
Library
transformers
Parameters
Not stated by the source
Languages
en, zh
Revision
d9c6836e791b6a7aa44ed315cbe99cf661e6a144
First published
2026-09-16
Last updated
2026-09-20

Files and Weights

123 files, 40.1 GB in total. The weights are 16 files totalling 40.0 GB in onnx, pt, safetensors.

Weights16 files · 40.0 GB
Configuration80 files · 1.7 MB
Tokenizer8 files · 26.2 MB
Documentation7 files · 70.4 KB
Other11 files · 101.6 MB
Repository1 file · 2.1 KB
Every file
FileTypeSizeSHA-256
Realtime-Venus-Audio/assets/token2wav/campplus.onnxWeights28.3 MB a6ac6a639977
Realtime-Venus-Audio/assets/token2wav/flow.ptWeights623.5 MB 15ccff24256f
Realtime-Venus-Audio/assets/token2wav/hift.ptWeights83.4 MB 3386cc880324
Realtime-Venus-Audio/assets/token2wav/speech_tokenizer_v2_25hz.onnxWeights496.1 MB d43342aa1216
Realtime-Venus-Audio/model-00001-of-00004.safetensorsWeights4.9 GB dc11f3b0ed78
Realtime-Venus-Audio/model-00002-of-00004.safetensorsWeights4.9 GB bb0d68f6a34d
Realtime-Venus-Audio/model-00003-of-00004.safetensorsWeights5.0 GB 6377dca09d44
Realtime-Venus-Audio/model-00004-of-00004.safetensorsWeights3.9 GB 188d68d0d177
Realtime-Venus-Omni/assets/token2wav/campplus.onnxWeights28.3 MB a6ac6a639977
Realtime-Venus-Omni/assets/token2wav/flow.ptWeights623.5 MB 15ccff24256f
Realtime-Venus-Omni/assets/token2wav/hift.ptWeights83.4 MB 3386cc880324
Realtime-Venus-Omni/assets/token2wav/speech_tokenizer_v2_25hz.onnxWeights496.1 MB d43342aa1216
Realtime-Venus-Omni/model-00001-of-00004.safetensorsWeights4.9 GB aa081fede0fc
Realtime-Venus-Omni/model-00002-of-00004.safetensorsWeights4.9 GB 0e832a68ebf8
Realtime-Venus-Omni/model-00003-of-00004.safetensorsWeights5.0 GB 4cf18d039305
Realtime-Venus-Omni/model-00004-of-00004.safetensorsWeights3.9 GB 9eb43ba115c0
Realtime-Venus-Audio/added_tokens.jsonConfiguration2.8 KB —
Realtime-Venus-Audio/assets/token2wav/flow.yamlConfiguration1.1 KB —
Realtime-Venus-Audio/config.jsonConfiguration7.2 KB —
Realtime-Venus-Audio/configuration_minicpmo.pyConfiguration10.2 KB —
Realtime-Venus-Audio/generation_config.jsonConfiguration214 B —
Realtime-Venus-Audio/model.safetensors.index.jsonConfiguration117.2 KB —
Realtime-Venus-Audio/modeling_minicpmo.pyConfiguration213.6 KB —
Realtime-Venus-Audio/modeling_navit_siglip.pyConfiguration42.6 KB —
Realtime-Venus-Audio/preprocessor_config.jsonConfiguration1.2 KB —
Realtime-Venus-Audio/processing_minicpmo.pyConfiguration67.3 KB —
Realtime-Venus-Audio/processor_config.jsonConfiguration127 B —
Realtime-Venus-Audio/special_tokens_map.jsonConfiguration2.3 KB —
Realtime-Venus-Audio/tokenization_minicpmo_fast.pyConfiguration3.3 KB —
Realtime-Venus-Audio/utils.pyConfiguration95.8 KB —
Realtime-Venus-Omni/added_tokens.jsonConfiguration2.8 KB —
Realtime-Venus-Omni/assets/token2wav/flow.yamlConfiguration1.1 KB —
Realtime-Venus-Omni/config.jsonConfiguration6.6 KB —
Realtime-Venus-Omni/configuration_realtime_venus_omni.pyConfiguration10.3 KB —
Realtime-Venus-Omni/generation_config.jsonConfiguration178 B —
Realtime-Venus-Omni/memory_adapter/__init__.pyConfiguration366 B —
Realtime-Venus-Omni/memory_adapter/model_adapter.pyConfiguration23.3 KB —
Realtime-Venus-Omni/memory_adapter/omni_memory/__init__.pyConfiguration133 B —
Realtime-Venus-Omni/memory_adapter/omni_memory/_engine_config.pyConfiguration18.1 KB —
Realtime-Venus-Omni/memory_adapter/omni_memory/_engine_schema.pyConfiguration6.0 KB —
Realtime-Venus-Omni/memory_adapter/omni_memory/chat/__init__.pyConfiguration164 B —
Realtime-Venus-Omni/memory_adapter/omni_memory/chat/complete_media.pyConfiguration13.4 KB —
Realtime-Venus-Omni/memory_adapter/omni_memory/chat/engine/__init__.pyConfiguration128 B —
Realtime-Venus-Omni/memory_adapter/omni_memory/chat/engine/adapters/__init__.pyConfiguration129 B —
Realtime-Venus-Omni/memory_adapter/omni_memory/chat/engine/adapters/realtime_venus_omni.pyConfiguration64.5 KB —
Realtime-Venus-Omni/memory_adapter/omni_memory/chat/engine/adapters/selected_sequence.pyConfiguration4.4 KB —
Realtime-Venus-Omni/memory_adapter/omni_memory/chat/engine/adapters/sequence_assembler.pyConfiguration15.2 KB —
Realtime-Venus-Omni/memory_adapter/omni_memory/chat/engine/data/__init__.pyConfiguration121 B —
Realtime-Venus-Omni/memory_adapter/omni_memory/chat/engine/data/sampling.pyConfiguration646 B —
Realtime-Venus-Omni/memory_adapter/omni_memory/chat/engine/memory/__init__.pyConfiguration134 B —
Realtime-Venus-Omni/memory_adapter/omni_memory/chat/engine/memory/audio_context.pyConfiguration9.0 KB —
Realtime-Venus-Omni/memory_adapter/omni_memory/chat/engine/memory/experimental_retrieval.pyConfiguration17.9 KB —
Realtime-Venus-Omni/memory_adapter/omni_memory/chat/engine/memory/online_manager.pyConfiguration4.2 KB —
Realtime-Venus-Omni/memory_adapter/omni_memory/chat/engine/memory/retrieval.pyConfiguration4.1 KB —
Realtime-Venus-Omni/memory_adapter/omni_memory/chat/engine/memory/scoring.pyConfiguration14.4 KB —
Realtime-Venus-Omni/memory_adapter/omni_memory/chat/engine/memory/semantic.pyConfiguration3.0 KB —
Realtime-Venus-Omni/memory_adapter/omni_memory/chat/engine/memory/types.pyConfiguration3.7 KB —
Realtime-Venus-Omni/memory_adapter/omni_memory/chat/engine/preencoding_gating/__init__.pyConfiguration148 B —
Realtime-Venus-Omni/memory_adapter/omni_memory/chat/engine/preencoding_gating/decision.pyConfiguration6.1 KB —
Realtime-Venus-Omni/memory_adapter/omni_memory/chat/engine/preencoding_gating/matching.pyConfiguration31.3 KB —
Realtime-Venus-Omni/memory_adapter/omni_memory/chat/engine/preencoding_gating/triton_matching.pyConfiguration10.2 KB —
Realtime-Venus-Omni/memory_adapter/omni_memory/chat/engine/preencoding_gating/types.pyConfiguration1.5 KB —
Realtime-Venus-Omni/memory_adapter/omni_memory/chat/model_adapter.pyConfiguration5.8 KB —
Realtime-Venus-Omni/memory_adapter/omni_memory/chat/pcost.pyConfiguration5.9 KB —
Realtime-Venus-Omni/memory_adapter/omni_memory/chat/runtime.pyConfiguration16.0 KB —
Realtime-Venus-Omni/memory_adapter/omni_memory/config.pyConfiguration23.1 KB —
Realtime-Venus-Omni/memory_adapter/omni_memory/duplex/__init__.pyConfiguration170 B —
Realtime-Venus-Omni/memory_adapter/omni_memory/duplex/answer_handle.pyConfiguration3.4 KB —
Realtime-Venus-Omni/memory_adapter/omni_memory/duplex/async_commit.pyConfiguration4.6 KB —
Realtime-Venus-Omni/memory_adapter/omni_memory/duplex/engine/__init__.pyConfiguration269 B —
Realtime-Venus-Omni/memory_adapter/omni_memory/duplex/engine/audio_context.pyConfiguration5.8 KB —
Realtime-Venus-Omni/memory_adapter/omni_memory/duplex/engine/config.pyConfiguration8.4 KB —
Realtime-Venus-Omni/memory_adapter/omni_memory/duplex/engine/duplex_scheduler.pyConfiguration17.2 KB —
Realtime-Venus-Omni/memory_adapter/omni_memory/duplex/engine/events.pyConfiguration15.2 KB —
Realtime-Venus-Omni/memory_adapter/omni_memory/duplex/engine/input_audio_state.pyConfiguration3.0 KB —
Realtime-Venus-Omni/memory_adapter/omni_memory/duplex/engine/kv_cache.pyConfiguration37.2 KB —
Realtime-Venus-Omni/memory_adapter/omni_memory/duplex/engine/memory.pyConfiguration21.3 KB —
Realtime-Venus-Omni/memory_adapter/omni_memory/duplex/engine/model_adapter.pyConfiguration46.0 KB —
Realtime-Venus-Omni/memory_adapter/omni_memory/duplex/engine/pcost.pyConfiguration10.8 KB —
Realtime-Venus-Omni/memory_adapter/omni_memory/duplex/engine/pipeline.pyConfiguration20.9 KB —
Realtime-Venus-Omni/memory_adapter/omni_memory/duplex/media.pyConfiguration488 B —
Realtime-Venus-Omni/memory_adapter/omni_memory/duplex/output_arbiter.pyConfiguration2.1 KB —
Realtime-Venus-Omni/memory_adapter/omni_memory/duplex/proactive_adapter.pyConfiguration8.7 KB —
Realtime-Venus-Omni/memory_adapter/omni_memory/duplex/proactive_runtime.pyConfiguration13.8 KB —
Realtime-Venus-Omni/memory_adapter/omni_memory/duplex/runtime.pyConfiguration25.3 KB —
Realtime-Venus-Omni/memory_adapter/omni_memory/schema.pyConfiguration6.8 KB —
Realtime-Venus-Omni/memory_adapter/omni_memory/session.pyConfiguration6.9 KB —
Realtime-Venus-Omni/model.safetensors.index.jsonConfiguration117.2 KB —
Realtime-Venus-Omni/modeling_navit_siglip.pyConfiguration42.6 KB —
Realtime-Venus-Omni/modeling_realtime_venus_omni.pyConfiguration226.6 KB —
Realtime-Venus-Omni/preprocessor_config.jsonConfiguration929 B —
Realtime-Venus-Omni/processing_realtime_venus_omni.pyConfiguration67.4 KB —
Realtime-Venus-Omni/realtime_venus_omni_memory.pyConfiguration3.5 KB —
Realtime-Venus-Omni/special_tokens_map.jsonConfiguration12.6 KB —
Realtime-Venus-Omni/tokenization_realtime_venus_omni_fast.pyConfiguration3.3 KB —
Realtime-Venus-Omni/utils.pyConfiguration95.7 KB —
LEGAL.mdDocumentation572 B —
LICENSEDocumentation11.3 KB —
README.mdDocumentation23.3 KB —
README_zh.mdDocumentation23.0 KB —
Realtime-Venus-Audio/NOTICEDocumentation364 B —
Realtime-Venus-Omni/LICENSEDocumentation11.3 KB —
Realtime-Venus-Omni/NOTICEDocumentation474 B —
Realtime-Venus-Audio/assets/HT_ref_audio.wavOther192.6 KB cb8f06ba5080
Realtime-Venus-Audio/assets/case_duplex.wavOther1.8 MB b5adc85ed4ee
Realtime-Venus-Audio/assets/case_offline.wavOther245.8 KB cab2cfdc3387
Realtime-Venus-Audio/chat_template.jinjaOther4.2 KB —
Realtime-Venus-Omni/assets/HT_ref_audio.wavOther192.6 KB cb8f06ba5080
Realtime-Venus-Omni/assets/sample_1_real.mp4Other95.8 MB ba1aa1242318
Realtime-Venus-Omni/assets/speech_in.mp4Other1.7 MB d44faf7742d6
Realtime-Venus-Omni/requirements.txtOther871 B —
assets/paper-duplex.svgOther400.6 KB —
assets/paper-understanding.svgOther524.9 KB —
assets/venus-logo-white.gifOther791.6 KB 38027538b9fc
.gitattributesRepository2.1 KB —
Realtime-Venus-Audio/merges.txtTokenizer1.7 MB —
Realtime-Venus-Audio/tokenizer.jsonTokenizer11.4 MB 6d694bbb227b
Realtime-Venus-Audio/tokenizer_config.jsonTokenizer22.0 KB —
Realtime-Venus-Audio/vocab.jsonTokenizer2.8 MB —
Realtime-Venus-Omni/merges.txtTokenizer1.4 MB —
Realtime-Venus-Omni/tokenizer.jsonTokenizer6.0 MB —
Realtime-Venus-Omni/tokenizer_config.jsonTokenizer102.5 KB —
Realtime-Venus-Omni/vocab.jsonTokenizer2.8 MB —

License and Download

License
apache-2.0
Access
Open weights, no gate
Download size
40.0 GB
Download from inclusionAI

Released by inclusionAI through its official repository on Hugging Face. Read the license.

Built From

  • Described by arXiv:2609.13814

Memory Requirements

PrecisionWeights in memory
As published40.0 GB

Weights only, from the published parameter count; the key-value cache and runtime add to this.

Built on This Model

Questions About Realtime-Venus

Can I use Realtime-Venus commercially?

Yes. Realtime-Venus is released under Apache License 2.0. The Apache License 2.0 is a permissive open-source license. It permits commercial use, modification and redistribution. It requires keeping the license and copyright notices and any NOTICE file, stating significant changes, and it includes an express patent grant from contributors.

Similar Models

Model · Any to any

gemma-4-12B-it-qat-GGUF

Unsloth AI

This model ships a Multi-Token Prediction drafter at the repo root (mtp-gemma-4-12B-it.gguf, a near-lossless smart Q40). A recent llama.cpp auto-discovers it from -hf, so you do not pass --model-draft: The drafter shares the target's KV cache and does not change the output (the target verifies every drafted token). See the MTP/ folder for the other precisions and explicit usage. Gemma is a family of open models built by Google DeepMind. Gemma 4 models are multimodal, handling text and image input (with audio supported on E2B, E4B, and 12B) and generating text output. This release includes open-weights models in both pre-trained and instruction-tuned variants. Gemma 4 features a context…

Open weights apache-2.0 transformers

Model · Any to any

gemma-4-E4B-it-GGUF

GGML Org

Run with https://llama.app - https://huggingface.co/google/gemma-4-E4B-it - https://huggingface.co/google/gemma-4-E4B-it-assistant - https://huggingface.co/google/gemma-4-E4B-it-qat-q40-unquantized-assistant - https://huggingface.co/google/gemma-4-E4B-it-qat-q40-unquantized - add info - add dflash

Open weights apache-2.0

Model · Any to any

gemma-4-12B-it-qat-q4_0-gguf

Google

Gemma is a family of open models built by Google DeepMind. Gemma 4 models are multimodal, handling text and image input (with audio supported on E2B, E4B, and 12B) and generating text output. This release includes open-weights models in both pre-trained and instruction-tuned variants. Gemma 4 features a context window of up to 256K tokens and maintains multilingual support in over 140 languages. Featuring both Dense and Mixture-of-Experts (MoE) architectures, Gemma 4 is well-suited for tasks like text generation, coding, and reasoning. The models are available in five distinct sizes: E2B, E4B, 12B, 26B A4B, and 31B. Their diverse sizes make them deployable in environments ranging from…

Open weights apache-2.0 transformers

Model · Any to any

gemma-4-E4B-it-qat-q4_0-gguf

Google

Gemma is a family of open models built by Google DeepMind. Gemma 4 models are multimodal, handling text and image input (with audio supported on E2B, E4B, and 12B) and generating text output. This release includes open-weights models in both pre-trained and instruction-tuned variants. Gemma 4 features a context window of up to 256K tokens and maintains multilingual support in over 140 languages. Featuring both Dense and Mixture-of-Experts (MoE) architectures, Gemma 4 is well-suited for tasks like text generation, coding, and reasoning. The models are available in five distinct sizes: E2B, E4B, 12B, 26B A4B, and 31B. Their diverse sizes make them deployable in environments ranging from…

Open weights apache-2.0

Model · Any to any

gemma-4-E4B-it-qat-GGUF

Unsloth AI

This model ships a Multi-Token Prediction drafter at the repo root (mtp-gemma-4-E4B-it.gguf, a near-lossless smart Q40). A recent llama.cpp auto-discovers it from -hf, so you do not pass --model-draft: The drafter shares the target's KV cache and does not change the output (the target verifies every drafted token). See the MTP/ folder for the other precisions and explicit usage. Gemma is a family of open models built by Google DeepMind. Gemma 4 models are multimodal, handling text and image input (with audio supported on E2B, E4B, and 12B) and generating text output. This release includes open-weights models in both pre-trained and instruction-tuned variants. Gemma 4 features a context…

Open weights apache-2.0 131,072 tokens transformers

Model · Any to any

gemma-4-E2B-it-qat-GGUF

Unsloth AI

This model ships a Multi-Token Prediction drafter at the repo root (mtp-gemma-4-E2B-it.gguf, a near-lossless smart Q40). A recent llama.cpp auto-discovers it from -hf, so you do not pass --model-draft: The drafter shares the target's KV cache and does not change the output (the target verifies every drafted token). See the MTP/ folder for the other precisions and explicit usage. Gemma is a family of open models built by Google DeepMind. Gemma 4 models are multimodal, handling text and image input (with audio supported on E2B, E4B, and 12B) and generating text output. This release includes open-weights models in both pre-trained and instruction-tuned variants. Gemma 4 features a context…

Open weights apache-2.0 131,072 tokens transformers