Use socket picture labels in ref summaries

This commit is contained in:
2026-09-02 14:44:54 +00:00
parent 85e15c910a
commit 62fbbdd98e
2 changed files with 46 additions and 3 deletions
+11 -3
View File
@@ -886,6 +886,8 @@ def normalize_reference(value, picture_id=None, allow_image_fallback=True):
if image is None and allow_image_fallback: if image is None and allow_image_fallback:
image = value image = value
reference["image"] = image 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"): if picture_id is not None and not reference.get("picture_id"):
reference["picture_id"] = _coerce_picture_id(picture_id) reference["picture_id"] = _coerce_picture_id(picture_id)
reference["picture_label"] = _reference_label(reference.get("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("id", _reference_id("", reference.get("name"), reference["kind"]))
reference.setdefault("name", "") reference.setdefault("name", "")
reference["aliases"] = _parse_aliases(reference.get("aliases")) reference["aliases"] = _parse_aliases(reference.get("aliases"))
reference["summary"] = _ensure_sentence( auto_summary_before = _ensure_sentence(
reference.get("summary") _reference_summary(reference["kind"], reference.get("name"), existing_picture_id)
or _reference_summary(reference["kind"], reference.get("name"), reference.get("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["description"] = _normalize_free_text(reference.get("description"))
reference["wardrobe"] = _normalize_free_text(reference.get("wardrobe")) reference["wardrobe"] = _normalize_free_text(reference.get("wardrobe"))
reference["general"] = _normalize_free_text(reference.get("general")) reference["general"] = _normalize_free_text(reference.get("general"))
+35
View File
@@ -356,6 +356,41 @@ class DumasImageNodeTests(unittest.TestCase):
required = self.image_nodes.DumasLocationReferenceNode.INPUT_TYPES()["required"] required = self.image_nodes.DumasLocationReferenceNode.INPUT_TYPES()["required"]
self.assertNotIn("picture_id", 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"], "<Picture 3>")
self.assertEqual(reference["summary"], "Dave shown in <Picture 3>.")
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): def test_anchor_style_node_exposes_requested_presets(self):
input_types = self.image_nodes.DumasAnchorStyleNode.INPUT_TYPES() input_types = self.image_nodes.DumasAnchorStyleNode.INPUT_TYPES()
options = input_types["required"]["anchor_style"][0] options = input_types["required"]["anchor_style"][0]