Fix exact Krea2 POV oral routing

This commit is contained in:
2026-06-30 20:35:00 +02:00
parent 5f4dd7d77f
commit 3832044256
8 changed files with 182 additions and 12 deletions
+24
View File
@@ -27,6 +27,9 @@ except ImportError: # Allows local smoke tests with `python -c`.
from krea_detail import limit_detail_for_density
SITTING_ORAL_VARIANT = "pov_blowjob_sitting_upright_oral"
def _clean(value: Any) -> str:
text = "" if value is None else str(value)
text = text.replace("\n", " ")
@@ -35,6 +38,20 @@ def _clean(value: Any) -> str:
return text
def _list_values(value: Any) -> list[str]:
if isinstance(value, list):
return [str(item) for item in value if str(item).strip()]
if isinstance(value, str) and value.strip():
return [part.strip().strip("[]'\" ") for part in value.split(",") if part.strip().strip("[]'\" ")]
return []
def _has_krea2_variant(axis_values: Any, key: str) -> bool:
if not isinstance(axis_values, dict):
return False
return key in _list_values(axis_values.get("krea2_variant_keys"))
def pov_ejaculation_target(context: str) -> str:
if any(
token in context
@@ -384,6 +401,13 @@ def pov_hardcore_pose_sentence(
if is_oral_text(context, action_lower) and not has_penetrative_context:
woman_gives, man_gives = oral_direction()
if _has_krea2_variant(axis_values, SITTING_ORAL_VARIANT):
return oral_sentence(
"POV upright sitting oral position: the viewer reclines with open thighs forming the lower V-frame and his lower abdomen anchoring the near edge; "
"the woman sits low between his open thighs with hips between his knees, torso upright behind the action, shoulders square to the camera, and face lowered close to the exact center contact point; "
"the vertical shaft rises from the exact lower center between the viewer thighs, her open mouth covers the tip at the centerline, lips wrapped around the glans, and mouth-to-shaft contact is the nearest facial detail; "
"both hands stay low at the base directly below her mouth, fingers wrapped around the shaft, while her eyes, face, shoulders, torso, hands, shaft, and the viewer thigh frame remain readable in one first-person seated frame"
)
if "sixty-nine" in position_context:
return oral_sentence(
"POV sixty-nine oral position: the woman lies head-to-hips over the viewer, her pelvis close to his face and her head lowered toward his hips; "