File size: 2,759 Bytes
08fc0b2 0a2d6b8 dd2b2f9 fec64c5 08fc0b2 cfe97ad a1deaea d16752a a1deaea d16752a 98833b0 9539987 d16752a 965c284 6b4f74e d16752a e0e4048 3e711ca d16752a 9539987 e0e4048 8dcef4c 3ceed42 965c284 a11c80c 98833b0 08fc0b2 f0cce29 429369b 19a049d f0cce29 e0fc88a 6b87482 968c286 e0fc88a 521379d 08fc0b2 0fd4beb 08fc0b2 98833b0 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 74 75 76 77 78 79 80 |
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 squarify_image(img):
if(img.height > img.width): bg_size = img.height
else: bg_size = img.width
bg = Image.new(mode="RGB", size=(bg_size,bg_size), color="white")
bg.paste(img, ( int((bg.width - bg.width)/2), 0) )
return bg
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, versions):
print('versions')
print(versions)
image = image_editor['background'].convert('RGB')
image.thumbnail((1024, 1024))
image = divisible_by_8(image)
original_image_size = image.size
layer = image_editor["layers"][0].resize(image.size)
image = squarify_image(image)
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]
final_image = final_image.crop((0, 0, original_image_size[0], original_image_size[1]))
return image_editor, image, mask, final_image, [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.Accordion("Advanced Settings", open=False):
neg_prompt = gr.Textbox(label='Negative Prompt', value='ugly, deformed, nsfw')
with gr.Column():
version_gallery = gr.Gallery(label="Versions")
restore_button = gr.Button("Restore Version")
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, version_gallery], outputs=[sketch_pad, out1, out2, out3, version_gallery])
demo.launch() |