File size: 2,390 Bytes
b7f7bb6
 
 
 
fe77a8e
b7f7bb6
fc982fe
 
b7f7bb6
fe77a8e
 
 
b7f7bb6
fe77a8e
b7f7bb6
fe77a8e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b7f7bb6
 
fe77a8e
 
 
b7f7bb6
 
 
fe77a8e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b7f7bb6
 
fe77a8e
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
import gradio as gr
import torch
from diffusers import I2VGenXLPipeline
from diffusers.utils import export_to_gif, load_image
import tempfile

def initialize_pipeline():
    device = "cuda" if torch.cuda.is_available() else "cpu"

# Initialize the pipeline with CUDA support
pipeline = I2VGenXLPipeline.from_pretrained("ali-vilab/i2vgen-xl", torch_dtype=torch.float16, variant="fp16")
pipeline.to(device)

def generate_gif(prompt, image, negative_prompt, num_inference_steps, guidance_scale, seed):
    # Set the generator seed
    generator = torch.Generator(device=device).manual_seed(seed)

    # Check if an image is provided
    if image is not None:
        image = load_image(image).convert("RGB")
        frames = pipeline(
            prompt=prompt,
            image=image,
            num_inference_steps=num_inference_steps,
            negative_prompt=negative_prompt,
            guidance_scale=guidance_scale,
            generator=generator
        ).frames[0]
    else:
        frames = pipeline(
            prompt=prompt,
            num_inference_steps=num_inference_steps,
            negative_prompt=negative_prompt,
            guidance_scale=guidance_scale,
            generator=generator
        ).frames[0]

    # Export to GIF
    with tempfile.NamedTemporaryFile(delete=False, suffix=".gif") as tmp_gif:
        gif_path = tmp_gif.name
        export_to_gif(frames, gif_path)

    return gif_path

# Create the Gradio interface with tabs
with gr.Tabs() as demo:
    with gr.TabItem("Generate from Text or Image"):
        interface = gr.Interface(
            fn=generate_gif,
            inputs=[
                gr.Textbox(lines=2, placeholder="Enter your prompt here...", label="Prompt"),
                gr.Image(type="filepath", label="Input Image (optional)"),
                gr.Textbox(lines=2, placeholder="Enter your negative prompt here...", label="Negative Prompt"),
                gr.Slider(1, 100, step=1, value=50, label="Number of Inference Steps"),
                gr.Slider(1, 20, step=0.1, value=9.0, label="Guidance Scale"),
                gr.Number(label="Seed", value=8888)
            ],
            outputs=gr.Video(label="Generated GIF"),
            title="I2VGen-XL GIF Generator",
            description="Generate a GIF from a text prompt and/or an image using the I2VGen-XL model."
        )

# Launch the interface
demo.launch()