jayeshprajapati9693's picture
Update app.py
8115e1c verified
raw
history blame
2.56 kB
import spaces
import torch
import gradio as gr
from PIL import Image
import os
from diffusers import (
DiffusionPipeline,
AutoencoderKL,
ControlNetModel,
StableDiffusionControlNetPipeline,
StableDiffusionControlNetImg2ImgPipeline,
DPMSolverMultistepScheduler,
EulerDiscreteScheduler
)
# -------- CONFIG -------- #
BASE_MODEL = "SG161222/Realistic_Vision_V5.1_noVAE"
CONTROLNET_MODEL = "monster-labs/control_v1p_sd15_qrcode_monster"
# -------- VAE & CONTROLNET -------- #
vae = AutoencoderKL.from_pretrained(
"stabilityai/sd-vae-ft-mse",
torch_dtype=torch.float16
)
controlnet = ControlNetModel.from_pretrained(
CONTROLNET_MODEL,
torch_dtype=torch.float16
)
# -------- MAIN PIPELINE -------- #
main_pipe = StableDiffusionControlNetPipeline.from_pretrained(
BASE_MODEL,
controlnet=controlnet,
vae=vae,
torch_dtype=torch.float16,
safety_checker=None, # safety checker disabled
feature_extractor=None
).to("cuda")
# -------- IMG2IMG PIPELINE -------- #
image_pipe = StableDiffusionControlNetImg2ImgPipeline(**main_pipe.components)
# -------- SCHEDULERS -------- #
SAMPLER_MAP = {
"DPM++ Karras SDE": lambda config: DPMSolverMultistepScheduler.from_config(
config, use_karras=True, algorithm_type="sde-dpmsolver++"
),
"Euler": lambda config: EulerDiscreteScheduler.from_config(config),
}
# -------- GRADIO DEMO -------- #
def generate(prompt, control_image, strength=0.8, guidance=7.0, steps=30, sampler="Euler"):
scheduler = SAMPLER_MAP[sampler](image_pipe.scheduler.config)
image_pipe.scheduler = scheduler
image = image_pipe(
prompt=prompt,
image=control_image,
strength=strength,
guidance_scale=guidance,
num_inference_steps=steps
).images[0]
return image
with gr.Blocks() as demo:
gr.Markdown("# ✨ Illusion Diffusion (Fixed)")
with gr.Row():
prompt = gr.Textbox(label="Prompt")
control_image = gr.Image(type="pil", label="Control Image")
with gr.Row():
strength = gr.Slider(0.0, 1.0, value=0.8, label="Strength")
guidance = gr.Slider(1.0, 15.0, value=7.0, label="Guidance Scale")
steps = gr.Slider(5, 50, value=30, step=1, label="Steps")
sampler = gr.Dropdown(list(SAMPLER_MAP.keys()), value="Euler", label="Sampler")
btn = gr.Button("Generate")
output = gr.Image()
btn.click(
fn=generate,
inputs=[prompt, control_image, strength, guidance, steps, sampler],
outputs=output
)
demo.queue().launch()