From f937d3c109fefa263e0188447abff3dc3fb0f940 Mon Sep 17 00:00:00 2001 From: Ethanfel Date: Mon, 29 Jun 2026 06:54:23 +0200 Subject: [PATCH] Add Krea2 cowgirl alt candidate --- categories/krea2_pov_pose_variants.json | 40 +++++++++++++++++++++++++ docs/krea2-pov-pose-atlas.md | 11 +++++++ tools/prompt_smoke.py | 24 ++++++++++++++- 3 files changed, 74 insertions(+), 1 deletion(-) diff --git a/categories/krea2_pov_pose_variants.json b/categories/krea2_pov_pose_variants.json index 529c1f0..88919fa 100644 --- a/categories/krea2_pov_pose_variants.json +++ b/categories/krea2_pov_pose_variants.json @@ -519,6 +519,46 @@ "guide_section": "", "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." + } } ] } diff --git a/docs/krea2-pov-pose-atlas.md b/docs/krea2-pov-pose-atlas.md index 46931bb..2b60853 100644 --- a/docs/krea2-pov-pose-atlas.md +++ b/docs/krea2-pov-pose-atlas.md @@ -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 has fixed-seed Krea2 evidence. Keep this separate from the alt and reverse 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. diff --git a/tools/prompt_smoke.py b/tools/prompt_smoke.py index ca7e394..9c442e3 100644 --- a/tools/prompt_smoke.py +++ b/tools/prompt_smoke.py @@ -6789,6 +6789,7 @@ def smoke_krea2_pose_variant_catalog_policy() -> None: "pov_missionary_open_leg_penetration", "pov_missionary_folded_high_leg_penetration", "pov_cowgirl_frontal_straddle_penetration", + "pov_cowgirl_alt_low_squat_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", [])), "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") _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") @@ -6977,9 +6984,12 @@ def smoke_krea2_tuning_report_policy() -> None: 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("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() _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( summary.get("variants_without_accepted_evidence") == [ "pov_ballsucking_low_head", @@ -6993,6 +7003,7 @@ def smoke_krea2_tuning_report_policy() -> None: "pov_missionary_open_leg_penetration", "pov_missionary_folded_high_leg_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')}", ) @@ -7011,6 +7022,7 @@ def smoke_krea2_tuning_report_policy() -> None: "pov_missionary_open_leg_penetration", "pov_missionary_folded_high_leg_penetration", "pov_cowgirl_frontal_straddle_penetration", + "pov_cowgirl_alt_low_squat_penetration", ], "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 []), "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: atlas_root = Path(tmpdir) 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_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_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("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")