Fix exact Krea2 POV oral routing
This commit is contained in:
@@ -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; "
|
||||
|
||||
Reference in New Issue
Block a user