Preserve semen wording in Krea2 climax prompts
This commit is contained in:
@@ -123,6 +123,29 @@ Avoid generic fallback wording:
|
|||||||
|
|
||||||
Use generic wording only when no source outfit exists.
|
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
|
## POV Outercourse
|
||||||
|
|
||||||
### Boobjob / Titjob
|
### Boobjob / Titjob
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ def build_climax_role_graph(
|
|||||||
if "kneeling with mouth open" in context:
|
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."
|
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:
|
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:
|
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."
|
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:
|
if "squatting on top of a partner" in context:
|
||||||
|
|||||||
@@ -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:
|
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"
|
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:
|
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:
|
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"
|
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:
|
if "squatting on top of a partner" in text:
|
||||||
|
|||||||
@@ -7082,6 +7082,8 @@ def smoke_krea2_eval_log_policy() -> None:
|
|||||||
|
|
||||||
def smoke_krea2_prompt_guide_policy() -> None:
|
def smoke_krea2_prompt_guide_policy() -> None:
|
||||||
guide = (ROOT / "docs" / "krea2-prompt-guide.md").read_text(encoding="utf-8")
|
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("## 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("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")
|
_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_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",
|
"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 = 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 {}
|
||||||
sweep_quality = sweep.get("quality") or {}
|
sweep_quality = sweep.get("quality") or {}
|
||||||
|
|||||||
Reference in New Issue
Block a user