From 3c855bd3319228148ec7d8666dd679da9007dcdd Mon Sep 17 00:00:00 2001 From: Manuel Schmid Date: Sun, 14 Jan 2024 20:19:49 +0100 Subject: [PATCH 1/4] feat: use consistent file name in gradio returns and uses filepaths instead of numpy image by saving to temp dir uses double the temp dir file storage on disk as it saves to temp dir and gradio temp dir when displaying the image, but reuses logged output image --- modules/async_worker.py | 9 +++++---- modules/private_logger.py | 15 +++++++++------ 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/modules/async_worker.py b/modules/async_worker.py index b2af6712..0668834a 100644 --- a/modules/async_worker.py +++ b/modules/async_worker.py @@ -511,8 +511,8 @@ def worker(): if direct_return: d = [('Upscale (Fast)', '2x')] - log(uov_input_image, d) - yield_result(async_task, uov_input_image, do_not_show_finished_images=True) + uov_input_image_path = log(uov_input_image, d) + yield_result(async_task, uov_input_image_path, do_not_show_finished_images=True) return tiled = True @@ -774,6 +774,7 @@ def worker(): if inpaint_worker.current_task is not None: imgs = [inpaint_worker.current_task.post_process(x) for x in imgs] + img_paths = [] for x in imgs: d = [ ('Prompt', task['log_positive_prompt']), @@ -799,9 +800,9 @@ def worker(): if n != 'None': d.append((f'LoRA {li + 1}', f'{n} : {w}')) d.append(('Version', 'v' + fooocus_version.version)) - log(x, d) + img_paths.append(log(x, d)) - yield_result(async_task, imgs, do_not_show_finished_images=len(tasks) == 1) + yield_result(async_task, img_paths, do_not_show_finished_images=len(tasks) == 1) except ldm_patched.modules.model_management.InterruptProcessingException as e: if shared.last_stop == 'skip': print('User skipped') diff --git a/modules/private_logger.py b/modules/private_logger.py index 968bd4f5..d5f352fa 100644 --- a/modules/private_logger.py +++ b/modules/private_logger.py @@ -3,6 +3,7 @@ import args_manager import modules.config import json import urllib.parse +import tempfile from PIL import Image from modules.util import generate_temp_filename @@ -18,13 +19,15 @@ def get_current_html_path(): return html_name -def log(img, dic): - if args_manager.args.disable_image_log: - return - - date_string, local_temp_filename, only_name = generate_temp_filename(folder=modules.config.path_outputs, extension='png') +def log(img, dic) -> str: + path_outputs = tempfile.gettempdir() if args_manager.args.disable_image_log else modules.config.path_outputs + date_string, local_temp_filename, only_name = generate_temp_filename(folder=path_outputs, extension='png') os.makedirs(os.path.dirname(local_temp_filename), exist_ok=True) Image.fromarray(img).save(local_temp_filename) + + if args_manager.args.disable_image_log: + return local_temp_filename + html_name = os.path.join(os.path.dirname(local_temp_filename), 'log.html') css_styles = ( @@ -105,4 +108,4 @@ def log(img, dic): log_cache[html_name] = middle_part - return + return local_temp_filename From 161b988522e5b67c7de9110a5a4f699fd7fc3662 Mon Sep 17 00:00:00 2001 From: Manuel Schmid Date: Sun, 14 Jan 2024 21:16:16 +0100 Subject: [PATCH 2/4] feat: delete temp images after yielding to gradio --- webui.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/webui.py b/webui.py index 581e3101..ba1dddaf 100644 --- a/webui.py +++ b/webui.py @@ -71,6 +71,11 @@ def generate_clicked(*args): gr.update(visible=True, value=product) finished = True + # delete Fooocus temp images, only keep gradio temp images + if args_manager.args.disable_image_log: + for filepath in product: + os.remove(filepath) + execution_time = time.perf_counter() - execution_start_time print(f'Total time: {execution_time:.2f} seconds') return From 1779fa0f3a536ccac408ef43d7a543679854eb8b Mon Sep 17 00:00:00 2001 From: Manuel Schmid Date: Sun, 14 Jan 2024 21:19:01 +0100 Subject: [PATCH 3/4] feat: use args temp path if given --- args_manager.py | 6 ++++++ modules/private_logger.py | 5 ++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/args_manager.py b/args_manager.py index e5e76753..59462719 100644 --- a/args_manager.py +++ b/args_manager.py @@ -1,5 +1,7 @@ import ldm_patched.modules.args_parser as args_parser +import os +from tempfile import gettempdir args_parser.parser.add_argument("--share", action='store_true', help="Set whether to share on Gradio.") args_parser.parser.add_argument("--preset", type=str, default=None, help="Apply specified UI preset.") @@ -34,7 +36,11 @@ args_parser.args.always_offload_from_vram = not args_parser.args.disable_offload if args_parser.args.disable_analytics: import os os.environ["GRADIO_ANALYTICS_ENABLED"] = "False" + if args_parser.args.disable_in_browser: args_parser.args.in_browser = False +if args_parser.args.temp_path is None: + args_parser.args.temp_path = os.path.join(gettempdir(), 'Fooocus') + args = args_parser.args diff --git a/modules/private_logger.py b/modules/private_logger.py index d5f352fa..416d97e6 100644 --- a/modules/private_logger.py +++ b/modules/private_logger.py @@ -3,11 +3,10 @@ import args_manager import modules.config import json import urllib.parse -import tempfile from PIL import Image from modules.util import generate_temp_filename - +from tempfile import gettempdir log_cache = {} @@ -20,7 +19,7 @@ def get_current_html_path(): def log(img, dic) -> str: - path_outputs = tempfile.gettempdir() if args_manager.args.disable_image_log else modules.config.path_outputs + path_outputs = args_manager.args.temp_path if args_manager.args.disable_image_log else modules.config.path_outputs date_string, local_temp_filename, only_name = generate_temp_filename(folder=path_outputs, extension='png') os.makedirs(os.path.dirname(local_temp_filename), exist_ok=True) Image.fromarray(img).save(local_temp_filename) From eeb57f3ff5a015f8320d806160884b18c1e2aaad Mon Sep 17 00:00:00 2001 From: Manuel Schmid Date: Sun, 14 Jan 2024 21:20:13 +0100 Subject: [PATCH 4/4] chore: code cleanup, remove redundant if statement --- ldm_patched/modules/args_parser.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/ldm_patched/modules/args_parser.py b/ldm_patched/modules/args_parser.py index 7ffc4a81..35ddacf3 100644 --- a/ldm_patched/modules/args_parser.py +++ b/ldm_patched/modules/args_parser.py @@ -112,10 +112,7 @@ parser.add_argument("--is-windows-embedded-python", action="store_true") parser.add_argument("--disable-server-info", action="store_true") -if ldm_patched.modules.options.args_parsing: - args = parser.parse_args([]) -else: - args = parser.parse_args([]) +args = parser.parse_args([]) if args.is_windows_embedded_python: args.in_browser = True