Preserve semen wording in Krea2 climax prompts

This commit is contained in:
2026-06-29 09:55:59 +02:00
parent 49d130467b
commit 364c42103b
4 changed files with 32 additions and 2 deletions
+23
View File
@@ -123,6 +123,29 @@ Avoid generic fallback wording:
Use generic wording only when no source outfit exists.
## Climax / Ejaculation Wording
Krea2 needs the visible fluid action stated directly in climax routes. Keep
`semen` in the action sentence when the generator intends an ejaculation or
post-ejaculation image.
Works better:
- `the man ejaculates semen across her body`
- `visible semen lands across her body`
- `ejaculates semen across her lower back, ass, and thighs`
Avoid relying only on softer aftermath wording:
- `visible ejaculation`
- `visible orgasm aftermath`
- `cum on hands and body`
Seed `42052` exposed this as a structural formatter issue: the route selected a
standing/kneeling climax pose, but the Krea prompt dropped `semen` and kept only
generic aftermath language. The generator now preserves direct `ejaculates
semen` wording for this path before the prompt reaches Krea2.
## POV Outercourse
### Boobjob / Titjob
+1 -1
View File
@@ -53,7 +53,7 @@ def build_climax_role_graph(
if "kneeling with mouth open" in context:
return f"{woman} kneels in front of {man} at hip height while {man} ejaculates semen onto her face, lips, and chest."
if "kneeling in front of a standing partner" in context:
return f"{woman} kneels in front of {man} at hip height while {man} stands over her for visible ejaculation."
return f"{woman} kneels in front of {man} at hip height while {man} stands over her and ejaculates semen across her body."
if "standing with cum on the body" in context:
return f"{woman} stands braced in front of {man} while he stays close at hip level and ejaculates semen across her body."
if "squatting on top of a partner" in context:
+1 -1
View File
@@ -96,7 +96,7 @@ def climax_role_graph(role_graph: str, hard_item: str, axis_values: Any = None)
if "kneeling with mouth open" in text:
return "the woman kneels in front of the man at hip height as he ejaculates semen onto her face, lips, and chest"
if "kneeling in front of a standing partner" in text:
return "the woman kneels in front of the man at hip height while he stands over her for visible ejaculation"
return "the woman kneels in front of the man at hip height while he stands over her and ejaculates semen across her body"
if "standing with cum on the body" in text:
return "the woman stands braced in front of the man while he stands close at hip level and ejaculates semen across her body"
if "squatting on top of a partner" in text:
+7
View File
@@ -7082,6 +7082,8 @@ def smoke_krea2_eval_log_policy() -> None:
def smoke_krea2_prompt_guide_policy() -> None:
guide = (ROOT / "docs" / "krea2-prompt-guide.md").read_text(encoding="utf-8")
_expect("## Climax / Ejaculation Wording" in guide, "Krea2 prompt guide lost climax wording section")
_expect("ejaculates semen" in guide, "Krea2 prompt guide lost explicit semen wording rule")
_expect("## Stronger-Control / Low-Priority Cases" in guide, "Krea2 prompt guide lost stronger-control section")
_expect("pov_sixty_nine_close_reversed_oral" in guide, "Krea2 prompt guide lost sixty-nine unstable route")
_expect("hardest" in guide and "low-priority" in guide, "Krea2 prompt guide lost hardest low-priority wording")
@@ -9132,6 +9134,11 @@ def smoke_prompt_route_simulation_policy() -> None:
pair_seed_checks["pair_seed.pose_reroll"].get("changed") is True,
"Pair pose reroll should prove soft pose or hard action can reroll while cast/scene axes stay locked",
)
climax_regression = prompt_route_simulation.run_simulation(seed=42052, include_prompts=False)
_expect(
climax_regression.get("summary", {}).get("issues") == 0,
f"Prompt route simulation climax regression reported issues: {climax_regression.get('issues')}",
)
sweep = prompt_route_simulation.run_simulation_sweep(seed=3901, count=3, seed_step=101, include_prompts=False)
sweep_summary = sweep.get("summary") or {}
sweep_quality = sweep.get("quality") or {}