add preset selection

uses meta parsing to set presets in user session (UI elements only)
This commit is contained in:
Manuel Schmid 2023-12-23 19:30:49 +01:00
parent 7b5bced6c2
commit f56e3eb3b0
No known key found for this signature in database
GPG Key ID: 32C4F7569B40B84B
3 changed files with 109 additions and 32 deletions

View File

@ -79,21 +79,51 @@ def try_load_deprecated_user_path_config():
try_load_deprecated_user_path_config()
def list_presets():
preset_folder = 'presets'
presets = ['None']
if not os.path.exists(preset_folder):
print('No presets found.')
return presets;
return presets + [f[:f.index(".json")] for f in os.listdir(preset_folder) if f.endswith('.json')]
available_presets = list_presets()
def try_get_preset_content(preset):
if isinstance(preset, str):
preset_path = os.path.abspath(f'./presets/{preset}.json')
try:
if os.path.exists(preset_path):
with open(preset_path, "r", encoding="utf-8") as json_file:
json_content = json.load(json_file)
print(f'Loaded preset: {preset_path}')
return json_content
else:
raise FileNotFoundError
except Exception as e:
print(f'Load preset [{preset_path}] failed')
print(e)
def try_load_preset_global(preset):
global config_dict
if isinstance(preset, str):
preset_path = os.path.abspath(f'./presets/{preset}.json')
try:
if os.path.exists(preset_path):
with open(preset_path, "r", encoding="utf-8") as json_file:
config_dict.update(json.load(json_file))
print(f'Loaded preset: {preset_path}')
else:
raise FileNotFoundError
except Exception as e:
print(f'Load preset [{preset_path}] failed')
print(e)
preset = args_manager.args.preset
if isinstance(preset, str):
preset_path = os.path.abspath(f'./presets/{preset}.json')
try:
if os.path.exists(preset_path):
with open(preset_path, "r", encoding="utf-8") as json_file:
config_dict.update(json.load(json_file))
print(f'Loaded preset: {preset_path}')
else:
raise FileNotFoundError
except Exception as e:
print(f'Load preset [{preset_path}] failed')
print(e)
try_load_preset_global(preset)
def get_dir_or_set_default(key, default_value):
global config_dict, visited_keys, always_save_keys
@ -315,24 +345,25 @@ example_inpaint_prompts = [[x] for x in example_inpaint_prompts]
config_dict["default_loras"] = default_loras = default_loras[:5] + [['None', 1.0] for _ in range(5 - len(default_loras))]
possible_preset_keys = [
"default_model",
"default_refiner",
"default_refiner_switch",
"default_loras",
"default_cfg_scale",
"default_sample_sharpness",
"default_sampler",
"default_scheduler",
"default_performance",
"default_prompt",
"default_prompt_negative",
"default_styles",
"default_aspect_ratio",
"checkpoint_downloads",
"embeddings_downloads",
"lora_downloads",
]
# mapping config to meta parameter
possible_preset_keys = {
"default_model": "Base Model",
"default_refiner": "Refiner Model",
"default_refiner_switch": "Refiner Switch",
"default_loras": "TODO",
"default_cfg_scale": "Guidance Scale",
"default_sample_sharpness": "Sharpness",
"default_sampler": "Sampler",
"default_scheduler": "Scheduler",
"default_performance": "Performance",
"default_prompt": "Prompt",
"default_prompt_negative": "Negative Prompt",
"default_styles": "Styles",
"default_aspect_ratio": "Resolution",
"checkpoint_downloads": None,
"embeddings_downloads": None,
"lora_downloads": None,
}
REWRITE_PRESET = False

View File

@ -142,3 +142,14 @@ def load_parameter_button_click(raw_prompt_txt):
results.append(gr.update())
return results
def parse_meta_from_preset(preset_content):
assert isinstance(preset_content, dict)
preset_prepared = {}
for k, v in preset_content.items():
if k in modules.config.possible_preset_keys:
if modules.config.possible_preset_keys[k] is not None:
preset_prepared[modules.config.possible_preset_keys[k]] = v
return load_parameter_button_click(json.dumps(preset_prepared))

View File

@ -220,6 +220,10 @@ 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 "None",
interactive=True)
performance_selection = gr.Radio(label='Performance',
choices=modules.flags.performance_selections,
value=modules.config.default_performance)
@ -456,6 +460,37 @@ with shared.gradio_root:
model_refresh.click(model_refresh_clicked, [], [base_model, refiner_model] + lora_ctrls,
queue=False, show_progress=False)
def preset_selection_change(preset):
preset_content = modules.config.try_get_preset_content(preset)
if preset_content is not None:
return modules.meta_parser.parse_meta_from_preset(preset_content)
preset_selection.change(preset_selection_change, inputs=preset_selection, outputs=[
advanced_checkbox,
image_number,
prompt,
negative_prompt,
style_selections,
performance_selection,
aspect_ratios_selection,
overwrite_width,
overwrite_height,
sharpness,
guidance_scale,
adm_scaler_positive,
adm_scaler_negative,
adm_scaler_end,
base_model,
refiner_model,
refiner_switch,
sampler_name,
scheduler_name,
seed_random,
image_seed,
generate_button,
load_parameter_button
] + lora_ctrls, queue=False, show_progress=False)
performance_selection.change(lambda x: [gr.update(interactive=x != 'Extreme Speed')] * 11 +
[gr.update(visible=x != 'Extreme Speed')] * 1,
inputs=performance_selection,