[diffusion] feat: support multiple input images for generate mode (#15394)

Co-authored-by: 也渡 <fangxinlei.fxl@alibaba-inc.com>
This commit is contained in:
suyedu
2025-12-19 20:08:10 +08:00
committed by GitHub
parent ba41080892
commit 1c65802648
3 changed files with 57 additions and 3 deletions

View File

@@ -88,7 +88,7 @@ class SamplingParams:
# All fields below are copied from ForwardBatch
# Image inputs
image_path: str | None = None
image_path: str | list[str] | None = None
# Text inputs
prompt: str | list[str] | None = None
@@ -541,8 +541,14 @@ class SamplingParams:
parser.add_argument(
"--image-path",
type=str,
nargs="+",
default=SamplingParams.image_path,
help="Path to input image for image-to-video generation",
help=(
"Path(s) to input image(s) for image-to-image / image-to-video "
"generation. For multiple images, pass them as space-separated "
"values, e.g.: "
'--image-path "img1.png" "img2.png"'
),
)
parser.add_argument(
"--moba-config-path",

View File

@@ -51,7 +51,7 @@ class Req:
generator: torch.Generator | list[torch.Generator] | None = None
# Image inputs
image_path: str | None = None
image_path: str | list[str] | None = None
# Image encoder hidden states
image_embeds: list[torch.Tensor] = field(default_factory=list)

View File

@@ -79,6 +79,54 @@ class TestQwenImageEdit(TestGenerateBase):
pass
class TestQwenImageEditPlusMultiImageURL(TestGenerateBase):
"""CLI-level test for multi-image URL input with Qwen-Image-Edit."""
model_path = "Qwen/Qwen-Image-Edit-2509"
extra_args = []
data_type: DataType = DataType.IMAGE
thresholds = {
"test_single_gpu": 33.4 * 1.05,
}
prompt: str | None = (
"The magician bear is on the left, the alchemist bear is on the right, facing each other in the central park square."
)
def setUp(self):
super().setUp()
img_urls = [
"https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen-Image/edit2509/edit2509_1.jpg",
"https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen-Image/edit2509/edit2509_2.jpg",
]
self.base_command = [
"sglang",
"generate",
"--text-encoder-cpu-offload",
"--pin-cpu-memory",
"--prompt",
f"{self.prompt}",
"--save-output",
"--log-level=debug",
f"--width={self.width}",
f"--height={self.height}",
f"--output-path={self.output_path}",
]
self.base_command += [
"--image-path",
*img_urls,
]
def test_cfg_parallel(self):
pass
def test_mixed(self):
pass
if __name__ == "__main__":
del TestGenerateBase
unittest.main()