diff --git a/examples/inference/basic/basic_kandinsky5_i2v.py b/examples/inference/basic/basic_kandinsky5_i2v.py index 665dd19d5..c30ca2f48 100644 --- a/examples/inference/basic/basic_kandinsky5_i2v.py +++ b/examples/inference/basic/basic_kandinsky5_i2v.py @@ -1,13 +1,15 @@ from fastvideo import VideoGenerator -OUTPUT_PATH = "video_samples_kandinsky5_2B_i2v" +OUTPUT_PATH = "video_samples_kandinsky5_i2v" IMAGE_PATH = "assets/girl.png" def main(): generator = VideoGenerator.from_pretrained( - "kandinskylab/Kandinsky-5.0-I2V-Lite-sft-5s-Diffusers", + "kandinskylab/Kandinsky-5.0-I2V-Pro-distilled-5s-Diffusers", + # "kandinskylab/Kandinsky-5.0-I2V-Pro-sft-5s-Diffusers" + # "kandinskylab/Kandinsky-5.0-I2V-Lite-5s-Diffusers" num_gpus=1, use_fsdp_inference=False, dit_cpu_offload=False, @@ -18,18 +20,15 @@ def main(): ) prompt = ( - "A woman sits at a wooden table by the window in a cozy café. She reaches out " - "with her right hand, picks up the white coffee cup from the saucer, and gently " - "brings it to her lips to take a sip. After drinking, she places the cup back on " - "the table and looks out the window, enjoying the peaceful atmosphere." + "A woman stands up and walks away" ) _ = generator.generate_video( prompt, image_path=IMAGE_PATH, output_path=OUTPUT_PATH, save_video=True, - height=512, - width=768, + height=1024, + width=1024, num_frames=121, ) diff --git a/examples/inference/basic/basic_kandinsky5_t2v.py b/examples/inference/basic/basic_kandinsky5_t2v.py index b79edb6fe..a5da476d8 100644 --- a/examples/inference/basic/basic_kandinsky5_t2v.py +++ b/examples/inference/basic/basic_kandinsky5_t2v.py @@ -1,10 +1,13 @@ from fastvideo import VideoGenerator -OUTPUT_PATH = "video_samples_kandinsky5_2B_t2v" +OUTPUT_PATH = "video_samples_kandinsky5_t2v" def main(): generator = VideoGenerator.from_pretrained( - "kandinskylab/Kandinsky-5.0-T2V-Lite-sft-5s-Diffusers", + "kandinskylab/Kandinsky-5.0-T2V-Lite-sft-5s-Diffusers", + # "kandinskylab/Kandinsky-5.0-T2V-Pro-sft-5s-Diffusers" + # "kandinskylab/Kandinsky-5.0-T2V-Lite-Distilled-5s-Diffusers" + # "kandinskylab/Kandinsky-5.0-T2V-Pro-Distilled-5s-Diffusers" num_gpus=1, use_fsdp_inference=False, dit_cpu_offload=False, diff --git a/fastvideo/pipelines/basic/kandinsky5/presets.py b/fastvideo/pipelines/basic/kandinsky5/presets.py index f75db1760..8dbd70d71 100644 --- a/fastvideo/pipelines/basic/kandinsky5/presets.py +++ b/fastvideo/pipelines/basic/kandinsky5/presets.py @@ -34,6 +34,60 @@ KANDINSKY5_T2V_LITE_5S = InferencePreset( }, ) +KANDINSKY5_T2V_LITE_DISTILLED_5S = InferencePreset( + name="kandinsky5_t2v_lite_distilled_5s", + version=1, + model_family="kandinsky5", + description="Kandinsky-5.0 Lite T2V Distilled 5s", + workload_type="t2v", + stage_schemas=(_DENOISE_STAGE, ), + defaults={ + "height": 512, + "width": 768, + "num_frames": 121, + "fps": 24, + "guidance_scale": 1.0, + "num_inference_steps": 16, + "negative_prompt": _NEGATIVE_PROMPT, + }, +) + +KANDINSKY5_T2V_PRO_5S = InferencePreset( + name="kandinsky5_t2v_pro_5s", + version=1, + model_family="kandinsky5", + description="Kandinsky-5.0 Pro T2V 5s", + workload_type="t2v", + stage_schemas=(_DENOISE_STAGE, ), + defaults={ + "height": 512, + "width": 768, + "num_frames": 121, + "fps": 24, + "guidance_scale": 5.0, + "num_inference_steps": 50, + "negative_prompt": _NEGATIVE_PROMPT, + }, +) + +KANDINSKY5_T2V_PRO_DISTILLED_5S = InferencePreset( + name="kandinsky5_t2v_pro_distilled_5s", + version=1, + model_family="kandinsky5", + description="Kandinsky-5.0 Pro T2V Distilled 5s", + workload_type="t2v", + stage_schemas=(_DENOISE_STAGE, ), + defaults={ + "height": 512, + "width": 768, + "num_frames": 121, + "fps": 24, + "guidance_scale": 1.0, + "num_inference_steps": 16, + "negative_prompt": _NEGATIVE_PROMPT, + }, +) + KANDINSKY5_I2V_LITE_5S = InferencePreset( name="kandinsky5_i2v_lite_5s", version=1, @@ -52,4 +106,40 @@ KANDINSKY5_I2V_LITE_5S = InferencePreset( }, ) -ALL_PRESETS = (KANDINSKY5_T2V_LITE_5S, KANDINSKY5_I2V_LITE_5S) +KANDINSKY5_I2V_PRO_5S = InferencePreset( + name="kandinsky5_i2v_pro_5s", + version=1, + model_family="kandinsky5", + description="Kandinsky-5.0 Pro I2V 5s", + workload_type="i2v", + stage_schemas=(_DENOISE_STAGE, ), + defaults={ + "height": 512, + "width": 768, + "num_frames": 121, + "fps": 24, + "guidance_scale": 5.0, + "num_inference_steps": 50, + "negative_prompt": _NEGATIVE_PROMPT, + }, +) + +KANDINSKY5_I2V_PRO_DISTILLED_5S = InferencePreset( + name="kandinsky5_i2v_pro_distilled_5s", + version=1, + model_family="kandinsky5", + description="Kandinsky-5.0 Pro I2V Distilled 5s", + workload_type="i2v", + stage_schemas=(_DENOISE_STAGE, ), + defaults={ + "height": 512, + "width": 768, + "num_frames": 121, + "fps": 24, + "guidance_scale": 1.0, + "num_inference_steps": 16, + "negative_prompt": _NEGATIVE_PROMPT, + }, +) + +ALL_PRESETS = (KANDINSKY5_T2V_LITE_5S, KANDINSKY5_T2V_LITE_DISTILLED_5S, KANDINSKY5_T2V_PRO_5S, KANDINSKY5_T2V_PRO_DISTILLED_5S, KANDINSKY5_I2V_LITE_5S, KANDINSKY5_I2V_PRO_5S, KANDINSKY5_I2V_PRO_DISTILLED_5S) diff --git a/fastvideo/registry.py b/fastvideo/registry.py index af78894ce..7da30bffd 100644 --- a/fastvideo/registry.py +++ b/fastvideo/registry.py @@ -504,6 +504,7 @@ def _register_configs() -> None: workload_types=(WorkloadType.T2V, ), hf_model_paths=[ "kandinskylab/Kandinsky-5.0-T2V-Lite-sft-5s-Diffusers", + ], model_detectors=[ lambda path: any(token in path.lower() for token in ("kandinsky5", "kandinsky-5")) @@ -514,14 +515,65 @@ def _register_configs() -> None: pipeline_cls_name="Kandinsky5T2VPipeline", ) - # Kandinsky5 I2V + # Kandinsky5 Pro T2V + register_configs( + sampling_param_cls=None, + pipeline_config_cls=Kandinsky5T2VConfig, + workload_types=(WorkloadType.T2V, ), + hf_model_paths=[ + "kandinskylab/Kandinsky-5.0-T2V-Pro-sft-5s-Diffusers", + + ], + model_detectors=[ + lambda path: any(token in path.lower() for token in ("kandinsky5", "kandinsky-5")) + and "i2v" not in path.lower(), + ], + model_family="kandinsky5", + default_preset="kandinsky5_t2v_pro_5s", + ) + + # Kandinsky5 Lite T2V Distilled + register_configs( + sampling_param_cls=None, + pipeline_config_cls=Kandinsky5T2VConfig, + workload_types=(WorkloadType.T2V, ), + hf_model_paths=[ + "kandinskylab/Kandinsky-5.0-T2V-Lite-distilled-5s-Diffusers", + + ], + model_detectors=[ + lambda path: any(token in path.lower() for token in ("kandinsky5", "kandinsky-5")) + and "i2v" not in path.lower(), + ], + model_family="kandinsky5", + default_preset="kandinsky5_t2v_lite_distilled_5s", + ) + + # Kandinsky5 Pro T2V Distilled + register_configs( + sampling_param_cls=None, + pipeline_config_cls=Kandinsky5T2VConfig, + workload_types=(WorkloadType.T2V, ), + hf_model_paths=[ + "kandinskylab/Kandinsky-5.0-T2V-Pro-distilled-5s-Diffusers", + + ], + model_detectors=[ + lambda path: any(token in path.lower() for token in ("kandinsky5", "kandinsky-5")) + and "i2v" not in path.lower(), + ], + model_family="kandinsky5", + default_preset="kandinsky5_t2v_pro_distilled_5s", + ) + + + # Kandinsky5 Lite I2V register_configs( sampling_param_cls=None, pipeline_config_cls=Kandinsky5I2VConfig, workload_types=(WorkloadType.I2V, ), hf_model_paths=[ - "kandinskylab/Kandinsky-5.0-I2V-Lite-sft-5s-Diffusers", - "kandinskylab/Kandinsky-5.0-I2V-Pro-sft-5s-Diffusers", + "kandinskylab/Kandinsky-5.0-I2V-Lite-5s-Diffusers" ], model_detectors=[ lambda path: any(token in path.lower() for token in ("kandinsky5", "kandinsky-5")) @@ -532,6 +584,38 @@ def _register_configs() -> None: pipeline_cls_name="Kandinsky5I2VPipeline", ) + # Kandinsky5 Pro I2V + register_configs( + sampling_param_cls=None, + pipeline_config_cls=Kandinsky5I2VConfig, + workload_types=(WorkloadType.I2V, ), + hf_model_paths=[ + "kandinskylab/Kandinsky-5.0-I2V-Pro-sft-5s-Diffusers" + ], + model_detectors=[ + lambda path: any(token in path.lower() for token in ("kandinsky5", "kandinsky-5")) + and "i2v" in path.lower(), + ], + model_family="kandinsky5", + default_preset="kandinsky5_i2v_pro_5s", + ) + + # Kandinsky5 Pro I2V Distilled + register_configs( + sampling_param_cls=None, + pipeline_config_cls=Kandinsky5I2VConfig, + workload_types=(WorkloadType.I2V, ), + hf_model_paths=[ + "kandinskylab/Kandinsky-5.0-I2V-Pro-distilled-5s-Diffusers" + ], + model_detectors=[ + lambda path: any(token in path.lower() for token in ("kandinsky5", "kandinsky-5")) + and "i2v" in path.lower(), + ], + model_family="kandinsky5", + default_preset="kandinsky5_i2v_pro_distilled_5s", + ) + # LongCat (T2V, I2V, VC use same config; workload varies by path) register_configs( sampling_param_cls=None,