diff --git a/modules/config.py b/modules/config.py index 42505f27..2df7013c 100644 --- a/modules/config.py +++ b/modules/config.py @@ -615,7 +615,7 @@ default_inpaint_mask_sam_model = get_config_item_or_set_default( config_dict["default_loras"] = default_loras = default_loras[:default_max_lora_number] + [[True, 'None', 1.0] for _ in range(default_max_lora_number - len(default_loras))] -# mapping config to meta parameter +# mapping config to meta parameter possible_preset_keys = { "default_model": "base_model", "default_refiner": "refiner_model", @@ -644,7 +644,8 @@ possible_preset_keys = { "lora_downloads": "lora_downloads", "vae_downloads": "vae_downloads", "default_vae": "vae", - "default_inpaint_method": "inpaint_method" + # "default_inpaint_method": "inpaint_method", # disabled so inpaint mode doesn't refresh after every preset change + "default_inpaint_engine_version": "inpaint_engine_version", } REWRITE_PRESET = False diff --git a/modules/meta_parser.py b/modules/meta_parser.py index 98e56229..7ab5a519 100644 --- a/modules/meta_parser.py +++ b/modules/meta_parser.py @@ -49,6 +49,7 @@ def load_parameter_button_click(raw_metadata: dict | str, is_generating: bool): get_str('scheduler', 'Scheduler', loaded_parameter_dict, results) get_str('vae', 'VAE', loaded_parameter_dict, results) get_seed('seed', 'Seed', loaded_parameter_dict, results) + get_inpaint_engine_version('inpaint_engine_version', 'Inpaint Engine Version', loaded_parameter_dict, results) get_inpaint_method('inpaint_method', 'Inpaint Mode', loaded_parameter_dict, results) if is_generating: @@ -161,6 +162,19 @@ def get_seed(key: str, fallback: str | None, source_dict: dict, results: list, d results.append(gr.update()) +def get_inpaint_engine_version(key: str, fallback: str | None, source_dict: dict, results: list, default=None) -> str | None: + try: + h = source_dict.get(key, source_dict.get(fallback, default)) + assert isinstance(h, str) and h in modules.flags.inpaint_engine_versions + results.append(h) + results.append(h) + return h + except: + results.append(gr.update()) + results.append('empty') + return None + + def get_inpaint_method(key: str, fallback: str | None, source_dict: dict, results: list, default=None) -> str | None: try: h = source_dict.get(key, source_dict.get(fallback, default)) diff --git a/presets/anime.json b/presets/anime.json index fa4e34be..bf735c9b 100644 --- a/presets/anime.json +++ b/presets/anime.json @@ -43,7 +43,6 @@ ], "default_aspect_ratio": "896*1152", "default_overwrite_step": -1, - "default_overwrite_switch": -1, "checkpoint_downloads": { "animaPencilXL_v500.safetensors": "https://huggingface.co/mashb1t/fav_models/resolve/main/fav/animaPencilXL_v500.safetensors" }, diff --git a/presets/default.json b/presets/default.json index 0a1ad863..e9aa2b62 100644 --- a/presets/default.json +++ b/presets/default.json @@ -43,7 +43,6 @@ ], "default_aspect_ratio": "1152*896", "default_overwrite_step": -1, - "default_overwrite_switch": -1, "checkpoint_downloads": { "juggernautXL_v8Rundiffusion.safetensors": "https://huggingface.co/lllyasviel/fav_models/resolve/main/fav/juggernautXL_v8Rundiffusion.safetensors" }, diff --git a/presets/lcm.json b/presets/lcm.json index cca37956..441cbdc8 100644 --- a/presets/lcm.json +++ b/presets/lcm.json @@ -43,7 +43,6 @@ ], "default_aspect_ratio": "1152*896", "default_overwrite_step": -1, - "default_overwrite_switch": -1, "checkpoint_downloads": { "juggernautXL_v8Rundiffusion.safetensors": "https://huggingface.co/lllyasviel/fav_models/resolve/main/fav/juggernautXL_v8Rundiffusion.safetensors" }, diff --git a/presets/playground_v2.5.json b/presets/playground_v2.5.json index 34fa29b6..ac28c260 100644 --- a/presets/playground_v2.5.json +++ b/presets/playground_v2.5.json @@ -41,8 +41,7 @@ ], "default_aspect_ratio": "1024*1024", "default_overwrite_step": -1, - "default_overwrite_switch": -1, - "default_inpaint_method": "Improve Detail (face, hand, eyes, etc.)", + "default_inpaint_engine_version": "None", "checkpoint_downloads": { "playground-v2.5-1024px-aesthetic.fp16.safetensors": "https://huggingface.co/mashb1t/fav_models/resolve/main/fav/playground-v2.5-1024px-aesthetic.fp16.safetensors" }, diff --git a/presets/pony_v6.json b/presets/pony_v6.json index b5230f89..549d7c52 100644 --- a/presets/pony_v6.json +++ b/presets/pony_v6.json @@ -1,7 +1,7 @@ { "default_model": "ponyDiffusionV6XL.safetensors", "default_refiner": "None", - "default_refiner_switch": 1, + "default_refiner_switch": 0.5, "default_vae": "ponyDiffusionV6XL_vae.safetensors", "default_loras": [ [ @@ -42,7 +42,7 @@ ], "default_aspect_ratio": "896*1152", "default_overwrite_step": -1, - "default_overwrite_switch": 999, + "default_inpaint_engine_version": "None", "checkpoint_downloads": { "ponyDiffusionV6XL.safetensors": "https://huggingface.co/mashb1t/fav_models/resolve/main/fav/ponyDiffusionV6XL.safetensors" }, diff --git a/presets/realistic.json b/presets/realistic.json index 33d66702..f2d4773f 100644 --- a/presets/realistic.json +++ b/presets/realistic.json @@ -43,7 +43,6 @@ ], "default_aspect_ratio": "896*1152", "default_overwrite_step": -1, - "default_overwrite_switch": -1, "checkpoint_downloads": { "realisticStockPhoto_v20.safetensors": "https://huggingface.co/lllyasviel/fav_models/resolve/main/fav/realisticStockPhoto_v20.safetensors" }, diff --git a/presets/sai.json b/presets/sai.json index 9bfed082..21146311 100644 --- a/presets/sai.json +++ b/presets/sai.json @@ -42,7 +42,6 @@ ], "default_aspect_ratio": "1152*896", "default_overwrite_step": -1, - "default_overwrite_switch": -1, "checkpoint_downloads": { "sd_xl_base_1.0_0.9vae.safetensors": "https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/resolve/main/sd_xl_base_1.0_0.9vae.safetensors", "sd_xl_refiner_1.0_0.9vae.safetensors": "https://huggingface.co/stabilityai/stable-diffusion-xl-refiner-1.0/resolve/main/sd_xl_refiner_1.0_0.9vae.safetensors" diff --git a/webui.py b/webui.py index 8607d5c9..1ac7b648 100644 --- a/webui.py +++ b/webui.py @@ -90,7 +90,7 @@ def generate_clicked(task: worker.AsyncTask): return -def inpaint_mode_change(mode): +def inpaint_mode_change(mode, inpaint_engine_version): assert mode in modules.flags.inpaint_options # inpaint_additional_prompt, outpaint_selections, example_inpaint_prompts, @@ -104,17 +104,20 @@ def inpaint_mode_change(mode): False, 'None', 0.5, 0.0 ] + if inpaint_engine_version == 'empty': + inpaint_engine_version = modules.config.default_inpaint_engine_version + if mode == modules.flags.inpaint_option_modify: return [ gr.update(visible=True), gr.update(visible=False, value=[]), gr.Dataset.update(visible=False, samples=modules.config.example_inpaint_prompts), - True, modules.config.default_inpaint_engine_version, 1.0, 0.0 + True, inpaint_engine_version, 1.0, 0.0 ] return [ gr.update(visible=False, value=''), gr.update(visible=True), gr.Dataset.update(visible=False, samples=modules.config.example_inpaint_prompts), - False, modules.config.default_inpaint_engine_version, 1.0, 0.618 + False, inpaint_engine_version, 1.0, 0.618 ] @@ -129,6 +132,7 @@ shared.gradio_root = gr.Blocks(title=title).queue() with shared.gradio_root: currentTask = gr.State(worker.AsyncTask(args=[])) + inpaint_engine_state = gr.State('empty') with gr.Row(): with gr.Column(scale=2): with gr.Row(): @@ -378,6 +382,7 @@ with shared.gradio_root: gr.HTML('\U0001F4D4 Document') enhance_ctrls = [] enhance_inpaint_mode_ctrls = [] + enhance_inpaint_engine_ctrls = [] enhance_inpaint_update_ctrls = [] for index in range(modules.config.default_enhance_tabs): with gr.TabItem(label=f'#{index + 1}') as enhance_tab_item: @@ -488,13 +493,14 @@ with shared.gradio_root: ] enhance_inpaint_mode_ctrls += [enhance_inpaint_mode] + enhance_inpaint_engine_ctrls += [enhance_inpaint_engine] enhance_inpaint_update_ctrls += [[ enhance_inpaint_mode, enhance_inpaint_disable_initial_latent, enhance_inpaint_engine, enhance_inpaint_strength, enhance_inpaint_respective_field ]] - enhance_inpaint_mode.change(inpaint_mode_change, inputs=enhance_inpaint_mode, outputs=[ + enhance_inpaint_mode.change(inpaint_mode_change, inputs=[enhance_inpaint_mode, inpaint_engine_state], outputs=[ inpaint_additional_prompt, outpaint_selections, example_inpaint_prompts, enhance_inpaint_disable_initial_latent, enhance_inpaint_engine, enhance_inpaint_strength, enhance_inpaint_respective_field @@ -883,7 +889,8 @@ with shared.gradio_root: overwrite_width, overwrite_height, guidance_scale, sharpness, adm_scaler_positive, adm_scaler_negative, adm_scaler_end, refiner_swap_method, adaptive_cfg, clip_skip, base_model, refiner_model, refiner_switch, sampler_name, scheduler_name, vae_name, - seed_random, image_seed, inpaint_mode] + enhance_inpaint_mode_ctrls + [generate_button, + seed_random, image_seed, inpaint_engine, inpaint_engine_state, + inpaint_mode] + enhance_inpaint_mode_ctrls + [generate_button, load_parameter_button] + freeu_ctrls + lora_ctrls if not args_manager.args.disable_preset_selection: @@ -907,9 +914,24 @@ with shared.gradio_root: return modules.meta_parser.load_parameter_button_click(json.dumps(preset_prepared), is_generating) + + def inpaint_engine_state_change(inpaint_engine_version, *args): + if inpaint_engine_version == 'empty': + inpaint_engine_version = modules.config.default_inpaint_engine_version + + result = [] + for inpaint_mode in args: + if inpaint_mode != modules.flags.inpaint_option_detail: + result.append(gr.update(value=inpaint_engine_version)) + else: + result.append(gr.update()) + + return result + preset_selection.change(preset_selection_change, inputs=[preset_selection, state_is_generating], outputs=load_data_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();}') + .then(lambda: None, _js='()=>{refresh_style_localization();}') \ + .then(inpaint_engine_state_change, inputs=[inpaint_engine_state] + enhance_inpaint_mode_ctrls, outputs=enhance_inpaint_engine_ctrls, queue=False, show_progress=False) performance_selection.change(lambda x: [gr.update(interactive=not flags.Performance.has_restricted_features(x))] * 11 + [gr.update(visible=not flags.Performance.has_restricted_features(x))] * 1 + @@ -927,7 +949,7 @@ with shared.gradio_root: queue=False, show_progress=False) \ .then(fn=lambda: None, _js='refresh_grid_delayed', queue=False, show_progress=False) - inpaint_mode.change(inpaint_mode_change, inputs=inpaint_mode, outputs=[ + inpaint_mode.change(inpaint_mode_change, inputs=[inpaint_mode, inpaint_engine_state], outputs=[ inpaint_additional_prompt, outpaint_selections, example_inpaint_prompts, inpaint_disable_initial_latent, inpaint_engine, inpaint_strength, inpaint_respective_field @@ -936,7 +958,7 @@ with shared.gradio_root: # load configured default_inpaint_method default_inpaint_ctrls = [inpaint_mode, inpaint_disable_initial_latent, inpaint_engine, inpaint_strength, inpaint_respective_field] for mode, disable_initial_latent, engine, strength, respective_field in [default_inpaint_ctrls] + enhance_inpaint_update_ctrls: - shared.gradio_root.load(inpaint_mode_change, inputs=mode, outputs=[ + shared.gradio_root.load(inpaint_mode_change, inputs=[mode, inpaint_engine_state], outputs=[ inpaint_additional_prompt, outpaint_selections, example_inpaint_prompts, disable_initial_latent, engine, strength, respective_field ], show_progress=False, queue=False)