Clipskip override from infotext (#2099)

* support more infotext overrides
clip skip, model, and vae/te, and old VAE too
This commit is contained in:
DenOfEquity
2024-10-18 16:47:49 +01:00
committed by GitHub
parent 1ef5436833
commit 1fae20d94f
2 changed files with 47 additions and 7 deletions

View File

@@ -11,6 +11,8 @@ from modules.paths import data_path
from modules import shared, ui_tempdir, script_callbacks, processing, infotext_versions, images, prompt_parser, errors
from PIL import Image
from modules_forge import main_entry
sys.modules['modules.generation_parameters_copypaste'] = sys.modules[__name__] # alias for old name
re_param_code = r'\s*(\w[\w \-/]+):\s*("(?:\\.|[^\\"])+"|[^,]*)(?:,|$)'
@@ -414,11 +416,44 @@ Steps: 20, Sampler: Euler a, CFG scale: 7, Seed: 965400086, Size: 512x512, Model
for key in skip_fields:
res.pop(key, None)
# basic check for same checkpoint using short name
checkpoint = res.get('Model', None)
if checkpoint is not None:
if checkpoint in shared.opts.sd_model_checkpoint:
res.pop('Model')
# VAE / TE
modules = []
vae = res.pop('VAE', None) # old form
if vae:
modules = [vae]
else:
for key in res:
if key.startswith('Module '):
added = False
for knownmodule in main_entry.module_list.keys():
filename, _ = os.path.splitext(knownmodule)
if res[key] == filename:
added = True
modules.append(knownmodule)
break
if not added:
modules.append(res[key]) # so it shows in the override section (consistent with checkpoint and old vae)
if modules != []:
current_modules = shared.opts.forge_additional_modules
basename_modules = []
for m in current_modules:
basename_modules.append(os.path.basename(m))
if sorted(modules) != sorted(basename_modules):
res['VAE/TE'] = modules
return res
infotext_to_setting_name_mapping = [
('VAE/TE', 'forge_additional_modules'),
]
"""Mapping of infotext labels to setting names. Only left for backwards compatibility - use OptionInfo(..., infotext='...') instead.
Example content:
@@ -431,7 +466,7 @@ infotext_to_setting_name_mapping = [
]
"""
from ast import literal_eval
def create_override_settings_dict(text_pairs):
"""creates processing's override_settings parameters from gradio's multiselect
@@ -460,6 +495,10 @@ def create_override_settings_dict(text_pairs):
if value is None:
continue
if setting_name == "forge_additional_modules":
res[setting_name] = literal_eval(value)
continue
res[setting_name] = shared.opts.cast_value(setting_name, value)
return res
@@ -493,8 +532,9 @@ def get_override_settings(params, *, skip_fields=None):
if v is None:
continue
if setting_name == "sd_model_checkpoint" and shared.opts.disable_weights_auto_swap:
continue
if setting_name in ["sd_model_checkpoint", "forge_additional_modules"]:
if shared.opts.disable_weights_auto_swap:
continue
v = shared.opts.cast_value(setting_name, v)
current_value = getattr(shared.opts, setting_name, None)