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()