alt.freeweights.qwen / Qwen3-Omni-30B-A3B-Thinking
From: Qwen <huggingface.co/Qwen>Newsgroups: alt.freeweights.qwenSubject:

Qwen3-Omni-30B-A3B-Thinking

Date: 2026-11-15Commit: 2f443cfSigned: 2DC28CC7B26A283B ✓

Any to any model with 31.7B parameters. Safetensors weights, 63.4 GB in all. Published by Qwen under Apache-2.0.

31.7B params63.4GBQwen3-Omni-30B-A3B-Thinkingsafetensorspermissive
FactsParams31.7BSize63.4 GBFormatssafetensorsTaskany to anyLicenseApache-2.0From sourcepermissive
$ fw get Qwen/Qwen3-Omni-30B-A3B-Thinking
# manifest sha256 4622752d4c4e… · 63.4 GB · 26 files
$ fw verify ./Qwen3-Omni-30B-A3B-Thinking Qwen/Qwen3-Omni-30B-A3B-Thinking
From sourceHosted (signed)Qwen/Qwen3-Omni-30B-A3B-ThinkingLast check: 2026-11-15 00:15 UTC

Get help: custom fine-tune or private deploy. We review your setup before we quote.

Works with

Runs with

Ranked by fit to this model (safetensors), then by GitHub stars.

Overview

Size
63.4 GB
Weights
63.4 GB (safetensors)
Parameters
31.7B
Formats
safetensors
Task
any to any
License
Apache-2.0 (permissive)
Files
26, each with a sha256
Publisher
Qwen
Added
2026-11-15
Section
alt.freeweights.qwen
Lineage

Original release from the publisher.

Where these bytes come from
Publisher at the pinned commit→You

Sources are tried in order. A file counts only when its size and sha256 match the manifest. Sources are checked when you ask for them, not on a timer.

Sources
BadgeHostLast checkResult
From sourcehuggingface.co2026-11-15 00:15 UTCpassed

Model card

From the publisher at commit 2f443cf. Shown as plain text with links; images open at the publisher.

Qwen3-Omni#

Chat

Overview#

Introduction#

Image: image

Qwen3-Omni is the natively end-to-end multilingual omni-modal foundation models. It processes text, images, audio, and video, and delivers real-time streaming responses in both text and natural speech. We introduce several architectural upgrades to improve performance and efficiency. Key features:

  • State-of-the-art across modalities: Early text-first pretraining and mixed multimodal training provide native multimodal support. While achieving strong audio and audio-video results, unimodal text and image performance does not regress. Reaches SOTA on 22 of 36 audio/video benchmarks and open-source SOTA on 32 of 36; ASR, audio understanding, and voice conversation performance is comparable to Gemini 2.5 Pro.
  • Multilingual: Supports 119 text languages, 19 speech input languages, and 10 speech output languages.
    • Speech Input: English, Chinese, Korean, Japanese, German, Russian, Italian, French, Spanish, Portuguese, Malay, Dutch, Indonesian, Turkish, Vietnamese, Cantonese, Arabic, Urdu.
    • Speech Output: English, Chinese, French, German, Russian, Italian, Spanish, Portuguese, Japanese, Korean.
  • Novel Architecture: MoE-based Thinker–Talker design with AuT pretraining for strong general representations, plus a multi-codebook design that drives latency to a minimum.
  • Real-time Audio/Video Interaction: Low-latency streaming with natural turn-taking and immediate text or speech responses.
  • Flexible Control: Customize behavior via system prompts for fine-grained control and easy adaptation.
  • Detailed Audio Captioner: Qwen3-Omni-30B-A3B-Captioner is now open source: a general-purpose, highly detailed, low-hallucination audio captioning model that fills a critical gap in the open-source community.
Model Architecture#

Image: image

Cookbooks for Usage Cases#

Qwen3-Omni supports a wide range of multimodal application scenarios, covering various domain tasks involving audio, image, video, and audio-visual modalities. Below are several cookbooks demonstrating the usage cases of Qwen3-Omni and these cookbooks include our actual execution logs. You can first follow the QuickStart guide to download the model and install the necessary inference environment dependencies, then run and experiment locally—try modifying prompts or switching model types, and enjoy exploring the capabilities of Qwen3-Omni!

| Category | Cookbook | Description | Open

| Audio | Speech Recognition | Speech recognition, supporting multiple languages and long audio. | Open In Colab

| Speech Translation | Speech-to-Text / Speech-to-Speech translation. | Open In Colab

| Music Analysis | Detailed analysis and appreciation of any music, including style, genre, rhythm, etc. | Open In Colab

| Sound Analysis | Description and analysis of various sound effects and audio signals. | Open In Colab

| Audio Caption | Audio captioning, detailed description of any audio input. | Open In Colab

| Mixed Audio Analysis | Analysis of mixed audio content, such as speech, music, and environmental sounds. | Open In Colab

| Visual | OCR | OCR for complex images. | Open In Colab

| Object Grounding | Target detection and grounding. | Open In Colab

| Image Question | Answering arbitrary questions about any image. | Open In Colab

| Image Math | Solving complex mathematical problems in images, highlighting the capabilities of the Thinking model. | Open In Colab

| Video Description | Detailed description of video content. | Open In Colab

| Video Navigation | Generating navigation commands from first-person motion videos. | Open In Colab

| Video Scene Transition | Analysis of scene transitions in videos. | Open In Colab

| Audio-Visual | Audio Visual Question | Answering arbitrary questions in audio-visual scenarios, demonstrating the model's ability to model temporal alignment between audio and video. | Open In Colab

| Audio Visual Interaction | Interactive communication with the model using audio-visual inputs, including task specification via audio. | Open In Colab

| Audio Visual Dialogue | Conversational interaction with the model using audio-visual inputs, showcasing its capabilities in casual chat and assistant-like behavior. | Open In Colab

| Agent | Audio Function Call | Using audio input to perform function calls, enabling agent-like behaviors. | Open In Colab

| Downstream Task Fine-tuning | Omni Captioner | Introduction and capability demonstration of Qwen3-Omni-30B-A3B-Captioner, a downstream fine-tuned model based on Qwen3-Omni-30B-A3B-Instruct, illustrating the strong generalization ability of the Qwen3-Omni foundation model. | Open In Colab

QuickStart#

Model Description and Download#

Below is the description of all Qwen3-Omni models. Please select and download the model that fits your needs.

Model NameDescription
Qwen3-Omni-30B-A3B-InstructThe Instruct model of Qwen3-Omni-30B-A3B, containing both thinker and talker, supporting audio, video, and text input, with audio and text output. For more information, please read the Qwen3-Omni Technical Report.
Qwen3-Omni-30B-A3B-ThinkingThe Thinking model of Qwen3-Omni-30B-A3B, containing the thinker component, equipped with chain-of-thought reasoning, supporting audio, video, and text input, with text output. For more information, please read the Qwen3-Omni Technical Report.
Qwen3-Omni-30B-A3B-CaptionerA downstream audio fine-grained caption model fine-tuned from Qwen3-Omni-30B-A3B-Instruct, which produces detailed, low-hallucination captions for arbitrary audio inputs. It contains the thinker, supporting audio input and text output. For more information, you can refer to the model's cookbook.

During loading in Hugging Face Transformers or vLLM, model weights will be automatically downloaded based on the model name. However, if your runtime environment is not conducive to downloading weights during execution, you can refer to the following commands to manually download the model weights to a local directory:

# Download through ModelScope (recommended for users in Mainland China)
pip install -U modelscope
modelscope download --model Qwen/Qwen3-Omni-30B-A3B-Instruct --local_dir ./Qwen3-Omni-30B-A3B-Instruct
modelscope download --model Qwen/Qwen3-Omni-30B-A3B-Thinking --local_dir ./Qwen3-Omni-30B-A3B-Thinking
modelscope download --model Qwen/Qwen3-Omni-30B-A3B-Captioner --local_dir ./Qwen3-Omni-30B-A3B-Captioner

# Download through Hugging Face
pip install -U "huggingface_hub[cli]"
huggingface-cli download Qwen/Qwen3-Omni-30B-A3B-Instruct --local-dir ./Qwen3-Omni-30B-A3B-Instruct
huggingface-cli download Qwen/Qwen3-Omni-30B-A3B-Thinking --local-dir ./Qwen3-Omni-30B-A3B-Thinking
huggingface-cli download Qwen/Qwen3-Omni-30B-A3B-Captioner --local-dir ./Qwen3-Omni-30B-A3B-Captioner
Transformers Usage#
Installation#

The Hugging Face Transformers code for Qwen3-Omni has been successfully merged, but the PyPI package has not yet been released. Therefore, you need to install it from source using the following command. We strongly recommend that you create a new Python environment to avoid environment runtime issues.

# If you already have transformers installed, please uninstall it first, or create a new Python environment
# pip uninstall transformers
pip install git+https://github.com/huggingface/transformers
pip install accelerate

We offer a toolkit to help you handle various types of audio and visual input more conveniently, providing an API-like experience. This includes support for base64, URLs, and interleaved audio, images, and videos. You can install it using the following command and make sure your system has ffmpeg installed:

pip install qwen-omni-utils -U

Additionally, we recommend using FlashAttention 2 when running with Hugging Face Transformers to reduce GPU memory usage. However, if you are primarily using vLLM for inference, this installation is not necessary, as vLLM includes FlashAttention 2 by default.

pip install -U flash-attn --no-build-isolation

Also, you should have hardware that is compatible with FlashAttention 2. Read more about it in the official documentation of the FlashAttention repository. FlashAttention 2 can only be used when a model is loaded in torch.float16 or torch.bfloat16.

Code Snippet#

Here is a code snippet to show you how to use Qwen3-Omni with transformers and qwen_omni_utils:

import soundfile as sf

from transformers import Qwen3OmniMoeForConditionalGeneration, Qwen3OmniMoeProcessor
from qwen_omni_utils import process_mm_info

MODEL_PATH = "Qwen/Qwen3-Omni-30B-A3B-Instruct"
# MODEL_PATH = "Qwen/Qwen3-Omni-30B-A3B-Thinking"

model = Qwen3OmniMoeForConditionalGeneration.from_pretrained(
    MODEL_PATH,
    dtype="auto",
    device_map="auto",
    attn_implementation="flash_attention_2",
)

processor = Qwen3OmniMoeProcessor.from_pretrained(MODEL_PATH)

conversation = [
    {
        "role": "user",
        "content": [
            {"type": "image", "image": "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen3-Omni/demo/cars.jpg"},
            {"type": "audio", "audio": "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen3-Omni/demo/cough.wav"},
            {"type": "text", "text": "What can you see and hear? Answer in one short sentence."}
        ],
    },
]

# Set whether to use audio in video
USE_AUDIO_IN_VIDEO = True

# Preparation for inference
text = processor.apply_chat_template(conversation, add_generation_prompt=True, tokenize=False)
audios, images, videos = process_mm_info(conversation, use_audio_in_video=USE_AUDIO_IN_VIDEO)
inputs = processor(text=text, 
                   audio=audios, 
                   images=images, 
                   videos=videos, 
                   return_tensors="pt", 
                   padding=True, 
                   use_audio_in_video=USE_AUDIO_IN_VIDEO)
inputs = inputs.to(model.device).to(model.dtype)

# Inference: Generation of the output text and audio
text_ids, audio = model.generate(**inputs, 
                                 speaker="Ethan", 
                                 thinker_return_dict_in_generate=True,
                                 use_audio_in_video=USE_AUDIO_IN_VIDEO)

text = processor.batch_decode(text_ids.sequences[:, inputs["input_ids"].shape[1] :],
                              skip_special_tokens=True,
                              clean_up_tokenization_spaces=False)
print(text)
if audio is not None:
    sf.write(
        "output.wav",
        audio.reshape(-1).detach().cpu().numpy(),
        samplerate=24000,
    )

Here are some more advanced usage examples. You can expand the sections below to learn more.

Batch inference

The model can batch inputs composed of mixed samples of various types such as text, images, audio, and videos as input when return_audio=False is set. Here is an example.

from transformers import Qwen3OmniMoeForConditionalGeneration, Qwen3OmniMoeProcessor
from qwen_omni_utils import process_mm_info

MODEL_PATH = "Qwen/Qwen3-Omni-30B-A3B-Instruct"
# MODEL_PATH = "Qwen/Qwen3-Omni-30B-A3B-Thinking"

model = Qwen3OmniMoeForConditionalGeneration.from_pretrained(
    MODEL_PATH,
    dtype="auto",
    device_map="auto",
    attn_implementation="flash_attention_2",
)
model.disable_talker()

processor = Qwen3OmniMoeProcessor.from_pretrained(MODEL_PATH)

# Conversation with image only
conversation1 = [
    {
        "role": "user",
        "content": [
            {"type": "image", "image": "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen3-Omni/demo/cars.jpg"},
            {"type": "text", "text": "What can you see in this image? Answer in one sentence."},
        ]
    }
]

# Conversation with audio only
conversation2 = [
    {
        "role": "user",
        "content": [
            {"type": "audio", "audio": "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen3-Omni/demo/cough.wav"},
            {"type": "text", "text": "What can you hear in this audio?"},
        ]
    }
]

# Conversation with pure text and system prompt
conversation3 = [
    {
        "role": "system",
        "content": [
            {"type": "text", "text": "You are Qwen-Omni."}
        ],
    },
    {
        "role": "user",
        "content": "Who are you?"
    }
]

# Conversation with mixed media
conversation4 = [
    {
        "role": "user",
        "content": [
            {"type": "image", "image": "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen3-Omni/demo/cars.jpg"},
            {"type": "audio", "audio": "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen3-Omni/demo/cough.wav"},
            {"type": "text", "text": "What can you see and hear? Answer in one sentence."}
        ],
    }
]

# Combine messages for batch processing
conversations = [conversation1, conversation2, conversation3, conversation4]

# Set whether to use audio in video
USE_AUDIO_IN_VIDEO = True

# Preparation for batch inference
text = processor.apply_chat_template(conversations, add_generation_prompt=True, tokenize=False)
audios, images, videos = process_mm_info(conversations, use_audio_in_video=USE_AUDIO_IN_VIDEO)

inputs = processor(text=text, 
                   audio=audios, 
                   images=images, 
                   videos=videos, 
                   return_tensors="pt", 
                   padding=True, 
                   use_audio_in_video=USE_AUDIO_IN_VIDEO)
inputs = inputs.to(model.device).to(model.dtype)

# Batch inference does not support returning audio
text_ids, audio = model.generate(**inputs,
                                 return_audio=False,
                                 thinker_return_dict_in_generate=True,
                                 use_audio_in_video=USE_AUDIO_IN_VIDEO)

text = processor.batch_decode(text_ids.sequences[:, inputs["input_ids"].shape[1] :],
                              skip_special_tokens=True,
                              clean_up_tokenization_spaces=False)
print(text)

Use audio output or not

The model supports both text and audio outputs. If users do not need audio outputs, they can call model.disable_talker() after initializing the model. This option will save about 10GB of GPU memory, but the return_audio option for the generate function will only allow False.

model = Qwen3OmniMoeForConditionalGeneration.from_pretrained(
    "Qwen/Qwen3-Omni-30B-A3B-Instruct",
    dtype="auto",
    device_map="auto",
    attn_implementation="flash_attention_2",
)
model.disable_talker()

For a more flexible experience, we recommend that users decide whether to return audio when the generate function is called. If return_audio is set to False, the model will only return text outputs, resulting in faster text responses.

model = Qwen3OmniMoeForConditionalGeneration.from_pretrained(
    "Qwen/Qwen3-Omni-30B-A3B-Instruct",
    dtype="auto",
    device_map="auto",
    attn_implementation="flash_attention_2",
)
...
text_ids, _ = model.generate(..., return_audio=False)```

</details>

<details>
<summary>Change voice type of output audio</summary>

Qwen3-Omni supports changing the voice of the output audio. The `"Qwen/Qwen3-Omni-30B-A3B-Instruct"` checkpoint supports three voice types as follows:

| Voice Type | Gender | Description |
|------------|--------|-------------|
| Ethan      | Male   | A bright, upbeat voice with infectious energy and a warm, approachable vibe. |
| Chelsie    | Female | A honeyed, velvety voice that carries a gentle warmth and luminous clarity. |
| Aiden      | Male   | A warm, laid-back American voice with a gentle, boyish charm. |

Users can use the `speaker` parameter of the `generate` function to specify the voice type. By default, if `speaker` is not specified, the voice type is `Ethan`.

text_ids, audio = model.generate(..., speaker="Ethan")

text_ids, audio = model.generate(..., speaker="Chelsie")

text_ids, audio = model.generate(..., speaker="Aiden")






### vLLM Usage

#### Installation

We strongly recommend using vLLM for inference and deployment of the Qwen3-Omni series models. Since our code is currently in the pull request stage, and **audio output inference support for the Instruct model will be released in the near future**, you can follow the commands below to install vLLM from source. Please note that we recommend you **create a new Python environment** to avoid runtime environment conflicts and incompatibilities. For more details on compiling vLLM from source, please refer to the [vLLM official documentation](https://docs.vllm.ai/en/latest/getting_started/installation/gpu.html#set-up-using-python-only-build-without-compilation).

git clone -b qwen3_omni https://github.com/wangxiongts/vllm.git cd vllm pip install -r requirements/build.txt pip install -r requirements/cuda.txt export VLLM_PRECOMPILED_WHEEL_LOCATION=https://wheels.vllm.ai/a5dd03c1ebc5e4f56f3c9d3dc0436e9c582c978f/vllm-0.9.2-cp38-abi3-manylinux1_x86_64.whl VLLM_USE_PRECOMPILED=1 pip install -e . -v --no-build-isolation

If you meet an "Undefined symbol" error while using VLLM_USE_PRECOMPILED=1, please use "pip install -e . -v" to build from source.#

Install the Transformers#

pip install git+https://github.com/huggingface/transformers pip install accelerate pip install qwen-omni-utils -U pip install -U flash-attn --no-build-isolation


#### Inference

You can use the following code for vLLM inference. The `limit_mm_per_prompt` parameter specifies the maximum number of each modality's data allowed per message. Since vLLM needs to pre-allocate GPU memory, larger values will require more GPU memory; if OOM issues occur, try reducing this value. Setting `tensor_parallel_size` greater than one enables multi-GPU parallel inference, improving concurrency and throughput. In addition, `max_num_seqs` indicates the number of sequences that vLLM processes in parallel during each inference step. A larger value requires more GPU memory but enables higher batch inference speed. For more details, please refer to the [vLLM official documentation](https://docs.vllm.ai/en/latest/api/vllm/index.html#vllm.LLM). Below is a simple example of how to run Qwen3-Omni with vLLM:

import os import torch

from vllm import LLM, SamplingParams from transformers import Qwen3OmniMoeProcessor from qwen_omni_utils import process_mm_info

if __name__ == '__main__': # vLLM engine v1 not supported yet os.environ['VLLM_USE_V1'] = '0'

MODEL_PATH = "Qwen/Qwen3-Omni-30B-A3B-Instruct" # MODEL_PATH = "Qwen/Qwen3-Omni-30B-A3B-Thinking"

llm = LLM( model=MODEL_PATH, trust_remote_code=True, gpu_memory_utilization=0.95, tensor_parallel_size=torch.cuda.device_count(), limit_mm_per_prompt={'image': 3, 'video': 3, 'audio': 3}, max_num_seqs=8, max_model_len=32768, seed=1234, )

sampling_params = SamplingParams( temperature=0.6, top_p=0.95, top_k=20, max_tokens=16384, )

processor = Qwen3OmniMoeProcessor.from_pretrained(MODEL_PATH)

messages = [ { "role": "user", "content": [ {"type": "video", "video": "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen3-Omni/demo/draw.mp4"} ], } ]

text = processor.apply_chat_template( messages, tokenize=False, add_generation_prompt=True, ) audios, images, videos = process_mm_info(messages, use_audio_in_video=True)

inputs = { 'prompt': text, 'multi_modal_data': {}, "mm_processor_kwargs": { "use_audio_in_video": True, }, }

if images is not None: inputs['multi_modal_data']['image'] = images if videos is not None: inputs['multi_modal_data']['video'] = videos if audios is not None: inputs['multi_modal_data']['audio'] = audios

outputs = llm.generate([inputs], sampling_params=sampling_params)

print(outputs[0].outputs[0].text)


Here are some more advanced usage examples. You can expand the sections below to learn more.


Batch inference



Using vLLM enables fast batch inference, which can help you efficiently process large volumes of data or conduct benchmarking. Refer to the following code example:

import os import torch

from vllm import LLM, SamplingParams from transformers import Qwen3OmniMoeProcessor from qwen_omni_utils import process_mm_info

def build_input(processor, messages, use_audio_in_video): text = processor.apply_chat_template( messages, tokenize=False, add_generation_prompt=True, ) audios, images, videos = process_mm_info(messages, use_audio_in_video=use_audio_in_video)

inputs = { 'prompt': text, 'multi_modal_data': {}, "mm_processor_kwargs": { "use_audio_in_video": use_audio_in_video, }, }

if images is not None: inputs['multi_modal_data']['image'] = images if videos is not None: inputs['multi_modal_data']['video'] = videos if audios is not None: inputs['multi_modal_data']['audio'] = audios

return inputs

if __name__ == '__main__': # vLLM engine v1 not supported yet os.environ['VLLM_USE_V1'] = '0'

MODEL_PATH = "Qwen/Qwen3-Omni-30B-A3B-Instruct" # MODEL_PATH = "Qwen/Qwen3-Omni-30B-A3B-Thinking"

llm = LLM( model=MODEL_PATH, trust_remote_code=True, gpu_memory_utilization=0.95, tensor_parallel_size=torch.cuda.device_count(), limit_mm_per_prompt={'image': 3, 'video': 3, 'audio': 3}, max_num_seqs=8, max_model_len=32768, seed=1234, )

sampling_params = SamplingParams( temperature=0.6, top_p=0.95, top_k=20, max_tokens=16384, )

processor = Qwen3OmniMoeProcessor.from_pretrained(MODEL_PATH)

# Conversation with image only conversation1 = [ { "role": "user", "content": [ {"type": "image", "image": "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen3-Omni/demo/cars.jpg"}, {"type": "text", "text": "What can you see in this image? Answer in one sentence."}, ] } ]

# Conversation with audio only conversation2 = [ { "role": "user", "content": [ {"type": "audio", "audio": "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen3-Omni/demo/cough.wav"}, {"type": "text", "text": "What can you hear in this audio?"}, ] } ]

# Conversation with pure text and system prompt conversation3 = [ { "role": "system", "content": [ {"type": "text", "text": "You are Qwen-Omni."} ], }, { "role": "user", "content": "Who are you? Answer in one sentence." } ]

# Conversation with mixed media conversation4 = [ { "role": "user", "content": [ {"type": "image", "image": "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen3-Omni/demo/cars.jpg"}, {"type": "audio", "audio": "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen3-Omni/cookbook/asr_fr.wav"}, {"type": "text", "text": "What can you see and hear? Answer in one sentence."} ], } ]

USE_AUDIO_IN_VIDEO = True

# Combine messages for batch processing conversations = [conversation1, conversation2, conversation3, conversation4] inputs = [build_input(processor, messages, USE_AUDIO_IN_VIDEO) for messages in conversations]

outputs = llm.generate(inputs, sampling_params=sampling_params)

result = [outputs[i].outputs[0].text for i in range(len(outputs))] print(result)







vLLM Serve Usage



vLLM serve for Qwen3-Omni currently only supports the thinker model. The `use_audio_in_video` parameter is not available in vLLM serve; you can handle this by separately passing video and audio inputs for processing. You can start vLLM serve through the following command:

Qwen3-Omni-30B-A3B-Instruct for single GPU#

vllm serve Qwen/Qwen3-Omni-30B-A3B-Instruct --port 8901 --host 127.0.0.1 --dtype bfloat16 --max-model-len 32768 --allowed-local-media-path / -tp 1

Qwen3-Omni-30B-A3B-Instruct for multi-GPU (example on 4 GPUs)#

vllm serve Qwen/Qwen3-Omni-30B-A3B-Instruct --port 8901 --host 127.0.0.1 --dtype bfloat16 --max-model-len 65536 --allowed-local-media-path / -tp 4

Qwen/Qwen3-Omni-30B-A3B-Thinking for single GPU#

vllm serve Qwen/Qwen3-Omni-30B-A3B-Thinking --port 8901 --host 127.0.0.1 --dtype bfloat16 --max-model-len 32768 --allowed-local-media-path / -tp 1

Qwen/Qwen3-Omni-30B-A3B-Thinking for multi-GPU (example on 4 GPUs)#

vllm serve Qwen/Qwen3-Omni-30B-A3B-Thinking --port 8901 --host 127.0.0.1 --dtype bfloat16 --max-model-len 65536 --allowed-local-media-path / -tp 4


Then you can use the chat API as below (via curl, for example):

curl http://localhost:8901/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{ "messages": [ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": [ {"type": "image_url", "image_url": {"url": "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen3-Omni/demo/cars.jpg"}}, {"type": "audio_url", "audio_url": {"url": "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen3-Omni/demo/cough.wav"}}, {"type": "text", "text": "What can you see and hear? Answer in one sentence."} ]} ] }'






### Usage Tips (Recommended Reading)

#### Minimum GPU memory requirements

| Model                        | Precision | 15s Video | 30s Video | 60s Video | 120s Video   |
|------------------------------|-----------| --------- | --------- | --------- | --------- |
| Qwen3-Omni-30B-A3B-Instruct  | BF16      | 78.85 GB  | 88.52 GB  | 107.74 GB | 144.81 GB |
| Qwen3-Omni-30B-A3B-Thinking  | BF16      | 68.74 GB  | 77.79 GB  | 95.76 GB  | 131.65 GB  |

**Note**: The table above presents the theoretical minimum memory requirements for inference with `transformers` and `BF16` precision, tested with `attn_implementation="flash_attention_2"`. The Instruct model includes both the **thinker** and **talker** components, whereas the Thinking model includes only the **thinker** part.

#### Prompt for Audio-Visual Interaction

When using Qwen3-Omni for audio-visual multimodal interaction, where the input consists of a video and its corresponding audio (with the audio serving as a query), we recommend using the **following system prompt**. This setup helps the model maintain high reasoning capability while better assuming interactive roles such as a smart assistant. Additionally, the text generated by the thinker will be more readable, with a natural, conversational tone and without complex formatting that is difficult to vocalize, leading to more stable and fluent audio output from the talker. You can customize the `user_system_prompt` field in the system prompt to include character settings or other role-specific descriptions as needed.

user_system_prompt = "You are Qwen-Omni, a smart voice assistant created by Alibaba Qwen." message = { "role": "system", "content": [ {"type": "text", "text": f"{user_system_prompt} You are a virtual voice assistant with no gender or age.\nYou are communicating with the user.\nIn user messages, “I/me/my/we/our” refer to the user and “you/your” refer to the assistant. In your replies, address the user as “you/your” and yourself as “I/me/my”; never mirror the user’s pronouns—always shift perspective. Keep original pronouns only in direct quotes; if a reference is unclear, ask a brief clarifying question.\nInteract with users using short(no more than 50 words), brief, straightforward language, maintaining a natural tone.\nNever use formal phrasing, mechanical expressions, bullet points, overly structured language. \nYour output must consist only of the spoken content you want the user to hear. \nDo not include any descriptions of actions, emotions, sounds, or voice changes. \nDo not use asterisks, brackets, parentheses, or any other symbols to indicate tone or actions. \nYou must answer users' audio or text questions, do not directly describe the video content. \nYou should communicate in the same language strictly as the user unless they request otherwise.\nWhen you are uncertain (e.g., you can't see/hear clearly, don't understand, or the user makes a comment rather than asking a question), use appropriate questions to guide the user to continue the conversation.\nKeep replies concise and conversational, as if talking face-to-face."} ] }


#### Best Practices for the Thinking Model

The `Qwen3-Omni-30B-A3B-Thinking` model is primarily designed for understanding and interacting with multimodal inputs, including text, audio, image, and video. To achieve optimal performance, we recommend that users include an explicit textual instruction or task description in each round of dialogue alongside the multimodal input. This helps clarify the intent and significantly enhances the model's ability to leverage its reasoning capabilities. For example:

messages = [ { "role": "user", "content": [ {"type": "audio", "audio": "/path/to/audio.wav"}, {"type": "image", "image": "/path/to/image.png"}, {"type": "video", "video": "/path/to/video.mp4"}, {"type": "text", "text": "Analyze this audio, image, and video together."}, ], } ]


#### Use audio in video

In multimodal interaction, user-provided videos are often accompanied by audio (such as spoken questions or sounds from events in the video). This information helps the model provide a better interactive experience. We provide the following options for users to decide whether to use the audio from a video.

In data preprocessing#

audios, images, videos = process_mm_info(messages, use_audio_in_video=True)

For Transformers#

text = processor.apply_chat_template(messages, add_generation_prompt=True, tokenize=False) inputs = processor(text=text, audio=audios, images=images, videos=videos, return_tensors="pt", padding=True, use_audio_in_video=True) text_ids, audio = model.generate(..., use_audio_in_video=True)

For vLLM#

text = processor.apply_chat_template(messages, add_generation_prompt=True, tokenize=False) inputs = { 'prompt': text, 'multi_modal_data': {}, "mm_processor_kwargs": { "use_audio_in_video": True, }, }


It is worth noting that during a multi-round conversation, the `use_audio_in_video` parameter must be set consistently across these steps; otherwise, unexpected results may occur.

## Evaluation

### Performance of Qwen3-Omni

Qwen3-Omni maintains state-of-the-art performance on text and visual modalities without degradation relative to same-size single-model Qwen counterparts. Across 36 audio and audio-visual benchmarks, it achieves open-source SOTA on 32 and sets the SOTA on 22, outperforming strong closed-source systems such as Gemini 2.5 Pro and GPT-4o.


Text -> Text




  
    
       | 
       | GPT-4o-0327
       | Qwen3-235B-A22B
Non Thinking
       | Qwen3-30B-A3B-Instruct-2507
       | Qwen3-Omni-30B-A3B-Instruct
       | Qwen3-Omni-Flash-Instruct
    


  
  
    
       | General
Tasks
       | MMLU-Redux
       | 91.3
       | 89.2
       | 89.3
       | 86.6
       | 86.8
    


    
       | GPQA
       | 66.9
       | 62.9
       | 70.4
       | 69.6
       | 69.7
    


    
       | Reasoning
       | AIME25
       | 26.7
       | 24.7
       | 61.3
       | 65.0
       | 65.9
    


    
       | ZebraLogic
       | 52.6
       | 37.7
       | 90.0
       | 76.0
       | 76.1
    


    
       | Code
       | MultiPL-E
       | 82.7
       | 79.3
       | 83.8
       | 81.4
       | 81.5
    


  
  
    
       | Alignment
Tasks
       | IFEval
       | 83.9
       | 83.2
       | 84.7
       | 81.0
       | 81.7
    


    
       | Creative Writing v3
       | 84.9
       | 80.4
       | 86.0
       | 80.6
       | 81.8
    


    
       | WritingBench
       | 75.5
       | 77.0
       | 85.5
       | 82.6
       | 83.0
    


    
       | Agent
       | BFCL-v3
       | 66.5
       | 68.0
       | 65.1
       | 64.4
       | 65.0
    


    
       | Multilingual
Tasks
       | MultiIF
       | 70.4
       | 70.2
       | 67.9
       | 64.0
       | 64.7
    


    
       | PolyMATH
       | 25.5
       | 27.0
       | 43.1
       | 37.9
       | 39.3
    


  





  
    
       | 
       | 
       | Gemini-2.5-Flash
Thinking
       | Qwen3-235B-A22B
Thinking
       | Qwen3-30B-A3B-Thinking-2507
       | Qwen3-Omni-30B-A3B-Thinking
       | Qwen3-Omni-Flash-Thinking
    


  
  
    
       | General
Tasks
       | MMLU-Redux
       | 92.1
       | 92.7
       | 91.4
       | 88.8
       | 89.7
    


    
       | GPQA
       | 82.8
       | 71.1
       | 73.4
       | 73.1
       | 73.1
    


    
       | Reasoning
       | AIME25
       | 72.0
       | 81.5
       | 85.0
       | 73.7
       | 74.0
    


    
       | LiveBench 20241125
       | 74.3
       | 77.1
       | 76.8
       | 71.8
       | 70.3
    


    
       | Code
       | MultiPL-E
       | 84.5
       | 79.9
       | 81.3
       | 80.6
       | 81.0
    


    
       | Alignment
Tasks
       | IFEval
       | 89.8
       | 83.4
       | 88.9
       | 85.1
       | 85.2
    


    
       | Arena-Hard v2
       | 56.7
       | 61.5
       | 56.0
       | 55.1
       | 57.8
    


    
       | Creative Writing v3
       | 85.0
       | 84.6
       | 84.4
       | 82.5
       | 83.6
    


    
       | WritingBench
       | 83.9
       | 80.3
       | 85.0
       | 85.5
       | 85.9
    


    
       | Agent
       | BFCL-v3
       | 68.6
       | 70.8
       | 72.4
       | 63.2
       | 64.5
    


    
       | Multilingual
Tasks
       | MultiIF
       | 74.4
       | 71.9
       | 76.4
       | 72.9
       | 73.2
    


    
       | PolyMATH
       | 49.8
       | 54.7
       | 52.6
       | 47.1
       | 48.7
    


  









Audio -> Text





  
     | 
     | Seed-ASR
     | Voxtral-Mini
     | Voxtral-Small
     | GPT-4o-Transcribe
     | Gemini-2.5-Pro
     | Qwen2.5-Omni
     | Qwen3-Omni-30B-A3B-Instruct
     | Qwen3-Omni-Flash-Instruct
  




  
     | EN & ZH ASR (wer)
  


  
     | Wenetspeech
net | meeting
     | 4.66 | 5.69
     | 24.30 | 31.53
     | 20.33 | 26.08
     | 15.30 | 32.27
     | 14.43 | 13.47
     | 5.91 | 7.65
     | 4.69 | 5.89
     | 4.62 | 5.75
  


  
     | Librispeech
clean | other
     | 1.58 | 2.84
     | 1.88 | 4.12
     | 1.56 | 3.30
     | 1.39 | 3.75
     | 2.89 | 3.56
     | 1.74 | 3.45
     | 1.22 | 2.48
     | 1.27 | 2.44
  


  
     | CV15-en
     | -
     | 9.47
     | 7.79
     | 10.01
     | 9.89
     | 7.61
     | 6.05
     | 5.94
  


  
     | CV15-zh
     | -
     | 24.67
     | 19.30
     | 9.84
     | 8.00
     | 5.13
     | 4.31
     | 4.28
  


  
     | Fleurs-en
     | 3.40
     | 3.96
     | 3.77
     | 3.32
     | 2.94
     | 3.77
     | 2.72
     | 2.74
  


  
     | Fleurs-zh
     | 2.69
     | 12.22
     | 7.98
     | 2.44
     | 2.71
     | 2.54
     | 2.20
     | 2.19
  


  
     | Multilingual ASR (wer)
  


  
     | Fleurs-avg
(19 lang)
     | -
     | 15.67
     | 8.09
     | 4.48
     | 5.55
     | 14.04
     | 5.33
     | 5.31
  


  
     | Lyric ASR (wer)
  


  
     | MIR-1K (vocal-only)
     | 6.45
     | 23.33
     | 18.73
     | 11.87
     | 9.85
     | 8.15
     | 5.90
     | 5.85
  


  
     | Opencpop-test
     | 2.98
     | 31.01
     | 16.06
     | 7.93
     | 6.49
     | 2.84
     | 1.54
     | 2.02
  


  
     | S2TT (BLEU)
  


  
     | Fleurs-en2xx
     | -
     | 30.35
     | 37.85
     | -
     | 39.25
     | 29.22
     | 37.50
     | 36.22
  


  
     | Fleurs-xx2en
     | -
     | 27.54
     | 32.81
     | -
     | 35.41
     | 28.61
     | 31.08
     | 30.71
  


  
     | Fleurs-zh2xx
     | -
     | 17.03
     | 22.05
     | -
     | 26.63
     | 17.97
     | 25.17
     | 25.10
  


  
     | Fleurs-xx2zh
     | -
     | 28.75
     | 34.82
     | -
     | 37.50
     | 27.68
     | 33.13
     | 31.19
  








  
    
       | 
       | GPT-4o-Audio
       | Gemini-2.5-Flash
       | Gemini-2.5-Pro
       | Qwen2.5-Omni
       | Qwen3-Omni-30B-A3B-Instruct
       | Qwen3-Omni-30B-A3B-Thinking
       | Qwen3-Omni-Flash-Instruct
       | Qwen3-Omni-Flash-Thinking
    


  
  
    
       | VoiceBench
    


    
       | AlpacaEval
       | 95.6
       | 96.1
       | 94.3
       | 89.9
       | 94.8
       | 96.4
       | 95.4
       | 96.8
    


    
       | CommonEval
       | 89.8
       | 88.3
       | 88.4
       | 76.7
       | 90.8
       | 90.5
       | 91.0
       | 90.9
    


    
       | WildVoice
       | 91.6
       | 92.1
       | 93.4
       | 77.7
       | 91.6
       | 90.5
       | 92.3
       | 90.9
    


    
       | SD-QA
       | 75.5
       | 84.5
       | 90.1
       | 56.4
       | 76.9
       | 78.1
       | 76.8
       | 78.5
    


    
       | MMSU
       | 80.3
       | 66.1
       | 71.1
       | 61.7
       | 68.1
       | 83.0
       | 68.4
       | 84.3
    


    
       | OpenBookQA
       | 89.2
       | 56.9
       | 92.3
       | 80.9
       | 89.7
       | 94.3
       | 91.4
       | 95.0
    


    
       | BBH
       | 84.1
       | 83.9
       | 92.6
       | 66.7
       | 80.4
       | 88.9
       | 80.6
       | 89.6
    


    
       | IFEval
       | 76.0
       | 83.8
       | 85.7
       | 53.5
       | 77.8
       | 80.6
       | 75.2
       | 80.8
    


    
       | AdvBench
       | 98.7
       | 98.9
       | 98.1
       | 99.2
       | 99.3
       | 97.2
       | 99.4
       | 98.9
    


    
       | Overall

_The publisher's README is longer; it is cut here. Read the rest at the source._

Files

26 files · 63.4 GBWeights 63.4 GB (safetensors). Sizes and sha256 from the signed manifest.
Show all 26 files with their sha256
FileSizesha256
.gitattributes1.52 KB11ad7efa24975ee4b0c3c3a38ed18737f0658a5f75a0a96787b576a78a023361
README.md90.3 KB0e44065c4c4a27071f7239afd5b5a33af5bc2e437dd7ea9950e51aafabfde3df
chat_template.json5.95 KB3afb9519448b62e252cefeed1c0c1939b01b4e8ed70adbaf3c9f952969aa0ec7
config.json8.53 KBe6f8c637528461398ef4e11d48b6112ce73db2458a563dfea548127c2cce253f
generation_config.json113 B4c8ba35b3dfaed05c648b933ef8d9daca74da0a8ef87084fa5738f3209cdbadc
merges.txt1.67 MB599bab54075088774b1733fde865d5bd747cbcc7a547c5bc12610e874e26f5e3
model-00001-of-00016.safetensors4.00 GBba3b117f1fe9a10f670e87c73321c0651e89f425de598ede20185fdc94df997b
model-00002-of-00016.safetensors4.00 GB0c419d9fc447b83ab36be8243f1da793125f01ce0ca0fc49d4ad8aca5a03b6f0
model-00003-of-00016.safetensors4.00 GBbdd6cc1cb3bf3422eefaca3be1a730d78253bf158a53aa5ec73310cacb2f7d5a
model-00004-of-00016.safetensors4.00 GBc8228f28c83b8355ec441ea8caf33e847ec71192e2a378568289e6653d8d72f4
model-00005-of-00016.safetensors4.00 GB4317632b9dd26e4c950bbd90d1e89304325725f3290db00a642918a364ca1e01
model-00006-of-00016.safetensors4.00 GBc86a2cdcdf7eb7b8d5e6846a778798a12d14344ae4f178d4c9a4842c8fcaf9e5
model-00007-of-00016.safetensors4.00 GBe670918aaab9144dfe7e1132924c706d56b4c6b4c2b6e94a5cf796c3c55e7916
model-00008-of-00016.safetensors4.00 GB1f44c6e93b85b0cc05284beac60a4076caf61c803f569bf5dcb5ab6a6a810312
model-00009-of-00016.safetensors4.00 GB5439c95a4cbbd6a6ea7c498d8a71fcf3dacba64b4dac5bf5ad2834fda4140929
model-00010-of-00016.safetensors4.00 GBc75a2bb738fcb3da89798e5faffd627e3b2592325491bb9df915835afaac64c0
model-00011-of-00016.safetensors4.00 GB35439fa67730c6f2553ac6ae11f97a34dff37a61341275d3416d080423aa689b
model-00012-of-00016.safetensors4.00 GB61415e98a78c64a790c946be3145877886b4e6b681425dc061225df511b76e04
model-00013-of-00016.safetensors4.00 GB70587b5b7e51e8a6e4bf2d069ef465aea913c337f8d951e2790cd1e426bf5378
model-00014-of-00016.safetensors4.00 GBbee3c092d2966c401ef4b9899a4659e1fc2e9112667354c4e7bcb8a2faff2be7
model-00015-of-00016.safetensors4.00 GB80ea0e6c2cb35f485ae7534a3092793c18a429e102c820b77338726758d30e30
model-00016-of-00016.safetensors3.45 GBda33b1078d1b474f83ccc455928b18b731e3b09ad46b21af88e68d7cbb8488a5
model.safetensors.index.json1.93 MB13ae0b6fa947acd1ec5e163d493884724999788752b699266eb09b14ba914c90
preprocessor_config.json603 Bb10e27fd4542cf89ec7145942b87f3e65408d4e9f9d031a29acdd293c15fb3fc
tokenizer_config.json7.34 KBdc3c31c3bdaedd5016382bb3cbe07323026775ad51f5a4fb564505992ae4a670
vocab.json2.78 MBca10d7e9fb3ed18575dd1e277a2579c16d108e32f27439684afa0e10b1440910
VersionsEach time the pinned upstream commit or file list changed in this repo. Newest first.
Upstream commitDateContents
2f443cfc4c pinned now2026-11-15 00:15 UTC26 files · 63.4 GB

Use it

$ fw get Qwen/Qwen3-Omni-30B-A3B-Thinking
# manifest sha256 4622752d4c4e… · 63.4 GB · 26 files
$ fw verify ./Qwen3-Omni-30B-A3B-Thinking Qwen/Qwen3-Omni-30B-A3B-Thinking
fw.pyChecks the signature and every sha256, tries each source in order, resumes.
$ python3 fw.py get https://freeweights.allternit.com/manifests/Qwen/Qwen3-Omni-30B-A3B-Thinking.json --dir ./Qwen3-Omni-30B-A3B-Thinking $ python3 fw.py verify ./Qwen3-Omni-30B-A3B-Thinking ./Qwen__Qwen3-Omni-30B-A3B-Thinking.json
hfThe Hugging Face CLI with one setting. Same repo id.
$ HF_ENDPOINT=https://freeweights.allternit.com hf download Qwen/Qwen3-Omni-30B-A3B-Thinking --revision 2f443cfc4c54b14a815c0e2bb9a9d6cbcd9a748b --local-dir ./Qwen3-Omni-30B-A3B-Thinking

License

Name
Apache License 2.0
Id
Apache-2.0
Class
Permissive
Redistribution
yes
Listing
Hosted (signed)
Decided
License as declared by the publisher. No person read it. 2026-11-15
Text in
README.md
Text sha256
0e44065c4c4a27071f7239afd5b5a33af5bc2e437dd7ea9950e51aafabfde3df
Terms gate
No extra terms beyond the license.

Read the license text

Licenses are checked against the license table. A custom license passes only after a person reads it.

Provenance

From: Qwen <huggingface.co/Qwen>Newsgroups: alt.freeweights.qwenSubject: Qwen3-Omni-30B-A3B-ThinkingDate: 2026-11-15Commit: 2f443cfSigned: 2DC28CC7B26A283B ✓
Upstream
Qwen/Qwen3-Omni-30B-A3B-Thinking
Pinned commit
2f443cfc4c54b14a815c0e2bb9a9d6cbcd9a748b
Manifest
Qwen3-Omni-30B-A3B-Thinking.json · .minisig
Manifest sha256
4622752d4c4ea8b5624b62bc3032378c069868d37db1d237c8bc75ab5a693142
Signature
minisign, Ed25519, key 2DC28CC7B26A283B
Created
2026-11-15 00:15 UTC
Generator
freeweights-manifest/0.1.0
Takedowns
None.

How to verify

$ curl -O https://freeweights.allternit.com/manifests/Qwen/Qwen3-Omni-30B-A3B-Thinking.json $ curl -O https://freeweights.allternit.com/manifests/Qwen/Qwen3-Omni-30B-A3B-Thinking.json.minisig $ minisign -Vm Qwen3-Omni-30B-A3B-Thinking.json -P RWQ7KGqyx4zCLXtUFOqvfv8L3g+8fpKJ1FsuxPyOYMF+4KufbUxKq1Oq $ shasum -a 256 <file> # compare with the Files tab

A manifest whose signature fails must be rejected. A file whose size or sha256 does not match must be discarded. Verify a download

Model tree

1 model in the catalog name this one as their parent.

Quantizations
1
Get it
Download
$ HF_ENDPOINT=https://freeweights.allternit.com hf download Qwen/Qwen3-Omni-30B-A3B-Thinking
Open in Freeweights Studio

Pull, verify and run it in the Allternit app on Desktop, web or phone.

Signed manifest
minisign, key 2DC28CC7B26A283B. Qwen3-Omni-30B-A3B-Thinking.json. Provenance. Takedown history: none.

Variants

1 quantized or adapter build of Qwen3-Omni-30B-A3B-Thinking. Each has its own license check and page.

From: BAAI <huggingface.co/BAAI>Subject: Aquila-VL-2B-llava-qwen
From: Perciqa <huggingface.co/Perciqa>Subject: Aurora-Code-1
From: BAAI <huggingface.co/BAAI>Subject: bge-reasoner-embed-qwen3-8b-0923
From: amazon <huggingface.co/amazon>Subject: BMOJOF-primed-HQwen3-8B-Instruct
From: nbeerbower <huggingface.co/nbeerbower>Subject: Bubba-Qwen3.6-27B-LoRA
From: bartowski <huggingface.co/bartowski>Subject: bytkim_Qwen3.8-27B-pi-GGUF