Add Krea2 cowgirl alt candidate

This commit is contained in:
2026-06-29 06:54:23 +02:00
parent b41d140927
commit f937d3c109
3 changed files with 74 additions and 1 deletions
+40
View File
@@ -519,6 +519,46 @@
"guide_section": "", "guide_section": "",
"notes": "Atlas shows repeated frontal woman-on-top straddle geometry; needs fixed-seed Krea2 tests before promotion to proven." "notes": "Atlas shows repeated frontal woman-on-top straddle geometry; needs fixed-seed Krea2 tests before promotion to proven."
} }
},
{
"key": "pov_cowgirl_alt_low_squat_penetration",
"family": "cowgirl_alt",
"status": "candidate",
"atlas_folders": ["5.cowgirl_alt"],
"action_family": "penetration",
"position_keys": ["cowgirl", "frontal_straddle", "woman_on_top", "low_squat"],
"canonical_geometry": "Close first-person cowgirl-alt view: the viewer reclines below while the woman faces him in a low seated squat over the viewer's pelvis, knees bent wide near the camera, torso close above the contact line, and viewer hands or thighs anchoring the lower foreground.",
"prompt_cues": [
"POV low cowgirl seated-squat penetration position",
"woman faces the viewer in a low seated squat over the viewer's pelvis",
"her knees are bent wide and close to the camera on either side of the viewer's hips",
"her torso stays close above the centered contact line",
"viewer reclines below with thighs, pelvis, or lower torso anchoring the foreground",
"viewer hands may hold the underside of her thighs or hips without blocking the centered contact line"
],
"avoid_cues": [
"upright distant cowgirl with the torso far from the viewer",
"missionary with the woman lying on her back",
"reverse cowgirl with the woman facing away",
"folded-leg knees-to-chest geometry",
"rear-entry or doggy geometry",
"cropping away the wide bent knees and close seated position"
],
"reference_images": [
"5.cowgirl_alt/101_cowgirl_alt.png",
"5.cowgirl_alt/102_cowgirl_alt.png",
"5.cowgirl_alt/103_cowgirl_alt.png",
"5.cowgirl_alt/16_cowgirl_alt.png"
],
"generator_hook": {
"module": "krea_pov_actions.py",
"route_terms": ["cowgirl_alt", "low cowgirl", "seated-squat cowgirl", "woman-on-top"]
},
"evidence": {
"fixed_seed_tests": [],
"guide_section": "",
"notes": "Atlas shows repeated frontal woman-on-top geometry with a lower seated squat and closer thigh/hand anchors than the main cowgirl folder; needs fixed-seed Krea2 tests before promotion to proven."
}
} }
] ]
} }
+11
View File
@@ -188,3 +188,14 @@ stays upright above the contact line, and her knees open to either side of the
viewer. Treat `pov_cowgirl_frontal_straddle_penetration` as a candidate until it viewer. Treat `pov_cowgirl_frontal_straddle_penetration` as a candidate until it
has fixed-seed Krea2 evidence. Keep this separate from the alt and reverse has fixed-seed Krea2 evidence. Keep this separate from the alt and reverse
cowgirl folders, which need their own geometry wording. cowgirl folders, which need their own geometry wording.
### Cowgirl Alt / Low Seated-Squat Penetration
The `5.cowgirl_alt` folder is still frontal woman-on-top, not reverse cowgirl,
but the repeated pose is lower and closer than the main cowgirl folder: the
woman faces the viewer in a low seated squat over the viewer's pelvis, knees
bent wide close to the camera, with viewer hands often anchoring the underside
of her thighs or hips. Treat `pov_cowgirl_alt_low_squat_penetration` as a
candidate until it has fixed-seed Krea2 evidence. Keep this separate from the
main cowgirl route so Krea2 can choose between upright straddle wording and
closer seated-squat wording.
+23 -1
View File
@@ -6789,6 +6789,7 @@ def smoke_krea2_pose_variant_catalog_policy() -> None:
"pov_missionary_open_leg_penetration", "pov_missionary_open_leg_penetration",
"pov_missionary_folded_high_leg_penetration", "pov_missionary_folded_high_leg_penetration",
"pov_cowgirl_frontal_straddle_penetration", "pov_cowgirl_frontal_straddle_penetration",
"pov_cowgirl_alt_low_squat_penetration",
], ],
f"Krea2 pose-variant penetration filtering changed unexpectedly: {penetration}", f"Krea2 pose-variant penetration filtering changed unexpectedly: {penetration}",
) )
@@ -6890,6 +6891,12 @@ def smoke_krea2_pose_variant_catalog_policy() -> None:
any("woman straddles the viewer facing him" in str(cue) for cue in cowgirl.get("prompt_cues", [])), any("woman straddles the viewer facing him" in str(cue) for cue in cowgirl.get("prompt_cues", [])),
"Cowgirl variant lost frontal straddle cue", "Cowgirl variant lost frontal straddle cue",
) )
cowgirl_alt = krea2_pose_variant_catalog.get_variant("pov_cowgirl_alt_low_squat_penetration")
_expect(cowgirl_alt.get("status") == "candidate", "Cowgirl alt variant should remain a candidate until fixed-seed evidence exists")
_expect(
any("low seated squat over the viewer's pelvis" in str(cue) for cue in cowgirl_alt.get("prompt_cues", [])),
"Cowgirl alt variant lost low seated squat cue",
)
refs = krea2_pose_variant_catalog.reference_paths("pov_boobjob_upright_cleavage") refs = krea2_pose_variant_catalog.reference_paths("pov_boobjob_upright_cleavage")
_expect(refs and all(path.name.endswith(".png") for path in refs), "Boobjob reference paths are not image paths") _expect(refs and all(path.name.endswith(".png") for path in refs), "Boobjob reference paths are not image paths")
_expect(all("bg" not in str(path).lower() for path in refs), "Reference paths should not include background-only atlas images") _expect(all("bg" not in str(path).lower() for path in refs), "Reference paths should not include background-only atlas images")
@@ -6977,9 +6984,12 @@ def smoke_krea2_tuning_report_policy() -> None:
cowgirl = by_key.get("pov_cowgirl_frontal_straddle_penetration") or {} cowgirl = by_key.get("pov_cowgirl_frontal_straddle_penetration") or {}
_expect(cowgirl.get("coverage_state") == "needs_fixed_seed_tests", "Cowgirl report should need fixed-seed tests") _expect(cowgirl.get("coverage_state") == "needs_fixed_seed_tests", "Cowgirl report should need fixed-seed tests")
_expect(cowgirl.get("accepted_evidence_count") == 0, "Cowgirl report should not have accepted evidence yet") _expect(cowgirl.get("accepted_evidence_count") == 0, "Cowgirl report should not have accepted evidence yet")
cowgirl_alt = by_key.get("pov_cowgirl_alt_low_squat_penetration") or {}
_expect(cowgirl_alt.get("coverage_state") == "needs_fixed_seed_tests", "Cowgirl alt report should need fixed-seed tests")
_expect(cowgirl_alt.get("accepted_evidence_count") == 0, "Cowgirl alt report should not have accepted evidence yet")
summary = krea2_tuning_report.coverage_summary() summary = krea2_tuning_report.coverage_summary()
_expect(summary.get("status_counts", {}).get("proven") == 3, "Krea2 tuning report proven count changed") _expect(summary.get("status_counts", {}).get("proven") == 3, "Krea2 tuning report proven count changed")
_expect(summary.get("status_counts", {}).get("candidate") == 11, "Krea2 tuning report candidate count changed") _expect(summary.get("status_counts", {}).get("candidate") == 12, "Krea2 tuning report candidate count changed")
_expect( _expect(
summary.get("variants_without_accepted_evidence") == [ summary.get("variants_without_accepted_evidence") == [
"pov_ballsucking_low_head", "pov_ballsucking_low_head",
@@ -6993,6 +7003,7 @@ def smoke_krea2_tuning_report_policy() -> None:
"pov_missionary_open_leg_penetration", "pov_missionary_open_leg_penetration",
"pov_missionary_folded_high_leg_penetration", "pov_missionary_folded_high_leg_penetration",
"pov_cowgirl_frontal_straddle_penetration", "pov_cowgirl_frontal_straddle_penetration",
"pov_cowgirl_alt_low_squat_penetration",
], ],
f"Krea2 tuning report missing-evidence set changed: {summary.get('variants_without_accepted_evidence')}", f"Krea2 tuning report missing-evidence set changed: {summary.get('variants_without_accepted_evidence')}",
) )
@@ -7011,6 +7022,7 @@ def smoke_krea2_tuning_report_policy() -> None:
"pov_missionary_open_leg_penetration", "pov_missionary_open_leg_penetration",
"pov_missionary_folded_high_leg_penetration", "pov_missionary_folded_high_leg_penetration",
"pov_cowgirl_frontal_straddle_penetration", "pov_cowgirl_frontal_straddle_penetration",
"pov_cowgirl_alt_low_squat_penetration",
], ],
"Krea2 tuning report next plans changed", "Krea2 tuning report next plans changed",
) )
@@ -7118,6 +7130,15 @@ def smoke_krea2_tuning_report_policy() -> None:
any(str(path).endswith("5.cowgirl/100_cowgirl.png") for path in cowgirl_plan.get("reference_paths") or []), any(str(path).endswith("5.cowgirl/100_cowgirl.png") for path in cowgirl_plan.get("reference_paths") or []),
"Cowgirl test plan lost atlas reference path", "Cowgirl test plan lost atlas reference path",
) )
cowgirl_alt_plan = plan_by_key["pov_cowgirl_alt_low_squat_penetration"]
_expect(
"low seated squat over the viewer's pelvis" in " ".join(cowgirl_alt_plan.get("prompt_cues") or []),
"Cowgirl alt test plan lost low seated squat cue",
)
_expect(
any(str(path).endswith("5.cowgirl_alt/101_cowgirl_alt.png") for path in cowgirl_alt_plan.get("reference_paths") or []),
"Cowgirl alt test plan lost atlas reference path",
)
with tempfile.TemporaryDirectory() as tmpdir: with tempfile.TemporaryDirectory() as tmpdir:
atlas_root = Path(tmpdir) atlas_root = Path(tmpdir)
for folder in ("doggy", "doggy_control", "custom_pose", "custom_pose_control", "bg", "woman", "doggy_bg"): for folder in ("doggy", "doggy_control", "custom_pose", "custom_pose_control", "bg", "woman", "doggy_bg"):
@@ -7160,6 +7181,7 @@ def smoke_krea2_tuning_report_policy() -> None:
_expect("pov_missionary_open_leg_penetration" in markdown, "Krea2 tuning report markdown lost missionary candidate variant") _expect("pov_missionary_open_leg_penetration" in markdown, "Krea2 tuning report markdown lost missionary candidate variant")
_expect("pov_missionary_folded_high_leg_penetration" in markdown, "Krea2 tuning report markdown lost folded missionary candidate variant") _expect("pov_missionary_folded_high_leg_penetration" in markdown, "Krea2 tuning report markdown lost folded missionary candidate variant")
_expect("pov_cowgirl_frontal_straddle_penetration" in markdown, "Krea2 tuning report markdown lost cowgirl candidate variant") _expect("pov_cowgirl_frontal_straddle_penetration" in markdown, "Krea2 tuning report markdown lost cowgirl candidate variant")
_expect("pov_cowgirl_alt_low_squat_penetration" in markdown, "Krea2 tuning report markdown lost cowgirl alt candidate variant")
_expect("needs_fixed_seed_tests" in markdown, "Krea2 tuning report markdown lost coverage state") _expect("needs_fixed_seed_tests" in markdown, "Krea2 tuning report markdown lost coverage state")
_expect("Prompt cues" in markdown, "Krea2 tuning report markdown lost next-test cue section") _expect("Prompt cues" in markdown, "Krea2 tuning report markdown lost next-test cue section")
_expect("Avoid cues" in markdown, "Krea2 tuning report markdown lost next-test avoid section") _expect("Avoid cues" in markdown, "Krea2 tuning report markdown lost next-test avoid section")