File size: 2,664 Bytes
08fc0b2 0a2d6b8 dd2b2f9 fec64c5 08fc0b2 cfe97ad d16752a 8dcef4c 9539987 d16752a 9539987 8dcef4c 3ceed42 19a049d 08fc0b2 f0cce29 429369b 19a049d f0cce29 6b87482 968c286 08fc0b2 521379d 9fa4928 521379d 08fc0b2 0fd4beb 08fc0b2 8dcef4c 08fc0b2 |
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 65 66 67 68 69 70 71 72 73 |
import gradio as gr
from diffusers import AutoPipelineForInpainting, AutoencoderKL
import torch
from PIL import Image, ImageOps
vae = AutoencoderKL.from_pretrained("madebyollin/sdxl-vae-fp16-fix", torch_dtype=torch.float16)
pipeline = AutoPipelineForInpainting.from_pretrained("diffusers/stable-diffusion-xl-1.0-inpainting-0.1", vae=vae, torch_dtype=torch.float16, variant="fp16", use_safetensors=True).to("cuda")
def divisible_by_8(image):
width, height = image.size
# Calculate the new width and height that are divisible by 8
new_width = (width // 8) * 8
new_height = (height // 8) * 8
# Resize the image
resized_image = image.resize((new_width, new_height))
return resized_image
def generate(image_editor, prompt, neg_prompt, strength, guidance):
image = image_editor['background'].convert('RGB')
image.thumbnail((1024, 1024))
image = divisible_by_8(image)
layer = image_editor["layers"][0].resize(image.size)
mask = Image.new("RGBA", image.size, "WHITE")
mask.paste(layer, (0, 0), layer)
mask = ImageOps.invert(mask.convert('L'))
final_image = pipeline(prompt=prompt,
image=image,
mask_image=mask).images[0]
#width=image.width,
#height=image.height,
#num_inference_steps=50,
#strength=strength,
#guidance_scale=guidance).images[0]
return image_editor, image, mask, final_image
with gr.Blocks() as demo:
gr.Markdown("""
# Inpainting Sketch Pad
by [Tony Assi](https://www.tonyassi.com/)
""")
with gr.Row():
with gr.Column():
sketch_pad = gr.ImageMask(type='pil', label='Inpaint')
prompt = gr.Textbox()
generate_button = gr.Button("Generate")
with gr.Column():
version_gallery = gr.Gallery(label="Versions")
restore_button = gr.Button("Restore Version")
with gr.Accordion("Advanced Settings", open=False):
neg_prompt = gr.Textbox(label='Negative Prompt', value='ugly, deformed, nsfw')
strength_slider = gr.Slider(0.0, 1.0, value=1.0, label="Strength")
guidance_slider = gr.Slider(1.0, 15.0, value=7.5, label="Guidance")
with gr.Row():
out1 = gr.Image(format='png')
out2 = gr.Image(format='png')
out3 = gr.Image(format='png')
generate_button.click(fn=generate, inputs=[sketch_pad,prompt, neg_prompt, strength_slider, guidance_slider], outputs=[sketch_pad, out1, out2, out3])
demo.launch() |