video / app.py
KKNTR's picture
Update app.py
9812f31 verified
import gradio as gr
import torch
from diffusers import StableDiffusionPipeline
import imageio
import numpy as np
from PIL import Image
import tempfile
import random
import os
# Lataa malli CPU:lle (muokkaa "cuda" jos GPU käytössä)
device = "cuda" if torch.cuda.is_available() else "cpu"
print(f"Using device: {device}")
pipe = StableDiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5")
pipe.to(device)
print("Model loaded!")
def generate_image(prompt, num_images=1):
generator = torch.Generator(device=device).manual_seed(random.randint(0, 2**32-1))
images = pipe(prompt=prompt, num_inference_steps=25, generator=generator).images
return images[0]
def generate_video(prompt, duration=2, fps=5):
frames = int(duration * fps)
temp_dir = tempfile.mkdtemp()
video_path = os.path.join(temp_dir, f"output_{random.randint(10000,99999)}.mp4")
writer = imageio.get_writer(video_path, fps=fps)
for i in range(frames):
img = generate_image(prompt)
img_array = np.array(img)
writer.append_data(img_array)
writer.close()
return video_path
with gr.Blocks() as demo:
gr.Markdown("# Simple SD Video Generator")
prompt_input = gr.Textbox(label="Prompt", value="A majestic dragon flying over a castle")
duration_input = gr.Slider(label="Duration (seconds)", minimum=1, maximum=10, value=2, step=1)
output_video = gr.Video(label="Generated Video")
gen_button = gr.Button("Generate Video")
gen_button.click(fn=generate_video, inputs=[prompt_input, duration_input], outputs=[output_video])
if __name__ == "__main__":
demo.launch(server_name="0.0.0.0", server_port=7860, debug=True)