Spaces:
Paused
Paused
Commit
·
1e0dc47
1
Parent(s):
5768419
파라미터 추가
Browse files- .gitignore +1 -0
- app.py +51 -50
- requirements.txt +3 -5
.gitignore
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
.venv
|
app.py
CHANGED
@@ -8,7 +8,7 @@ import requests
|
|
8 |
import io
|
9 |
import os
|
10 |
from PIL import Image
|
11 |
-
import spaces
|
12 |
|
13 |
from diffusers import (
|
14 |
StableDiffusionPipeline,
|
@@ -29,14 +29,14 @@ qrcode_generator = qrcode.QRCode(
|
|
29 |
)
|
30 |
|
31 |
controlnet = ControlNetModel.from_pretrained(
|
32 |
-
"DionTimmer/controlnet_qrcode-control_v1p_sd15", torch_dtype=torch.
|
33 |
) #.to("cuda")
|
34 |
|
35 |
pipe = StableDiffusionControlNetImg2ImgPipeline.from_pretrained(
|
36 |
"runwayml/stable-diffusion-v1-5",
|
37 |
controlnet=controlnet,
|
38 |
safety_checker=None,
|
39 |
-
torch_dtype=torch.
|
40 |
) #.to("cuda")
|
41 |
# pipe.enable_xformers_memory_efficient_attention()
|
42 |
|
@@ -62,7 +62,7 @@ SAMPLER_MAP = {
|
|
62 |
"DEIS": lambda config: DEISMultistepScheduler.from_config(config),
|
63 |
}
|
64 |
|
65 |
-
@spaces.GPU()
|
66 |
def inference(
|
67 |
qr_code_content: str,
|
68 |
prompt: str,
|
@@ -72,8 +72,9 @@ def inference(
|
|
72 |
strength: float = 0.8,
|
73 |
seed: int = -1,
|
74 |
init_image: Image.Image | None = None,
|
75 |
-
|
76 |
-
|
|
|
77 |
sampler = "DPM++ Karras SDE",
|
78 |
):
|
79 |
if prompt is None or prompt == "":
|
@@ -99,9 +100,9 @@ def inference(
|
|
99 |
|
100 |
qrcode_image = qr.make_image(fill_color="black", back_color="white")
|
101 |
qrcode_image = resize_for_condition_image(qrcode_image, 768)
|
102 |
-
if
|
103 |
print("Using QR Code Image")
|
104 |
-
|
105 |
|
106 |
out = pipe(
|
107 |
prompt=prompt,
|
@@ -114,7 +115,9 @@ def inference(
|
|
114 |
controlnet_conditioning_scale=float(controlnet_conditioning_scale), # type: ignore
|
115 |
generator=generator,
|
116 |
strength=float(strength),
|
117 |
-
num_inference_steps=
|
|
|
|
|
118 |
)
|
119 |
return out.images[0] # type: ignore
|
120 |
|
@@ -143,11 +146,7 @@ model: https://huggingface.co/DionTimmer/controlnet_qrcode-control_v1p_sd15
|
|
143 |
info="QR Code Content or URL",
|
144 |
value="",
|
145 |
)
|
146 |
-
|
147 |
-
custom_image = gr.Image(
|
148 |
-
label="Init Code Image Leave blank to automatically generate QR code",
|
149 |
-
type="pil",
|
150 |
-
)
|
151 |
|
152 |
prompt = gr.Textbox(
|
153 |
label="Prompt",
|
@@ -157,9 +156,8 @@ model: https://huggingface.co/DionTimmer/controlnet_qrcode-control_v1p_sd15
|
|
157 |
label="Negative Prompt",
|
158 |
value="ugly, disfigured, low quality, blurry, nsfw",
|
159 |
)
|
160 |
-
use_qr_code_as_init_image = gr.Checkbox(label="Use QR code as init image", value=True, interactive=False, info="Whether init image should be QR code. Unclick to pass init image or generate init image with Stable Diffusion 2.1")
|
161 |
|
162 |
-
with gr.Accordion(label="Init Images (Optional)", open=
|
163 |
init_image = gr.Image(label="Init Image (Optional). Leave blank to generate image with SD 2.1", type="pil")
|
164 |
|
165 |
|
@@ -174,12 +172,12 @@ model: https://huggingface.co/DionTimmer/controlnet_qrcode-control_v1p_sd15
|
|
174 |
value=1.1,
|
175 |
label="Controlnet Conditioning Scale",
|
176 |
)
|
177 |
-
|
178 |
minimum=20,
|
179 |
maximum=50,
|
180 |
step=1,
|
181 |
value=20,
|
182 |
-
label="
|
183 |
)
|
184 |
strength = gr.Slider(
|
185 |
minimum=0.0, maximum=1.0, step=0.01, value=0.9, label="Strength"
|
@@ -229,8 +227,9 @@ model: https://huggingface.co/DionTimmer/controlnet_qrcode-control_v1p_sd15
|
|
229 |
strength,
|
230 |
seed,
|
231 |
init_image,
|
232 |
-
|
233 |
-
|
|
|
234 |
sampler,
|
235 |
],
|
236 |
outputs=[result_image],
|
@@ -248,36 +247,37 @@ model: https://huggingface.co/DionTimmer/controlnet_qrcode-control_v1p_sd15
|
|
248 |
0.9,
|
249 |
5392011833,
|
250 |
None,
|
251 |
-
|
252 |
-
|
253 |
-
|
254 |
-
],
|
255 |
-
[
|
256 |
-
"https://huggingface.co/",
|
257 |
-
"Bright sunshine coming through the cracks of a wet, cave wall of big rocks",
|
258 |
-
"ugly, disfigured, low quality, blurry, nsfw",
|
259 |
-
7.5,
|
260 |
-
1.11,
|
261 |
-
0.9,
|
262 |
-
2523992465,
|
263 |
-
None,
|
264 |
-
None,
|
265 |
-
True,
|
266 |
-
"DPM++ Karras SDE",
|
267 |
-
],
|
268 |
-
[
|
269 |
-
"https://huggingface.co/",
|
270 |
-
"Sky view of highly aesthetic, ancient greek thermal baths in beautiful nature",
|
271 |
-
"ugly, disfigured, low quality, blurry, nsfw",
|
272 |
-
7.5,
|
273 |
-
1.5,
|
274 |
-
0.9,
|
275 |
-
2523992465,
|
276 |
-
None,
|
277 |
-
None,
|
278 |
-
True,
|
279 |
"DPM++ Karras SDE",
|
280 |
],
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
281 |
],
|
282 |
fn=inference,
|
283 |
inputs=[
|
@@ -289,8 +289,9 @@ model: https://huggingface.co/DionTimmer/controlnet_qrcode-control_v1p_sd15
|
|
289 |
strength,
|
290 |
seed,
|
291 |
init_image,
|
292 |
-
|
293 |
-
|
|
|
294 |
sampler,
|
295 |
],
|
296 |
outputs=[result_image],
|
|
|
8 |
import io
|
9 |
import os
|
10 |
from PIL import Image
|
11 |
+
# import spaces
|
12 |
|
13 |
from diffusers import (
|
14 |
StableDiffusionPipeline,
|
|
|
29 |
)
|
30 |
|
31 |
controlnet = ControlNetModel.from_pretrained(
|
32 |
+
"DionTimmer/controlnet_qrcode-control_v1p_sd15", torch_dtype=torch.float32
|
33 |
) #.to("cuda")
|
34 |
|
35 |
pipe = StableDiffusionControlNetImg2ImgPipeline.from_pretrained(
|
36 |
"runwayml/stable-diffusion-v1-5",
|
37 |
controlnet=controlnet,
|
38 |
safety_checker=None,
|
39 |
+
torch_dtype=torch.float32,
|
40 |
) #.to("cuda")
|
41 |
# pipe.enable_xformers_memory_efficient_attention()
|
42 |
|
|
|
62 |
"DEIS": lambda config: DEISMultistepScheduler.from_config(config),
|
63 |
}
|
64 |
|
65 |
+
# @spaces.GPU()
|
66 |
def inference(
|
67 |
qr_code_content: str,
|
68 |
prompt: str,
|
|
|
72 |
strength: float = 0.8,
|
73 |
seed: int = -1,
|
74 |
init_image: Image.Image | None = None,
|
75 |
+
control_guidance_start: float = 0,
|
76 |
+
control_guidance_end: float = 1,
|
77 |
+
num_inference_steps: int = 20,
|
78 |
sampler = "DPM++ Karras SDE",
|
79 |
):
|
80 |
if prompt is None or prompt == "":
|
|
|
100 |
|
101 |
qrcode_image = qr.make_image(fill_color="black", back_color="white")
|
102 |
qrcode_image = resize_for_condition_image(qrcode_image, 768)
|
103 |
+
if init_image is None:
|
104 |
print("Using QR Code Image")
|
105 |
+
init_image = qrcode_image
|
106 |
|
107 |
out = pipe(
|
108 |
prompt=prompt,
|
|
|
115 |
controlnet_conditioning_scale=float(controlnet_conditioning_scale), # type: ignore
|
116 |
generator=generator,
|
117 |
strength=float(strength),
|
118 |
+
num_inference_steps=num_inference_steps,
|
119 |
+
control_guidance_start=control_guidance_start,
|
120 |
+
control_guidance_end=control_guidance_end,
|
121 |
)
|
122 |
return out.images[0] # type: ignore
|
123 |
|
|
|
146 |
info="QR Code Content or URL",
|
147 |
value="",
|
148 |
)
|
149 |
+
|
|
|
|
|
|
|
|
|
150 |
|
151 |
prompt = gr.Textbox(
|
152 |
label="Prompt",
|
|
|
156 |
label="Negative Prompt",
|
157 |
value="ugly, disfigured, low quality, blurry, nsfw",
|
158 |
)
|
|
|
159 |
|
160 |
+
with gr.Accordion(label="Init Images (Optional)", open=True):
|
161 |
init_image = gr.Image(label="Init Image (Optional). Leave blank to generate image with SD 2.1", type="pil")
|
162 |
|
163 |
|
|
|
172 |
value=1.1,
|
173 |
label="Controlnet Conditioning Scale",
|
174 |
)
|
175 |
+
num_inference_steps = gr.Slider(
|
176 |
minimum=20,
|
177 |
maximum=50,
|
178 |
step=1,
|
179 |
value=20,
|
180 |
+
label="num_inference_steps",
|
181 |
)
|
182 |
strength = gr.Slider(
|
183 |
minimum=0.0, maximum=1.0, step=0.01, value=0.9, label="Strength"
|
|
|
227 |
strength,
|
228 |
seed,
|
229 |
init_image,
|
230 |
+
control_guidance_start,
|
231 |
+
control_guidance_end,
|
232 |
+
num_inference_steps,
|
233 |
sampler,
|
234 |
],
|
235 |
outputs=[result_image],
|
|
|
247 |
0.9,
|
248 |
5392011833,
|
249 |
None,
|
250 |
+
0,
|
251 |
+
1,
|
252 |
+
20,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
253 |
"DPM++ Karras SDE",
|
254 |
],
|
255 |
+
# [
|
256 |
+
# "https://huggingface.co/",
|
257 |
+
# "Bright sunshine coming through the cracks of a wet, cave wall of big rocks",
|
258 |
+
# "ugly, disfigured, low quality, blurry, nsfw",
|
259 |
+
# 7.5,
|
260 |
+
# 1.11,
|
261 |
+
# 0.9,
|
262 |
+
# 2523992465,
|
263 |
+
# None,
|
264 |
+
# None,
|
265 |
+
# True,
|
266 |
+
# "DPM++ Karras SDE",
|
267 |
+
# ],
|
268 |
+
# [
|
269 |
+
# "https://huggingface.co/",
|
270 |
+
# "Sky view of highly aesthetic, ancient greek thermal baths in beautiful nature",
|
271 |
+
# "ugly, disfigured, low quality, blurry, nsfw",
|
272 |
+
# 7.5,
|
273 |
+
# 1.5,
|
274 |
+
# 0.9,
|
275 |
+
# 2523992465,
|
276 |
+
# None,
|
277 |
+
# None,
|
278 |
+
# True,
|
279 |
+
# "DPM++ Karras SDE",
|
280 |
+
# ],
|
281 |
],
|
282 |
fn=inference,
|
283 |
inputs=[
|
|
|
289 |
strength,
|
290 |
seed,
|
291 |
init_image,
|
292 |
+
control_guidance_start,
|
293 |
+
control_guidance_end,
|
294 |
+
num_inference_steps,
|
295 |
sampler,
|
296 |
],
|
297 |
outputs=[result_image],
|
requirements.txt
CHANGED
@@ -1,9 +1,7 @@
|
|
1 |
-
diffusers
|
2 |
-
transformers
|
3 |
accelerate
|
4 |
-
torch
|
5 |
-
xformers
|
6 |
-
gradio
|
7 |
Pillow
|
8 |
qrcode
|
9 |
gradio==4.8.0
|
|
|
1 |
+
diffusers==0.25.0
|
2 |
+
transformers==4.27.2
|
3 |
accelerate
|
4 |
+
torch==2.0.1
|
|
|
|
|
5 |
Pillow
|
6 |
qrcode
|
7 |
gradio==4.8.0
|