Compare commits

...
3 Commits
3 changed files with 7 additions and 18 deletions
+2 -2
View File
@@ -58,10 +58,10 @@
- `Dumas H3 Prompt Curator` - `Dumas H3 Prompt Curator`
- Inputs: `action_prompt`, `anatomy_guard`, `subject_count_guard`, optional `anchor`, optional `soundscape`, optional `bgm`, optional `ref_1` through `ref_9` - Inputs: `action_prompt`, `anatomy_guard`, `subject_count_guard`, optional `anchor`, optional `soundscape`, optional `bgm`, optional `ref_1` through `ref_9`
- Outputs: `prompt`, `ref_image_1` through `ref_image_9`, `reference_count`, `debug`, `anchor`, `sounds`, `bgm`, `original_ref_1` through `original_ref_9`, `reference_description` - Outputs: `prompt`, `ref_image_1` through `ref_image_9`, `reference_count`, `debug`, `anchor`, `sounds`, `bgm`, `original_ref_1` through `original_ref_9`
- Builds one standalone MiniMax H3 prompt from your final action text plus structured character/location references. - Builds one standalone MiniMax H3 prompt from your final action text plus structured character/location references.
- The action text can mention references by character/location name, alias, `<Picture N>`, or `<refN>`. Only mentioned references are emitted, and the output images are compacted/renumbered so skipped inputs do not leave gaps. - The action text can mention references by character/location name, alias, `<Picture N>`, or `<refN>`. Only mentioned references are emitted, and the output images are compacted/renumbered so skipped inputs do not leave gaps.
- Extra component outputs expose the cleaned anchor, sounds, BGM, selected structured references in compacted order, and the compiled reference-description block used inside the prompt. - Extra component outputs expose the cleaned anchor, sounds, BGM, and each selected original reference image in compacted order.
- Adds curated reference context, anatomy guard text, optional subject-count guard text, anchor/style text, `overall_soundscape:` text, and `background_music:` text while respecting MiniMax H3's reference-generation shape: one prompt plus up to nine reference images. - Adds curated reference context, anatomy guard text, optional subject-count guard text, anchor/style text, `overall_soundscape:` text, and `background_music:` text while respecting MiniMax H3's reference-generation shape: one prompt plus up to nine reference images.
- `Dumas H3 Shot Length` - `Dumas H3 Shot Length`
+2 -7
View File
@@ -1277,8 +1277,6 @@ def curate_h3_prompt(
prompt = prompt[: _H3_PROMPT_MAX_CHARS - 3].rstrip() + "..." prompt = prompt[: _H3_PROMPT_MAX_CHARS - 3].rstrip() + "..."
images = [_reference_image(ref) for _slot, ref in selected] images = [_reference_image(ref) for _slot, ref in selected]
images.extend([None] * (_H3_PROMPT_REF_SLOTS - len(images))) images.extend([None] * (_H3_PROMPT_REF_SLOTS - len(images)))
selected_refs = [ref for _slot, ref in selected]
selected_refs.extend([None] * (_H3_PROMPT_REF_SLOTS - len(selected_refs)))
debug = ( debug = (
f"Selected {len(selected)} reference(s): " f"Selected {len(selected)} reference(s): "
+ ", ".join( + ", ".join(
@@ -1296,8 +1294,7 @@ def curate_h3_prompt(
anchor_text, anchor_text,
soundscape_text, soundscape_text,
bgm_text, bgm_text,
*selected_refs[:_H3_PROMPT_REF_SLOTS], *images[:_H3_PROMPT_REF_SLOTS],
reference_description,
) )
@@ -2689,8 +2686,7 @@ class DumasH3PromptCuratorNode:
("STRING",) ("STRING",)
+ ("IMAGE",) * _H3_PROMPT_REF_SLOTS + ("IMAGE",) * _H3_PROMPT_REF_SLOTS
+ ("INT", "STRING", "STRING", "STRING", "STRING") + ("INT", "STRING", "STRING", "STRING", "STRING")
+ (_REFERENCE_TYPE,) * _H3_PROMPT_REF_SLOTS + ("IMAGE",) * _H3_PROMPT_REF_SLOTS
+ ("STRING",)
) )
RETURN_NAMES = ( RETURN_NAMES = (
"prompt", "prompt",
@@ -2717,7 +2713,6 @@ class DumasH3PromptCuratorNode:
"original_ref_7", "original_ref_7",
"original_ref_8", "original_ref_8",
"original_ref_9", "original_ref_9",
"reference_description",
) )
FUNCTION = "curate_prompt" FUNCTION = "curate_prompt"
CATEGORY = "Dumas/MiniMax" CATEGORY = "Dumas/MiniMax"
+3 -9
View File
@@ -502,14 +502,9 @@ class DumasImageNodeTests(unittest.TestCase):
self.assertEqual(result[12], "grounded handheld thriller") self.assertEqual(result[12], "grounded handheld thriller")
self.assertEqual(result[13], "steady rain") self.assertEqual(result[13], "steady rain")
self.assertEqual(result[14], "low suspense music") self.assertEqual(result[14], "low suspense music")
self.assertEqual(result[15]["name"], "Dave") self.assertIs(result[15], dave_image)
self.assertIs(result[15]["image"], dave_image) self.assertIs(result[16], cafe_image)
self.assertEqual(result[16]["name"], "Coffee Shop")
self.assertIs(result[16]["image"], cafe_image)
self.assertIsNone(result[17]) self.assertIsNone(result[17])
self.assertIn("<Picture 1> Dave", result[24])
self.assertIn("<Picture 2> Coffee Shop", result[24])
self.assertIn("Location context for <Picture 2> Coffee Shop", result[24])
def test_h3_prompt_curator_renumbers_explicit_reference_tags(self): def test_h3_prompt_curator_renumbers_explicit_reference_tags(self):
node = self.image_nodes.DumasH3PromptCuratorNode() node = self.image_nodes.DumasH3PromptCuratorNode()
@@ -647,11 +642,10 @@ class DumasImageNodeTests(unittest.TestCase):
def test_h3_prompt_curator_uses_documented_reference_limits(self): def test_h3_prompt_curator_uses_documented_reference_limits(self):
node = self.image_nodes.DumasH3PromptCuratorNode() node = self.image_nodes.DumasH3PromptCuratorNode()
self.assertEqual(len(node.RETURN_TYPES), 25) self.assertEqual(len(node.RETURN_TYPES), 24)
self.assertEqual(node.RETURN_NAMES[1:10], tuple(f"ref_image_{i}" for i in range(1, 10))) self.assertEqual(node.RETURN_NAMES[1:10], tuple(f"ref_image_{i}" for i in range(1, 10)))
self.assertEqual(node.RETURN_NAMES[12:15], ("anchor", "sounds", "bgm")) self.assertEqual(node.RETURN_NAMES[12:15], ("anchor", "sounds", "bgm"))
self.assertEqual(node.RETURN_NAMES[15:24], tuple(f"original_ref_{i}" for i in range(1, 10))) self.assertEqual(node.RETURN_NAMES[15:24], tuple(f"original_ref_{i}" for i in range(1, 10)))
self.assertEqual(node.RETURN_NAMES[24], "reference_description")
def test_normalize_reference_upgrades_generic_summary_with_socket_picture_id(self): def test_normalize_reference_upgrades_generic_summary_with_socket_picture_id(self):
image = FakeTensorBatch() image = FakeTensorBatch()