I2vgen-xl / app.py
MostafaHazem's picture
Modified app.py
a602005
import gradio as gr
import torch
from diffusers import I2VGenXLPipeline
from diffusers.utils import export_to_gif, load_image
def generate_video(prompt, image_url, negative_prompt, num_inference_steps, guidance_scale, seed):
try:
# Load pipeline
pipeline = I2VGenXLPipeline.from_pretrained("ali-vilab/i2vgen-xl", torch_dtype=torch.float16, variant="fp16")
pipeline.enable_model_cpu_offload()
# Load image
image = load_image(image_url).convert("RGB")
# Set random seed
generator = None if seed == -1 else torch.manual_seed(seed)
# Generate frames
result = pipeline(
prompt=prompt,
image=image,
num_inference_steps=num_inference_steps,
negative_prompt=negative_prompt,
guidance_scale=guidance_scale,
generator=generator,
).frames[0]
# Export to GIF
gif_path = "i2v_output.gif"
export_to_gif(result, gif_path)
return gif_path
except Exception as e:
return f"An error occurred: {e}"
# Gradio Interface
interface = gr.Interface(
fn=generate_video,
inputs=[
gr.Textbox(label="Enter your prompt", lines=2, placeholder="Describe your desired video."),
gr.Textbox(label="Enter image URL", placeholder="Paste the URL of the input image."),
gr.Textbox(label="Enter negative prompt (optional)", placeholder="Describe undesired aspects (e.g., blurry, distorted)."),
gr.Slider(label="Number of Inference Steps", minimum=10, maximum=100, value=50, step=1),
gr.Slider(label="Guidance Scale", minimum=1.0, maximum=20.0, value=9.0, step=0.1),
gr.Number(label="Seed (set to -1 for random)", value=8888),
],
outputs=gr.Image(label="Generated Video (GIF)", type="filepath"),
title="Image-to-Video Generator",
description="Generate videos from text prompts and input images using AI.",
article="Made by: Mostafa Hazem."
)
if __name__ == "__main__":
interface.launch()