Paulina
init
fe01e72
raw
history blame
3.15 kB
import gradio as gr
import torch
from diffusers import StableDiffusionPipeline
from PIL import Image
import numpy as np
import spaces
MODEL_ID = "runwayml/stable-diffusion-v1-5"
# Global pipeline variable
pipe = None
def initialize_pipeline():
"""Initialize the pipeline if not already loaded."""
global pipe
if pipe is None:
device = "cuda" if torch.cuda.is_available() else "cpu"
print(f"Initializing pipeline on device: {device}")
pipe = StableDiffusionPipeline.from_pretrained(
MODEL_ID,
torch_dtype=torch.float16 if device == "cuda" else torch.float32,
)
pipe = pipe.to(device)
return pipe
@spaces.GPU
def generate_image(prompt, seed, num_inference_steps):
"""
Generate an image using Stable Diffusion.
This function runs on Zero GPU when deployed on Hugging Face Spaces.
Args:
prompt: Text description of the image to generate
seed: Random seed for reproducibility
num_inference_steps: Number of denoising steps
Returns:
PIL Image
"""
# Initialize pipeline
pipeline = initialize_pipeline()
device = pipeline.device
# Set the random seed for reproducibility
generator = torch.Generator(device=device).manual_seed(int(seed))
# Generate the image
with torch.no_grad():
result = pipeline(
prompt=prompt,
num_inference_steps=int(num_inference_steps),
generator=generator,
)
return result.images[0]
def create_interface():
"""Create and configure the Gradio interface."""
# Create the Gradio interface
interface = gr.Interface(
fn=generate_image,
inputs=[
gr.Textbox(
label="Prompt",
placeholder="Enter a text description of the image you want to generate...",
lines=3,
),
gr.Slider(
minimum=0,
maximum=2147483647,
value=42,
step=1,
label="Seed",
info="Random seed for reproducibility",
),
gr.Slider(
minimum=1,
maximum=150,
value=50,
step=1,
label="Diffusion Steps",
info="Number of denoising steps (more steps = higher quality but slower)",
),
],
outputs=gr.Image(label="Generated Image", type="pil"),
title="Stable Diffusion Image Generator",
description="Generate images from text using Stable Diffusion. Enter a prompt, set the seed for reproducibility, and adjust the number of diffusion steps.",
examples=[
["A beautiful sunset over mountains", 42, 50],
["A cat wearing a space suit, digital art", 123, 50],
["Cyberpunk city at night, neon lights", 456, 75],
],
cache_examples=False,
)
return interface
if __name__ == "__main__":
# Create and launch the interface
demo = create_interface()
demo.launch(share=False, server_name="0.0.0.0", server_port=7860)