|
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() |
|
|