From 74eedd3ef1fef6f9a865975abd6f9d260ed59c2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zeyu=20Huang=20=7C=20=E9=BB=83=E6=BE=A4=E5=AE=87?= <11222265+fhfuih@users.noreply.github.com> Date: Wed, 11 Mar 2026 18:22:45 +0800 Subject: [PATCH] [Frontend] ComfyUI video & LoRA support (#1596) Signed-off-by: Huang, Zeyu <11222265+fhfuih@users.noreply.github.com> --- apps/ComfyUI-vLLM-Omni/README.md | 17 +- apps/ComfyUI-vLLM-Omni/__init__.py | 9 + .../comfyui_vllm_omni/nodes.py | 166 +++++- .../comfyui_vllm_omni/utils/api_client.py | 88 ++- .../comfyui_vllm_omni/utils/format.py | 70 +++ .../comfyui_vllm_omni/utils/types.py | 4 + .../comfyui_vllm_omni/utils/validators.py | 2 +- .../docs/images/comfyui-video-generation.jpg | Bin 0 -> 132038 bytes .../vLLM-Omni Video Generation.json | 513 ++++++++++++++++++ docs/features/comfyui.md | 5 +- tests/comfyui/conftest.py | 7 + tests/comfyui/test_comfyui_integration.py | 171 +++++- .../openai_api/test_image_server.py | 1 - 13 files changed, 1038 insertions(+), 15 deletions(-) create mode 100644 apps/ComfyUI-vLLM-Omni/docs/images/comfyui-video-generation.jpg create mode 100644 apps/ComfyUI-vLLM-Omni/example_workflows/vLLM-Omni Video Generation.json diff --git a/apps/ComfyUI-vLLM-Omni/README.md b/apps/ComfyUI-vLLM-Omni/README.md index 23bbe5b72..54f2fdf2e 100644 --- a/apps/ComfyUI-vLLM-Omni/README.md +++ b/apps/ComfyUI-vLLM-Omni/README.md @@ -47,6 +47,7 @@ If no, check your shell running the ComfyUI process. There may be some error mes This extension offers the following nodes based on the output modalities (at **ComfyUI sidebar -> Node Library**): - **Generate Image** for text-to-image and image-to-image tasks +- **Generate Video** for text-to-video and image-to-video tasks - **Multimodality Understanding** for multimodality-to-text and multimodality-to-audio tasks - **TTS** and **TTS Voice Clone** for TTS tasks @@ -59,7 +60,7 @@ To build a simple workflow yourself, - Drag a generation node onto the canvas. - Depending on your need, grab built-in multimedia file loader nodes, such as **image->Load Image**, **image->video->Load Video**, **audio->Load Audio** -- Depending on your need, grab built-in multimedia file preview nodes, such as **image->Preview Image**, **image->video->Save Video**, **audio->Preview Audio**. For text output, you can install [ComfyUI-Custom-Scripts plugin](https://github.com/pythongosssss/ComfyUI-Custom-Scripts/) and grab its **utils->Show Text 🐍** node. +- Depending on your need, grab built-in multimedia file preview nodes, such as **image->Preview Image**, **image->video->Save Video**, **audio->Preview Audio**, **utils->Preview as Text**. - If you want to tune sampling parameters, grab corresponding nodes from **vLLM-Omni-> Sampling Params**. - For multi-stage models, you can connect multiple **AR Sampling Params** and **Diffusion Sampling Params** nodes to a **Multi-Stage Sampling Params List** node, and connect this node to the generation node. - For some multi-stage models like BAGEL, [only one stage's sampling parameters are exposed and tunable via vLLM-Omni's online serving API](https://docs.vllm.ai/projects/vllm-omni/en/latest/user_guide/examples/online_serving/bagel/). Thus, these models are treated as single-stage ones. Please check the vLLM-Omni documentation on how to correctly set each model's sampling parameters. @@ -104,6 +105,20 @@ You can configure per-stage sampling parameters for multi-stage models. > [!TIP] > The node automatically choose text-to-image or image-to-image API endpoints depending on whether you connect an image input or not. +### Text-to-video and image-to-video generation (e.g., Wan) + +(Also available at **ComfyUI sidebar->Template->vLLM-Omni->vLLM-Omni Video Generation**) + +

+ + + vLLM-Omni video generation + +

+ +> [!TIP] +> The node automatically choose text-to-video or image-to-video API endpoints depending on whether you connect an image input or not. + ### TTS (e.g., Qwen TTS series) (Also available at **ComfyUI sidebar->Template->vLLM-Omni->vLLM-Omni TTS**) diff --git a/apps/ComfyUI-vLLM-Omni/__init__.py b/apps/ComfyUI-vLLM-Omni/__init__.py index 641824add..e89b2ca1e 100644 --- a/apps/ComfyUI-vLLM-Omni/__init__.py +++ b/apps/ComfyUI-vLLM-Omni/__init__.py @@ -14,17 +14,21 @@ from .comfyui_vllm_omni.nodes import ( VLLMOmniARSampling, VLLMOmniDiffusionSampling, VLLMOmniGenerateImage, + VLLMOmniGenerateVideo, VLLMOmniQwenTTSParams, + VLLMOmniRemoteLoRA, VLLMOmniSamplingParamsList, VLLMOmniTTS, VLLMOmniUnderstanding, VLLMOmniVoiceClone, + VLLMOmniWanParams, ) # A dictionary that contains all nodes you want to export with their names NODE_CLASS_MAPPINGS = { # === Generation === "VLLMOmniGenerateImage": VLLMOmniGenerateImage, + "VLLMOmniGenerateVideo": VLLMOmniGenerateVideo, "VLLMOmniUnderstanding": VLLMOmniUnderstanding, "VLLMOmniTTS": VLLMOmniTTS, "VLLMOmniVoiceClone": VLLMOmniVoiceClone, @@ -32,13 +36,16 @@ NODE_CLASS_MAPPINGS = { "VLLMOmniARSampling": VLLMOmniARSampling, "VLLMOmniDiffusionSampling": VLLMOmniDiffusionSampling, "VLLMOmniSamplingParamsList": VLLMOmniSamplingParamsList, + "VLLMOmniRemoteLoRA": VLLMOmniRemoteLoRA, "VLLMOmniQwenTTSParams": VLLMOmniQwenTTSParams, + "VLLMOmniWanParams": VLLMOmniWanParams, } # A dictionary that contains the friendly/humanly readable titles for the nodes NODE_DISPLAY_NAME_MAPPINGS = { # === Generation === "VLLMOmniGenerateImage": "Generate Image", + "VLLMOmniGenerateVideo": "Generate Video", "VLLMOmniUnderstanding": "Multimodality Understanding", "VLLMOmniTTS": "TTS (Text to Speech)", "VLLMOmniVoiceClone": "TTS Voice Cloning", @@ -46,7 +53,9 @@ NODE_DISPLAY_NAME_MAPPINGS = { "VLLMOmniARSampling": "AR Sampling Params", "VLLMOmniDiffusionSampling": "Diffusion Sampling Params", "VLLMOmniSamplingParamsList": "Multi-Stage Sampling Params List", + "VLLMOmniRemoteLoRA": "LoRA", "VLLMOmniQwenTTSParams": "Qwen TTS Params", + "VLLMOmniWanParams": "Wan Video Params", } WEB_DIRECTORY = "./web" diff --git a/apps/ComfyUI-vLLM-Omni/comfyui_vllm_omni/nodes.py b/apps/ComfyUI-vLLM-Omni/comfyui_vllm_omni/nodes.py index 5caa3869e..bfea93998 100644 --- a/apps/ComfyUI-vLLM-Omni/comfyui_vllm_omni/nodes.py +++ b/apps/ComfyUI-vLLM-Omni/comfyui_vllm_omni/nodes.py @@ -11,6 +11,7 @@ from .utils.types import ( AutoregressionSamplingParams, DiffusionSamplingParams, QwenTTSModelSpecificParams, + WanModelSpecificParams, ) from .utils.validators import ( add_sampling_parameters_to_stage, @@ -56,6 +57,7 @@ class VLLMOmniGenerateImage(_VLLMOmniGenerateBase): # "video": ("VIDEO",), # "audio": ("AUDIO",), "sampling_params": ("SAMPLING_PARAMS",), + "lora": ("REMOTE_LORA",), }, } @@ -76,9 +78,11 @@ class VLLMOmniGenerateImage(_VLLMOmniGenerateBase): audio: AudioInput | None = None, # Hidden & unused video: VideoInput | None = None, # Hidden & unused sampling_params: dict | list[dict] | None = None, + lora: dict | None = None, **kwargs, ): - logger.info("Uncaught kwargs: %s", kwargs) + if kwargs: + logger.info("Uncaught kwargs: %s", kwargs) logger.debug("Got sampling params: %s", sampling_params) validate_model_and_sampling_params_types(model, sampling_params) if image is None and mask is not None: @@ -105,6 +109,7 @@ class VLLMOmniGenerateImage(_VLLMOmniGenerateBase): height=height, negative_prompt=negative_prompt, sampling_params=sampling_params, + lora=lora, ) return (output,) elif image is not None and audio is None and video is None: @@ -119,6 +124,7 @@ class VLLMOmniGenerateImage(_VLLMOmniGenerateBase): negative_prompt=negative_prompt, mask=mask, sampling_params=sampling_params, + lora=lora, ) return (output,) @@ -136,11 +142,91 @@ class VLLMOmniGenerateImage(_VLLMOmniGenerateBase): audio=audio, video=video, sampling_params=sampling_params, + lora=lora, ) return (output,) +class VLLMOmniGenerateVideo(_VLLMOmniGenerateBase): + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "url": ("STRING", {"default": "http://localhost:8000/v1"}), + "model": ("STRING", {"default": "Wan-AI/Wan2.2-T2V-A14B-Diffusers"}), + "prompt": ("STRING", {"multiline": True}), + "negative_prompt": ("STRING", {"multiline": True, "default": ""}), + "width": ("INT", {"default": 832, "min": 1}), + "height": ("INT", {"default": 480, "min": 1}), + "fps": ("INT", {"default": 16, "min": 1}), + "num_frames": ("INT", {"default": 41, "min": 1}), + }, + "optional": { + "image": ("IMAGE",), + "sampling_params": ("SAMPLING_PARAMS",), + "lora": ("REMOTE_LORA",), + "model_params": ("VIDEO_PARAMS",), + }, + } + + RETURN_TYPES = ("VIDEO",) + RETURN_NAMES = ("video",) + FUNCTION = "generate" + + async def generate( + self, + url: str, + model: str, + prompt: str, + width: int, + height: int, + fps: int, + num_frames: int, + negative_prompt: str | None = None, + image: torch.Tensor | None = None, + sampling_params: dict | list[dict] | None = None, + model_params: dict | None = None, + lora: dict | None = None, + **kwargs, + ): + if kwargs: + logger.info("Uncaught kwargs: %s", kwargs) + logger.debug("Got sampling params: %s", sampling_params) + logger.debug("Got model params: %s", model_params) + validate_model_and_sampling_params_types(model, sampling_params) + + # Currently, all video generation models are single-stage diffusion models + if isinstance(sampling_params, list): + if len(sampling_params) != 1: + raise ValueError( + "Video generation expects a single sampling params group. " + "Please provide one Diffusion sampling node." + ) + sampling_params = sampling_params[0] + + if sampling_params is not None: + sampling_params.pop("type", None) # internal fields + if model_params is not None: + model_params.pop("type", None) # internal fields + + client = VLLMOmniClient(url) + output = await client.generate_video( + model=model, + prompt=prompt, + image=image, # image present => i2v, absent => t2v + width=width, + height=height, + num_frames=num_frames, + fps=fps, + negative_prompt=negative_prompt, + sampling_params=sampling_params, + lora=lora, + model_params=model_params, + ) + return (output,) + + class VLLMOmniUnderstanding(_VLLMOmniGenerateBase): @classmethod def INPUT_TYPES(cls): @@ -188,7 +274,8 @@ class VLLMOmniUnderstanding(_VLLMOmniGenerateBase): use_audio_in_video: bool = True, **kwargs, ) -> tuple[str, AudioInput]: - logger.info("Uncaught kwargs: %s", kwargs) + if kwargs: + logger.info("Uncaught kwargs: %s", kwargs) logger.debug("Got sampling params: %s", sampling_params) validate_model_and_sampling_params_types(model, sampling_params) @@ -547,6 +634,52 @@ class VLLMOmniSamplingParamsList: return (params,) +class VLLMOmniRemoteLoRA: + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "local_path": ("STRING", {"default": ""}), + "name": ("STRING", {"default": ""}), + "scale": ( + "FLOAT", + {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.1}, + ), + "int_id": ( + "INT", + { + "default": 0, + "min": 0, + "step": 1, + "tooltip": "0 means it is not set and the server can derive it.", + }, + ), + } + } + + RETURN_TYPES = ("REMOTE_LORA",) + RETURN_NAMES = ("lora",) + FUNCTION = "get_lora" + CATEGORY = "vLLM-Omni" + + @classmethod + def VALIDATE_INPUTS(cls, local_path, name) -> str | Literal[True]: + if not local_path.strip() or not name.strip(): + return "Both local_path and name must be provided." + return True + + def get_lora(self, local_path: str, name: str, scale: float, int_id: int): + local_path = local_path.strip() + name = name.strip() + lora = { + "local_path": local_path or None, + "name": name or None, + "scale": float(scale), + "int_id": int(int_id) if int_id > 0 else None, + } + return (lora,) + + class VLLMOmniQwenTTSParams: @classmethod def INPUT_TYPES(cls): @@ -572,3 +705,32 @@ class VLLMOmniQwenTTSParams: def get_params(self, **kwargs): return (QwenTTSModelSpecificParams(kwargs),) + + +class VLLMOmniWanParams: + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "guidance_scale_2": ( + "FLOAT", + {"default": 4.0, "min": 0.0, "max": 20.0, "step": 0.1}, + ), + "boundary_ratio": ( + "FLOAT", + {"default": 0.875, "min": 0.0, "max": 1.0, "step": 0.001}, + ), + "flow_shift": ( + "FLOAT", + {"default": 5.0, "min": 0.0, "max": 100.0, "step": 0.1}, + ), + } + } + + RETURN_TYPES = ("VIDEO_PARAMS",) + RETURN_NAMES = ("Wan video params",) + FUNCTION = "get_params" + CATEGORY = "vLLM-Omni/Video Params" + + def get_params(self, **kwargs): + return (WanModelSpecificParams(kwargs),) diff --git a/apps/ComfyUI-vLLM-Omni/comfyui_vllm_omni/utils/api_client.py b/apps/ComfyUI-vLLM-Omni/comfyui_vllm_omni/utils/api_client.py index d340073bc..2c936d33f 100644 --- a/apps/ComfyUI-vLLM-Omni/comfyui_vllm_omni/utils/api_client.py +++ b/apps/ComfyUI-vLLM-Omni/comfyui_vllm_omni/utils/api_client.py @@ -6,6 +6,7 @@ The image generation part is derived from dougbtv/comfyui-vllm-omni by Doug (@do Original source at https://github.com/dougbtv/comfyui-vllm-omni, distributed under the MIT License. """ +import json from typing import Any import aiohttp @@ -17,6 +18,7 @@ from .format import ( audio_to_base64, base64_to_audio, base64_to_image_tensor, + base64_to_video, bytes_to_audio, image_tensor_to_base64, image_tensor_to_png_bytes, @@ -30,7 +32,7 @@ logger = get_logger(__name__) class VLLMOmniClient: - def __init__(self, base_url: str, timeout: float = 300.0): + def __init__(self, base_url: str, timeout: float | None = None): self.base_url = base_url self.timeout = aiohttp.ClientTimeout(total=timeout) @@ -43,12 +45,13 @@ class VLLMOmniClient: height: int, negative_prompt: str | None = None, sampling_params: dict | None = None, + lora: dict | None = None, ) -> torch.Tensor: """Run text-to-image generation via DALLE API""" await self._check_model_exist(model) size = f"{width}x{height}" - payload = { + payload: dict[str, Any] = { "model": model, "prompt": prompt, "size": size, @@ -58,6 +61,8 @@ class VLLMOmniClient: payload["negative_prompt"] = negative_prompt if sampling_params is not None: payload.update(sampling_params) + if lora is not None: + payload["lora"] = lora logger.debug("img gen payload: %s", payload) url = self.base_url + "/images/generations" @@ -110,6 +115,7 @@ class VLLMOmniClient: negative_prompt: str | None = None, mask: torch.Tensor | None = None, sampling_params: dict | None = None, + lora: dict | None = None, ) -> torch.Tensor: """Run image editing via DALLE API""" await self._check_model_exist(model) @@ -131,6 +137,8 @@ class VLLMOmniClient: if sampling_params is not None: for k, v in sampling_params.items(): form.add_field(k, str(v)) + if lora is not None: + form.add_field("lora", json.dumps(lora, ensure_ascii=False)) if mask is not None: mask_filename = "mask.png" form.add_field( @@ -183,6 +191,7 @@ class VLLMOmniClient: audio: AudioInput | None = None, video: VideoInput | None = None, sampling_params: dict | list[dict] | None = None, + lora: dict | None = None, ) -> torch.Tensor: payload = VLLMOmniClient._prepare_chat_completion_messages( model=model, @@ -193,6 +202,8 @@ class VLLMOmniClient: video=video, sampling_params=sampling_params, modalities=["image"], + # === below are additional `extra_body` fields, handled by **kwargs === + lora=lora, ) choices = await self._generate_base_chat_completion(model, payload) @@ -206,6 +217,79 @@ class VLLMOmniClient: return torch.stack(image_tensors, dim=0) + async def generate_video( + self, + *, + model: str, + prompt: str, + width: int, + height: int, + num_frames: int, + fps: int, + negative_prompt: str | None = None, + image: torch.Tensor | None = None, + sampling_params: dict | None = None, + model_params: dict | None = None, + lora: dict | None = None, + **extra_body, + ) -> VideoInput: + form = aiohttp.FormData() + form.add_field("model", model) + form.add_field("prompt", prompt) + form.add_field("width", str(width)) + form.add_field("height", str(height)) + form.add_field("num_frames", str(num_frames)) + form.add_field("fps", str(fps)) + if negative_prompt: + form.add_field("negative_prompt", negative_prompt) + if sampling_params is not None: + for k, v in sampling_params.items(): + form.add_field(k, str(v)) + if model_params is not None: + for k, v in model_params.items(): + form.add_field(k, str(v)) + if lora is not None: + form.add_field("lora", json.dumps(lora, ensure_ascii=False)) + if extra_body: + form.add_field("extra_body", json.dumps(extra_body, ensure_ascii=False)) + + if image is not None: + image_filename = "image.png" # Required for multipart form + form.add_field( + "input_reference", + image_tensor_to_png_bytes(image, image_filename), + filename=image_filename, + content_type="image/png", + ) + + url = self.base_url + "/videos" + async with aiohttp.ClientSession(timeout=self.timeout) as session: + try: + async with session.post(url, data=form) as response: + if not response.ok: + error_text = await response.text() + raise (ValueError if response.status < 500 else RuntimeError)( + f"vLLM-Omni API returned status {response.status}: {error_text}" + ) + + try: + data = await response.json() + except aiohttp.ContentTypeError as e: + raise RuntimeError(f"Invalid JSON response from vLLM-Omni: {e}") + except aiohttp.ClientError as e: + raise RuntimeError(f"Network error connecting to vLLM-Omni at {url}: {e}") + + if "data" not in data: + raise RuntimeError("API response missing 'data' field - expected OpenAI DALL-E format") + if not data["data"]: + raise RuntimeError("API returned empty data array") + try: + base64_str = data["data"][0]["b64_json"] + except (KeyError, IndexError): + raise RuntimeError("API response missing 'b64_json' field in first data item") + + return base64_to_video(base64_str) + async def generate_understanding_chat_completion( self, *, diff --git a/apps/ComfyUI-vLLM-Omni/comfyui_vllm_omni/utils/format.py b/apps/ComfyUI-vLLM-Omni/comfyui_vllm_omni/utils/format.py index 0ddf86f9c..642c83c8d 100644 --- a/apps/ComfyUI-vLLM-Omni/comfyui_vllm_omni/utils/format.py +++ b/apps/ComfyUI-vLLM-Omni/comfyui_vllm_omni/utils/format.py @@ -6,12 +6,17 @@ Original source at https://github.com/dougbtv/comfyui-vllm-omni, distributed und import base64 import mimetypes +from fractions import Fraction from io import BytesIO import av import numpy as np import torch +from av.audio.frame import AudioFrame +from av.audio.resampler import AudioResampler +from av.video.frame import VideoFrame from comfy_api.input import AudioInput, VideoInput +from comfy_api.latest import InputImpl, Types from comfy_extras import nodes_audio from PIL import Image @@ -138,6 +143,71 @@ def video_to_base64(video: VideoInput, filename: str = "video.mp4") -> str: return f"data:{mime_type};base64,{base64_str}" +def base64_to_video(base64_str: str) -> VideoInput: + if base64_str.startswith("data:video"): + _, base64_str = base64_str.split(",", 1) + + try: + video_bytes = base64.b64decode(base64_str) + except Exception as e: + raise ValueError(f"Invalid base64 string: {e}") + + video_buffer = BytesIO(video_bytes) + + try: + with av.open(video_buffer, mode="r") as container: + video_stream = next((s for s in container.streams if s.type == "video"), None) + if video_stream is None: + raise ValueError("No video stream found in decoded payload.") + + frames = [] + for frame in container.decode(video_stream): + if not isinstance(frame, VideoFrame): + continue + image = frame.to_ndarray(format="rgb24") + frames.append(torch.from_numpy(image).float() / 255.0) + + if len(frames) == 0: + raise ValueError("No video frames found in decoded payload.") + + images = torch.stack(frames, dim=0) + frame_rate = Fraction(video_stream.average_rate) if video_stream.average_rate else Fraction(1) + + audio: AudioInput | None = None + if len(container.streams.audio): + audio_stream = container.streams.audio[-1] + audio_frames = [] + resampler = AudioResampler(format="fltp") + for frame in container.decode(audio_stream): + if not isinstance(frame, AudioFrame): + continue + resampled = resampler.resample(frame) + if not isinstance(resampled, list): + resampled = [resampled] + for audio_frame in resampled: + if audio_frame is not None: + audio_frames.append(audio_frame.to_ndarray()) + + if len(audio_frames) > 0: + audio_data = np.concatenate(audio_frames, axis=1) + sample_rate = int(audio_stream.sample_rate) if audio_stream.sample_rate else 1 + audio = { + "waveform": torch.from_numpy(audio_data).unsqueeze(0), + "sample_rate": sample_rate, + } + + components = Types.VideoComponents( + images=images, + frame_rate=frame_rate, + audio=audio, + metadata=container.metadata if container.metadata else None, + ) + except Exception as e: + raise RuntimeError(f"Failed to decode video: {e}") + + return InputImpl.VideoFromComponents(components) + + def audio_to_bytes(audio: AudioInput, filename: str = "audio.mp3", quality: str = "128k") -> BytesIO: waveform = audio["waveform"][0] # Shape: (C, T) sample_rate = audio["sample_rate"] diff --git a/apps/ComfyUI-vLLM-Omni/comfyui_vllm_omni/utils/types.py b/apps/ComfyUI-vLLM-Omni/comfyui_vllm_omni/utils/types.py index 6cc79f3ed..c7d254eb9 100644 --- a/apps/ComfyUI-vLLM-Omni/comfyui_vllm_omni/utils/types.py +++ b/apps/ComfyUI-vLLM-Omni/comfyui_vllm_omni/utils/types.py @@ -23,6 +23,10 @@ class QwenTTSModelSpecificParams(dict): pass +class WanModelSpecificParams(dict): + pass + + class ModelMode(Enum): IMAGE_GENERATION = auto() VIDEO_GENERATION = auto() diff --git a/apps/ComfyUI-vLLM-Omni/comfyui_vllm_omni/utils/validators.py b/apps/ComfyUI-vLLM-Omni/comfyui_vllm_omni/utils/validators.py index 2abdd2100..c5ac4bdf4 100644 --- a/apps/ComfyUI-vLLM-Omni/comfyui_vllm_omni/utils/validators.py +++ b/apps/ComfyUI-vLLM-Omni/comfyui_vllm_omni/utils/validators.py @@ -16,7 +16,7 @@ def validate_model_and_sampling_params_types( # Skip if no spec or no sampling params pipeline_spec, _ = lookup_model_spec(model_name) if pipeline_spec is None: - logger.info("skipping sampling params check because spec is not found") + logger.info(f"skipping sampling params check because spec for {model_name} is not found") return if sampling_param_list is None: return diff --git a/apps/ComfyUI-vLLM-Omni/docs/images/comfyui-video-generation.jpg b/apps/ComfyUI-vLLM-Omni/docs/images/comfyui-video-generation.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a449a4eee70b9fdcb52bf4485e0e747a7f600b47 GIT binary patch literal 132038 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 z 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 Templates -> vLLM-Omni**) @@ -59,7 +60,7 @@ To build a simple workflow yourself, - Drag a generation node onto the canvas. - Depending on your need, grab built-in multimedia file loader nodes, such as **image->Load Image**, **image->video->Load Video**, **audio->Load Audio** -- Depending on your need, grab built-in multimedia file preview nodes, such as **image->Preview Image**, **image->video->Save Video**, **audio->Preview Audio**. For text output, you can install [ComfyUI-Custom-Scripts plugin](https://github.com/pythongosssss/ComfyUI-Custom-Scripts/) and grab its **utils->Show Text 🐍** node. +- Depending on your need, grab built-in multimedia file preview nodes, such as **image->Preview Image**, **image->video->Save Video**, **audio->Preview Audio**, **utils->Preview as Text**. - If you want to tune sampling parameters, grab corresponding nodes from **vLLM-Omni-> Sampling Params**. - For multi-stage models, you can connect multiple **AR Sampling Params** and **Diffusion Sampling Params** nodes to a **Multi-Stage Sampling Params List** node, and connect this node to the generation node. - For some multi-stage models like BAGEL, [only one stage's sampling parameters are exposed and tunable via vLLM-Omni's online serving API](https://docs.vllm.ai/projects/vllm-omni/en/latest/user_guide/examples/online_serving/bagel/). Thus, these models are treated as single-stage ones. Please check the vLLM-Omni documentation on how to correctly set each model's sampling parameters. diff --git a/tests/comfyui/conftest.py b/tests/comfyui/conftest.py index 7c9770b8e..0b4565e94 100644 --- a/tests/comfyui/conftest.py +++ b/tests/comfyui/conftest.py @@ -63,6 +63,12 @@ def _setup_comfyui_test_environment(): mock_comfy_api_input.AudioInput = AudioInput mock_comfy_api_input.VideoInput = VideoInput mock_comfy_api.input = mock_comfy_api_input + mock_comfy_api_latest = MagicMock() + mock_comfy_api_latest.Types.VideoComponents = MagicMock(side_effect=lambda **kwargs: kwargs) + mock_comfy_api_latest.InputImpl.VideoFromComponents = MagicMock( + side_effect=lambda _: VideoInput(b"mock_video_from_components") + ) + mock_comfy_api.latest = mock_comfy_api_latest def mock_load(_: str | BinaryIO): """Mock nodes_audio.load that returns a waveform tensor (channels, samples) and sample rate.""" @@ -78,5 +84,6 @@ def _setup_comfyui_test_environment(): # Install mock modules BEFORE importing any comfyui_vllm_omni code sys.modules["comfy_api"] = mock_comfy_api sys.modules["comfy_api.input"] = mock_comfy_api_input + sys.modules["comfy_api.latest"] = mock_comfy_api_latest sys.modules["comfy_extras"] = mock_comfy_extras sys.modules["comfy_extras.nodes_audio"] = mock_nodes_audio diff --git a/tests/comfyui/test_comfyui_integration.py b/tests/comfyui/test_comfyui_integration.py index 463596326..d28818ab0 100644 --- a/tests/comfyui/test_comfyui_integration.py +++ b/tests/comfyui/test_comfyui_integration.py @@ -20,11 +20,12 @@ import torch from comfy_api.input import AudioInput, VideoInput from comfyui_vllm_omni.nodes import ( VLLMOmniGenerateImage, + VLLMOmniGenerateVideo, VLLMOmniTTS, VLLMOmniUnderstanding, VLLMOmniVoiceClone, ) -from comfyui_vllm_omni.utils.types import AutoregressionSamplingParams, DiffusionSamplingParams +from comfyui_vllm_omni.utils.types import AutoregressionSamplingParams, DiffusionSamplingParams, WanModelSpecificParams from PIL import Image from vllm import SamplingParams from vllm.outputs import CompletionOutput, RequestOutput @@ -34,6 +35,8 @@ from vllm_omni.entrypoints.cli.serve import OmniServeCommand from vllm_omni.inputs.data import OmniSamplingParams from vllm_omni.outputs import OmniRequestOutput +pytestmark = [pytest.mark.core_model, pytest.mark.cpu] + class ServerCase(NamedTuple): """Parametrizing the model to serve.""" @@ -49,6 +52,7 @@ class SamplingCase(NamedTuple): kind: "SamplingKind" sampling_params: dict | list[dict] | None + lora: dict | None = None class SamplingKind(StrEnum): @@ -58,11 +62,17 @@ class SamplingKind(StrEnum): UNDERSTANDING_AR_LIST = auto() TTS_NONE = auto() TTS_DIFFUSION_SINGLE = auto() + VIDEO_NONE = auto() + VIDEO_DIFFUSION_SINGLE = auto() # Pre-defined arguments to be used in function calls during the tests IMAGE_WIDTH = 64 IMAGE_HEIGHT = 64 +VIDEO_WIDTH = 32 +VIDEO_HEIGHT = 32 +VIDEO_FPS = 8 +VIDEO_NUM_FRAMES = 5 DIFFUSION_SINGLE_SAMPLING_PARAMS = DiffusionSamplingParams( { "n": 2, @@ -102,6 +112,10 @@ AR_LIST_SAMPLING_PARAMS = [ ), ] +VIDEO_MODEL_PARAMS = WanModelSpecificParams({"guidance_scale_2": 5.0, "boundary_ratio": 0.98, "flow_shift": 12.0}) + +LORA_PARAMS = {"local_path": "test_lora_path", "name": "test_name", "scale": 0.7, "int_id": 10} + def _build_image_output(size: tuple[int, int] = (IMAGE_WIDTH, IMAGE_HEIGHT), color: str = "red") -> Image.Image: return Image.new("RGB", size, color=color) @@ -181,6 +195,16 @@ def _build_diffusion_image_output_for_images_endpoint() -> OmniRequestOutput: ) +def _build_diffusion_video_output() -> OmniRequestOutput: + # Small video: VIDEO_NUM_FRAMES frames of (VIDEO_HEIGHT x VIDEO_WIDTH) RGB, shape (F, H, W, C) + video_frames = torch.zeros((VIDEO_NUM_FRAMES, VIDEO_HEIGHT, VIDEO_WIDTH, 3), dtype=torch.float32) + return OmniRequestOutput.from_diffusion( + request_id="test_req_video", + images=[video_frames], + final_output_type="video", + ) + + def _build_diffusion_image_output_for_chat_endpoint() -> OmniRequestOutput: request_output = MagicMock() request_output.images = [_build_image_output(color="blue")] @@ -193,12 +217,40 @@ def _build_diffusion_image_output_for_chat_endpoint() -> OmniRequestOutput: ) -def _assert_sampling_param_values(received: OmniSamplingParams, expected: dict[str, Any]): +def _assert_sampling_param_values( + received: OmniSamplingParams, expected: dict[str, Any], expected_lora: dict | None = None +): for key, expected_value in expected.items(): - actual_value = getattr(received, key, None) + actual_value = getattr(received, key) assert actual_value == expected_value, ( f"Expected sampling param '{key}'={expected_value}, got {actual_value}. The received sampling params: {received}" ) + if expected_lora: + assert received.lora_request.lora_name == expected_lora["name"], ( + f"Expected lora name={(expected_lora['name'])}, got {received.lora_request.lora_name}. The received sampling params: {received}" + ) + assert received.lora_request.lora_int_id == expected_lora["int_id"], ( + f"Expected lora int_id={expected_lora['int_id']}, got {received.lora_request.lora_int_id}. The received sampling params: {received}" + ) + assert received.lora_request.lora_path == expected_lora["local_path"], ( + f"Expected lora path={expected_lora['local_path']}, got {received.lora_request.lora_path}. The received sampling params: {received}" + ) + assert received.lora_scale == expected_lora["scale"], ( + f"Expected lora scale={expected_lora['scale']}, got {received.lora_scale}. The received sampling params: {received}" + ) + + +def _assert_model_param_values(received: OmniSamplingParams, expected: dict): + for key, expected_value in expected.items(): + try: + actual_value = getattr(received, key) + expected_param_name = key + except AttributeError: + actual_value = received.extra_args.get(key, None) + expected_param_name = f'extra_args["{key}"]' + assert actual_value == expected_value, ( + f"Expected model param '{expected_param_name}'={expected_value}, got {actual_value}. The received sampling params: {received}" + ) def _build_mock_outputs(outputs: Iterable[OmniRequestOutput], sampling_case: SamplingCase, server_case: ServerCase): @@ -235,6 +287,7 @@ def _build_mock_outputs(outputs: Iterable[OmniRequestOutput], sampling_case: Sam "height": IMAGE_HEIGHT, **expected, }, + LORA_PARAMS, ) elif sampling_case.kind is SamplingKind.UNDERSTANDING_NONE: assert len(received_sampling_params_list) == 3 @@ -244,6 +297,33 @@ def _build_mock_outputs(outputs: Iterable[OmniRequestOutput], sampling_case: Sam _assert_sampling_param_values(received_sampling_params_list[i], expected) elif sampling_case.kind in {SamplingKind.TTS_NONE, SamplingKind.TTS_DIFFUSION_SINGLE}: assert len(received_sampling_params_list) == 1 + elif sampling_case.kind is SamplingKind.VIDEO_NONE: + assert len(received_sampling_params_list) == 1 + _assert_sampling_param_values( + received_sampling_params_list[0], + { + "width": VIDEO_WIDTH, + "height": VIDEO_HEIGHT, + "num_frames": VIDEO_NUM_FRAMES, + "fps": VIDEO_FPS, + }, + ) + elif sampling_case.kind is SamplingKind.VIDEO_DIFFUSION_SINGLE: + assert len(received_sampling_params_list) == 1 + expected = DIFFUSION_SINGLE_SAMPLING_PARAMS.copy() + expected["num_outputs_per_prompt"] = expected.pop("n") # convert from n to num_outputs_per_prompt + _assert_sampling_param_values( + received_sampling_params_list[0], + { + "width": VIDEO_WIDTH, + "height": VIDEO_HEIGHT, + "num_frames": VIDEO_NUM_FRAMES, + "fps": VIDEO_FPS, + **expected, + }, + LORA_PARAMS, + ) + _assert_model_param_values(received_sampling_params_list[0], VIDEO_MODEL_PARAMS) else: raise AssertionError(f"Unknown sampling case: {sampling_case.kind}") @@ -401,9 +481,15 @@ def api_server(unused_tcp_port_factory, server_case: ServerCase, mock_async_omni @pytest.mark.parametrize( "sampling_case", [ - pytest.param(SamplingCase(kind=SamplingKind.IMAGE_NONE, sampling_params=None), id="no-sampling-params"), pytest.param( - SamplingCase(kind=SamplingKind.IMAGE_DIFFUSION_SINGLE, sampling_params=DIFFUSION_SINGLE_SAMPLING_PARAMS), + SamplingCase(kind=SamplingKind.IMAGE_NONE, sampling_params=None, lora=None), id="no-sampling-params" + ), + pytest.param( + SamplingCase( + kind=SamplingKind.IMAGE_DIFFUSION_SINGLE, + sampling_params=DIFFUSION_SINGLE_SAMPLING_PARAMS, + lora=LORA_PARAMS, + ), id="single-diffusion-sampling-params", ), ], @@ -423,7 +509,8 @@ async def test_image_generation_node(api_server: str, model: str, image_input: b kwargs["image"] = torch.zeros((1, IMAGE_WIDTH, IMAGE_HEIGHT, 3), dtype=torch.float32) if sampling_case.sampling_params is not None: kwargs["sampling_params"] = sampling_case.sampling_params - print(f"!!!!!! Calling {model} node.generate with kwargs: {sampling_case.sampling_params}") + if sampling_case.lora: + kwargs["lora"] = sampling_case.lora result = await node.generate(**kwargs) @@ -565,3 +652,75 @@ async def test_tts_nodes(api_server: str, node_cls, call_kwargs: dict, sampling_ assert result[0]["sample_rate"] == 24000 assert isinstance(result[0]["waveform"], torch.Tensor) assert result[0]["waveform"].shape == (1, 1, 24000) + + +@pytest.mark.asyncio +@pytest.mark.parametrize( + "server_case,model,image_input", + [ + pytest.param( + ServerCase( + served_model="Wan-AI/Wan2.2-T2V-A14B-Diffusers", + stage_list=["diffusion"], + stage_configs=[{"stage_type": "diffusion"}], + outputs=[_build_diffusion_video_output()], + ), + "Wan-AI/Wan2.2-T2V-A14B-Diffusers", + False, + id="text-to-video", + ), + pytest.param( + ServerCase( + served_model="Wan-AI/Wan2.2-I2V-A14B-Diffusers", + stage_list=["diffusion"], + stage_configs=[{"stage_type": "diffusion"}], + outputs=[_build_diffusion_video_output()], + ), + "Wan-AI/Wan2.2-I2V-A14B-Diffusers", + True, + id="image-to-video", + ), + ], + indirect=["server_case"], +) +@pytest.mark.parametrize( + "sampling_case", + [ + pytest.param(SamplingCase(kind=SamplingKind.VIDEO_NONE, sampling_params=None), id="no-sampling-params"), + pytest.param( + SamplingCase( + kind=SamplingKind.VIDEO_DIFFUSION_SINGLE, + sampling_params=DIFFUSION_SINGLE_SAMPLING_PARAMS, + lora=LORA_PARAMS, + ), + id="single-diffusion-sampling-params", + ), + ], + indirect=["sampling_case"], +) +async def test_video_generation_node(api_server: str, model: str, image_input: bool, sampling_case: SamplingCase): + node = VLLMOmniGenerateVideo() + + kwargs = { + "url": api_server, + "model": model, + "prompt": "A beautiful sunset timelapse", + "negative_prompt": "", + "width": VIDEO_WIDTH, + "height": VIDEO_HEIGHT, + "fps": VIDEO_FPS, + "num_frames": VIDEO_NUM_FRAMES, + "model_params": VIDEO_MODEL_PARAMS, + } + if image_input: + kwargs["image"] = torch.zeros((1, VIDEO_HEIGHT, VIDEO_WIDTH, 3), dtype=torch.float32) + if sampling_case.sampling_params is not None: + kwargs["sampling_params"] = sampling_case.sampling_params + if sampling_case.lora: + kwargs["lora"] = sampling_case.lora + + result = await node.generate(**kwargs) + + assert isinstance(result, tuple) + assert len(result) == 1 + assert isinstance(result[0], VideoInput) diff --git a/tests/entrypoints/openai_api/test_image_server.py b/tests/entrypoints/openai_api/test_image_server.py index 36c58b3d8..743e36a05 100644 --- a/tests/entrypoints/openai_api/test_image_server.py +++ b/tests/entrypoints/openai_api/test_image_server.py @@ -136,7 +136,6 @@ def mock_async_diffusion(mocker: MockerFixture): async def generate(**kwargs): # Return n PIL images wrapped in result object - print("!!!!!!!!!!!!!!!!!!!!! kwargs", kwargs) n = kwargs["sampling_params_list"][0].num_outputs_per_prompt mock.captured_sampling_params_list = kwargs["sampling_params_list"] mock.captured_prompt = kwargs["prompt"]