Update app.py
Browse files
app.py
CHANGED
@@ -6,10 +6,11 @@ import spaces
|
|
6 |
from PIL import Image
|
7 |
import requests
|
8 |
from translatepy import Translator
|
|
|
9 |
|
10 |
translator = Translator()
|
11 |
|
12 |
-
#
|
13 |
model = "Corcelio/mobius"
|
14 |
vae_model = "madebyollin/sdxl-vae-fp16-fix"
|
15 |
|
@@ -29,20 +30,19 @@ JS = """function () {
|
|
29 |
}
|
30 |
}"""
|
31 |
|
32 |
-
#
|
33 |
vae = AutoencoderKL.from_pretrained(
|
34 |
vae_model,
|
35 |
torch_dtype=torch.float16
|
36 |
)
|
37 |
|
38 |
-
#
|
39 |
if torch.cuda.is_available():
|
40 |
pipe = StableDiffusionXLPipeline.from_pretrained(model, vae=vae, torch_dtype=torch.float16).to("cuda")
|
41 |
|
42 |
pipe.scheduler = KDPM2AncestralDiscreteScheduler.from_config(pipe.scheduler.config)
|
43 |
|
44 |
-
|
45 |
-
# Function
|
46 |
@spaces.GPU()
|
47 |
def generate_image(
|
48 |
prompt,
|
@@ -50,32 +50,45 @@ def generate_image(
|
|
50 |
width=1024,
|
51 |
height=1024,
|
52 |
scale=1.5,
|
53 |
-
steps=30
|
54 |
-
clip=3):
|
55 |
|
56 |
prompt = str(translator.translate(prompt, 'English'))
|
57 |
|
58 |
print(f'prompt:{prompt}')
|
59 |
-
|
60 |
-
|
|
|
|
|
|
|
61 |
prompt,
|
62 |
negative_prompt=negative,
|
63 |
width=width,
|
64 |
height=height,
|
65 |
guidance_scale=scale,
|
66 |
num_inference_steps=steps,
|
67 |
-
|
68 |
-
)
|
69 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
70 |
|
71 |
|
72 |
examples = [
|
73 |
"์๋ฆ๋ค์ด 20์ธ ํ๊ตญ ์ฌ์ ๋ชจ๋ธ, 'ํ๊ตญ ์ฌ์๊ฐ์ ์์ด์ ๋ฎ์ ์ผ๊ตด', ๊ฒ์์ ์งง์ ๋จ๋ฐ๋จธ๋ฆฌ, C์ปต ์ฌ์ด์ฆ์ ํฐ ๊ฐ์ด, ํฐ ๊ณจ๋ฐ, ๊ฐ์ ์ ๋ํผ, ๋ฐฐ๊ฒฝ ํฐ์, ์ค๋ง์ผ ํ์ , ๋ชจ๋ธ ํฌ์ฆ, ์ ๋ฉด ์์, ์ ์ ๋
ธ์ถ, ์ด๊ณ ํด์๋ ์ฌ์ง",
|
74 |
"์๋ฆ๋ค์ด 20์ธ ์๊ตญ ์ฌ์ ๋ชจ๋ธ, '์ ๋ง์์จ ๋ฎ์ ์ผ๊ตด', ๊ธ๋ฐ ์งง์ ๋จ๋ฐ๋จธ๋ฆฌ, ์ด๋ธ๋ ๋๋ ์ค, ๋ฐฐ๊ฒฝ ์์์, ์ค๋ง์ผ ํ์ , ๋ชจ๋ธ ํฌ์ฆ, ์ ๋ฉด ์์, ์ ์ ๋
ธ์ถ, ์ด๊ณ ํด์๋ ์ฌ์ง",
|
75 |
"์๋ฆ๋ค์ด 20์ธ ํ๊ตญ ์ฌ์ ๋ชจ๋ธ, 'ํ๊ตญ ์ฌ์ ์์ด๋ ๋ฎ์ ์ผ๊ตด', ๊ฒ์์ ์งง์ ๋จ๋ฐ๋จธ๋ฆฌ, ๋นํค๋ ์์๋ณต, ๋ฐฐ๊ฒฝ ์์์ฅ, ์ค๋ง์ผ ํ์ , ๋ชจ๋ธ ํฌ์ฆ, ์ ๋ฉด ์์, ์ ์ ๋
ธ์ถ, ์ด๊ณ ํด์๋ ์ฌ์ง",
|
76 |
-
"
|
77 |
"์๋ฆ๋ค์ด 18์ธ ์ผ๋ณธ ์ฌ์ ๋ชจ๋ธ, ๊ฒ์์ ์งง์ ๋จ๋ฐ๋จธ๋ฆฌ, ์ค๋ง์ผ ํ์ , ๊ต๋ณต ์ ๋ํผ, ๋ฐฐ๊ฒฝ ํ๊ต ๊ต์ค, ๋ชจ๋ธ ํฌ์ฆ, ์ ๋ฉด ์์, ์ด๊ณ ํด์๋ ์ฌ์ง",
|
78 |
-
"์๋ฆ๋ค์ด 20์ธ ๋ธ๋ผ์ง ์ฌ์ ๋ชจ๋ธ, ๊ฒ์์ ์งง์ ๋จ๋ฐ๋จธ๋ฆฌ, C์ปต ์ฌ์ด์ฆ์ ํฐ ๊ฐ์ด, ํฐ ๊ณจ๋ฐ, ๊ฐํธ์ฌ ์ ๋ํผ, ๋ฐฐ๊ฒฝ ํฐ์, ์ค๋ง์ผ ํ์ , ๋ชจ๋ธ ํฌ์ฆ, ์ ๋ฉด ์์, ์ด๊ณ ํด์๋ ์ฌ์ง",
|
79 |
"์๋ฆ๋ค์ด 20์ธ ์ค์จ๋ด ์ฌ์ ๋ชจ๋ธ, ๊ธ๋ฐ ๊ธด ์๋จธ๋ฆฌ, C์ปต ์ฌ์ด์ฆ์ ํฐ ๊ฐ์ด, ํฐ ๊ณจ๋ฐ, ๋นํค๋ ์์๋ณต, ๋ฐฐ๊ฒฝ ํด๋ณ๊ฐ, ์ค๋ง์ผ ํ์ , ๋ชจ๋ธ ํฌ์ฆ, ์ ๋ฉด ์์, ์ด๊ณ ํด์๋ ์ฌ์ง",
|
80 |
"์๋ฆ๋ค์ด 18์ธ ๋ฌ์์ ์ฌ์ ๋ชจ๋ธ, ๊ธ๋ฐ ์งง์ ๋จ๋ฐ๋จธ๋ฆฌ, C์ปต ์ฌ์ด์ฆ์ ํฐ ๊ฐ์ด, ํฐ ๊ณจ๋ฐ, ๋นํค๋ ์์๋ณต, ๋ฐฐ๊ฒฝ ์์์ฅ, ์์ํ ํ์ , ๋ชจ๋ธ ํฌ์ฆ, ์ ๋ฉด ์์, ์ด๊ณ ํด์๋ ์ฌ์ง",
|
81 |
"์๋ฆ๋ค์ด 20์ธ ํ๋์ค ์ฌ์ ๋ชจ๋ธ, ๊ฐ์ ์งง์ ๋จ๋ฐ๋จธ๋ฆฌ, C์ปต ์ฌ์ด์ฆ์ ํฐ ๊ฐ์ด, ํฐ ๊ณจ๋ฐ, ๋น์ฆ๋์ค ์ ์ฅ, ๋ฐฐ๊ฒฝ ์ฌ๋ฌด์ค, ํฌ๊ฒ ์๋ ํ์ , ๋ชจ๋ธ ํฌ์ฆ, ์ ๋ฉด ์์, ์ด๊ณ ํด์๋ ์ฌ์ง",
|
@@ -83,7 +96,7 @@ examples = [
|
|
83 |
]
|
84 |
|
85 |
|
86 |
-
# Gradio
|
87 |
|
88 |
with gr.Blocks(css=CSS, js=JS, theme="soft") as demo:
|
89 |
gr.HTML("<h1><center>๋๋ง์ ๋ชจ๋ธ ์บ๋ฆญํฐ ์์ฑ</center></h1>")
|
@@ -91,7 +104,8 @@ with gr.Blocks(css=CSS, js=JS, theme="soft") as demo:
|
|
91 |
with gr.Row():
|
92 |
prompt = gr.Textbox(label='Enter Your Prompt', value="best quality, HD, aesthetic", scale=6)
|
93 |
submit = gr.Button(scale=1, variant='primary')
|
94 |
-
|
|
|
95 |
with gr.Accordion("Advanced Options", open=False):
|
96 |
with gr.Row():
|
97 |
negative = gr.Textbox(label="Negative prompt", value="low quality, low quality, (deformed, distorted, disfigured:1.3), poorly drawn, bad anatomy, wrong anatomy, extra limb, missing limb, floating limbs, (mutated hands and fingers:1.4), disconnected limbs, mutation, mutated, ugly, disgusting, blurry, amputation, (NSFW:1.25)")
|
@@ -125,29 +139,22 @@ with gr.Blocks(css=CSS, js=JS, theme="soft") as demo:
|
|
125 |
step=1,
|
126 |
value=50,
|
127 |
)
|
128 |
-
clip = gr.Slider(
|
129 |
-
label="Clip Skip",
|
130 |
-
minimum=1,
|
131 |
-
maximum=10,
|
132 |
-
step=1,
|
133 |
-
value=3,
|
134 |
-
)
|
135 |
gr.Examples(
|
136 |
examples=examples,
|
137 |
inputs=prompt,
|
138 |
-
outputs=
|
139 |
fn=generate_image,
|
140 |
-
cache_examples=
|
141 |
)
|
142 |
|
143 |
prompt.submit(fn=generate_image,
|
144 |
-
inputs=[prompt, negative, width, height, scale, steps
|
145 |
-
outputs=
|
146 |
)
|
147 |
submit.click(fn=generate_image,
|
148 |
-
inputs=[prompt, negative, width, height, scale, steps
|
149 |
-
outputs=
|
150 |
)
|
151 |
|
152 |
#demo.queue().launch()
|
153 |
-
demo.queue().launch(auth=("gini", "pick"))
|
|
|
6 |
from PIL import Image
|
7 |
import requests
|
8 |
from translatepy import Translator
|
9 |
+
import random
|
10 |
|
11 |
translator = Translator()
|
12 |
|
13 |
+
# ์์ ์ ์
|
14 |
model = "Corcelio/mobius"
|
15 |
vae_model = "madebyollin/sdxl-vae-fp16-fix"
|
16 |
|
|
|
30 |
}
|
31 |
}"""
|
32 |
|
33 |
+
# VAE ์ปดํฌ๋ํธ ๋ก๋
|
34 |
vae = AutoencoderKL.from_pretrained(
|
35 |
vae_model,
|
36 |
torch_dtype=torch.float16
|
37 |
)
|
38 |
|
39 |
+
# GPU ์ฌ์ฉ ๊ฐ๋ฅํ ๊ฒฝ์ฐ ๋ชจ๋ธ ๋ฐ ์ค์ผ์ค๋ฌ ์ด๊ธฐํ
|
40 |
if torch.cuda.is_available():
|
41 |
pipe = StableDiffusionXLPipeline.from_pretrained(model, vae=vae, torch_dtype=torch.float16).to("cuda")
|
42 |
|
43 |
pipe.scheduler = KDPM2AncestralDiscreteScheduler.from_config(pipe.scheduler.config)
|
44 |
|
45 |
+
# ํจ์ ์ ์
|
|
|
46 |
@spaces.GPU()
|
47 |
def generate_image(
|
48 |
prompt,
|
|
|
50 |
width=1024,
|
51 |
height=1024,
|
52 |
scale=1.5,
|
53 |
+
steps=30):
|
|
|
54 |
|
55 |
prompt = str(translator.translate(prompt, 'English'))
|
56 |
|
57 |
print(f'prompt:{prompt}')
|
58 |
+
|
59 |
+
generator1 = torch.manual_seed(random.randint(0, 10000))
|
60 |
+
generator2 = torch.manual_seed(random.randint(0, 10000))
|
61 |
+
|
62 |
+
images1 = pipe(
|
63 |
prompt,
|
64 |
negative_prompt=negative,
|
65 |
width=width,
|
66 |
height=height,
|
67 |
guidance_scale=scale,
|
68 |
num_inference_steps=steps,
|
69 |
+
generator=generator1
|
70 |
+
).images
|
71 |
+
|
72 |
+
images2 = pipe(
|
73 |
+
prompt,
|
74 |
+
negative_prompt=negative,
|
75 |
+
width=width,
|
76 |
+
height=height,
|
77 |
+
guidance_scale=scale,
|
78 |
+
num_inference_steps=steps,
|
79 |
+
generator=generator2
|
80 |
+
).images
|
81 |
+
|
82 |
+
return images1[0], images2[0] # ๋ ์ด๋ฏธ์ง๋ฅผ ๋ฐํ
|
83 |
|
84 |
|
85 |
examples = [
|
86 |
"์๋ฆ๋ค์ด 20์ธ ํ๊ตญ ์ฌ์ ๋ชจ๋ธ, 'ํ๊ตญ ์ฌ์๊ฐ์ ์์ด์ ๋ฎ์ ์ผ๊ตด', ๊ฒ์์ ์งง์ ๋จ๋ฐ๋จธ๋ฆฌ, C์ปต ์ฌ์ด์ฆ์ ํฐ ๊ฐ์ด, ํฐ ๊ณจ๋ฐ, ๊ฐ์ ์ ๋ํผ, ๋ฐฐ๊ฒฝ ํฐ์, ์ค๋ง์ผ ํ์ , ๋ชจ๋ธ ํฌ์ฆ, ์ ๋ฉด ์์, ์ ์ ๋
ธ์ถ, ์ด๊ณ ํด์๋ ์ฌ์ง",
|
87 |
"์๋ฆ๋ค์ด 20์ธ ์๊ตญ ์ฌ์ ๋ชจ๋ธ, '์ ๋ง์์จ ๋ฎ์ ์ผ๊ตด', ๊ธ๋ฐ ์งง์ ๋จ๋ฐ๋จธ๋ฆฌ, ์ด๋ธ๋ ๋๋ ์ค, ๋ฐฐ๊ฒฝ ์์์, ์ค๋ง์ผ ํ์ , ๋ชจ๋ธ ํฌ์ฆ, ์ ๋ฉด ์์, ์ ์ ๋
ธ์ถ, ์ด๊ณ ํด์๋ ์ฌ์ง",
|
88 |
"์๋ฆ๋ค์ด 20์ธ ํ๊ตญ ์ฌ์ ๋ชจ๋ธ, 'ํ๊ตญ ์ฌ์ ์์ด๋ ๋ฎ์ ์ผ๊ตด', ๊ฒ์์ ์งง์ ๋จ๋ฐ๋จธ๋ฆฌ, ๋นํค๋ ์์๋ณต, ๋ฐฐ๊ฒฝ ์์์ฅ, ์ค๋ง์ผ ํ์ , ๋ชจ๋ธ ํฌ์ฆ, ์ ๋ฉด ์์, ์ ์ ๋
ธ์ถ, ์ด๊ณ ํด์๋ ์ฌ์ง",
|
89 |
+
"์์๊ธด 23์ธ ์ค์จ๋ด ๋จ์ ๋ชจ๋ธ, ๊ธ๋ฐ ๋จธ๋ฆฌ, ๊ฑด์ฅํ ๋ชธ๋งค, ๋ฐฐ๊ฒฝ ์์์ฅ, ์ค๋ง์ผ ํ์ , ๋น์ง๋์ค ์ํธ, ๋ชจ๋ธ ํฌ์ฆ, ์ ๋ฉด ์์, ์ด๊ณ ํด์๋ ์ฌ์ง",
|
90 |
"์๋ฆ๋ค์ด 18์ธ ์ผ๋ณธ ์ฌ์ ๋ชจ๋ธ, ๊ฒ์์ ์งง์ ๋จ๋ฐ๋จธ๋ฆฌ, ์ค๋ง์ผ ํ์ , ๊ต๋ณต ์ ๋ํผ, ๋ฐฐ๊ฒฝ ํ๊ต ๊ต์ค, ๋ชจ๋ธ ํฌ์ฆ, ์ ๋ฉด ์์, ์ด๊ณ ํด์๋ ์ฌ์ง",
|
91 |
+
"์๋ฆ๋ค์ด 20์ธ ๋ธ๋ผ์ง ์ฌ์ ๋ชจ๋ธ, ๊ฒ์์ ์งง์ ๋จ๋ฐ๋จธ๋ฆฌ, C์ปต ์ฌ์ด์ฆ์ ํฐ ๊ฐ์ด, ํฐ ๊ณจ๋ฐ, ๊ฐํธ์ฌ ์ ๋ํผ, ๋ฐฐ๊ฒฝ ํฐ์, ์ค๋ง์ผ ํ์ , ๋ชจ๋ธ ํฌ์ฆ, ์ ๋ฉด ์์, ์ ์ ๋
ธ์ถ, ์ด๊ณ ํด์๋ ์ฌ์ง",
|
92 |
"์๋ฆ๋ค์ด 20์ธ ์ค์จ๋ด ์ฌ์ ๋ชจ๋ธ, ๊ธ๋ฐ ๊ธด ์๋จธ๋ฆฌ, C์ปต ์ฌ์ด์ฆ์ ํฐ ๊ฐ์ด, ํฐ ๊ณจ๋ฐ, ๋นํค๋ ์์๋ณต, ๋ฐฐ๊ฒฝ ํด๋ณ๊ฐ, ์ค๋ง์ผ ํ์ , ๋ชจ๋ธ ํฌ์ฆ, ์ ๋ฉด ์์, ์ด๊ณ ํด์๋ ์ฌ์ง",
|
93 |
"์๋ฆ๋ค์ด 18์ธ ๋ฌ์์ ์ฌ์ ๋ชจ๋ธ, ๊ธ๋ฐ ์งง์ ๋จ๋ฐ๋จธ๋ฆฌ, C์ปต ์ฌ์ด์ฆ์ ํฐ ๊ฐ์ด, ํฐ ๊ณจ๋ฐ, ๋นํค๋ ์์๋ณต, ๋ฐฐ๊ฒฝ ์์์ฅ, ์์ํ ํ์ , ๋ชจ๋ธ ํฌ์ฆ, ์ ๋ฉด ์์, ์ด๊ณ ํด์๋ ์ฌ์ง",
|
94 |
"์๋ฆ๋ค์ด 20์ธ ํ๋์ค ์ฌ์ ๋ชจ๋ธ, ๊ฐ์ ์งง์ ๋จ๋ฐ๋จธ๋ฆฌ, C์ปต ์ฌ์ด์ฆ์ ํฐ ๊ฐ์ด, ํฐ ๊ณจ๋ฐ, ๋น์ฆ๋์ค ์ ์ฅ, ๋ฐฐ๊ฒฝ ์ฌ๋ฌด์ค, ํฌ๊ฒ ์๋ ํ์ , ๋ชจ๋ธ ํฌ์ฆ, ์ ๋ฉด ์์, ์ด๊ณ ํด์๋ ์ฌ์ง",
|
|
|
96 |
]
|
97 |
|
98 |
|
99 |
+
# Gradio ์ธํฐํ์ด์ค
|
100 |
|
101 |
with gr.Blocks(css=CSS, js=JS, theme="soft") as demo:
|
102 |
gr.HTML("<h1><center>๋๋ง์ ๋ชจ๋ธ ์บ๋ฆญํฐ ์์ฑ</center></h1>")
|
|
|
104 |
with gr.Row():
|
105 |
prompt = gr.Textbox(label='Enter Your Prompt', value="best quality, HD, aesthetic", scale=6)
|
106 |
submit = gr.Button(scale=1, variant='primary')
|
107 |
+
img1 = gr.Image(label='Generated Image 1')
|
108 |
+
img2 = gr.Image(label='Generated Image 2')
|
109 |
with gr.Accordion("Advanced Options", open=False):
|
110 |
with gr.Row():
|
111 |
negative = gr.Textbox(label="Negative prompt", value="low quality, low quality, (deformed, distorted, disfigured:1.3), poorly drawn, bad anatomy, wrong anatomy, extra limb, missing limb, floating limbs, (mutated hands and fingers:1.4), disconnected limbs, mutation, mutated, ugly, disgusting, blurry, amputation, (NSFW:1.25)")
|
|
|
139 |
step=1,
|
140 |
value=50,
|
141 |
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
142 |
gr.Examples(
|
143 |
examples=examples,
|
144 |
inputs=prompt,
|
145 |
+
outputs=[img1, img2],
|
146 |
fn=generate_image,
|
147 |
+
cache_examples=False, # ์บ์ ์์ฑํ์ง ์๋๋ก ์ค์
|
148 |
)
|
149 |
|
150 |
prompt.submit(fn=generate_image,
|
151 |
+
inputs=[prompt, negative, width, height, scale, steps],
|
152 |
+
outputs=[img1, img2],
|
153 |
)
|
154 |
submit.click(fn=generate_image,
|
155 |
+
inputs=[prompt, negative, width, height, scale, steps],
|
156 |
+
outputs=[img1, img2],
|
157 |
)
|
158 |
|
159 |
#demo.queue().launch()
|
160 |
+
demo.queue().launch(auth=("gini", "pick"))
|