allow styles to modify settings and improve parser

Signed-off-by: Vladimir Mandic <mandic00@live.com>
This commit is contained in:
Vladimir Mandic
2025-07-06 16:42:29 -04:00
parent 6246047963
commit 4dc56c6813
3 changed files with 23 additions and 9 deletions
+2
View File
@@ -25,6 +25,8 @@
*note*: SD.Next will use either SageAttention v1/v2/v2++, depending which one is installed
until authors provide pre-build wheels for v2++, you need to install it manually or SD.Next will auto-install v1
- **Other**
- **Styles** can now include both generation params and server settings
see [Styles wiki](https://github.com/vladmandic/sdnext/wiki/Styles) for details
- **TAESD** is now default preview type since its the only one that supports most new models
- SD.Next now starts with *locked* state preventing model loading until startup is complete
- **API**
+20 -8
View File
@@ -6,7 +6,7 @@ import csv
import json
import time
import random
from modules import files_cache, shared, infotext
from modules import files_cache, shared, infotext, sd_models, sd_vae
class Style():
@@ -145,37 +145,49 @@ def apply_styles_to_extra(p, style: Style):
'sampler': 'sampler_name',
'size-1': 'width',
'size-2': 'height',
'model': 'sd_model_checkpoint',
'vae': 'sd_vae',
'unet': 'sd_unet',
'te': 'sd_text_encoder',
'refine': 'enable_hr',
'hires': 'hr_force',
}
name_exclude = [
'size',
]
reference_style = get_reference_style()
extra = infotext.parse(reference_style) if shared.opts.extra_network_reference_values else {}
style_extra = apply_wildcards_to_prompt(style.extra, [style.wildcards], silent=True)
style_extra = ' ' + style_extra.lower()
extra.update(infotext.parse(style_extra))
extra.pop('Prompt', None)
extra.pop('Negative prompt', None)
fields = []
params = []
settings = []
skipped = []
for k, v in extra.items():
k = k.lower()
k = k.replace(' ', '_')
k = k.lower().replace(' ', '_')
if k in name_map: # rename some fields
k = name_map[k]
if k in name_exclude: # exclude some fields
continue
if hasattr(p, k):
elif hasattr(p, k):
orig = getattr(p, k)
if (type(orig) != type(v)) and (orig is not None):
if not (type(orig) == int and type(v) == float): # dont convert float to int
v = type(orig)(v)
setattr(p, k, v)
fields.append(f'{k}={v}')
params.append(f'{k}={v}')
elif shared.opts.data_labels.get(k, None) is not None:
shared.opts.data[k] = v
if k == 'sd_model_checkpoint':
sd_models.reload_model_weights()
if k == 'sd_vae':
sd_vae.reload_vae_weights()
settings.append(f'{k}={v}')
else:
skipped.append(f'{k}={v}')
shared.log.debug(f'Apply style: name="{style.name}" extra={fields} skipped={skipped} reference={True if reference_style else False}')
shared.log.debug(f'Apply style: name="{style.name}" params={params} settings={settings} unknown={skipped} reference={True if reference_style else False}')
class StyleDatabase:
+1 -1
Submodule wiki updated: d685d8132b...a8d925f54c