diff --git a/CHANGELOG.md b/CHANGELOG.md index 8f68be3da..0a61884d4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Change Log for SD.Next -## Update for 2025-04-29 +## Update for 2025-04-30 - **Features** - [HiDream-E1](https://huggingface.co/HiDream-ai/HiDream-E1-Full) natural language image-editing model built on HiDream-I1 @@ -16,6 +16,7 @@ - FramePack: correct dtype - NNCF: check dependencies and register quant type - API: refresh checkpoint list + - Styles: save style with prompt ## Highlights for 2025-04-28 diff --git a/modules/shared.py b/modules/shared.py index 611a96831..890e6dd06 100644 --- a/modules/shared.py +++ b/modules/shared.py @@ -973,7 +973,6 @@ options_templates.update(options_section(('extra_networks', "Networks"), { "extra_networks_styles_sep": OptionInfo("

Styles

", "", gr.HTML), "extra_networks_styles": OptionInfo(True, "Show reference styles"), - "extra_networks_save_unparsed": OptionInfo(True, "Save unparsed prompt"), "extra_networks_apply_unparsed": OptionInfo(True, "Restore unparsed prompt"), "extra_networks_embed_sep": OptionInfo("

Embeddings

", "", gr.HTML), diff --git a/modules/styles.py b/modules/styles.py index 5bda3728b..1369315c5 100644 --- a/modules/styles.py +++ b/modules/styles.py @@ -152,11 +152,6 @@ def apply_styles_to_extra(p, style: Style): reference_style = get_reference_style() extra = infotext.parse(reference_style) if shared.opts.extra_network_reference_values else {} - if not hasattr(p, 'original_prompt'): - p.original_prompt = p.prompt - if not hasattr(p, 'original_negative'): - p.original_negative = p.negative_prompt - style_extra = apply_wildcards_to_prompt(style.extra, [style.wildcards], silent=True) style_extra = ' ' + style_extra.lower() extra.update(infotext.parse(style_extra)) @@ -340,6 +335,11 @@ class StyleDatabase: return prompt def apply_styles_to_extra(self, p): + if len(getattr(p, 'original_prompt', '')) == 0: + p.original_prompt = p.prompt + if len(getattr(p, 'original_negative', '')) == 0: + p.original_negative = p.negative_prompt + if p.styles is None: return if p.styles is None or not isinstance(p.styles, list): diff --git a/modules/ui_extra_networks.py b/modules/ui_extra_networks.py index 023eacbad..e8367547a 100644 --- a/modules/ui_extra_networks.py +++ b/modules/ui_extra_networks.py @@ -783,8 +783,10 @@ def create_ui(container, button_parent, tabname, skip_indexing = False): def show_details(text, img, desc, info, meta, description, prompt, negative, parameters, wildcards, params, _dummy1=None, _dummy2=None): page, item = get_item(state, params) - valid = item is not None and hasattr(item, 'name') and hasattr(item, 'filename') - if valid: + is_style = (page is not None) and (page.title == 'Style') + is_valid = (item is not None) and hasattr(item, 'name') and hasattr(item, 'filename') + + if is_valid: stat = os.stat(item.filename) if os.path.exists(item.filename) else None desc = item.description fullinfo = shared.readfile(os.path.splitext(item.filename)[0] + '.json', silent=True) @@ -795,16 +797,14 @@ def create_ui(container, button_parent, tabname, skip_indexing = False): item.filename = None shared.log.warning('Network: show details not supported for compound item') info = None - """ - if prompt is not None: + if prompt is not None and len(prompt) > 0: item.prompt = prompt - if negative is not None: + if negative is not None and len(negative) > 0: item.negative = negative - if description is not None: + if description is not None and len(description) > 0: item.description = description - if wildcards is not None: + if wildcards is not None and len(wildcards) > 0: item.wildcards = wildcards - """ meta = page.metadata.get(item.name, {}) or {} if type(meta) is str: try: @@ -887,7 +887,6 @@ def create_ui(container, button_parent, tabname, skip_indexing = False): {note} ''' - is_style = (page is not None) and (page.title == 'Style') return [ text, # gr.html img, # gr.image @@ -899,7 +898,7 @@ def create_ui(container, button_parent, tabname, skip_indexing = False): gr.update(value=negative, visible=is_style), # gr.textbox gr.update(value=parameters, visible=is_style), # gr.textbox gr.update(value=wildcards, visible=is_style), # gr.textbox - gr.update(visible=valid), # details ui visible + gr.update(visible=is_valid), # details ui visible gr.update(visible=not is_style), # details ui tabs visible gr.update(visible=is_style), # details ui text visible ] @@ -940,10 +939,9 @@ def create_ui(container, button_parent, tabname, skip_indexing = False): return ui_refresh_click(title) def ui_save_click(): - if shared.opts.extra_networks_save_unparsed: - from modules.processing_info import get_last_args - params, text = get_last_args() - else: + from modules.processing_info import get_last_args + params, text = get_last_args() + if (not params) or (not text) or (len(text) == 0): filename = os.path.join(paths.data_path, "params.txt") if os.path.exists(filename): with open(filename, "r", encoding="utf8") as file: @@ -957,13 +955,12 @@ def create_ui(container, button_parent, tabname, skip_indexing = False): return res def ui_quicksave_click(name): - if shared.opts.extra_networks_save_unparsed: - from modules.processing_info import get_last_args - params, text = get_last_args() - else: - if name is None or len(name) < 1: - shared.log.warning("Network quick save style: no name provided") - return + if name is None or len(name) < 1: + shared.log.warning("Network quick save style: no name provided") + return + from modules.processing_info import get_last_args + params, text = get_last_args() + if (not params) or (not text) or (len(text) == 0): fn = os.path.join(paths.data_path, "params.txt") if os.path.exists(fn): with open(fn, "r", encoding="utf8") as file: @@ -983,9 +980,9 @@ def create_ui(container, button_parent, tabname, skip_indexing = False): } shared.writefile(item, fn, silent=True) if len(prompt) > 0: - shared.log.debug(f'Network quick save style: item="{name}" filename="{fn}" unparsed={shared.opts.extra_networks_unparsed}') + shared.log.debug(f'Networks type=style quicksave style: item="{name}" filename="{fn}" prompt="{prompt}"') else: - shared.log.warning(f'Network quick save model: item="{name}" filename="{fn}" prompt is empty') + shared.log.warning(f'Networks type=style quicksave model: item="{name}" filename="{fn}" prompt is empty') def ui_sort_cards(sort_order): if shared.opts.extra_networks_sort != sort_order: