Qwen Omni Combined🐼
The one node that watches your video, hears the audio, and talks back
- image
- audio
- video_path
- text
- audio
If you've ever wanted ComfyUI to look at something and then tell you about it - not with a caption, with an actual voice - this is the node. Qwen Omni Combined is the centerpiece of the ComfyUI-Qwen-Omni pack: a single node that runs Alibaba's Qwen2.5-Omni multimodal model locally and returns both a text answer and (optionally) a spoken one. You feed it text, an image, an audio clip, a video path, or any mix; it reads everything at once and replies. No API, no key, no cloud. The README's "end-to-end multimodal interaction" is marketing fluff for something genuinely useful: one node in your graph that actually understands what it's looking at.
Who's it for? The obvious cases: captioning or answering questions about a reference image, summarizing a voice note, or asking "what's in this video?" and wiring the answer into the rest of your workflow. People on r/comfyui actually point to this pack when someone asks for a voice-to-text prompt node or a way to transcribe audio tracks locally. If you want an audio clip turned into a text description you can feed onward, this is about the shortest path that exists in ComfyUI right now.
How it works
This runs the real Qwen2.5-Omni model (Qwen2_5OmniForConditionalGeneration) loaded from ComfyUI/models/Qwen/ on your machine. It builds a chat-style conversation from whatever you connected, applies the model's chat template, and calls generate() - the same transformer call a script would make, wrapped in a node. The "Omni" trick is that text, image, audio, and video all get tokenized together, so the model reasons across modalities instead of you chaining separate captioner nodes.
A few details worth knowing before you expect too much:
- Videos are decimated hard: down to at most 15 frames, each resized to 384×384. Good for "what's happening here," not frame-accurate analysis.
- Images get thumbnailed to a 1024px max before being fed in.
- Speech comes back at 24 kHz; you pick Chelsie (female, warm) or Ethan (male, calm).
The inputs that matter
The defaults are sane enough to just hit Queue, but here's what you'll actually touch:
model_name- Qwen2.5-Omni-3B (default) or -7B. Start with 3B; reach for 7B only if you want better answers and have the VRAM.quantization- 4-bit (default, VRAM-friendly), 8-bit, or none (original fp16 precision). Unquantized 7B will eat 14GB+ of VRAM before you add any context.prompt- your actual question, plain language, Chinese works too. This is what you're asking the image/audio/video about.audio_output- None, or one of the two voices. Turn it on and theaudiooutput starts producing.max_tokens,temperature,top_p,repetition_penalty- standard generation knobs, and the tooltips are unusually good. The author's guidance: temperature 0.1–0.3 for structured/technical answers.
The optional inputs are where it gets fun: image (PNG/JPG), audio (MP3/WAV), and video_path (MP4/WEBM - wire in this pack's Video Uploader node). audio_source decides whether to use a video's built-in track or a separate audio file. Outputs are text (STRING) and audio (AUDIO) - text wires into anything that takes a string, audio goes to a save or playback node.
Installation
cd ComfyUI/custom_nodes/
git clone https://github.com/SXQBW/ComfyUI-Qwen-Omni.git
cd ComfyUI-Qwen-Omni
pip install -r requirements.txt
Or search "ComfyUI-Qwen-Omni" in ComfyUI Manager and let it handle the clone. Restart either way. On first run the model auto-downloads to ComfyUI/models/Qwen/ - the node even speed-tests Hugging Face against ModelScope and grabs whichever is faster. That's a multi-GB download for the 3B alone.
Where people get burned
The requirements file is the trap. It pins a preview build of transformers - git+https://github.com/huggingface/[email protected] - plus bitsandbytes, modelscope, and a Windows-targeted triton-windows line. Custom nodes share one Python environment with zero isolation, so that pinned transformers can silently break other nodes expecting a different version, and triton-windows is a known pip failure on Linux. If an install or load fails, that requirements file is the first thing to suspect.
Other classics: it hard-requires CUDA (raises a RuntimeError if it can't see a GPU), and if the auto-download flakes out, the error tells you exactly where to drop the model manually: ComfyUI/models/Qwen/Qwen2.5-Omni-3B/. The model also stays resident in VRAM after the node runs - not something to leave floating in every workflow if your card is small.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| model_name | COMBO | Qwen2.5-Omni-3B | Select the available model version. 选择可用的模型版本。 |
| quantization | COMBO | 👍 4-bit (VRAM-friendly) | Select the quantization level: ✅ 4-bit: Significantly reduces VRAM usage, suitable for resource-constrained environments. ⚖️ 8-bit: Strikes a balance between precision and performance. 🚫 None: Uses the original floating-point precision (requires a high-end GPU). 选择量化级别: ✅ 4位:显著减少VRAM使用,适合资源受限环境。 ⚖️ 8位:在精度和性能之间取得平衡。 🚫 无:使用原始浮点精度(需要高端GPU)。 |
| prompt | STRING | Hi!😽 | Enter a text prompt, supporting Chinese and emojis. Example: 'Describe a cat in a painter's style.' 输入文本提示,支持中文和表情符号。示例:'以画家的风格描述一只猫。' |
| audio_output | COMBO | 🔇None (No Audio) | Audio output options: 🔇 Do not generate audio. 👱♀️ Use the female voice Chelsie (warm tone). 👨🦰 Use the male voice Ethan (calm tone). 音频输出选项: 🔇 不生成音频。 👱♀️ 使用女性声音Chelsie(温暖语调)。 👨🦰 使用男性声音Ethan(平静语调)。 |
| audio_source | COMBO | 🎧 Separate Audio Input | Select audio source: Use video's built-in audio track (priority) / Input a separate audio file (external audio) 选择音频源:使用视频内置音轨(优先)/输入单独的音频文件(外部音频) |
| max_tokens | INT | 13264–2048 | Control the maximum length of the generated text (in tokens). Generally, 100 tokens correspond to approximately 50 - 100 Chinese characters or 67 - 100 English words, but the actual number may vary depending on the text content and the model's tokenization strategy. Recommended range: 64 - 512. 控制生成文本的最大长度(以token为单位)。 一般来说,100个token约对应50-100个汉字或67-100个英文单词,但实际数量可能因文本内容和模型的分词策略而异。 推荐范围:64-512。 |
| temperature | FLOAT | 0.40.1–1 | Control the generation diversity: ▫️ 0.1 - 0.3: Generate structured/technical content. ▫️ 0.5 - 0.7: Balance creativity and logic. ▫️ 0.8 - 1.0: High degree of freedom (may produce incoherent content). 控制生成多样性: ▫️ 0.1-0.3:生成结构化/技术性内容。 ▫️ 0.5-0.7:平衡创造性和逻辑性。 ▫️ 0.8-1.0:高度自由(可能产生不连贯内容)。 |
| top_p | FLOAT | 0.900–1 | Nucleus sampling threshold: ▪️ Close to 1.0: Retain more candidate words (more random). ▪️ 0.5 - 0.8: Balance quality and diversity. ▪️ Below 0.3: Generate more conservative content. 核采样阈值: ▪️ 接近1.0:保留更多候选词(更随机)。 ▪️ 0.5-0.8:平衡质量和多样性。 ▪️ 低于0.3:生成更保守的内容。 |
| repetition_penalty | FLOAT | 1.000–2 | Control of repeated content: ⚠️ 1.0: Default behavior. ⚠️ >1.0 (Recommended 1.2): Suppress repeated phrases. ⚠️ <1.0 (Recommended 0.8): Encourage repeated emphasis. 控制重复内容: ⚠️ 1.0:默认行为。 ⚠️ >1.0(推荐1.2):抑制重复短语。 ⚠️ <1.0(推荐0.8):鼓励重复强调。 |
| imageopt | IMAGE | Upload a reference image (supports PNG/JPG), and the model will adjust the generation result based on the image content. 上传参考图像(支持PNG/JPG),模型将根据图像内容调整生成结果。 | |
| audioopt | AUDIO | Upload an audio file (supports MP3/WAV), and the model will analyze the audio content and generate relevant responses. 上传音频文件(支持MP3/WAV),模型将分析音频内容并生成相关响应。 | |
| video_pathopt | VIDEO_PATH | Enter the video file (supports MP4/WEBM), and the model will extract visual features to assist in generation. 输入视频文件路径(支持MP4/WEBM),模型将提取视觉特征辅助生成。 |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| text | STRING | — |
| audio | AUDIO | — |