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"
"
+ info_html = f""
- 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"), {