Bhavibond's picture
Create app.py
7727288 verified
Raw
History Blame
1.63 kB
import torch
import gradio as gr
from diffusers import StableDiffusionControlNetPipeline, ControlNetModel
from transformers import CLIPImageProcessor
from PIL import Image
import numpy as np
def load_controlnet_model():
"""Load Stable Diffusion ControlNet pipeline with IP-Adapter."""
controlnet = ControlNetModel.from_pretrained(
"lllyasviel/sd-controlnet-depth", torch_dtype=torch.float16
)
pipe = StableDiffusionControlNetPipeline.from_pretrained(
"runwayml/stable-diffusion-v1-5",
controlnet=controlnet,
torch_dtype=torch.float16
).to("cuda")
return pipe
def preprocess_image(image):
"""Convert image to depth map for ControlNet input."""
image = image.convert("L") # Convert to grayscale
image = np.array(image)
depth_map = np.clip(image, 0, 255)
return Image.fromarray(depth_map)
def generate_image(prompt, input_image):
"""Generate an image using Stable Diffusion ControlNet with IP-Adapter."""
pipe = load_controlnet_model()
processed_image = preprocess_image(input_image)
result = pipe(prompt, image=processed_image, num_inference_steps=50).images[0]
return result
# Gradio Interface
demo = gr.Interface(
fn=generate_image,
inputs=[
gr.Textbox(label="Enter your prompt"),
gr.Image(type="pil", label="Upload reference image")
],
outputs=gr.Image(type="pil", label="Generated Image"),
title="Stable Diffusion with ControlNet and IP-Adapter",
description="Generate images with precise object placement and consistent style using ControlNet and IP-Adapter.",
)
demo.launch(share=True)