Spaces:
Running
on
Zero
Running
on
Zero
Upload app.py
Browse files
app.py
CHANGED
@@ -62,6 +62,13 @@ preprocessor_controlnet = {
|
|
62 |
"None",
|
63 |
"None (anime)",
|
64 |
],
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
65 |
"shuffle": [
|
66 |
"ContentShuffle",
|
67 |
"None",
|
@@ -88,7 +95,6 @@ preprocessor_controlnet = {
|
|
88 |
"Heavy Blur",
|
89 |
"None",
|
90 |
],
|
91 |
-
|
92 |
}
|
93 |
|
94 |
task_stablepy = {
|
@@ -236,20 +242,20 @@ upscaler_dict_gui = {
|
|
236 |
'Latent (bicubic antialiased)': 'Latent (bicubic antialiased)',
|
237 |
'Latent (nearest)': 'Latent (nearest)',
|
238 |
'Latent (nearest-exact)': 'Latent (nearest-exact)',
|
239 |
-
"RealESRGAN_x4plus"
|
240 |
-
"RealESRNet_x4plus"
|
241 |
"RealESRGAN_x4plus_anime_6B": "https://github.com/xinntao/Real-ESRGAN/releases/download/v0.2.2.4/RealESRGAN_x4plus_anime_6B.pth",
|
242 |
"RealESRGAN_x2plus": "https://github.com/xinntao/Real-ESRGAN/releases/download/v0.2.1/RealESRGAN_x2plus.pth",
|
243 |
"realesr-animevideov3": "https://github.com/xinntao/Real-ESRGAN/releases/download/v0.2.5.0/realesr-animevideov3.pth",
|
244 |
"realesr-general-x4v3": "https://github.com/xinntao/Real-ESRGAN/releases/download/v0.2.5.0/realesr-general-x4v3.pth",
|
245 |
-
"realesr-general-wdn-x4v3"
|
246 |
"4x-UltraSharp" : "https://huggingface.co/Shandypur/ESRGAN-4x-UltraSharp/resolve/main/4x-UltraSharp.pth",
|
247 |
-
"4x_foolhardy_Remacri"
|
248 |
-
"Remacri4xExtraSmoother"
|
249 |
-
"AnimeSharp4x"
|
250 |
"lollypop" : "https://huggingface.co/hollowstrawberry/upscalers-backup/resolve/main/ESRGAN/lollypop.pth",
|
251 |
-
"RealisticRescaler4x"
|
252 |
-
"NickelbackFS4x"
|
253 |
}
|
254 |
|
255 |
upscaler_keys = list(upscaler_dict_gui.keys())
|
@@ -567,10 +573,8 @@ class GuiSD:
|
|
567 |
model_precision = torch.float16
|
568 |
self.model.device = torch.device("cuda:0")
|
569 |
if not self.model:
|
570 |
-
from modelstream import Model_Diffusers2
|
571 |
-
|
572 |
print("Loading model...")
|
573 |
-
self.model =
|
574 |
base_model_id=model_name,
|
575 |
task_name=task,
|
576 |
vae_model=vae_model if vae_model != "None" else None,
|
@@ -739,20 +743,20 @@ class GuiSD:
|
|
739 |
|
740 |
info_state = info_state + "<br>" + "GENERATION DATA:<br>" + "<br>-------<br>".join(metadata).replace("\n", "<br>")
|
741 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
742 |
img = save_images(img, metadata)
|
743 |
|
744 |
yield img, info_state
|
745 |
|
746 |
sd_gen = GuiSD()
|
747 |
|
748 |
-
#@spaces.GPU
|
749 |
-
#def sd_gen_load_new_model(*args, progress=gr.Progress(track_tqdm=True)):
|
750 |
-
# yield from sd_gen.load_new_model(*args, progress)
|
751 |
-
|
752 |
-
#@spaces.GPU
|
753 |
-
#def sd_gen_generate_pipeline(*args, progress=gr.Progress(track_tqdm=True)):
|
754 |
-
# yield from sd_gen.generate_pipeline(*args, progress)
|
755 |
-
|
756 |
## BEGIN MOD
|
757 |
CSS ="""
|
758 |
.gradio-container, #main { width:100%; height:100%; max-width:100%; padding-left:0; padding-right:0; margin-left:0; margin-right:0; !important; }
|
@@ -885,14 +889,14 @@ with gr.Blocks(theme='NoCrypt/miku@>=1.2.2', elem_id="main", fill_width=True, cs
|
|
885 |
steps_gui = gr.Slider(minimum=1, maximum=100, step=1, value=28, label="Steps")
|
886 |
cfg_gui = gr.Slider(minimum=0, maximum=30, step=0.5, value=7.0, label="CFG")
|
887 |
with gr.Row():
|
888 |
-
seed_gui = gr.Number(minimum=-1, maximum=
|
889 |
pag_scale_gui = gr.Slider(minimum=0.0, maximum=10.0, step=0.1, value=0.0, label="PAG Scale")
|
890 |
num_images_gui = gr.Slider(minimum=1, maximum=4, step=1, value=1, label="Images")
|
891 |
clip_skip_gui = gr.Checkbox(value=False, label="Layer 2 Clip Skip")
|
892 |
free_u_gui = gr.Checkbox(value=False, label="FreeU")
|
893 |
with gr.Row():
|
894 |
sampler_gui = gr.Dropdown(label="Sampler", choices=scheduler_names, value="Euler a")
|
895 |
-
vae_model_gui = gr.Dropdown(label="VAE Model", choices=vae_model_list
|
896 |
prompt_s_options = [
|
897 |
("Compel format: (word)weight", "Compel"),
|
898 |
("Classic format: (word:weight)", "Classic"),
|
@@ -972,45 +976,54 @@ with gr.Blocks(theme='NoCrypt/miku@>=1.2.2', elem_id="main", fill_width=True, cs
|
|
972 |
)
|
973 |
|
974 |
with gr.Accordion("LoRA", open=False, visible=True) as menu_lora:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
975 |
with gr.Row():
|
976 |
with gr.Column():
|
977 |
-
lora1_gui =
|
978 |
-
lora_scale_1_gui =
|
979 |
with gr.Row():
|
980 |
with gr.Group():
|
981 |
-
lora1_info_gui =
|
982 |
lora1_copy_gui = gr.Button(value="Copy example to prompt", visible=False)
|
983 |
lora1_desc_gui = gr.Markdown(value="", visible=False)
|
984 |
with gr.Column():
|
985 |
-
lora2_gui =
|
986 |
-
lora_scale_2_gui =
|
987 |
with gr.Row():
|
988 |
with gr.Group():
|
989 |
-
lora2_info_gui =
|
990 |
lora2_copy_gui = gr.Button(value="Copy example to prompt", visible=False)
|
991 |
lora2_desc_gui = gr.Markdown(value="", visible=False)
|
992 |
with gr.Column():
|
993 |
-
lora3_gui =
|
994 |
-
lora_scale_3_gui =
|
995 |
with gr.Row():
|
996 |
with gr.Group():
|
997 |
-
lora3_info_gui =
|
998 |
lora3_copy_gui = gr.Button(value="Copy example to prompt", visible=False)
|
999 |
lora3_desc_gui = gr.Markdown(value="", visible=False)
|
1000 |
with gr.Column():
|
1001 |
-
lora4_gui =
|
1002 |
-
lora_scale_4_gui =
|
1003 |
with gr.Row():
|
1004 |
with gr.Group():
|
1005 |
-
lora4_info_gui =
|
1006 |
lora4_copy_gui = gr.Button(value="Copy example to prompt", visible=False)
|
1007 |
lora4_desc_gui = gr.Markdown(value="", visible=False)
|
1008 |
with gr.Column():
|
1009 |
-
lora5_gui =
|
1010 |
-
lora_scale_5_gui =
|
1011 |
with gr.Row():
|
1012 |
with gr.Group():
|
1013 |
-
lora5_info_gui =
|
1014 |
lora5_copy_gui = gr.Button(value="Copy example to prompt", visible=False)
|
1015 |
lora5_desc_gui = gr.Markdown(value="", visible=False)
|
1016 |
with gr.Accordion("From URL", open=True, visible=True):
|
@@ -1020,15 +1033,15 @@ with gr.Blocks(theme='NoCrypt/miku@>=1.2.2', elem_id="main", fill_width=True, cs
|
|
1020 |
search_civitai_button_lora = gr.Button("Search on Civitai")
|
1021 |
search_civitai_desc_lora = gr.Markdown(value="", visible=False)
|
1022 |
search_civitai_result_lora = gr.Dropdown(label="Search Results", choices=[("", "")], value="", allow_custom_value=True, visible=False)
|
1023 |
-
text_lora = gr.Textbox(label="URL", placeholder="
|
1024 |
button_lora = gr.Button("Get and update lists of LoRAs")
|
1025 |
with gr.Accordion("From Local", open=True, visible=True):
|
1026 |
file_output_lora = gr.File(label="Uploaded LoRA", file_types=['.ckpt', '.pt', '.pth', '.safetensors', '.bin'], file_count="multiple", interactive=False, visible=False)
|
1027 |
-
upload_button_lora = gr.UploadButton(label="Upload LoRA from your disk (very slow)", file_types=['.ckpt'
|
1028 |
|
1029 |
with gr.Column() as menu_advanced:
|
1030 |
with gr.Accordion("Hires fix", open=False, visible=True) as menu_hires:
|
1031 |
-
upscaler_model_path_gui = gr.Dropdown(label="Upscaler", choices=upscaler_keys, value=
|
1032 |
with gr.Row():
|
1033 |
upscaler_increases_size_gui = gr.Slider(minimum=1.1, maximum=6., step=0.1, value=1.0, label="Upscale by")
|
1034 |
esrgan_tile_gui = gr.Slider(minimum=0, value=100, maximum=500, step=1, label="ESRGAN Tile")
|
@@ -1127,7 +1140,7 @@ with gr.Blocks(theme='NoCrypt/miku@>=1.2.2', elem_id="main", fill_width=True, cs
|
|
1127 |
control_net_start_threshold_gui = gr.Slider(minimum=0, maximum=1, step=0.01, value=0, label="ControlNet Start Threshold (%)")
|
1128 |
control_net_stop_threshold_gui = gr.Slider(minimum=0, maximum=1, step=0.01, value=1, label="ControlNet Stop Threshold (%)")
|
1129 |
|
1130 |
-
with gr.Accordion("IP-Adapter", open=False, visible=True) as menu_ipa
|
1131 |
|
1132 |
IP_MODELS = sorted(list(set(IP_ADAPTERS_SD + IP_ADAPTERS_SDXL)))
|
1133 |
MODE_IP_OPTIONS = ["original", "style", "layout", "style+layout"]
|
@@ -1273,7 +1286,6 @@ with gr.Blocks(theme='NoCrypt/miku@>=1.2.2', elem_id="main", fill_width=True, cs
|
|
1273 |
],
|
1274 |
],
|
1275 |
fn=sd_gen.generate_pipeline,
|
1276 |
-
#fn=sd_gen_generate_pipeline,
|
1277 |
inputs=[
|
1278 |
prompt_gui,
|
1279 |
neg_prompt_gui,
|
@@ -1289,7 +1301,7 @@ with gr.Blocks(theme='NoCrypt/miku@>=1.2.2', elem_id="main", fill_width=True, cs
|
|
1289 |
],
|
1290 |
outputs=[result_images],
|
1291 |
cache_examples=False,
|
1292 |
-
elem_id="examples",
|
1293 |
)
|
1294 |
## END MOD
|
1295 |
|
@@ -1670,5 +1682,5 @@ with gr.Blocks(theme='NoCrypt/miku@>=1.2.2', elem_id="main", fill_width=True, cs
|
|
1670 |
gr.DuplicateButton(value="Duplicate Space for private use (This demo does not work on CPU. Requires GPU Space)")
|
1671 |
|
1672 |
app.queue()
|
1673 |
-
app.launch() #show_error=True, debug=True
|
1674 |
## END MOD
|
|
|
62 |
"None",
|
63 |
"None (anime)",
|
64 |
],
|
65 |
+
"lineart_anime": [
|
66 |
+
"Lineart",
|
67 |
+
"Lineart coarse",
|
68 |
+
"Lineart (anime)",
|
69 |
+
"None",
|
70 |
+
"None (anime)",
|
71 |
+
],
|
72 |
"shuffle": [
|
73 |
"ContentShuffle",
|
74 |
"None",
|
|
|
95 |
"Heavy Blur",
|
96 |
"None",
|
97 |
],
|
|
|
98 |
}
|
99 |
|
100 |
task_stablepy = {
|
|
|
242 |
'Latent (bicubic antialiased)': 'Latent (bicubic antialiased)',
|
243 |
'Latent (nearest)': 'Latent (nearest)',
|
244 |
'Latent (nearest-exact)': 'Latent (nearest-exact)',
|
245 |
+
"RealESRGAN_x4plus": "https://github.com/xinntao/Real-ESRGAN/releases/download/v0.1.0/RealESRGAN_x4plus.pth",
|
246 |
+
"RealESRNet_x4plus": "https://github.com/xinntao/Real-ESRGAN/releases/download/v0.1.1/RealESRNet_x4plus.pth",
|
247 |
"RealESRGAN_x4plus_anime_6B": "https://github.com/xinntao/Real-ESRGAN/releases/download/v0.2.2.4/RealESRGAN_x4plus_anime_6B.pth",
|
248 |
"RealESRGAN_x2plus": "https://github.com/xinntao/Real-ESRGAN/releases/download/v0.2.1/RealESRGAN_x2plus.pth",
|
249 |
"realesr-animevideov3": "https://github.com/xinntao/Real-ESRGAN/releases/download/v0.2.5.0/realesr-animevideov3.pth",
|
250 |
"realesr-general-x4v3": "https://github.com/xinntao/Real-ESRGAN/releases/download/v0.2.5.0/realesr-general-x4v3.pth",
|
251 |
+
"realesr-general-wdn-x4v3": "https://github.com/xinntao/Real-ESRGAN/releases/download/v0.2.5.0/realesr-general-wdn-x4v3.pth",
|
252 |
"4x-UltraSharp" : "https://huggingface.co/Shandypur/ESRGAN-4x-UltraSharp/resolve/main/4x-UltraSharp.pth",
|
253 |
+
"4x_foolhardy_Remacri": "https://huggingface.co/FacehugmanIII/4x_foolhardy_Remacri/resolve/main/4x_foolhardy_Remacri.pth",
|
254 |
+
"Remacri4xExtraSmoother": "https://huggingface.co/hollowstrawberry/upscalers-backup/resolve/main/ESRGAN/Remacri%204x%20ExtraSmoother.pth",
|
255 |
+
"AnimeSharp4x": "https://huggingface.co/hollowstrawberry/upscalers-backup/resolve/main/ESRGAN/AnimeSharp%204x.pth",
|
256 |
"lollypop" : "https://huggingface.co/hollowstrawberry/upscalers-backup/resolve/main/ESRGAN/lollypop.pth",
|
257 |
+
"RealisticRescaler4x": "https://huggingface.co/hollowstrawberry/upscalers-backup/resolve/main/ESRGAN/RealisticRescaler%204x.pth",
|
258 |
+
"NickelbackFS4x": "https://huggingface.co/hollowstrawberry/upscalers-backup/resolve/main/ESRGAN/NickelbackFS%204x.pth"
|
259 |
}
|
260 |
|
261 |
upscaler_keys = list(upscaler_dict_gui.keys())
|
|
|
573 |
model_precision = torch.float16
|
574 |
self.model.device = torch.device("cuda:0")
|
575 |
if not self.model:
|
|
|
|
|
576 |
print("Loading model...")
|
577 |
+
self.model = Model_Diffusers(
|
578 |
base_model_id=model_name,
|
579 |
task_name=task,
|
580 |
vae_model=vae_model if vae_model != "None" else None,
|
|
|
743 |
|
744 |
info_state = info_state + "<br>" + "GENERATION DATA:<br>" + "<br>-------<br>".join(metadata).replace("\n", "<br>")
|
745 |
|
746 |
+
download_links = "<br>".join(
|
747 |
+
[
|
748 |
+
f'<a href="{path.replace("/images/", "/file=/home/user/app/images/")}" download="{os.path.basename(path)}">Download Image {i + 1}</a>'
|
749 |
+
for i, path in enumerate(image_path)
|
750 |
+
]
|
751 |
+
)
|
752 |
+
#info_state += f"<br>{download_links}"
|
753 |
+
|
754 |
img = save_images(img, metadata)
|
755 |
|
756 |
yield img, info_state
|
757 |
|
758 |
sd_gen = GuiSD()
|
759 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
760 |
## BEGIN MOD
|
761 |
CSS ="""
|
762 |
.gradio-container, #main { width:100%; height:100%; max-width:100%; padding-left:0; padding-right:0; margin-left:0; margin-right:0; !important; }
|
|
|
889 |
steps_gui = gr.Slider(minimum=1, maximum=100, step=1, value=28, label="Steps")
|
890 |
cfg_gui = gr.Slider(minimum=0, maximum=30, step=0.5, value=7.0, label="CFG")
|
891 |
with gr.Row():
|
892 |
+
seed_gui = gr.Number(minimum=-1, maximum=2**32-1, value=-1, label="Seed")
|
893 |
pag_scale_gui = gr.Slider(minimum=0.0, maximum=10.0, step=0.1, value=0.0, label="PAG Scale")
|
894 |
num_images_gui = gr.Slider(minimum=1, maximum=4, step=1, value=1, label="Images")
|
895 |
clip_skip_gui = gr.Checkbox(value=False, label="Layer 2 Clip Skip")
|
896 |
free_u_gui = gr.Checkbox(value=False, label="FreeU")
|
897 |
with gr.Row():
|
898 |
sampler_gui = gr.Dropdown(label="Sampler", choices=scheduler_names, value="Euler a")
|
899 |
+
vae_model_gui = gr.Dropdown(label="VAE Model", choices=vae_model_list)
|
900 |
prompt_s_options = [
|
901 |
("Compel format: (word)weight", "Compel"),
|
902 |
("Classic format: (word:weight)", "Classic"),
|
|
|
976 |
)
|
977 |
|
978 |
with gr.Accordion("LoRA", open=False, visible=True) as menu_lora:
|
979 |
+
def lora_dropdown(label):
|
980 |
+
return gr.Dropdown(label=label, choices=get_all_lora_tupled_list(), value="", allow_custom_value=True, elem_classes="lora", min_width=320)
|
981 |
+
|
982 |
+
def lora_scale_slider(label):
|
983 |
+
return gr.Slider(minimum=-2, maximum=2, step=0.01, value=1.00, label=label)
|
984 |
+
|
985 |
+
def lora_textbox(label):
|
986 |
+
return gr.Textbox(label=label, info="Example of prompt:", value="None", show_copy_button=True, interactive=False, visible=False)
|
987 |
+
|
988 |
with gr.Row():
|
989 |
with gr.Column():
|
990 |
+
lora1_gui = lora_dropdown("LoRA1")
|
991 |
+
lora_scale_1_gui = lora_scale_slider("LoRA Scale 1")
|
992 |
with gr.Row():
|
993 |
with gr.Group():
|
994 |
+
lora1_info_gui = lora_textbox("LoRA1 prompts")
|
995 |
lora1_copy_gui = gr.Button(value="Copy example to prompt", visible=False)
|
996 |
lora1_desc_gui = gr.Markdown(value="", visible=False)
|
997 |
with gr.Column():
|
998 |
+
lora2_gui = lora_dropdown("LoRA2")
|
999 |
+
lora_scale_2_gui = lora_scale_slider("LoRA Scale 2")
|
1000 |
with gr.Row():
|
1001 |
with gr.Group():
|
1002 |
+
lora2_info_gui = lora_textbox("LoRA2 prompts")
|
1003 |
lora2_copy_gui = gr.Button(value="Copy example to prompt", visible=False)
|
1004 |
lora2_desc_gui = gr.Markdown(value="", visible=False)
|
1005 |
with gr.Column():
|
1006 |
+
lora3_gui = lora_dropdown("LoRA3")
|
1007 |
+
lora_scale_3_gui = lora_scale_slider("LoRA Scale 3")
|
1008 |
with gr.Row():
|
1009 |
with gr.Group():
|
1010 |
+
lora3_info_gui = lora_textbox("LoRA3 prompts")
|
1011 |
lora3_copy_gui = gr.Button(value="Copy example to prompt", visible=False)
|
1012 |
lora3_desc_gui = gr.Markdown(value="", visible=False)
|
1013 |
with gr.Column():
|
1014 |
+
lora4_gui = lora_dropdown("LoRA4")
|
1015 |
+
lora_scale_4_gui = lora_scale_slider("LoRA Scale 4")
|
1016 |
with gr.Row():
|
1017 |
with gr.Group():
|
1018 |
+
lora4_info_gui = lora_textbox("LoRA4 prompts")
|
1019 |
lora4_copy_gui = gr.Button(value="Copy example to prompt", visible=False)
|
1020 |
lora4_desc_gui = gr.Markdown(value="", visible=False)
|
1021 |
with gr.Column():
|
1022 |
+
lora5_gui = lora_dropdown("LoRA5")
|
1023 |
+
lora_scale_5_gui = lora_scale_slider("LoRA Scale 5")
|
1024 |
with gr.Row():
|
1025 |
with gr.Group():
|
1026 |
+
lora5_info_gui = lora_textbox("LoRA5 prompts")
|
1027 |
lora5_copy_gui = gr.Button(value="Copy example to prompt", visible=False)
|
1028 |
lora5_desc_gui = gr.Markdown(value="", visible=False)
|
1029 |
with gr.Accordion("From URL", open=True, visible=True):
|
|
|
1033 |
search_civitai_button_lora = gr.Button("Search on Civitai")
|
1034 |
search_civitai_desc_lora = gr.Markdown(value="", visible=False)
|
1035 |
search_civitai_result_lora = gr.Dropdown(label="Search Results", choices=[("", "")], value="", allow_custom_value=True, visible=False)
|
1036 |
+
text_lora = gr.Textbox(label="LoRA URL", placeholder="https://civitai.com/api/download/models/28907", lines=1)
|
1037 |
button_lora = gr.Button("Get and update lists of LoRAs")
|
1038 |
with gr.Accordion("From Local", open=True, visible=True):
|
1039 |
file_output_lora = gr.File(label="Uploaded LoRA", file_types=['.ckpt', '.pt', '.pth', '.safetensors', '.bin'], file_count="multiple", interactive=False, visible=False)
|
1040 |
+
upload_button_lora = gr.UploadButton(label="Upload LoRA from your disk (very slow)", file_types=['.ckpt', '.pt', '.pth', '.safetensors', '.bin'], file_count="multiple")
|
1041 |
|
1042 |
with gr.Column() as menu_advanced:
|
1043 |
with gr.Accordion("Hires fix", open=False, visible=True) as menu_hires:
|
1044 |
+
upscaler_model_path_gui = gr.Dropdown(label="Upscaler", choices=upscaler_keys, value=upscaler_keys[0])
|
1045 |
with gr.Row():
|
1046 |
upscaler_increases_size_gui = gr.Slider(minimum=1.1, maximum=6., step=0.1, value=1.0, label="Upscale by")
|
1047 |
esrgan_tile_gui = gr.Slider(minimum=0, value=100, maximum=500, step=1, label="ESRGAN Tile")
|
|
|
1140 |
control_net_start_threshold_gui = gr.Slider(minimum=0, maximum=1, step=0.01, value=0, label="ControlNet Start Threshold (%)")
|
1141 |
control_net_stop_threshold_gui = gr.Slider(minimum=0, maximum=1, step=0.01, value=1, label="ControlNet Stop Threshold (%)")
|
1142 |
|
1143 |
+
with gr.Accordion("IP-Adapter", open=False, visible=True) as menu_ipa:
|
1144 |
|
1145 |
IP_MODELS = sorted(list(set(IP_ADAPTERS_SD + IP_ADAPTERS_SDXL)))
|
1146 |
MODE_IP_OPTIONS = ["original", "style", "layout", "style+layout"]
|
|
|
1286 |
],
|
1287 |
],
|
1288 |
fn=sd_gen.generate_pipeline,
|
|
|
1289 |
inputs=[
|
1290 |
prompt_gui,
|
1291 |
neg_prompt_gui,
|
|
|
1301 |
],
|
1302 |
outputs=[result_images],
|
1303 |
cache_examples=False,
|
1304 |
+
#elem_id="examples",
|
1305 |
)
|
1306 |
## END MOD
|
1307 |
|
|
|
1682 |
gr.DuplicateButton(value="Duplicate Space for private use (This demo does not work on CPU. Requires GPU Space)")
|
1683 |
|
1684 |
app.queue()
|
1685 |
+
app.launch() # allowed_paths=["./images/"], show_error=True, debug=True
|
1686 |
## END MOD
|