diff --git a/extensions-builtin/Lora/ui_extra_networks_lora.py b/extensions-builtin/Lora/ui_extra_networks_lora.py
index 78d8634be..fe797202d 100644
--- a/extensions-builtin/Lora/ui_extra_networks_lora.py
+++ b/extensions-builtin/Lora/ui_extra_networks_lora.py
@@ -186,10 +186,13 @@ class ExtraNetworksPageLora(ui_extra_networks.ExtraNetworksPage):
tags = build_tags(metadata)
if tags is None or len(tags) == 0:
+ res += "
Model Tags
"
+ res += "Metadata contains no tags
"
return res
min_tag = min(int(x[1]) for x in tags)
max_tag = max(int(x[1]) for x in tags)
+
cmap = mpl.colormaps["coolwarm"]
def _clamp(x: float, min_val: float, max_val: float) -> float:
@@ -202,20 +205,31 @@ class ExtraNetworksPageLora(ui_extra_networks.ExtraNetworksPage):
for (tag_name, tag_count) in tags:
# Normalize tag count
tag_count = int(tag_count)
- cmap_idx = math.floor((tag_count - min_tag) / (max_tag - min_tag) * (cmap.N - 1))
+ if min_tag == max_tag: # Prevent DivideByZero error.
+ cmap_idx = cmap.N // 2
+ else:
+ cmap_idx = math.floor(
+ (tag_count - min_tag) / (max_tag - min_tag) * (cmap.N - 1)
+ )
+
+ # Get the bg color based on tag count and a contrasting fg color.
base_color = cmap(cmap_idx)
base_color = [_clamp(x, 0, 1) for x in base_color]
base_fg_color = _get_fg_color(*base_color[:3])
+ # Now get a slightly darker background for the tag count bg color.
h, lum, s = colorsys.rgb_to_hls(*base_color[:3])
lum = max(min(lum * 0.7, 1.0), 0.0)
dark_color = colorsys.hls_to_rgb(h, lum, s)
dark_color = [_clamp(x, 0, 1) for x in dark_color]
dark_fg_color = _get_fg_color(*dark_color[:3])
+ # Convert the colors to a hex string.
base_color = mpl.colors.rgb2hex(base_color)
dark_color = mpl.colors.rgb2hex(dark_color)
- tag_style = f"background: {mpl.colors.rgb2hex(base_color)};"
+ # Finally, generate the HTML for this tag.
+ tag_style = f"background: {base_color};"
name_style = f"color: {base_fg_color};"
count_style = f"background: {dark_color}; color: {dark_fg_color};"
+
tag_elems.append((
f""
f"{tag_name}"
diff --git a/javascript/extraNetworks.js b/javascript/extraNetworks.js
index 1441229d1..63a150827 100644
--- a/javascript/extraNetworks.js
+++ b/javascript/extraNetworks.js
@@ -959,7 +959,10 @@ class ExtraNetworksTab {
model_name: source_elem.dataset.name,
},
(response) => _show_details(response),
- () => _popup("Error fetching model details."),
+ () => {
+ console.warn(`Error fetching model details for ${source_elem.dataset.name}`);
+ div_dets.innerHTML = `Error fetching model details for ${source_elem.dataset.name}`;
+ },
);
if (this.dets_view_en) {
this.resize_grid.toggle({elem: div_dets, override: true});
diff --git a/modules/ui_extra_networks.py b/modules/ui_extra_networks.py
index 55527ba94..7009f4d10 100644
--- a/modules/ui_extra_networks.py
+++ b/modules/ui_extra_networks.py
@@ -1063,7 +1063,11 @@ class ExtraNetworksPage:
description = html.escape(description)
description_data_attributes = "data-parse-as-shadow-dom"
- model_specific = self.get_model_detail_extra_html(model_name)
+ try:
+ model_specific = self.get_model_detail_extra_html(model_name)
+ except Exception as exc:
+ print(f"Error getting model specific details for {model_name}: {exc}")
+ model_specific = ""
return self.model_details_tpl.format(
name=model_name,