Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 9 additions & 3 deletions invokeai/app/api/extract_metadata_from_image.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,9 @@ def extract_metadata_from_image(
stringified_metadata: str | None = None

# Use the metadata override if provided, else attempt to extract it from the image file.
metadata_raw = invokeai_metadata_override or pil_image.info.get("invokeai_metadata", None)
metadata_raw = (
invokeai_metadata_override if invokeai_metadata_override is not None else pil_image.info.get("invokeai_metadata", None)
)

# If the metadata is present in the image file, we will attempt to parse it as JSON. When we create images,
# we always store metadata as a stringified JSON dict. So, we expect it to be a string here.
Expand All @@ -66,7 +68,9 @@ def extract_metadata_from_image(

# We expect the workflow, if embedded in the image, to be a JSON-stringified WorkflowWithoutID. We will store it
# as a string.
workflow_raw: str | None = invokeai_workflow_override or pil_image.info.get("invokeai_workflow", None)
workflow_raw: str | None = (
invokeai_workflow_override if invokeai_workflow_override is not None else pil_image.info.get("invokeai_workflow", None)
)

# The fallback value for workflow is None.
stringified_workflow: str | None = None
Expand All @@ -85,7 +89,9 @@ def extract_metadata_from_image(

# We expect the workflow, if embedded in the image, to be a JSON-stringified Graph. We will store it as a
# string.
graph_raw: str | None = invokeai_graph_override or pil_image.info.get("invokeai_graph", None)
graph_raw: str | None = (
invokeai_graph_override if invokeai_graph_override is not None else pil_image.info.get("invokeai_graph", None)
)

# The fallback value for graph is None.
stringified_graph: str | None = None
Expand Down
15 changes: 15 additions & 0 deletions tests/app/test_extract_metadata_from_image.py
Original file line number Diff line number Diff line change
Expand Up @@ -204,3 +204,18 @@ def test_with_no_metadata(mock_logger):
assert result.invokeai_metadata is None
assert result.invokeai_workflow is None
assert result.invokeai_graph is None


def test_empty_string_overrides_do_not_fall_back_to_image_metadata(mock_logger, valid_metadata, valid_workflow, valid_graph):
mock_image = MagicMock(spec=Image.Image)
mock_image.info = {
"invokeai_metadata": valid_metadata,
"invokeai_workflow": valid_workflow,
"invokeai_graph": valid_graph,
}

result = extract_metadata_from_image(mock_image, "", "", "", mock_logger)

assert result.invokeai_metadata is None
assert result.invokeai_workflow is None
assert result.invokeai_graph is None
Loading