Skip to content

Commit c4c79c3

Browse files
authored
bugfix(backend): prevent crash on some invokeai metadata formats (#205)
1 parent cffc898 commit c4c79c3

3 files changed

Lines changed: 31 additions & 21 deletions

File tree

photomap/backend/metadata_modules/invoke/v5.py

Lines changed: 27 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
"""
22
Extract Invoke5 metadata from the raw metadata dictionary.
33
"""
4+
5+
import itertools
46
import logging
57

68
from .invoke_metadata_abc import (
@@ -84,24 +86,32 @@ def _get_reference_images(self) -> list[ReferenceImage]:
8486
This is called to get the reference image when the metadata contains a ref_images field.
8587
"""
8688
reference_images = self.raw_metadata.get("ref_images", [])
87-
return [
88-
ReferenceImage(
89-
model_name=image.get("config", {})
90-
.get("model", {})
91-
.get("name", "Unknown Model"),
92-
image_name=image.get("config", {})
93-
.get("image", {})
94-
.get("image_name", "")
95-
or image.get("config", {})
96-
.get("image", {})
97-
.get("original", {})
98-
.get("image", {})
99-
.get("image_name", "Unknown Image"),
100-
weight=image.get("config", {}).get("weight", 1.0),
89+
# for some reason, ref_images can be a list of lists
90+
if any(isinstance(img, list) for img in reference_images):
91+
reference_images = list(itertools.chain.from_iterable(reference_images))
92+
93+
reference_image_list = []
94+
for image in reference_images:
95+
if image.get("isEnabled", False) is False:
96+
continue
97+
model = image.get("config", {}).get("model", {}) or {}
98+
model_name = model.get("name", "N/A")
99+
image_name = image.get("config", {}).get("image", {}).get(
100+
"image_name", ""
101+
) or image.get("config", {}).get("image", {}).get("original", {}).get(
102+
"image", {}
103+
).get(
104+
"image_name", "Unknown Image"
101105
)
102-
for image in reference_images
103-
if image.get("isEnabled", False)
104-
]
106+
weight = image.get("config", {}).get("weight", 1.0)
107+
reference_image_list.append(
108+
ReferenceImage(
109+
model_name=model_name,
110+
image_name=image_name,
111+
weight=weight,
112+
)
113+
)
114+
return reference_image_list
105115

106116
def _get_reference_images_from_canvas_v2(self) -> list[ReferenceImage]:
107117
"""

photomap/backend/metadata_modules/invoke_formatter.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ def format_invoke_metadata(slide_data: SlideSummary, metadata: dict) -> SlideSum
102102
if raster_images:
103103
html += f"<tr><th>Raster Images</th><td>{', '.join(raster_images)}</td></tr>"
104104
if reference_image_table:
105-
html += f"<tr><th>IPAdapters</th><td>{reference_image_table}</td></tr>"
105+
html += f"<tr><th>Reference Images</th><td>{reference_image_table}</td></tr>"
106106
if control_layer_table:
107107
html += f"<tr><th>Control Layers</th><td>{control_layer_table}</td></tr>"
108108
html += "</table>"

photomap/frontend/static/css/metadata-drawer.css

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
margin: 0;
1313
order: 1;
1414
pointer-events: auto;
15-
overflow: hidden;
15+
overflow: visible;
1616
}
1717

1818
/* Draggable Titlebar */
@@ -52,7 +52,7 @@
5252
align-items: center;
5353
justify-content: flex-start;
5454
gap: 0.5em;
55-
white-space: nowrap;
55+
flex-wrap: wrap;
5656
}
5757

5858
#descriptionText {
@@ -162,7 +162,7 @@
162162
top: 120px;
163163
transform: translateX(-100%);
164164
width: auto;
165-
max-width: 60vw;
165+
max-width: 50vw;
166166
z-index: 4001;
167167
transition: transform 0.4s ease, top 0.2s;
168168
pointer-events: auto;

0 commit comments

Comments
 (0)