File size: 2,276 Bytes
f19c435
d78b704
ef4b074
 
b50bf6d
4386d14
ef4b074
 
 
 
 
 
 
 
 
c6d89ea
 
 
 
 
 
 
 
 
 
d78b704
bb5d34d
c6d89ea
 
 
 
 
 
589ee95
 
 
 
f92e412
589ee95
 
 
bb5d34d
589ee95
 
f19c435
 
 
 
 
 
 
 
 
589ee95
 
067535e
bb5d34d
5ab4f40
 
f19c435
 
f33c5db
f92e412
 
5ab4f40
 
f92e412
 
 
 
f19c435
 
 
 
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
import gradio as gr
import spaces
from diffusers import KandinskyPriorPipeline, KandinskyPipeline
from diffusers.utils import load_image
import torch
from PIL import Image

pipe_prior = KandinskyPriorPipeline.from_pretrained(
    "kandinsky-community/kandinsky-2-1-prior", torch_dtype=torch.float16
)
pipe_prior.to("cuda")

pipe = KandinskyPipeline.from_pretrained("kandinsky-community/kandinsky-2-1", torch_dtype=torch.float16)
pipe.to("cuda")


@spaces.GPU()
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

@spaces.GPU()
def blend(img1, img2, slider, prompt, negative_prompt):
    img1.thumbnail((1024, 1024))
    img2.thumbnail((1024, 1024))
    
    img1 = squarify_image(img1)
    img2 = squarify_image(img2)
    
    # add all the conditions we want to interpolate, can be either text or image
    images_texts = [img1, img2]
    
    # specify the weights for each condition in images_texts
    weights = [1-slider, slider]
    
    prior_out = pipe_prior.interpolate(images_texts, weights)

    image = pipe(prompt=prompt, **prior_out, height=1024, width=1024, negative_prompt=negative_prompt).images[0]
    
    return image

with gr.Blocks() as demo:
    gr.Markdown("""
    # Image Blender
    by [Tony Assi](https://www.tonyassi.com/)
    """)
    
    with gr.Row():
        with gr.Column():
            img1 = gr.Image(label='Image 0', type='pil')
            img2 = gr.Image(label='Image 1',type='pil')
            slider = gr.Slider(label='Weight', maximum=1.0, value=0.5)
            with gr.Accordion("See Details"):
                prompt = gr.Textbox(label='Prompt', value='')
                negative_prompt = gr.Textbox(label='Negative Prompt', value='')
            btn = gr.Button("Blend")
        with gr.Column():
            output = gr.Image(label='Result')

    gr.Examples(
        [['./cat.png', './starry_night.jpg', 0.5, '', '']],
        [img1, img2, slider, prompt, negative_prompt],
        output,
        blend,
        cache_examples=True,
    )
    
    btn.click(fn=blend, inputs=[img1, img2, slider], outputs=output)

demo.launch()