diff --git a/dumas_image_nodes.py b/dumas_image_nodes.py index eac4b11..c507ee6 100644 --- a/dumas_image_nodes.py +++ b/dumas_image_nodes.py @@ -886,6 +886,8 @@ def normalize_reference(value, picture_id=None, allow_image_fallback=True): if image is None and allow_image_fallback: image = value reference["image"] = image + existing_picture_id = _coerce_picture_id(reference.get("picture_id")) + previous_summary = _ensure_sentence(reference.get("summary") or "") if picture_id is not None and not reference.get("picture_id"): reference["picture_id"] = _coerce_picture_id(picture_id) reference["picture_label"] = _reference_label(reference.get("picture_id")) @@ -893,10 +895,16 @@ def normalize_reference(value, picture_id=None, allow_image_fallback=True): reference.setdefault("id", _reference_id("", reference.get("name"), reference["kind"])) reference.setdefault("name", "") reference["aliases"] = _parse_aliases(reference.get("aliases")) - reference["summary"] = _ensure_sentence( - reference.get("summary") - or _reference_summary(reference["kind"], reference.get("name"), reference.get("picture_id")) + auto_summary_before = _ensure_sentence( + _reference_summary(reference["kind"], reference.get("name"), existing_picture_id) ) + auto_summary_after = _ensure_sentence( + _reference_summary(reference["kind"], reference.get("name"), reference.get("picture_id")) + ) + if not previous_summary or previous_summary == auto_summary_before: + reference["summary"] = auto_summary_after + else: + reference["summary"] = previous_summary reference["description"] = _normalize_free_text(reference.get("description")) reference["wardrobe"] = _normalize_free_text(reference.get("wardrobe")) reference["general"] = _normalize_free_text(reference.get("general")) diff --git a/tests/test_dumas_image_nodes.py b/tests/test_dumas_image_nodes.py index 6725925..cd73de6 100644 --- a/tests/test_dumas_image_nodes.py +++ b/tests/test_dumas_image_nodes.py @@ -356,6 +356,41 @@ class DumasImageNodeTests(unittest.TestCase): required = self.image_nodes.DumasLocationReferenceNode.INPUT_TYPES()["required"] self.assertNotIn("picture_id", required) + def test_normalize_reference_upgrades_generic_summary_with_socket_picture_id(self): + image = FakeTensorBatch() + + reference = self.image_nodes.normalize_reference( + { + "kind": "character", + "name": "Dave", + "image": image, + "summary": "Dave reference.", + }, + picture_id=3, + allow_image_fallback=False, + ) + + self.assertEqual(reference["picture_id"], 3) + self.assertEqual(reference["picture_label"], "") + self.assertEqual(reference["summary"], "Dave shown in .") + + def test_normalize_reference_keeps_custom_summary_when_socket_picture_id_is_added(self): + image = FakeTensorBatch() + + reference = self.image_nodes.normalize_reference( + { + "kind": "character", + "name": "Dave", + "image": image, + "summary": "Primary hero look for the opening close-up.", + }, + picture_id=3, + allow_image_fallback=False, + ) + + self.assertEqual(reference["picture_id"], 3) + self.assertEqual(reference["summary"], "Primary hero look for the opening close-up.") + def test_anchor_style_node_exposes_requested_presets(self): input_types = self.image_nodes.DumasAnchorStyleNode.INPUT_TYPES() options = input_types["required"]["anchor_style"][0]