Spaces:
Runtime error
Runtime error
File size: 2,083 Bytes
5868b5e c9777db 5868b5e c9777db 5868b5e c9777db 5868b5e c9777db 5868b5e c9777db 5868b5e c9777db 5868b5e c9777db 5868b5e c9777db 5868b5e | 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 | import gradio as gr
import torch
from diffusers import DiffusionPipeline
# π’ Load model WAN 2.2 Video Generation dari Hugging Face Hub
# Pastikan ID model benar sesuai rilis resmi (misal: "BAAI/Wan2.2-videogen")
model_id = "BAAI/Wan2.2-videogen"
pipe = DiffusionPipeline.from_pretrained(
model_id,
torch_dtype=torch.float16,
variant="fp16"
).to("cuda")
# Fungsi generate video
def generate_video(prompt, num_frames=24, fps=8, seed=42, progress=gr.Progress(track_tqdm=True)):
generator = torch.manual_seed(seed)
progress(0, desc="π Mulai generate video...")
# Jalankan pipeline untuk generate frame
output = pipe(
prompt=prompt,
num_frames=num_frames,
generator=generator
)
progress(0.7, desc="πΈ Menyusun frame menjadi video...")
# Konversi output frames β video format
video_frames = output.frames[0]
out_path = "output.mp4"
# Simpan video mp4 ke file
pipe.save_pretrained_video(video_frames, out_path, fps=fps)
progress(1, desc="β
Selesai!")
return out_path, out_path # π― untuk Video preview + File download
# UI pakai Gradio Blocks
with gr.Blocks() as demo:
gr.Markdown("## π¬ WAN 2.2 Video Generator (Hugging Face Space)")
with gr.Row():
prompt_inp = gr.Textbox(
label="Prompt",
value="Seekor naga robot terbang melintasi kota futuristik",
placeholder="Deskripsi video..."
)
with gr.Row():
frame_slider = gr.Slider(8, 64, step=8, value=24, label="Jumlah Frame")
fps_slider = gr.Slider(4, 16, step=1, value=8, label="FPS (kecepatan video)")
btn = gr.Button("π Generate Video")
with gr.Row():
video_out = gr.Video(label="Hasil Video")
download_link = gr.File(label="Unduh Video", type="file")
btn.click(
fn=generate_video,
inputs=[prompt_inp, frame_slider, fps_slider],
outputs=[video_out, download_link]
)
if __name__ == "__main__":
demo.queue(max_size=5) # antrian agar multi-user tetap stabil
demo.launch() |