diff --git a/fooocus_version.py b/fooocus_version.py index e765433..3981e67 100644 --- a/fooocus_version.py +++ b/fooocus_version.py @@ -1 +1 @@ -version = '2.1.798' +version = '2.1.799' diff --git a/modules/async_worker.py b/modules/async_worker.py index 4396d94..4f4c65a 100644 --- a/modules/async_worker.py +++ b/modules/async_worker.py @@ -160,6 +160,36 @@ def worker(): print(f'Refiner disabled because base model and refiner are same.') refiner_model_name = 'None' + assert performance_selection in ['Speed', 'Quality', 'Extreme Speed'] + + steps = 30 + + if performance_selection == 'Speed': + steps = 30 + + if performance_selection == 'Quality': + steps = 60 + + if performance_selection == 'Extreme Speed': + print('Enter LCM mode.') + progressbar(1, 'Downloading LCM components ...') + base_model_additional_loras += [(modules.config.downloading_sdxl_lcm_lora(), 1.0)] + + if refiner_model_name != 'None': + print(f'Refiner disabled in LCM mode.') + + refiner_model_name = 'None' + sampler_name = advanced_parameters.sampler_name = 'lcm' + scheduler_name = advanced_parameters.scheduler_name = 'lcm' + modules.patch.sharpness = sharpness = 0.0 + cfg_scale = guidance_scale = 1.0 + modules.patch.adaptive_cfg = advanced_parameters.adaptive_cfg = 1.0 + refiner_switch = 1.0 + modules.patch.positive_adm_scale = advanced_parameters.adm_scaler_positive = 1.0 + modules.patch.negative_adm_scale = advanced_parameters.adm_scaler_negative = 1.0 + modules.patch.adm_scaler_end = advanced_parameters.adm_scaler_end = 0.0 + steps = 8 + modules.patch.adaptive_cfg = advanced_parameters.adaptive_cfg print(f'[Parameters] Adaptive CFG = {modules.patch.adaptive_cfg}') @@ -195,11 +225,6 @@ def worker(): seed = int(image_seed) print(f'[Parameters] Seed = {seed}') - if performance_selection == 'Speed': - steps = 30 - else: - steps = 60 - sampler_name = advanced_parameters.sampler_name scheduler_name = advanced_parameters.scheduler_name @@ -217,10 +242,17 @@ def worker(): if 'fast' in uov_method: skip_prompt_processing = True else: + steps = 18 + if performance_selection == 'Speed': steps = 18 - else: + + if performance_selection == 'Quality': steps = 36 + + if performance_selection == 'Extreme Speed': + steps = 8 + progressbar(1, 'Downloading upscale models ...') modules.config.downloading_upscale_model() if (current_tab == 'inpaint' or (current_tab == 'ip' and advanced_parameters.mixing_image_prompt_and_inpaint))\ @@ -650,7 +682,10 @@ def worker(): ('Resolution', str((width, height))), ('Sharpness', sharpness), ('Guidance Scale', guidance_scale), - ('ADM Guidance', str((modules.patch.positive_adm_scale, modules.patch.negative_adm_scale))), + ('ADM Guidance', str(( + modules.patch.positive_adm_scale, + modules.patch.negative_adm_scale, + modules.patch.adm_scaler_end))), ('Base Model', base_model_name), ('Refiner Model', refiner_model_name), ('Refiner Switch', refiner_switch), diff --git a/modules/config.py b/modules/config.py index 8c8557c..ec0276e 100644 --- a/modules/config.py +++ b/modules/config.py @@ -317,6 +317,15 @@ def downloading_inpaint_models(v): return head_file, patch_file +def downloading_sdxl_lcm_lora(): + load_file_from_url( + url='https://huggingface.co/lllyasviel/misc/resolve/main/sdxl_lcm_lora.safetensors', + model_dir=path_loras, + file_name='sdxl_lcm_lora.safetensors' + ) + return os.path.join(path_loras, 'sdxl_lcm_lora.safetensors') + + def downloading_controlnet_canny(): load_file_from_url( url='https://huggingface.co/lllyasviel/misc/resolve/main/control-lora-canny-rank128.safetensors', diff --git a/update_log.md b/update_log.md index 9764d51..860ad9d 100644 --- a/update_log.md +++ b/update_log.md @@ -1,3 +1,7 @@ +# 2.1.799 + +* Added 'Extreme Speed' performance mode (based on LCM). The previous complicated settings are not needed now. + # 2.1.798 * added lcm scheduler - LCM may need to set both sampler and scheduler to "lcm". Other than that, see the description in 2.1.782 logs. diff --git a/webui.py b/webui.py index 7a9ed51..cb07b77 100644 --- a/webui.py +++ b/webui.py @@ -188,7 +188,9 @@ with shared.gradio_root: with gr.Column(scale=1, visible=modules.config.default_advanced_checkbox) as advanced_column: with gr.Tab(label='Setting'): - performance_selection = gr.Radio(label='Performance', choices=['Speed', 'Quality'], value='Speed') + performance_selection = gr.Radio(label='Performance', + choices=['Speed', 'Quality', 'Extreme Speed'], + value='Speed') aspect_ratios_selection = gr.Radio(label='Aspect Ratios', choices=modules.config.available_aspect_ratios, value=modules.config.default_aspect_ratio, info='width × height') image_number = gr.Slider(label='Image Number', minimum=1, maximum=32, step=1, value=modules.config.default_image_number) @@ -355,6 +357,14 @@ with shared.gradio_root: model_refresh.click(model_refresh_clicked, [], [base_model, refiner_model] + lora_ctrls, queue=False) + performance_selection.change(lambda x: [gr.update(interactive=x != 'Extreme Speed')] * 11, + inputs=performance_selection, + outputs=[ + guidance_scale, sharpness, adm_scaler_end, adm_scaler_positive, + adm_scaler_negative, refiner_switch, refiner_model, sampler_name, + scheduler_name, adaptive_cfg, refiner_swap_method + ], queue=False, show_progress=False) + advanced_checkbox.change(lambda x: gr.update(visible=x), advanced_checkbox, advanced_column, queue=False) ctrls = [