Spaces:
Build error
Build error
| import gradio as gr | |
| from diffusers import StableDiffusionPipeline, DPMSolverMultistepScheduler | |
| import torch | |
| from moviepy import ImageSequenceClip | |
| import numpy as np | |
| import random | |
| # Load model | |
| device = "cuda" if torch.cuda.is_available() else "cpu" | |
| pipe = StableDiffusionPipeline.from_pretrained( | |
| "runwayml/stable-diffusion-v1-5", | |
| variant="fp16" | |
| ).to(device) | |
| pipe.scheduler = DPMSolverMultistepScheduler.from_config(pipe.scheduler.config) | |
| def generate_frames(prompt, num_frames, guidance_scale, num_inference_steps, seed): | |
| frames = [] | |
| seed = seed if seed is not None else random.randint(0, 1000000) | |
| generator = torch.Generator(device=device).manual_seed(seed) | |
| with torch.inference_mode(): | |
| for i in range(num_frames): | |
| # Variasikan prompt sedikit untuk setiap frame | |
| prompt_with_variation = f"{prompt} --v {i}" | |
| image = pipe(prompt_with_variation, | |
| num_images=1, | |
| guidance_scale=guidance_scale, | |
| num_inference_steps=num_inference_steps, | |
| generator=generator).images[0] | |
| frames.append(np.array(image)) | |
| return frames | |
| def create_video(frames, output_filename="output.mp4", fps=24): | |
| clip = ImageSequenceClip(frames, fps=fps) | |
| clip.write_videofile(output_filename, codec='libx264', audio=False, bitrate="5000k") | |
| return output_filename | |
| def process_video(prompt, num_frames, guidance_scale, num_inference_steps, seed): | |
| frames = generate_frames(prompt, num_frames, guidance_scale, num_inference_steps, seed) | |
| output_filename = create_video(frames) | |
| return gr.File(output_filename) | |
| iface = gr.Interface( | |
| fn=process_video, | |
| inputs=[ | |
| gr.Textbox(lines=1, placeholder="Masukkan prompt Anda di sini...", label="Prompt"), | |
| gr.Slider(minimum=5, maximum=30, step=1, value=10, label="Jumlah Frame"), | |
| gr.Slider(minimum=1, maximum=20, step=0.5, value=7.5, label="Guidance Scale"), | |
| gr.Slider(minimum=10, maximum=50, step=5, value=20, label="Inference Steps"), | |
| gr.Number(label="Seed (opsional)", value=None), | |
| ], | |
| outputs=gr.File(label="Video Output"), | |
| title="Stable Diffusion Video Generator", | |
| description="Buat video pendek dari text prompt menggunakan Stable Diffusion!", | |
| ) | |
| iface.launch(share=True) |