File size: 8,855 Bytes
33c29ab
 
 
e81fe92
b28dd86
e81fe92
 
 
 
 
 
 
 
33c29ab
 
 
 
 
 
302757d
33c29ab
 
 
e81fe92
88988e2
d7729cb
64ed8c9
e81fe92
33c29ab
 
e81fe92
 
33c29ab
 
 
 
 
 
 
 
 
e81fe92
33c29ab
 
 
fbaf487
574b700
 
 
88988e2
e81fe92
fbaf487
2e2e46f
88988e2
e81fe92
fbaf487
574b700
33c29ab
46810b9
2e2e46f
33c29ab
 
e81fe92
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
33c29ab
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c643e6f
33c29ab
710c5aa
c643e6f
 
9b8a172
526ebf6
c643e6f
 
d2cc12e
33c29ab
 
 
08ebed3
5ef395c
3596f44
08ebed3
33c29ab
 
 
 
e81fe92
fbaf487
ceaf36e
 
7186970
 
33c29ab
 
 
e81fe92
33c29ab
e81fe92
 
 
 
 
 
33c29ab
fbaf487
e81fe92
 
 
33c29ab
fbaf487
 
 
 
 
 
 
2c48ac2
08c74c9
2c48ac2
 
c4e371c
23bd270
c4e371c
2c48ac2
33c29ab
 
 
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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
from diffusers import StableDiffusionPipeline
import gradio as gr
import torch
import os
from PIL import Image

from share_btn import community_icon_html, loading_icon_html, share_js

if torch.cuda.is_available():
  torchfloat = torch.float16
else:
  torchfloat = torch.float32


models = [
  "DGSpitzer/Cyberpunk-Anime-Diffusion"
]

prompt_prefixes = {
  models[0]: "dgs illustration style "
}

current_model = models[0]

#auth_token = os.environ.get("test") or True
#pipe = StableDiffusionPipeline.from_pretrained(current_model, use_auth_token=auth_token, torch_dtype=torchfloat, revision="fp16")
pipe = StableDiffusionPipeline.from_pretrained(current_model, torch_dtype=torchfloat)

if torch.cuda.is_available():
  pipe = pipe.to("cuda")
else:
  pipe = pipe.to("cpu")

device = "GPU 🔥" if torch.cuda.is_available() else "CPU 🥶"

def on_model_change(model):

    global current_model
    global pipe
    if model != current_model:
        current_model = model
        pipe = StableDiffusionPipeline.from_pretrained(current_model, torch_dtype=torchfloat)
        if torch.cuda.is_available():
            pipe = pipe.to("cuda")

def inference(prompt, negPrompt, guidance, steps, width_input, height_input):
    print("Generated image with prompt: " + prompt)
    if negPrompt != "":
        print("Negative prompt: " + negPrompt)
    promptPrev = prompt
    prompt = prompt_prefixes[current_model] + prompt
    results = pipe(prompt, negative_prompt = negPrompt, num_inference_steps=int(steps), guidance_scale=guidance, width=width_input, height=height_input)
    image = results.images[0] if not results.nsfw_content_detected[0] else Image.open("nsfw_placeholder.jpg")
    return image, gr.update(visible=True), gr.update(visible=True), gr.update(visible=True), gr.update(placeholder=promptPrev)

def inference_example(prompt, negPrompt, guidance, steps, width_input, height_input):
    
    prompt = prompt_prefixes[current_model] + prompt
    results = pipe(prompt, negative_prompt = negPrompt, num_inference_steps=int(steps), guidance_scale=guidance, width=width_input, height=height_input)
    image = results.images[0] if not results.nsfw_content_detected[0] else Image.open("nsfw_placeholder.jpg")
    return image

css = """
#col-container {max-width: 700px; margin-left: auto; margin-right: auto;}
a {text-decoration-line: underline; font-weight: 600;}
.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;right:0;
}
#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;
}
"""

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;">
                  DGS Diffusion Space
                </h1>
              </div>
              <p style="margin-bottom: 10px; font-size: 94%">
               Demo for Cyberpunk Anime Diffusion. Based of the projects by anzorq <a href="https://twitter.com/hahahahohohe"></a> and fffiloni <a href="https://twitter.com/fffiloni"></a>
              </p>
            </div>
            <div
               style="
                  gap: 1.2rem;
                  font-size: 1rem;
                "
             >
              <p>Another online version without queue: <a href="https://colab.research.google.com/github/HelixNGC7293/cyberpunk-anime-diffusion/blob/main/cyberpunk_anime_diffusion.ipynb"><img data-canonical-src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab" src="https://camo.githubusercontent.com/84f0493939e0c4de4e6dbe113251b4bfb5353e57134ffd9fcab6b8714514d4d1/68747470733a2f2f636f6c61622e72657365617263682e676f6f676c652e636f6d2f6173736574732f636f6c61622d62616467652e737667"></a></p>
            </div>
        """
    )
    gr.Markdown('''
      👇 Buy me a coffee if you like ♥ this project!
      [![Buy me a coffee](https://badgen.net/badge/icon/Buy%20Me%20A%20Coffee?icon=buymeacoffee&label)](https://www.buymeacoffee.com/dgspitzer)
    ''')
    with gr.Row():
        
        with gr.Column():
            model = gr.Dropdown(label="Model", choices=models, value=models[0])
            prompt = gr.Textbox(label="Prompt", placeholder="{} is added automatically".format(prompt_prefixes[current_model]), elem_id="input-prompt")
            negPrompt = gr.Textbox(label="Negative Prompt", placeholder="Enter what you don't want to generate", elem_id="input-negPrompt")
            guidance = gr.Slider(label="Guidance scale", value=7, maximum=8)
            steps = gr.Slider(label="Steps", value=20, maximum=30, minimum=2)
            width_input = gr.Slider(label="Width", value=576, maximum=768, minimum=384, step=64)
            height_input = gr.Slider(label="Height", value=576, maximum=768, minimum=384, step=64)
            run = gr.Button(value="Run")
            gr.Markdown(f"Running on: {device}")
        with gr.Column():
            image_out = gr.Image(height=512, type="filepath", elem_id="output-img")

    with gr.Column(elem_id="col-container"):
        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)
          
    model.change(on_model_change, inputs=model, outputs=[])
    run.click(inference, inputs=[prompt, negPrompt, guidance, steps, width_input, height_input], outputs=[image_out, share_button, community_icon, loading_icon, prompt])
    
    share_button.click(None, [], [], _js=share_js)
    
    gr.Examples([
        ["perfect face portrait of beautiful smile girl,  clean face, wears hoody, half body, soldier working in a cyberpunk city, cleavage, intricate, 8k, highly detailed, digital painting, intense, sharp focus", "out of focus, scary, creepy, evil, disfigured, missing limbs, ugly, gross, missing fingers", 7, 20, 512, 704],
        ["portrait of a beautiful fancy gorgeous anime girl, intricate details", "out of focus, scary, creepy, evil, disfigured, missing limbs, ugly, gross, missing fingers", 7, 20, 448, 640],
        ["a beautiful perfect face girl, Anime fine details portrait of school girl in front of modern tokyo city landscape on the background deep bokeh, anime masterpiece by studio ghibli, 8k, sharp high quality anime, artstation", "out of focus, scary, creepy, evil, disfigured, missing limbs, ugly, gross, missing fingers", 7, 20, 704, 704],
        ["city landscape with fancy car, racing on the road, gopro, intricate details, 4k, cyberpunk", "out of focus, scary, creepy, evil, disfigured, missing limbs, ugly, gross, missing fingers", 7, 20, 704, 704],
        ["portrait of liu yifei girl, soldier working in a cyberpunk city, cleavage, intricate, 8k, highly detailed, digital painting, intense, sharp focus", "out of focus, scary, creepy, evil, disfigured, missing limbs, ugly, gross, missing fingers", 7, 20, 704, 704],
        ["portrait of a muscular beard male in dgs illustration style, half-body, holding robot arms, strong chest", "out of focus, scary, creepy, evil, disfigured, missing limbs, ugly, gross, missing fingers", 7, 20, 512, 640],
    ], [prompt, negPrompt, guidance, steps, width_input, height_input], image_out, inference_example, cache_examples=torch.cuda.is_available())
    gr.Markdown('''
      Models and Space by [@DGSpitzer](https://www.youtube.com/channel/UCzzsYBF4qwtMwJaPJZ5SuPg)❤️ [@大谷的游戏创作小屋](https://space.bilibili.com/176003)
      [![Twitter Follow](https://img.shields.io/twitter/follow/DGSpitzer?label=%40DGSpitzer&style=social)](https://twitter.com/DGSpitzer)
      ![visitors](https://visitor-badge.glitch.me/badge?page_id=dgspitzer_DGS_Diffusion_Space)
      
      ![Model Views](https://visitor-badge.glitch.me/badge?page_id=Cyberpunk_Anime_Diffusion)
      
    ''')

demo.queue()
demo.launch()