From ee3d70ab87791ef3488d5c719cb79c0d96ea2067 Mon Sep 17 00:00:00 2001 From: Manuel Schmid Date: Thu, 4 Jan 2024 18:03:12 +0100 Subject: [PATCH 1/4] fix: replace fcbh with ldm_patched --- modules/async_worker.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/async_worker.py b/modules/async_worker.py index 03887f01..421098d3 100644 --- a/modules/async_worker.py +++ b/modules/async_worker.py @@ -726,7 +726,7 @@ def worker(): try: if async_task.last_stop is not False: - fcbh.model_management.interrupt_current_processing() + ldm_patched.model_management.interrupt_current_processing() positive_cond, negative_cond = task['c'], task['uc'] if 'cn' in goals: From 04ba1604f448728424ba16c454ff4fe0f2a5d6a9 Mon Sep 17 00:00:00 2001 From: Manuel Schmid Date: Thu, 4 Jan 2024 18:12:11 +0100 Subject: [PATCH 2/4] fix: use currentTask instead of ctrls after merging upstream --- webui.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webui.py b/webui.py index fae88bbf..86940981 100644 --- a/webui.py +++ b/webui.py @@ -588,7 +588,7 @@ with shared.gradio_root: .then(fn=refresh_seed, inputs=[seed_random, image_seed], outputs=image_seed) \ .then(advanced_parameters.set_all_advanced_parameters, inputs=adps) \ .then(fn=get_task, inputs=ctrls, outputs=currentTask) \ - .then(fn=generate_clicked, inputs=ctrls, outputs=[progress_html, progress_window, progress_gallery, gallery]) \ + .then(fn=generate_clicked, inputs=currentTask, outputs=[progress_html, progress_window, progress_gallery, gallery]) \ .then(lambda: (gr.update(visible=True, interactive=True), gr.update(visible=False, interactive=False), gr.update(visible=False, interactive=False), False), outputs=[generate_button, stop_button, skip_button, state_is_generating]) \ .then(fn=lambda: None, _js='playNotification').then(fn=lambda: None, _js='refresh_grid_delayed') From 6d6b4dbd85957a997d6799b419cc5a29afb369fd Mon Sep 17 00:00:00 2001 From: Manuel Schmid <9307310+mashb1t@users.noreply.github.com> Date: Fri, 5 Jan 2024 20:06:43 +0100 Subject: [PATCH 3/4] fix: implement correct path resolution for all OS solves issues for Windows --- modules/ui_gradio_extensions.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/ui_gradio_extensions.py b/modules/ui_gradio_extensions.py index ed32a87a..00214364 100644 --- a/modules/ui_gradio_extensions.py +++ b/modules/ui_gradio_extensions.py @@ -30,7 +30,7 @@ def javascript_html(): edit_attention_js_path = webpath('javascript/edit-attention.js') viewer_js_path = webpath('javascript/viewer.js') image_viewer_js_path = webpath('javascript/imageviewer.js') - samples_path = webpath('sdxl_styles/samples/Fooocus V2.jpg') + samples_path = webpath(os.path.abspath('./sdxl_styles/samples/Fooocus V2.jpg')) head = f'\n' head += f'\n' head += f'\n' From 49008377868a1b10f69608ab1c759f8fb8a339df Mon Sep 17 00:00:00 2001 From: Manuel Schmid Date: Fri, 5 Jan 2024 21:53:06 +0100 Subject: [PATCH 4/4] feat: add argument --disable-preset-selection useful for cloud provisioning to prevent model switches and keep models loaded --- args_manager.py | 5 ++++- webui.py | 48 +++++++++++++++++++++++++++--------------------- 2 files changed, 31 insertions(+), 22 deletions(-) diff --git a/args_manager.py b/args_manager.py index d063a5e1..3d696e95 100644 --- a/args_manager.py +++ b/args_manager.py @@ -2,7 +2,10 @@ import ldm_patched.modules.args_parser as args_parser 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.") +args_parser.parser.add_argument("--disable-preset-selection", action='store_true', + help="Disables preset selection in Gradio.") args_parser.parser.add_argument("--language", type=str, default='default', help="Translate UI using json files in [language] folder. " @@ -18,7 +21,7 @@ args_parser.parser.add_argument("--disable-image-log", action='store_true', help="Prevent writing images and logs to hard drive.") args_parser.parser.add_argument("--disable-analytics", action='store_true', - help="Disables analytics for Gradio", default=False) + help="Disables analytics for Gradio.") args_parser.parser.set_defaults( disable_cuda_malloc=True, diff --git a/webui.py b/webui.py index c37e2315..d1250222 100644 --- a/webui.py +++ b/webui.py @@ -224,10 +224,11 @@ with shared.gradio_root: with gr.Column(scale=1, visible=modules.config.default_advanced_checkbox) as advanced_column: with gr.Tab(label='Setting'): - preset_selection = gr.Radio(label='Preset', - choices=modules.config.available_presets, - value=args_manager.args.preset if args_manager.args.preset else "initial", - interactive=True) + if not args_manager.args.disable_preset_selection: + preset_selection = gr.Radio(label='Preset', + choices=modules.config.available_presets, + value=args_manager.args.preset if args_manager.args.preset else "initial", + interactive=True) performance_selection = gr.Radio(label='Performance', choices=modules.flags.performance_selections, value=modules.config.default_performance) @@ -472,28 +473,21 @@ with shared.gradio_root: modules.config.update_presets() results = [] results += [gr.update(choices=modules.config.model_filenames), - gr.update(choices=['None'] + modules.config.model_filenames), - gr.update(choices=modules.config.available_presets)] + gr.update(choices=['None'] + modules.config.model_filenames)] + if not args_manager.args.disable_preset_selection: + results += [gr.update(choices=modules.config.available_presets)] for i in range(5): results += [gr.update(choices=['None'] + modules.config.lora_filenames), gr.update()] return results - model_refresh.click(model_refresh_clicked, [], [base_model, refiner_model, preset_selection] + lora_ctrls, + model_refresh_output = [base_model, refiner_model] + if not args_manager.args.disable_preset_selection: + model_refresh_output += [preset_selection] + model_refresh.click(model_refresh_clicked, [], model_refresh_output + lora_ctrls, queue=False, show_progress=False) state_is_generating = gr.State(False) - def preset_selection_change(preset, is_generating): - preset_content = modules.config.try_get_preset_content(preset) if preset != 'initial' else {} - preset_prepared = modules.meta_parser.parse_meta_from_preset(preset_content) - - launch.checkpoint_downloads = preset_prepared['checkpoint_downloads'] - launch.embeddings_downloads = preset_prepared['embeddings_downloads'] - launch.lora_downloads = preset_prepared['lora_downloads'] - launch.download_models() - - return modules.meta_parser.load_parameter_button_click(json.dumps(preset_prepared), is_generating) - load_parameter_outputs = [ advanced_checkbox, image_number, @@ -520,9 +514,21 @@ with shared.gradio_root: load_parameter_button ] + lora_ctrls - preset_selection.change(preset_selection_change, inputs=[preset_selection, state_is_generating], outputs=load_parameter_outputs, queue=False, show_progress=True) \ - .then(fn=style_sorter.sort_styles, inputs=style_selections, outputs=style_selections, queue=False, show_progress=False) \ - .then(lambda: None, _js='()=>{refresh_style_localization();}') + if not args_manager.args.disable_preset_selection: + def preset_selection_change(preset, is_generating): + preset_content = modules.config.try_get_preset_content(preset) if preset != 'initial' else {} + preset_prepared = modules.meta_parser.parse_meta_from_preset(preset_content) + + launch.checkpoint_downloads = preset_prepared['checkpoint_downloads'] + launch.embeddings_downloads = preset_prepared['embeddings_downloads'] + launch.lora_downloads = preset_prepared['lora_downloads'] + launch.download_models() + + return modules.meta_parser.load_parameter_button_click(json.dumps(preset_prepared), is_generating) + + preset_selection.change(preset_selection_change, inputs=[preset_selection, state_is_generating], outputs=load_parameter_outputs, queue=False, show_progress=True) \ + .then(fn=style_sorter.sort_styles, inputs=style_selections, outputs=style_selections, queue=False, show_progress=False) \ + .then(lambda: None, _js='()=>{refresh_style_localization();}') performance_selection.change(lambda x: [gr.update(interactive=x != 'Extreme Speed')] * 11 +