Harden seed control normalization

This commit is contained in:
2026-06-27 14:12:53 +02:00
parent 0289a94153
commit c7e4bdc373
4 changed files with 87 additions and 37 deletions
+19 -5
View File
@@ -5738,14 +5738,21 @@ def smoke_node_utility_registration() -> None:
"Seed Control summary lost random resolved seed value",
)
seed, seed_config, summary = sxcp_nodes.NODE_CLASS_MAPPINGS["SxCPGlobalSeed"]().build(12345)
parsed_seed = json.loads(seed_config)
seed_locker = sxcp_nodes.NODE_CLASS_MAPPINGS["SxCPSeedLocker"]
locker_inputs = seed_locker.INPUT_TYPES().get("required") or {}
_expect(
list(locker_inputs["reroll_axis"][0]) == seed_config.seed_reroll_axis_choices(),
"Seed Locker reroll choices drifted from seed_config",
)
seed, global_seed_config, summary = sxcp_nodes.NODE_CLASS_MAPPINGS["SxCPGlobalSeed"]().build(12345)
parsed_seed = json.loads(global_seed_config)
_expect(seed == 12345, "Global Seed did not return the clamped seed")
_expect(parsed_seed, "Global Seed config should not be empty")
_expect(all(int(value) == 12345 for value in parsed_seed.values()), "Global Seed config did not lock every axis")
_expect("all axes locked" in summary, "Global Seed summary changed unexpectedly")
locker_config, locker_summary = sxcp_nodes.NODE_CLASS_MAPPINGS["SxCPSeedLocker"]().build(12345, "pose", 999)
locker_config, locker_summary = seed_locker().build(12345, "pose", 999)
parsed_locker = json.loads(locker_config)
_expect(parsed_locker.get("pose_seed") == 999, "Seed Locker did not apply pose reroll seed")
_expect("reroll pose" in locker_summary, "Seed Locker summary lost reroll axis")
@@ -5852,6 +5859,13 @@ def smoke_server_route_payload_policy() -> None:
def smoke_seed_config_policy() -> None:
_expect(pb.SEED_AXIS_SALTS is seed_config.SEED_AXIS_SALTS, "prompt_builder seed salts should delegate to seed_config")
_expect(pb.seed_mode_choices() == seed_config.seed_mode_choices(), "seed mode choices drifted from seed_config")
_expect(
pb.seed_reroll_axis_choices() == seed_config.seed_reroll_axis_choices(),
"seed reroll axis choices drifted from seed_config",
)
_expect(pb.normalize_seed_mode("follow main") == "follow_main", "seed mode normalizer should accept spaced labels")
_expect(pb.normalize_seed_mode("FOLLOW-MAIN") == "follow_main", "seed mode normalizer should accept hyphenated labels")
_expect(pb.normalize_reroll_axis("content pose") == "content_pose", "reroll axis normalizer should accept spaced labels")
fixed_config = json.loads(
pb.build_seed_config_json(
@@ -5861,7 +5875,7 @@ def smoke_seed_config_policy() -> None:
role_seed=789,
category_seed_mode="fixed",
content_seed_mode="fixed",
pose_seed_mode="follow_main",
pose_seed_mode="follow-main",
role_seed_mode="auto",
)
)
@@ -5875,7 +5889,7 @@ def smoke_seed_config_policy() -> None:
_expect(pb._configured_axis_seed(parsed, "content") == 44, "content axis should honor item_seed alias")
_expect(pb._configured_axis_seed(parsed, "role") == 55, "role axis should honor pose seed alias")
locked = json.loads(pb.build_seed_lock_config_json(base_seed=100, reroll_axis="content_pose", reroll_seed=999))
locked = json.loads(pb.build_seed_lock_config_json(base_seed=100, reroll_axis="content pose", reroll_seed=999))
_expect(locked["content_seed"] == 999, "content_pose reroll should alter content seed")
_expect(locked["pose_seed"] == 999 and locked["role_seed"] == 999, "content_pose reroll should alter pose and role seeds")
_expect(locked["scene_seed"] == 100, "content_pose reroll should leave scene locked")