Fix softcore branch pose seeding
This commit is contained in:
+1
-1
@@ -2280,7 +2280,7 @@ class SxCPScenePairOutput:
|
|||||||
hard_scene = _parse_scene(hardcore_scene)
|
hard_scene = _parse_scene(hardcore_scene)
|
||||||
base_configs = _compat_configs(soft_scene, "softcore")
|
base_configs = _compat_configs(soft_scene, "softcore")
|
||||||
hard_configs = _compat_configs(hard_scene, "hardcore")
|
hard_configs = _compat_configs(hard_scene, "hardcore")
|
||||||
shared_seed_config = _base_config(soft_scene, "seed_config") or base_configs["seed_config"]
|
shared_seed_config = _base_config(soft_scene, "seed_config")
|
||||||
options_json = _pair_options(soft_scene, hard_scene)
|
options_json = _pair_options(soft_scene, hard_scene)
|
||||||
row = build_insta_of_pair(
|
row = build_insta_of_pair(
|
||||||
row_number=int(soft_scene.get("row_number", 1)),
|
row_number=int(soft_scene.get("row_number", 1)),
|
||||||
|
|||||||
+2
-1
@@ -74,6 +74,7 @@ def build_insta_pair_rows_result(
|
|||||||
soft_seed_config = parsed_softcore_seed_config or parsed_seed_config
|
soft_seed_config = parsed_softcore_seed_config or parsed_seed_config
|
||||||
hard_seed_config = parsed_hardcore_seed_config or parsed_seed_config
|
hard_seed_config = parsed_hardcore_seed_config or parsed_seed_config
|
||||||
soft_content_rng = axis_rng(soft_seed_config, "content", seed, row_number + 311)
|
soft_content_rng = axis_rng(soft_seed_config, "content", seed, row_number + 311)
|
||||||
|
soft_pose_rng = axis_rng(soft_seed_config, "pose", seed, row_number + 313)
|
||||||
hard_content_rng = axis_rng(hard_seed_config, "content", seed, row_number + 317)
|
hard_content_rng = axis_rng(hard_seed_config, "content", seed, row_number + 317)
|
||||||
soft_person_rng = axis_rng(soft_seed_config, "person", seed, row_number)
|
soft_person_rng = axis_rng(soft_seed_config, "person", seed, row_number)
|
||||||
|
|
||||||
@@ -148,7 +149,7 @@ def build_insta_pair_rows_result(
|
|||||||
|
|
||||||
primary_softcore_outfit = slot_softcore_outfit(primary_slot, soft_content_rng)
|
primary_softcore_outfit = slot_softcore_outfit(primary_slot, soft_content_rng)
|
||||||
soft_row["item"] = primary_softcore_outfit or softcore_outfit(soft_content_rng, softcore_level_key)
|
soft_row["item"] = primary_softcore_outfit or softcore_outfit(soft_content_rng, softcore_level_key)
|
||||||
soft_row["pose"] = softcore_pose(soft_content_rng, softcore_level_key)
|
soft_row["pose"] = softcore_pose(soft_pose_rng, softcore_level_key)
|
||||||
soft_row["item_label"] = (
|
soft_row["item_label"] = (
|
||||||
"Insta/OF softcore body exposure"
|
"Insta/OF softcore body exposure"
|
||||||
if softcore_level_key == "explicit_nude"
|
if softcore_level_key == "explicit_nude"
|
||||||
|
|||||||
@@ -1258,7 +1258,7 @@ def _pair_seed_pose_reroll_check(seed: int) -> dict[str, Any]:
|
|||||||
seed,
|
seed,
|
||||||
name="pair_seed.pose_reroll",
|
name="pair_seed.pose_reroll",
|
||||||
reroll_axis="pose",
|
reroll_axis="pose",
|
||||||
changed_fields=("hard_position_key", "hard_item", "hard_source_role_graph"),
|
changed_fields=("soft_pose", "hard_position_key", "hard_item", "hard_source_role_graph"),
|
||||||
stable_fields=(
|
stable_fields=(
|
||||||
"shared_cast_descriptors",
|
"shared_cast_descriptors",
|
||||||
"soft_cast_descriptor_text",
|
"soft_cast_descriptor_text",
|
||||||
@@ -1266,7 +1266,6 @@ def _pair_seed_pose_reroll_check(seed: int) -> dict[str, Any]:
|
|||||||
"soft_scene_text",
|
"soft_scene_text",
|
||||||
"hard_scene_text",
|
"hard_scene_text",
|
||||||
"soft_item",
|
"soft_item",
|
||||||
"soft_pose",
|
|
||||||
"soft_composition",
|
"soft_composition",
|
||||||
"hard_composition",
|
"hard_composition",
|
||||||
),
|
),
|
||||||
@@ -1279,13 +1278,14 @@ def _pair_seed_content_reroll_check(seed: int) -> dict[str, Any]:
|
|||||||
seed,
|
seed,
|
||||||
name="pair_seed.content_reroll",
|
name="pair_seed.content_reroll",
|
||||||
reroll_axis="content",
|
reroll_axis="content",
|
||||||
changed_fields=("soft_item", "soft_pose"),
|
changed_fields=("soft_item",),
|
||||||
stable_fields=(
|
stable_fields=(
|
||||||
"shared_cast_descriptors",
|
"shared_cast_descriptors",
|
||||||
"soft_cast_descriptor_text",
|
"soft_cast_descriptor_text",
|
||||||
"hard_cast_descriptor_text",
|
"hard_cast_descriptor_text",
|
||||||
"soft_scene_text",
|
"soft_scene_text",
|
||||||
"hard_scene_text",
|
"hard_scene_text",
|
||||||
|
"soft_pose",
|
||||||
"hard_item",
|
"hard_item",
|
||||||
"hard_position_key",
|
"hard_position_key",
|
||||||
"hard_source_role_graph",
|
"hard_source_role_graph",
|
||||||
|
|||||||
+63
-1
@@ -8277,7 +8277,7 @@ def smoke_prompt_route_simulation_policy() -> None:
|
|||||||
)
|
)
|
||||||
_expect(
|
_expect(
|
||||||
pair_seed_checks["pair_seed.pose_reroll"].get("changed") is True,
|
pair_seed_checks["pair_seed.pose_reroll"].get("changed") is True,
|
||||||
"Pair pose reroll should prove hard action can reroll while soft/cast/scene axes stay locked",
|
"Pair pose reroll should prove soft pose or hard action can reroll while cast/scene axes stay locked",
|
||||||
)
|
)
|
||||||
sweep = prompt_route_simulation.run_simulation_sweep(seed=3901, count=3, seed_step=101, include_prompts=False)
|
sweep = prompt_route_simulation.run_simulation_sweep(seed=3901, count=3, seed_step=101, include_prompts=False)
|
||||||
sweep_summary = sweep.get("summary") or {}
|
sweep_summary = sweep.get("summary") or {}
|
||||||
@@ -9263,6 +9263,68 @@ def smoke_node_scene_chain_registration() -> None:
|
|||||||
content_hard_seed_config.get("pose_seed") == 8899 and content_hard_seed_config.get("role_seed") == 8899,
|
content_hard_seed_config.get("pose_seed") == 8899 and content_hard_seed_config.get("role_seed") == 8899,
|
||||||
"Hardcore branch content_pose reroll did not reach hardcore pose and role seeds",
|
"Hardcore branch content_pose reroll did not reach hardcore pose and role seeds",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def _soft_pose_pair(soft_pose_seed: int) -> dict[str, Any]:
|
||||||
|
soft_pose_seed_options = nodes["SxCPSceneLayerSeedOptions"]().build(
|
||||||
|
"softcore_branch",
|
||||||
|
"fixed",
|
||||||
|
soft_pose_seed,
|
||||||
|
"pose",
|
||||||
|
"same_for_all_rows",
|
||||||
|
"replace_layer",
|
||||||
|
)[0]
|
||||||
|
soft_scene_pose, hard_scene_pose, _summary, _metadata = nodes["SxCPSceneBranchPair"]().build(
|
||||||
|
scene,
|
||||||
|
"same_creator_same_room",
|
||||||
|
"hybrid",
|
||||||
|
branch_options=branch_options,
|
||||||
|
seed_options=soft_pose_seed_options,
|
||||||
|
)
|
||||||
|
soft_scene_pose = nodes["SxCPSoftcoreBranchOptions"]().build(
|
||||||
|
soft_scene_pose,
|
||||||
|
"same_as_hardcore",
|
||||||
|
"lingerie_tease",
|
||||||
|
True,
|
||||||
|
0.45,
|
||||||
|
"from_camera_config",
|
||||||
|
"compact",
|
||||||
|
"",
|
||||||
|
branch_options=branch_options,
|
||||||
|
seed_options=soft_pose_seed_options,
|
||||||
|
)[0]
|
||||||
|
hard_scene_pose = nodes["SxCPHardcoreBranchOptions"]().build(
|
||||||
|
hard_scene_pose,
|
||||||
|
"couple",
|
||||||
|
1,
|
||||||
|
1,
|
||||||
|
"hardcore",
|
||||||
|
True,
|
||||||
|
0.85,
|
||||||
|
"explicit_nude",
|
||||||
|
"from_camera_config",
|
||||||
|
"compact",
|
||||||
|
"balanced",
|
||||||
|
"",
|
||||||
|
branch_options=branch_options,
|
||||||
|
)[0]
|
||||||
|
return json.loads(nodes["SxCPScenePairOutput"]().build(soft_scene_pose, hard_scene_pose)[7])
|
||||||
|
|
||||||
|
soft_pose_pairs = [_soft_pose_pair(seed) for seed in (6677, 6678, 6679, 6680)]
|
||||||
|
soft_pose_items = {pair.get("softcore_row", {}).get("item") for pair in soft_pose_pairs}
|
||||||
|
soft_pose_values = {pair.get("softcore_row", {}).get("pose") for pair in soft_pose_pairs}
|
||||||
|
_expect(len(soft_pose_items) == 1, "Softcore branch pose reroll should not change softcore outfit/content")
|
||||||
|
_expect(len(soft_pose_values) > 1, "Softcore branch pose reroll did not change softcore pose")
|
||||||
|
for expected_seed, pose_pair in zip((6677, 6678, 6679, 6680), soft_pose_pairs):
|
||||||
|
soft_seed_config = pose_pair.get("softcore_row", {}).get("seed_config") if isinstance(pose_pair.get("softcore_row"), dict) else {}
|
||||||
|
hard_seed_config = pose_pair.get("hardcore_row", {}).get("seed_config") if isinstance(pose_pair.get("hardcore_row"), dict) else {}
|
||||||
|
_expect(
|
||||||
|
soft_seed_config.get("pose_seed") == expected_seed,
|
||||||
|
"Softcore branch pose seed did not reach softcore generator seed config",
|
||||||
|
)
|
||||||
|
_expect(
|
||||||
|
hard_seed_config.get("pose_seed") != expected_seed,
|
||||||
|
"Softcore branch pose seed leaked into hardcore generator seed config",
|
||||||
|
)
|
||||||
choice_board_node = nodes["SxCPChoiceBoard"]()
|
choice_board_node = nodes["SxCPChoiceBoard"]()
|
||||||
choice_board_output = choice_board_node.build(
|
choice_board_output = choice_board_node.build(
|
||||||
json.dumps(content_pair),
|
json.dumps(content_pair),
|
||||||
|
|||||||
Reference in New Issue
Block a user