Spaces:
Running
Running
File size: 2,445 Bytes
b45529f c8eea54 b0c1307 c8eea54 b0c1307 c8eea54 5562446 041221d 5562446 b0c1307 c8eea54 b0c1307 5562446 041221d b0c1307 5562446 b0c1307 5562446 b0c1307 5562446 041221d b45529f b0c1307 b45529f b0c1307 b45529f b0c1307 b45529f b82ca6d b45529f c8eea54 041221d 5562446 161cec7 5562446 041221d |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
import gradio as gr
import torch
import ftfy
from uuid import uuid4
from diffusers import WanPipeline, AutoencoderKLWan
from diffusers.schedulers.scheduling_unipc_multistep import UniPCMultistepScheduler
from diffusers.utils import export_to_video
device = "cuda" if torch.cuda.is_available() else "cpu"
print(f"Running on {device}...")
# Load model
model_id = "Wan-AI/Wan2.1-T2V-1.3B-Diffusers"
vae = AutoencoderKLWan.from_pretrained(model_id, subfolder="vae", torch_dtype=torch.float32)
scheduler = UniPCMultistepScheduler(
prediction_type='flow_prediction',
use_flow_sigmas=True,
num_train_timesteps=1000,
flow_shift=5.0
)
pipe = WanPipeline.from_pretrained(model_id, vae=vae, torch_dtype=torch.bfloat16)
pipe.scheduler = scheduler
pipe.to(device)
print("Model loaded successfully.")
def make_divisible_by_16(x):
return int(x) - int(x) % 16
def generate_video(prompt, negative_prompt="", height=480, width=832, num_frames=81, guidance_scale=5.0):
try:
print(f"Generating video with prompt: {prompt}")
if not prompt:
raise ValueError("Prompt must be provided.")
# Validate and adjust height/width
height = make_divisible_by_16(int(height))
width = make_divisible_by_16(int(width))
num_frames = int(num_frames)
guidance_scale = float(guidance_scale)
output = pipe(
prompt=prompt,
negative_prompt=negative_prompt,
height=height,
width=width,
num_frames=num_frames,
guidance_scale=guidance_scale,
).frames[0]
output_path = f"{uuid4()}.mp4"
export_to_video(output, output_path, fps=16)
print(f"Video generated: {output_path}")
return output_path
except Exception as e:
print(f"Error during video generation: {e}")
return None
iface = gr.Interface(
fn=generate_video,
inputs=[
gr.Textbox(label="Prompt", placeholder="Describe your scene..."),
gr.Textbox(label="Negative Prompt", value=""),
gr.Number(label="Height", value=480),
gr.Number(label="Width", value=832),
gr.Number(label="Number of Frames", value=81),
gr.Number(label="Guidance Scale", value=5.0),
],
outputs=gr.File(label="Generated Video")
)
# Launch Gradio app in API mode
try:
iface.launch(share=True)
except Exception as e:
print(f"Error launching Gradio app: {e}")
|