Ciciko / app.py
sharul20001's picture
Update app.py
c9777db verified
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()