From 43c6f520ca24cab5e33a2bcb795f0cacc3eca472 Mon Sep 17 00:00:00 2001 From: Jiangyun Zhu Date: Thu, 29 Jan 2026 15:18:19 +0800 Subject: [PATCH] [Bugfix] fix qwen image layerd in dummy run (#1027) Signed-off-by: zjy0516 --- examples/offline_inference/image_to_image/image_edit.py | 3 +-- vllm_omni/diffusion/diffusion_engine.py | 9 +++++++-- vllm_omni/diffusion/models/interface.py | 1 + .../models/qwen_image/pipeline_qwen_image_layered.py | 2 ++ 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/examples/offline_inference/image_to_image/image_edit.py b/examples/offline_inference/image_to_image/image_edit.py index 896c611b4..5ffab87f0 100644 --- a/examples/offline_inference/image_to_image/image_edit.py +++ b/examples/offline_inference/image_to_image/image_edit.py @@ -77,7 +77,7 @@ from pathlib import Path import torch from PIL import Image -from vllm_omni.diffusion.data import DiffusionParallelConfig, logger +from vllm_omni.diffusion.data import DiffusionParallelConfig from vllm_omni.entrypoints.omni import Omni from vllm_omni.inputs.data import OmniDiffusionSamplingParams from vllm_omni.outputs import OmniRequestOutput @@ -428,7 +428,6 @@ def main(): if not outputs: raise ValueError("No output generated from omni.generate()") - logger.info("Outputs: %s", outputs) # Extract images from OmniRequestOutput # omni.generate() returns list[OmniRequestOutput], extract images from request_output[0].images diff --git a/vllm_omni/diffusion/diffusion_engine.py b/vllm_omni/diffusion/diffusion_engine.py index b0b9b89db..a44596983 100644 --- a/vllm_omni/diffusion/diffusion_engine.py +++ b/vllm_omni/diffusion/diffusion_engine.py @@ -30,6 +30,11 @@ def supports_image_input(model_class_name: str) -> bool: return bool(getattr(model_cls, "support_image_input", False)) +def image_color_format(model_class_name: str) -> str: + model_cls = DiffusionModelRegistry._try_load_model_cls(model_class_name) + return getattr(model_cls, "color_format", "RGB") + + def supports_audio_output(model_class_name: str) -> bool: model_cls = DiffusionModelRegistry._try_load_model_cls(model_class_name) if model_cls is None: @@ -315,8 +320,8 @@ class DiffusionEngine: width = 1024 if supports_image_input(self.od_config.model_class_name): # Provide a dummy image input if the model supports it - - dummy_image = PIL.Image.new("RGB", (width, height), color=(0, 0, 0)) + color_format = image_color_format(self.od_config.model_class_name) + dummy_image = PIL.Image.new(color_format, (width, height)) else: dummy_image = None prompt: OmniTextPrompt = {"prompt": "dummy run", "multi_modal_data": {"image": dummy_image}} diff --git a/vllm_omni/diffusion/models/interface.py b/vllm_omni/diffusion/models/interface.py index 8e8ecbb77..abdfe1e50 100644 --- a/vllm_omni/diffusion/models/interface.py +++ b/vllm_omni/diffusion/models/interface.py @@ -10,6 +10,7 @@ from typing import ( @runtime_checkable class SupportImageInput(Protocol): support_image_input: ClassVar[bool] = True + color_format: ClassVar[str] = "RGB" # Default color format @runtime_checkable diff --git a/vllm_omni/diffusion/models/qwen_image/pipeline_qwen_image_layered.py b/vllm_omni/diffusion/models/qwen_image/pipeline_qwen_image_layered.py index ae27ba708..1001e8a14 100644 --- a/vllm_omni/diffusion/models/qwen_image/pipeline_qwen_image_layered.py +++ b/vllm_omni/diffusion/models/qwen_image/pipeline_qwen_image_layered.py @@ -192,6 +192,8 @@ def retrieve_latents( class QwenImageLayeredPipeline(nn.Module, SupportImageInput): + color_format = "RGBA" + def __init__( self, *,