Spaces:
Paused
Paused
Update app.py
Browse files
app.py
CHANGED
|
@@ -6,12 +6,14 @@ from stablepy import (
|
|
| 6 |
SCHEDULE_PREDICTION_TYPE_OPTIONS,
|
| 7 |
check_scheduler_compatibility,
|
| 8 |
TASK_AND_PREPROCESSORS,
|
|
|
|
| 9 |
)
|
| 10 |
from constants import (
|
| 11 |
DIRECTORY_MODELS,
|
| 12 |
DIRECTORY_LORAS,
|
| 13 |
DIRECTORY_VAES,
|
| 14 |
DIRECTORY_EMBEDS,
|
|
|
|
| 15 |
DOWNLOAD_MODEL,
|
| 16 |
DOWNLOAD_VAE,
|
| 17 |
DOWNLOAD_LORA,
|
|
@@ -76,7 +78,7 @@ torch.backends.cuda.matmul.allow_tf32 = True
|
|
| 76 |
# os.environ["PYTORCH_NO_CUDA_MEMORY_CACHING"] = "1"
|
| 77 |
print(os.getenv("SPACES_ZERO_GPU"))
|
| 78 |
|
| 79 |
-
directories = [DIRECTORY_MODELS, DIRECTORY_LORAS, DIRECTORY_VAES, DIRECTORY_EMBEDS]
|
| 80 |
for directory in directories:
|
| 81 |
os.makedirs(directory, exist_ok=True)
|
| 82 |
|
|
@@ -121,6 +123,7 @@ flux_pipe = FluxPipeline.from_pretrained(
|
|
| 121 |
components = flux_pipe.components
|
| 122 |
components.pop("transformer", None)
|
| 123 |
delete_model(flux_repo)
|
|
|
|
| 124 |
|
| 125 |
#######################
|
| 126 |
# GUI
|
|
@@ -310,8 +313,8 @@ class GuiSD:
|
|
| 310 |
syntax_weights,
|
| 311 |
upscaler_model_path,
|
| 312 |
upscaler_increases_size,
|
| 313 |
-
|
| 314 |
-
|
| 315 |
hires_steps,
|
| 316 |
hires_denoising_strength,
|
| 317 |
hires_sampler,
|
|
@@ -375,6 +378,9 @@ class GuiSD:
|
|
| 375 |
mode_ip2,
|
| 376 |
scale_ip2,
|
| 377 |
pag_scale,
|
|
|
|
|
|
|
|
|
|
| 378 |
):
|
| 379 |
info_state = html_template_message("Navigating latent space...")
|
| 380 |
yield info_state, gr.update(), gr.update()
|
|
@@ -418,16 +424,13 @@ class GuiSD:
|
|
| 418 |
if task == "inpaint" and not image_mask:
|
| 419 |
raise ValueError("No mask image found: Specify one in 'Image Mask'")
|
| 420 |
|
| 421 |
-
if
|
| 422 |
upscaler_model = upscaler_model_path
|
| 423 |
else:
|
| 424 |
-
directory_upscalers = 'upscalers'
|
| 425 |
-
os.makedirs(directory_upscalers, exist_ok=True)
|
| 426 |
-
|
| 427 |
url_upscaler = UPSCALER_DICT_GUI[upscaler_model_path]
|
| 428 |
|
| 429 |
if not os.path.exists(f"./upscalers/{url_upscaler.split('/')[-1]}"):
|
| 430 |
-
download_things(
|
| 431 |
|
| 432 |
upscaler_model = f"./upscalers/{url_upscaler.split('/')[-1]}"
|
| 433 |
|
|
@@ -531,8 +534,8 @@ class GuiSD:
|
|
| 531 |
"t2i_adapter_conditioning_factor": float(t2i_adapter_conditioning_factor),
|
| 532 |
"upscaler_model_path": upscaler_model,
|
| 533 |
"upscaler_increases_size": upscaler_increases_size,
|
| 534 |
-
"
|
| 535 |
-
"
|
| 536 |
"hires_steps": hires_steps,
|
| 537 |
"hires_denoising_strength": hires_denoising_strength,
|
| 538 |
"hires_prompt": hires_prompt,
|
|
@@ -547,6 +550,9 @@ class GuiSD:
|
|
| 547 |
"ip_adapter_model": params_ip_model,
|
| 548 |
"ip_adapter_mode": params_ip_mode,
|
| 549 |
"ip_adapter_scale": params_ip_scale,
|
|
|
|
|
|
|
|
|
|
| 550 |
}
|
| 551 |
|
| 552 |
# kwargs for diffusers pipeline
|
|
@@ -694,22 +700,24 @@ def sd_gen_generate_pipeline(*args):
|
|
| 694 |
|
| 695 |
|
| 696 |
@spaces.GPU(duration=15)
|
| 697 |
-
def
|
| 698 |
if image is None: return None
|
| 699 |
|
| 700 |
from stablepy.diffusers_vanilla.utils import save_pil_image_with_metadata
|
| 701 |
-
from stablepy import
|
| 702 |
|
|
|
|
| 703 |
exif_image = extract_exif_data(image)
|
| 704 |
|
| 705 |
-
|
| 706 |
-
|
| 707 |
-
|
| 708 |
-
|
| 709 |
-
|
|
|
|
| 710 |
|
| 711 |
-
scaler_beta =
|
| 712 |
-
image_up = scaler_beta.upscale(image, upscaler_size,
|
| 713 |
|
| 714 |
image_path = save_pil_image_with_metadata(image_up, f'{os.getcwd()}/up_images', exif_image)
|
| 715 |
|
|
@@ -900,8 +908,8 @@ with gr.Blocks(theme="NoCrypt/miku", css=CSS) as app:
|
|
| 900 |
|
| 901 |
upscaler_model_path_gui = gr.Dropdown(label="Upscaler", choices=UPSCALER_KEYS, value=UPSCALER_KEYS[0])
|
| 902 |
upscaler_increases_size_gui = gr.Slider(minimum=1.1, maximum=4., step=0.1, value=1.2, label="Upscale by")
|
| 903 |
-
|
| 904 |
-
|
| 905 |
hires_steps_gui = gr.Slider(minimum=0, value=30, maximum=100, step=1, label="Hires Steps")
|
| 906 |
hires_denoising_strength_gui = gr.Slider(minimum=0.1, maximum=1.0, step=0.01, value=0.55, label="Hires Denoising Strength")
|
| 907 |
hires_sampler_gui = gr.Dropdown(label="Hires Sampler", choices=POST_PROCESSING_SAMPLER, value=POST_PROCESSING_SAMPLER[0])
|
|
@@ -950,6 +958,14 @@ with gr.Blocks(theme="NoCrypt/miku", css=CSS) as app:
|
|
| 950 |
[lora1_gui, lora2_gui, lora3_gui, lora4_gui, lora5_gui, lora6_gui, lora7_gui, new_lora_status]
|
| 951 |
)
|
| 952 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 953 |
with gr.Accordion("IP-Adapter", open=False, visible=True):
|
| 954 |
|
| 955 |
IP_MODELS = sorted(list(set(IP_ADAPTERS_SD + IP_ADAPTERS_SDXL)))
|
|
@@ -1190,8 +1206,11 @@ with gr.Blocks(theme="NoCrypt/miku", css=CSS) as app:
|
|
| 1190 |
|
| 1191 |
with gr.Row():
|
| 1192 |
with gr.Column():
|
|
|
|
|
|
|
|
|
|
| 1193 |
image_up_tab = gr.Image(label="Image", type="pil", sources=["upload"])
|
| 1194 |
-
upscaler_tab = gr.Dropdown(label="Upscaler", choices=
|
| 1195 |
upscaler_size_tab = gr.Slider(minimum=1., maximum=4., step=0.1, value=1.1, label="Upscale by")
|
| 1196 |
generate_button_up_tab = gr.Button(value="START UPSCALE", variant="primary")
|
| 1197 |
|
|
@@ -1199,7 +1218,7 @@ with gr.Blocks(theme="NoCrypt/miku", css=CSS) as app:
|
|
| 1199 |
result_up_tab = gr.Image(label="Result", type="pil", interactive=False, format="png")
|
| 1200 |
|
| 1201 |
generate_button_up_tab.click(
|
| 1202 |
-
fn=
|
| 1203 |
inputs=[image_up_tab, upscaler_tab, upscaler_size_tab],
|
| 1204 |
outputs=[result_up_tab],
|
| 1205 |
)
|
|
@@ -1271,8 +1290,8 @@ with gr.Blocks(theme="NoCrypt/miku", css=CSS) as app:
|
|
| 1271 |
prompt_syntax_gui,
|
| 1272 |
upscaler_model_path_gui,
|
| 1273 |
upscaler_increases_size_gui,
|
| 1274 |
-
|
| 1275 |
-
|
| 1276 |
hires_steps_gui,
|
| 1277 |
hires_denoising_strength_gui,
|
| 1278 |
hires_sampler_gui,
|
|
@@ -1336,6 +1355,9 @@ with gr.Blocks(theme="NoCrypt/miku", css=CSS) as app:
|
|
| 1336 |
mode_ip2,
|
| 1337 |
scale_ip2,
|
| 1338 |
pag_scale_gui,
|
|
|
|
|
|
|
|
|
|
| 1339 |
load_lora_cpu_gui,
|
| 1340 |
verbose_info_gui,
|
| 1341 |
gpu_duration_gui,
|
|
|
|
| 6 |
SCHEDULE_PREDICTION_TYPE_OPTIONS,
|
| 7 |
check_scheduler_compatibility,
|
| 8 |
TASK_AND_PREPROCESSORS,
|
| 9 |
+
FACE_RESTORATION_MODELS,
|
| 10 |
)
|
| 11 |
from constants import (
|
| 12 |
DIRECTORY_MODELS,
|
| 13 |
DIRECTORY_LORAS,
|
| 14 |
DIRECTORY_VAES,
|
| 15 |
DIRECTORY_EMBEDS,
|
| 16 |
+
DIRECTORY_UPSCALERS,
|
| 17 |
DOWNLOAD_MODEL,
|
| 18 |
DOWNLOAD_VAE,
|
| 19 |
DOWNLOAD_LORA,
|
|
|
|
| 78 |
# os.environ["PYTORCH_NO_CUDA_MEMORY_CACHING"] = "1"
|
| 79 |
print(os.getenv("SPACES_ZERO_GPU"))
|
| 80 |
|
| 81 |
+
directories = [DIRECTORY_MODELS, DIRECTORY_LORAS, DIRECTORY_VAES, DIRECTORY_EMBEDS, DIRECTORY_UPSCALERS]
|
| 82 |
for directory in directories:
|
| 83 |
os.makedirs(directory, exist_ok=True)
|
| 84 |
|
|
|
|
| 123 |
components = flux_pipe.components
|
| 124 |
components.pop("transformer", None)
|
| 125 |
delete_model(flux_repo)
|
| 126 |
+
# components = None
|
| 127 |
|
| 128 |
#######################
|
| 129 |
# GUI
|
|
|
|
| 313 |
syntax_weights,
|
| 314 |
upscaler_model_path,
|
| 315 |
upscaler_increases_size,
|
| 316 |
+
upscaler_tile_size,
|
| 317 |
+
upscaler_tile_overlap,
|
| 318 |
hires_steps,
|
| 319 |
hires_denoising_strength,
|
| 320 |
hires_sampler,
|
|
|
|
| 378 |
mode_ip2,
|
| 379 |
scale_ip2,
|
| 380 |
pag_scale,
|
| 381 |
+
face_restoration_model,
|
| 382 |
+
face_restoration_visibility,
|
| 383 |
+
face_restoration_weight,
|
| 384 |
):
|
| 385 |
info_state = html_template_message("Navigating latent space...")
|
| 386 |
yield info_state, gr.update(), gr.update()
|
|
|
|
| 424 |
if task == "inpaint" and not image_mask:
|
| 425 |
raise ValueError("No mask image found: Specify one in 'Image Mask'")
|
| 426 |
|
| 427 |
+
if "https://" not in str(UPSCALER_DICT_GUI[upscaler_model_path]):
|
| 428 |
upscaler_model = upscaler_model_path
|
| 429 |
else:
|
|
|
|
|
|
|
|
|
|
| 430 |
url_upscaler = UPSCALER_DICT_GUI[upscaler_model_path]
|
| 431 |
|
| 432 |
if not os.path.exists(f"./upscalers/{url_upscaler.split('/')[-1]}"):
|
| 433 |
+
download_things(DIRECTORY_UPSCALERS, url_upscaler, HF_TOKEN)
|
| 434 |
|
| 435 |
upscaler_model = f"./upscalers/{url_upscaler.split('/')[-1]}"
|
| 436 |
|
|
|
|
| 534 |
"t2i_adapter_conditioning_factor": float(t2i_adapter_conditioning_factor),
|
| 535 |
"upscaler_model_path": upscaler_model,
|
| 536 |
"upscaler_increases_size": upscaler_increases_size,
|
| 537 |
+
"upscaler_tile_size": upscaler_tile_size,
|
| 538 |
+
"upscaler_tile_overlap": upscaler_tile_overlap,
|
| 539 |
"hires_steps": hires_steps,
|
| 540 |
"hires_denoising_strength": hires_denoising_strength,
|
| 541 |
"hires_prompt": hires_prompt,
|
|
|
|
| 550 |
"ip_adapter_model": params_ip_model,
|
| 551 |
"ip_adapter_mode": params_ip_mode,
|
| 552 |
"ip_adapter_scale": params_ip_scale,
|
| 553 |
+
"face_restoration_model": face_restoration_model,
|
| 554 |
+
"face_restoration_visibility": face_restoration_visibility,
|
| 555 |
+
"face_restoration_weight": face_restoration_weight,
|
| 556 |
}
|
| 557 |
|
| 558 |
# kwargs for diffusers pipeline
|
|
|
|
| 700 |
|
| 701 |
|
| 702 |
@spaces.GPU(duration=15)
|
| 703 |
+
def process_upscale(image, upscaler_name, upscaler_size):
|
| 704 |
if image is None: return None
|
| 705 |
|
| 706 |
from stablepy.diffusers_vanilla.utils import save_pil_image_with_metadata
|
| 707 |
+
from stablepy import load_upscaler_model
|
| 708 |
|
| 709 |
+
image = image.convert("RGB")
|
| 710 |
exif_image = extract_exif_data(image)
|
| 711 |
|
| 712 |
+
name_upscaler = UPSCALER_DICT_GUI[upscaler_name]
|
| 713 |
+
|
| 714 |
+
if "https://" in str(name_upscaler):
|
| 715 |
+
name_upscaler = f"./upscalers/{name_upscaler.split('/')[-1]}"
|
| 716 |
+
if not os.path.exists(name_upscaler):
|
| 717 |
+
download_things(DIRECTORY_UPSCALERS, name_upscaler, HF_TOKEN)
|
| 718 |
|
| 719 |
+
scaler_beta = load_upscaler_model(model=name_upscaler, tile=0, tile_overlap=8, device="cuda", half=True)
|
| 720 |
+
image_up = scaler_beta.upscale(image, upscaler_size, True)
|
| 721 |
|
| 722 |
image_path = save_pil_image_with_metadata(image_up, f'{os.getcwd()}/up_images', exif_image)
|
| 723 |
|
|
|
|
| 908 |
|
| 909 |
upscaler_model_path_gui = gr.Dropdown(label="Upscaler", choices=UPSCALER_KEYS, value=UPSCALER_KEYS[0])
|
| 910 |
upscaler_increases_size_gui = gr.Slider(minimum=1.1, maximum=4., step=0.1, value=1.2, label="Upscale by")
|
| 911 |
+
upscaler_tile_size_gui = gr.Slider(minimum=0, maximum=512, step=16, value=0, label="Upscaler Tile Size", info="0 = no tiling")
|
| 912 |
+
upscaler_tile_overlap_gui = gr.Slider(minimum=0, maximum=48, step=1, value=8, label="Upscaler Tile Overlap")
|
| 913 |
hires_steps_gui = gr.Slider(minimum=0, value=30, maximum=100, step=1, label="Hires Steps")
|
| 914 |
hires_denoising_strength_gui = gr.Slider(minimum=0.1, maximum=1.0, step=0.01, value=0.55, label="Hires Denoising Strength")
|
| 915 |
hires_sampler_gui = gr.Dropdown(label="Hires Sampler", choices=POST_PROCESSING_SAMPLER, value=POST_PROCESSING_SAMPLER[0])
|
|
|
|
| 958 |
[lora1_gui, lora2_gui, lora3_gui, lora4_gui, lora5_gui, lora6_gui, lora7_gui, new_lora_status]
|
| 959 |
)
|
| 960 |
|
| 961 |
+
with gr.Accordion("Face restoration", open=False, visible=True):
|
| 962 |
+
|
| 963 |
+
face_rest_options = [None] + FACE_RESTORATION_MODELS
|
| 964 |
+
|
| 965 |
+
face_restoration_model_gui = gr.Dropdown(label="Face restoration model", choices=face_rest_options, value=face_rest_options[0])
|
| 966 |
+
face_restoration_visibility_gui = gr.Slider(minimum=0., maximum=1., step=0.001, value=1., label="Visibility")
|
| 967 |
+
face_restoration_weight_gui = gr.Slider(minimum=0., maximum=1., step=0.001, value=.5, label="Weight", info="(0 = maximum effect, 1 = minimum effect)")
|
| 968 |
+
|
| 969 |
with gr.Accordion("IP-Adapter", open=False, visible=True):
|
| 970 |
|
| 971 |
IP_MODELS = sorted(list(set(IP_ADAPTERS_SD + IP_ADAPTERS_SDXL)))
|
|
|
|
| 1206 |
|
| 1207 |
with gr.Row():
|
| 1208 |
with gr.Column():
|
| 1209 |
+
|
| 1210 |
+
USCALER_TAB_KEYS = [name for name in UPSCALER_KEYS[9:]]
|
| 1211 |
+
|
| 1212 |
image_up_tab = gr.Image(label="Image", type="pil", sources=["upload"])
|
| 1213 |
+
upscaler_tab = gr.Dropdown(label="Upscaler", choices=USCALER_TAB_KEYS, value=USCALER_TAB_KEYS[5])
|
| 1214 |
upscaler_size_tab = gr.Slider(minimum=1., maximum=4., step=0.1, value=1.1, label="Upscale by")
|
| 1215 |
generate_button_up_tab = gr.Button(value="START UPSCALE", variant="primary")
|
| 1216 |
|
|
|
|
| 1218 |
result_up_tab = gr.Image(label="Result", type="pil", interactive=False, format="png")
|
| 1219 |
|
| 1220 |
generate_button_up_tab.click(
|
| 1221 |
+
fn=process_upscale,
|
| 1222 |
inputs=[image_up_tab, upscaler_tab, upscaler_size_tab],
|
| 1223 |
outputs=[result_up_tab],
|
| 1224 |
)
|
|
|
|
| 1290 |
prompt_syntax_gui,
|
| 1291 |
upscaler_model_path_gui,
|
| 1292 |
upscaler_increases_size_gui,
|
| 1293 |
+
upscaler_tile_size_gui,
|
| 1294 |
+
upscaler_tile_overlap_gui,
|
| 1295 |
hires_steps_gui,
|
| 1296 |
hires_denoising_strength_gui,
|
| 1297 |
hires_sampler_gui,
|
|
|
|
| 1355 |
mode_ip2,
|
| 1356 |
scale_ip2,
|
| 1357 |
pag_scale_gui,
|
| 1358 |
+
face_restoration_model_gui,
|
| 1359 |
+
face_restoration_visibility_gui,
|
| 1360 |
+
face_restoration_weight_gui,
|
| 1361 |
load_lora_cpu_gui,
|
| 1362 |
verbose_info_gui,
|
| 1363 |
gpu_duration_gui,
|