File size: 3,994 Bytes
e33485b
e032f0c
e00cbb6
e032f0c
4634fd6
e032f0c
 
 
1ef5b8b
3a4f4b2
 
e032f0c
 
fdaad23
e032f0c
e00cbb6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
88f6b3a
ebee332
 
 
1904759
 
 
4172617
e00cbb6
 
 
428a331
 
 
 
 
 
 
 
 
4172617
428a331
 
 
 
60dc2f5
f140b8b
 
 
428a331
 
84838d7
 
 
282f153
84838d7
a7babaf
84838d7
 
 
a7babaf
84838d7
 
e032f0c
84838d7
ee6544b
8fe4b23
 
e00cbb6
3a4f4b2
 
 
e00cbb6
f25f3c0
84838d7
 
 
 
 
 
 
 
3a4f4b2
e032f0c
3bb7ca9
e032f0c
 
 
84838d7
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
import gradio as gr
import os
from share_btn import community_icon_html, loading_icon_html, share_js

img_to_text = gr.Blocks.load(name="spaces/pharmapsychotic/CLIP-Interrogator")
stable_diffusion = gr.Blocks.load(name="spaces/stabilityai/stable-diffusion")

def get_images(prompt):
    gallery_dir = stable_diffusion(prompt, "", 7.5, fn_index=2)
    sd_output = [os.path.join(gallery_dir, image) for image in os.listdir(gallery_dir)]
    return sd_output, gr.update(visible=True), gr.update(visible=True), gr.update(visible=True)

def get_prompts(uploaded_image):
    return img_to_text(uploaded_image, "ViT-L (best for Stable Diffusion 1.*)", "best", fn_index=2)[0]

css = '''
.animate-spin {
    animation: spin 1s linear infinite;
}
@keyframes spin {
    from {
        transform: rotate(0deg);
    }
    to {
        transform: rotate(360deg);
    }
}
#share-btn-container {
    display: flex; padding-left: 0.5rem !important; padding-right: 0.5rem !important; background-color: #000000; justify-content: center; align-items: center; border-radius: 9999px !important; width: 13rem;
}
#share-btn {
    all: initial; color: #ffffff;font-weight: 600; cursor:pointer; font-family: 'IBM Plex Sans', sans-serif; margin-left: 0.5rem !important; padding-top: 0.25rem !important; padding-bottom: 0.25rem !important;
}
#share-btn * {
    all: unset;
}
#share-btn-container div:nth-child(-n+2){
    width: auto !important;
    min-height: 0px !important;
}
#share-btn-container .wrap {
    display: none !important;
}
a {text-decoration-line: underline;}
'''

with gr.Blocks(css=css) as demo:
    gr.HTML("""<div style="text-align: center; max-width: 700px; margin: 0 auto;">
            <div
            style="
                display: inline-flex;
                align-items: center;
                gap: 0.8rem;
                font-size: 1.75rem;
            "
            >
            <h1 style="font-weight: 900; margin-bottom: 7px; margin-top: 5px;">
                Stable Diffusion Prism πŸŽ†πŸŒŒ
            </h1>
            </div>
            <p style="margin-bottom: 10px; font-size: 94%">
            Sends an image in to <a href="https://huggingface.co/spaces/pharmapsychotic/CLIP-Interrogator" target="_blank">CLIP Interrogator</a>
            to generate a text prompt which is then run through 
            <a href="https://huggingface.co/spaces/stabilityai/stable-diffusion" target="_blank">Stable Diffusion</a> 
            to generate new forms of the original! 
            </p>
        </div>""")

    with gr.Row():
      with gr.Column():
          input_img = gr.Image(type="filepath", elem_id="input-img")
          with gr.Row():
            see_prompts = gr.Button("Feed in your image!")

      with gr.Column():
        img2text_output = gr.Textbox(
                                label="Generated text prompt", 
                                lines=4,
                                elem_id="translated"
                            )
        with gr.Row():
            diffuse_btn = gr.Button(value="Diffuse it!")
      with gr.Column(elem_id="generated-gallery"):
        sd_output = gr.Gallery().style(grid=2, height="auto")
        with gr.Group(elem_id="share-btn-container"):
            community_icon = gr.HTML(community_icon_html, visible=False)
            loading_icon = gr.HTML(loading_icon_html, visible=False)
            share_button = gr.Button("Share to community", elem_id="share-btn", visible=False)

    see_prompts.click(get_prompts, 
                            inputs = input_img, 
                            outputs = [
                                img2text_output
                            ])
    diffuse_btn.click(get_images, 
                          inputs = [
                              img2text_output
                              ], 
                          outputs = [sd_output, community_icon, loading_icon, share_button]
                          )
    share_button.click(None, [], [], _js=share_js)



demo.launch()