| import gradio as gr |
| import torch |
| from diffusers import AutoencoderKLWan, WanPipeline |
| from diffusers.utils import export_to_video |
| import spaces |
|
|
| def load_pipeline_on_cpu(): |
| model_id = "Wan-AI/Wan2.1-T2V-1.3B-Diffusers" |
| print("Preloading model on CPU...") |
| vae = AutoencoderKLWan.from_pretrained(model_id, subfolder="vae", torch_dtype=torch.float32) |
| pipeline_cpu = WanPipeline.from_pretrained(model_id, vae=vae, torch_dtype=torch.bfloat16) |
| |
| print("Model preloaded on CPU.") |
| return pipeline_cpu |
|
|
| |
| PIPELINE_CPU = load_pipeline_on_cpu() |
| PIPELINE_GPU = None |
|
|
| @spaces.GPU |
| def generate_video(prompt, negative_prompt=""): |
| global PIPELINE_GPU |
| |
| if PIPELINE_GPU is None: |
| print("Moving model to GPU...") |
| PIPELINE_GPU = PIPELINE_CPU.to("cuda") |
| print("Model moved to GPU.") |
| pipeline_gpu = PIPELINE_GPU |
|
|
| |
| output = pipeline_gpu( |
| prompt=prompt, |
| negative_prompt=negative_prompt, |
| height=480, |
| width=832, |
| num_frames=81, |
| guidance_scale=5.0 |
| ).frames[0] |
| |
| video_path = "output.mp4" |
| export_to_video(output, video_path, fps=15) |
| return video_path |
|
|
| |
| iface = gr.Interface( |
| fn=generate_video, |
| inputs=[ |
| gr.Textbox(label="Prompt", placeholder="Enter your video prompt here"), |
| gr.Textbox(label="Negative Prompt", placeholder="Optional negative prompt", value="") |
| ], |
| outputs=gr.Video(label="Generated Video"), |
| title="Wan2.1-T2V-1.3B Video Generator", |
| description="No signing in required, all inference run locally on space. Generate 480p videos using the Wan2.1-T2V-1.3B diffusers pipeline, ZeroGPU would queue up for wayyy to long so doesn't work. Takes 3 minutes on L40S per 5 seconds of video. Copy and change HW. Everything takes 10 to 15 minutes to load up. support by giving a like or add to discussion. Please help improve this." |
| ) |
|
|
| if __name__ == "__main__": |
| iface.launch() |
|
|