import gradio as gr import torch from diffusers import AutoencoderKLWan, WanPipeline from diffusers.utils import export_to_video import spaces # ZeroGPU integration 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) # Remain on CPU for now print("Model preloaded on CPU.") return pipeline_cpu # Load the model on CPU during container initialization. PIPELINE_CPU = load_pipeline_on_cpu() PIPELINE_GPU = None # Will hold the GPU-loaded pipeline after the first request @spaces.GPU # This ensures GPU is only initialized in the request worker process def generate_video(prompt, negative_prompt=""): global PIPELINE_GPU # Move to GPU on first request if not already done. 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 # Generate video frames at 480p resolution output = pipeline_gpu( prompt=prompt, negative_prompt=negative_prompt, height=480, # 480p height width=832, # Suitable width for 480p videos num_frames=81, # Adjust for desired video length guidance_scale=5.0 # Recommended guidance scale for the 1.3B model ).frames[0] video_path = "output.mp4" export_to_video(output, video_path, fps=15) return video_path # Create the Gradio interface 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()