From 84f8e34efee55845679bfc08ab7c2b1c83a8155e Mon Sep 17 00:00:00 2001 From: SolitaryThinker Date: Mon, 28 Jul 2025 21:08:23 +0000 Subject: [PATCH] Fastwan 14B and inp sampling param and optional image_path --- fastvideo/configs/pipelines/registry.py | 1 + fastvideo/configs/sample/registry.py | 7 +++++-- fastvideo/configs/sample/wan.py | 15 +++++++++++++++ fastvideo/pipelines/stages/encoding.py | 10 +++++----- fastvideo/pipelines/stages/image_encoding.py | 9 ++++++--- 5 files changed, 32 insertions(+), 10 deletions(-) diff --git a/fastvideo/configs/pipelines/registry.py b/fastvideo/configs/pipelines/registry.py index 86620abac..844815f20 100644 --- a/fastvideo/configs/pipelines/registry.py +++ b/fastvideo/configs/pipelines/registry.py @@ -26,6 +26,7 @@ PIPE_NAME_TO_CONFIG: dict[str, type[PipelineConfig]] = { "Wan-AI/Wan2.1-I2V-14B-720P-Diffusers": WanI2V720PConfig, "Wan-AI/Wan2.1-T2V-14B-Diffusers": WanT2V720PConfig, "FastVideo/FastWan2.1-T2V-1.3B-Diffusers": FastWanT2V480PConfig, + "FastVideo/FastWan2.1-T2V-14B-480P-Diffusers": FastWanT2V480PConfig, "FastVideo/stepvideo-t2v-diffusers": StepVideoT2VConfig, "FastVideo/Wan2.1-VSA-T2V-14B-720P-Diffusers": WanT2V720PConfig, # Add other specific weight variants diff --git a/fastvideo/configs/sample/registry.py b/fastvideo/configs/sample/registry.py index e6c0fe88a..e750b4db4 100644 --- a/fastvideo/configs/sample/registry.py +++ b/fastvideo/configs/sample/registry.py @@ -10,7 +10,8 @@ from fastvideo.configs.sample.wan import (FastWanT2V480PConfig, WanI2V_14B_480P_SamplingParam, WanI2V_14B_720P_SamplingParam, WanT2V_1_3B_SamplingParam, - WanT2V_14B_SamplingParam) + WanT2V_14B_SamplingParam, + Wan2_1_Fun_1_3B_InP_SamplingParam) from fastvideo.logger import init_logger from fastvideo.utils import (maybe_download_model_index, verify_model_config_and_directory) @@ -24,8 +25,10 @@ SAMPLING_PARAM_REGISTRY: dict[str, Any] = { "Wan-AI/Wan2.1-T2V-14B-Diffusers": WanT2V_14B_SamplingParam, "Wan-AI/Wan2.1-I2V-14B-480P-Diffusers": WanI2V_14B_480P_SamplingParam, "Wan-AI/Wan2.1-I2V-14B-720P-Diffusers": WanI2V_14B_720P_SamplingParam, + "weizhou03/Wan2.1-Fun-1.3B-InP-Diffusers": Wan2_1_Fun_1_3B_InP_SamplingParam, "FastVideo/stepvideo-t2v-diffusers": StepVideoT2VSamplingParam, - "FastVideo/FastWan2.1-T2V-1.3B-Diffusers": FastWanT2V480PConfig, + "FastVideo/FastWan2.1-T2V-1.3B-Diffusers": Wan2_1_Fun_1_3B_InP_SamplingParam, + "FastVideo/FastWan2.1-T2V-14B-480P-Diffusers": Wan2_1_Fun_1_3B_InP_SamplingParam, # Add other specific weight variants } diff --git a/fastvideo/configs/sample/wan.py b/fastvideo/configs/sample/wan.py index 7708095ae..ab67fd1bb 100644 --- a/fastvideo/configs/sample/wan.py +++ b/fastvideo/configs/sample/wan.py @@ -105,3 +105,18 @@ class FastWanT2V480PConfig(WanT2V_1_3B_SamplingParam): height: int = 448 width: int = 832 fps: int = 16 + + +# ============================================= +# ============= Wan2.1 Fun Models ============= +# ============================================= +@dataclass +class Wan2_1_Fun_1_3B_InP_SamplingParam(SamplingParam): + """Sampling parameters for Wan2.1 Fun 1.3B InP model.""" + height: int = 480 + width: int = 832 + num_frames: int = 81 + fps: int = 16 + negative_prompt: str | None = "色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" + guidance_scale: float = 6.0 + num_inference_steps: int = 50 diff --git a/fastvideo/pipelines/stages/encoding.py b/fastvideo/pipelines/stages/encoding.py index c8cdfab36..cb84fcbe4 100644 --- a/fastvideo/pipelines/stages/encoding.py +++ b/fastvideo/pipelines/stages/encoding.py @@ -48,14 +48,14 @@ class EncodingStage(PipelineStage): Returns: The batch with encoded outputs. """ + if batch.pil_image is None: + return batch + self.vae = self.vae.to(get_local_torch_device()) - assert batch.height is not None - assert batch.width is not None latent_height = batch.height // self.vae.spatial_compression_ratio latent_width = batch.width // self.vae.spatial_compression_ratio - assert batch.pil_image is not None image = batch.pil_image image = self.preprocess( image, @@ -194,6 +194,6 @@ class EncodingStage(PipelineStage): fastvideo_args: FastVideoArgs) -> VerificationResult: """Verify encoding stage outputs.""" result = VerificationResult() - result.add_check("image_latent", batch.image_latent, - [V.is_tensor, V.with_dims(5)]) + # result.add_check("image_latent", batch.image_latent, + # [V.is_tensor, V.with_dims(5)]) return result diff --git a/fastvideo/pipelines/stages/image_encoding.py b/fastvideo/pipelines/stages/image_encoding.py index 889c01198..dd0896435 100644 --- a/fastvideo/pipelines/stages/image_encoding.py +++ b/fastvideo/pipelines/stages/image_encoding.py @@ -55,6 +55,9 @@ class ImageEncodingStage(PipelineStage): Returns: The batch with encoded prompt embeddings. """ + if batch.pil_image is None: + return batch + self.image_encoder = self.image_encoder.to(get_local_torch_device()) image = batch.pil_image @@ -76,7 +79,7 @@ class ImageEncodingStage(PipelineStage): fastvideo_args: FastVideoArgs) -> VerificationResult: """Verify image encoding stage inputs.""" result = VerificationResult() - result.add_check("pil_image", batch.pil_image, V.not_none) + # result.add_check("pil_image", batch.pil_image, V.not_none) result.add_check("image_embeds", batch.image_embeds, V.is_list) return result @@ -84,6 +87,6 @@ class ImageEncodingStage(PipelineStage): fastvideo_args: FastVideoArgs) -> VerificationResult: """Verify image encoding stage outputs.""" result = VerificationResult() - result.add_check("image_embeds", batch.image_embeds, - V.list_of_tensors_dims(3)) + # result.add_check("image_embeds", batch.image_embeds, + # V.list_of_tensors_dims(3)) return result