diff --git a/modules/extras.py b/modules/extras.py index e2f9a2a0a..ba89bc37b 100644 --- a/modules/extras.py +++ b/modules/extras.py @@ -44,11 +44,11 @@ def pnginfo_html_v1(geninfo, items): def pnginfo_html_v2(geninfo, items): - # raise ValueError + prompt, negative_prompt, last_line = infotext_utils.split_infotext(geninfo) res = infotext_utils.parameters_to_dict(last_line) if not any([prompt, res, items]): - raise ValueError + return pnginfo_html_v1(geninfo, items) info_html = '' if prompt: @@ -90,21 +90,25 @@ def pnginfo_html_v2(geninfo, items): return info_html +pnginfo_html_map = { + 'Default': pnginfo_html_v2, + 'Parsed': pnginfo_html_v2, + 'Raw': pnginfo_html_v1, +} + + def run_pnginfo(image): if image is None: return '', '', '' geninfo, items = images.read_info_from_image(image) - try: - info = pnginfo_html_v2(geninfo, items) - except ValueError: - info = pnginfo_html_v1(geninfo, items) + info_html = pnginfo_html_map.get(shared.opts.png_info_html_style, pnginfo_html_v2)(geninfo, items) - if len(info) == 0: + if len(info_html) == 0: message = "Nothing found in the image." - info = f"

{message}

" + info_html = f"

{message}

" - return '', geninfo, info + return '', geninfo, info_html def create_config(ckpt_result, config_source, a, b, c): diff --git a/modules/shared_items.py b/modules/shared_items.py index 11f10b3f7..22b95f327 100644 --- a/modules/shared_items.py +++ b/modules/shared_items.py @@ -74,6 +74,11 @@ def reload_hypernetworks(): shared.hypernetworks = hypernetwork.list_hypernetworks(cmd_opts.hypernetwork_dir) +def list_pnginfo_html_methods(): + from modules.extras import pnginfo_html_map + return list(pnginfo_html_map) + + def get_infotext_names(): from modules import infotext_utils, shared res = {} diff --git a/modules/shared_options.py b/modules/shared_options.py index efede7067..11bc10996 100644 --- a/modules/shared_options.py +++ b/modules/shared_options.py @@ -366,7 +366,7 @@ It is displayed in UI below the image. To use infotext, paste it into the prompt
  • Discard: remove style text from prompt, keep styles dropdown as it is.
  • Apply if any: remove style text from prompt; if any styles are found in prompt, put them into styles dropdown, otherwise keep it as it is.
  • """), - + "png_info_html_style": OptionInfo("Default", "PNG Info style", gr.Radio, lambda: {"choices": shared_items.list_pnginfo_html_methods()}).info('"Default -> Parsed"'), })) options_templates.update(options_section(('ui', "Live previews", "ui"), {