Add Krea2 POV routing and eval tooling
This commit is contained in:
+140
-14
@@ -89,6 +89,48 @@ def pov_contact_clause(
|
||||
return contact
|
||||
|
||||
|
||||
def _is_open_thigh_aftermath_context(context: str, action_lower: str, position_context: str) -> bool:
|
||||
combined = f"{context} {action_lower} {position_context}"
|
||||
has_open_thighs = any(
|
||||
token in combined
|
||||
for token in (
|
||||
"open thighs",
|
||||
"thighs open",
|
||||
"legs open",
|
||||
"legs spread",
|
||||
"reclining with thighs open",
|
||||
)
|
||||
)
|
||||
has_aftermath = any(
|
||||
token in combined
|
||||
for token in (
|
||||
"post-ejaculation",
|
||||
"after ejaculation",
|
||||
"aftermath",
|
||||
"semen",
|
||||
"visible fluid",
|
||||
"thick fluid",
|
||||
"clear fluid",
|
||||
)
|
||||
)
|
||||
has_rear_entry = any(
|
||||
token in combined
|
||||
for token in (
|
||||
"rear-entry",
|
||||
"rear entry",
|
||||
"doggy",
|
||||
"on all fours",
|
||||
"face-down",
|
||||
"face down",
|
||||
"bent-over",
|
||||
"bent over",
|
||||
"behind her",
|
||||
"lower back",
|
||||
)
|
||||
)
|
||||
return has_open_thighs and has_aftermath and not has_rear_entry
|
||||
|
||||
|
||||
def pov_clean_detail(detail: Any, context: str, detail_density: str) -> str:
|
||||
detail = _clean(detail).strip(" .;")
|
||||
if not detail:
|
||||
@@ -100,7 +142,7 @@ def pov_clean_detail(detail: Any, context: str, detail_density: str) -> str:
|
||||
detail = re.sub(r"\bhis\b", "the viewer's", detail, flags=re.IGNORECASE)
|
||||
detail = re.sub(r"\bhim\b", "the viewer", detail, flags=re.IGNORECASE)
|
||||
detail = re.sub(
|
||||
r"^(?:missionary|cowgirl|reverse cowgirl|doggy style|standing sex|spooning sex|edge-supported|edge-of-bed|raised edge|kneeling straddle|lotus sex|bent-over|face-down ass-up|side-lying|kneeling rear-entry)\s+(?:position|pose)\s+(?:featuring|with|while|,)?\s*",
|
||||
r"^(?:folded missionary|missionary|low cowgirl seated-squat|low cowgirl|cowgirl-alt|cowgirl|reverse cowgirl|doggy style|standing sex|spooning sex|edge-supported|edge-of-bed|raised edge|kneeling straddle|lotus sex|bent-over|face-down ass-up|side-lying|kneeling rear-entry)\s+(?:position|pose)\s+(?:featuring|with|while|,)?\s*",
|
||||
"",
|
||||
detail,
|
||||
flags=re.IGNORECASE,
|
||||
@@ -251,6 +293,8 @@ def pov_hardcore_pose_sentence(
|
||||
"anal",
|
||||
"cowgirl",
|
||||
"missionary",
|
||||
"knees-to-chest",
|
||||
"knees to chest",
|
||||
"doggy",
|
||||
"rear-entry",
|
||||
"spooning",
|
||||
@@ -262,6 +306,19 @@ def pov_hardcore_pose_sentence(
|
||||
"climax",
|
||||
)
|
||||
has_penetrative_context = any(token in context or token in action_lower for token in penetrative_tokens)
|
||||
toy_contact_context = f"{context} {action_lower}"
|
||||
if (
|
||||
any(token in toy_contact_context for token in ("wand-style", "wand toy", "wand-toy", "vibrator", "massager"))
|
||||
and any(token in toy_contact_context for token in ("clit", "vulva", "toy-contact", "toy contact"))
|
||||
and not has_penetrative_context
|
||||
):
|
||||
return outercourse_sentence(
|
||||
"Close first-person POV wand-toy contact: the woman reclines with thighs spread wide toward the camera; "
|
||||
"a single continuous teal wand-style massager is the largest lower-frame object, "
|
||||
"the rounded bulb head presses flat to her vulva and clit as the central contact point, "
|
||||
"and the smooth handle angles in from the bottom right inside the viewer's visible hand; "
|
||||
"her open thighs and knees form a V around the foreground wand while her face and torso remain visible behind the leg frame"
|
||||
)
|
||||
|
||||
if (
|
||||
"face-sitting" in context
|
||||
@@ -286,10 +343,22 @@ def pov_hardcore_pose_sentence(
|
||||
)
|
||||
if action_kind == outercourse_policy.OUTERCOURSE_TESTICLE:
|
||||
return outercourse_sentence(
|
||||
"The woman bends forward and kneels very low between the viewer's open thighs with her chest low over the viewer's pelvis and shoulders between his knees; "
|
||||
"her face is below the viewer's penis at testicle height, mouth and tongue licking the viewer's balls while his penis points upward in the lower foreground above her forehead"
|
||||
"Low side-pelvis POV: the woman lies low beside the viewer's open thighs with her cheek against the viewer's inner thigh; "
|
||||
"her face is the closest visible partner part and her head stays low under the viewer's pelvis, with the viewer's scrotum at her mouth; scrotum is the mouth surface, "
|
||||
"testicles resting across her open lips while her tongue cups them from below, scrotal skin is the nearest mouth surface and both testicles rest against her tongue from below, "
|
||||
"and the viewer's abdomen and inner thighs framing the close foreground"
|
||||
)
|
||||
if action_kind == outercourse_policy.OUTERCOURSE_PENIS_LICKING:
|
||||
prone_laying = any(
|
||||
term in position_context
|
||||
for term in ("reclining", "prone", "belly-down", "belly down", "lying")
|
||||
)
|
||||
if prone_laying:
|
||||
return outercourse_sentence(
|
||||
"POV prone frontal oral position: the viewer reclines with open thighs forming a wide symmetrical V-frame from the lower corners toward the center; "
|
||||
"the woman lies belly-down between his thighs with her torso stretched low and horizontal, hips and legs trailing away behind her along the center line; "
|
||||
"her front-facing mouth and tongue align to the shaft rising from the exact lower center, hands wrap the base, and the centered mouth-to-shaft contact stays framed by his thighs"
|
||||
)
|
||||
return outercourse_sentence(
|
||||
"The woman bends forward between the viewer's open thighs with her head low under the viewer's penis; "
|
||||
"her face is just under the penis while her tongue touches the underside from the base toward the glans at the tip, "
|
||||
@@ -305,8 +374,9 @@ def pov_hardcore_pose_sentence(
|
||||
)
|
||||
if action_kind == outercourse_policy.OUTERCOURSE_FOOTJOB:
|
||||
return outercourse_sentence(
|
||||
"The woman faces the viewer with her hips back, torso visible behind her raised legs, and both knees bent open toward the camera; "
|
||||
"her soles wrap around the penis shaft in the lower foreground, toes curled around the penis shaft with her face visible beyond her feet"
|
||||
"Frontal POV footjob close-up: the woman faces the viewer with hips back, torso behind raised legs, and knees bent open toward the camera; "
|
||||
"two large overlapping soles dominate the lower center foreground and clamp the upright shaft between them, inner arches press inward from both sides, "
|
||||
"toes curl around both edges, a narrow visible strip of shaft and glans rises between the compressed feet, and her face and torso stay visible behind the large foreground feet"
|
||||
)
|
||||
return outercourse_sentence(
|
||||
"The woman stays close to the viewer's pelvis, keeping the non-penetrative contact centered in the lower foreground with her face visible behind the contact"
|
||||
@@ -319,11 +389,29 @@ def pov_hardcore_pose_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; "
|
||||
"her mouth on the viewer's penis and the viewer's mouth on the woman's pussy, with her torso, hips, mouth, and the viewer's lower-foreground body cues aligned in one first-person frame"
|
||||
)
|
||||
if woman_gives and not man_gives and any(
|
||||
term in position_context
|
||||
for term in (
|
||||
"upright sitting oral",
|
||||
"sitting oral",
|
||||
"seated oral",
|
||||
"blowjob_sitting",
|
||||
)
|
||||
):
|
||||
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 "side-lying oral" in position_context or "side lying oral" in position_context:
|
||||
if woman_gives and not man_gives:
|
||||
return oral_sentence(
|
||||
"POV side-lying oral position: the viewer lies on his side with hips angled toward the woman while she lies beside his thighs; "
|
||||
"her head stays at penis height with her mouth on the viewer's penis, shoulders and hands close to his pelvis in the lower foreground"
|
||||
"POV side-profile oral body-line position: the male viewer's abdomen, navel, pelvis, and near thigh create a broad horizontal body surface across the lower frame; "
|
||||
"the adult male viewer's own torso starts at the lower edge and runs diagonally into the lower-right foreground, with navel, abdomen hair, pelvis, and near thigh marking the camera owner's body; "
|
||||
"the woman enters laterally from the left edge beside his hip, cheek and jaw in profile, mouth on the shaft at the male abdomen line, "
|
||||
"lips touching the shaft at the male abdomen line, mouth-to-shaft contact is the nearest facial detail, "
|
||||
"hand around the base under her lips, shoulder and torso trailing sideways along the edge"
|
||||
)
|
||||
return oral_sentence(
|
||||
"POV side-lying cunnilingus position: the woman lies on her side with her top thigh lifted while the viewer lies beside her hips; "
|
||||
@@ -396,8 +484,10 @@ def pov_hardcore_pose_sentence(
|
||||
"his face is at pussy height, with her knees, hips, and torso readable from the first-person angle"
|
||||
)
|
||||
return oral_sentence(
|
||||
"POV kneeling oral position: the viewer stands over her with hips forward while the woman kneels directly in front of him; "
|
||||
"her head is at penis height, mouth on the viewer's penis, shoulders below his hips and his thighs framing the lower foreground"
|
||||
"Nadir-angle standing male POV top-view oral position: the viewer looks almost straight down from his torso toward the floor, with nearby carpet/floor plane dominating the image; "
|
||||
"the viewer's abdomen, shorts, thighs, and feet frame the lower foreground, and the viewer's penis shaft appears as a short centered vertical column from the foreground; "
|
||||
"one kneeling woman is directly below the viewer between his feet, her face tilts upward beneath the shaft, her mouth seals around it, and one hand wraps the base; "
|
||||
"her hair crown, forehead, shoulders, hands, knees, and compact foreshortened torso are visible from above, with desk legs, chair wheels, carpet texture, and floor seams as top-down office anchors around her"
|
||||
)
|
||||
if man_gives and not woman_gives:
|
||||
return oral_sentence(
|
||||
@@ -416,16 +506,46 @@ def pov_hardcore_pose_sentence(
|
||||
return ""
|
||||
|
||||
contact = pov_contact_clause(action, role_graph, hard_item, axis_values, context)
|
||||
if is_climax_text(action, role_graph, hard_item, axis_values_text(axis_values)) and _is_open_thigh_aftermath_context(
|
||||
context,
|
||||
action_lower,
|
||||
position_context,
|
||||
):
|
||||
return sentence(
|
||||
"POV post-ejaculation open-thigh display: the woman reclines or sits back facing the viewer with thighs spread open; "
|
||||
"the wet aftermath detail is the exact center, thick semen and clear fluid cover the exposed pussy and inner thighs, "
|
||||
"her body stays still after ejaculation, and her face and torso remain visible behind the open-thigh frame"
|
||||
)
|
||||
|
||||
if "reverse cowgirl alt" in position_context or "upright reverse cowgirl" in position_context or "upright back-facing straddle" in position_context:
|
||||
return sentence(
|
||||
"POV upright reverse cowgirl back-facing penetration position: the viewer lies on his back while the woman sits upright on his pelvis facing away; "
|
||||
"her back stays vertical and readable above her hips, her ass is centered over the viewer's pelvis, "
|
||||
f"viewer hands hold her hips, viewer thighs frame the lower corners, and centered contact remains visible below her ass {contact}"
|
||||
)
|
||||
if "reverse cowgirl" in position_context:
|
||||
return sentence(
|
||||
"POV reverse cowgirl position: the viewer lies on his back while the woman straddles his hips facing away; "
|
||||
f"her back, ass, thighs, and the viewer's foreground legs are visible {contact}"
|
||||
"her back, hips, and ass are the nearest largest shapes to the camera; "
|
||||
f"the viewer thighs frame the lower corners, and the centered contact sits directly between her thighs below her ass {contact}"
|
||||
)
|
||||
if "folded missionary" in position_context or "knees-to-chest" in position_context or "knees to chest" in position_context:
|
||||
return sentence(
|
||||
"POV folded missionary high-leg penetration position: the viewer's lower abdomen anchors the bottom edge with a large centered shaft rising from the lower center; "
|
||||
"the woman lies on her back facing the viewer with both knees folded tightly toward her chest into a compact knee block above the contact; "
|
||||
f"viewer hands hold her calves, her feet and ankles sit close to the camera, and her face and torso remain visible behind the raised knees {contact}"
|
||||
)
|
||||
if "cowgirl-alt" in position_context or "low cowgirl" in position_context or "seated-squat cowgirl" in position_context or "low seated squat" in position_context:
|
||||
return sentence(
|
||||
"POV low cowgirl seated-squat penetration position: the viewer lies flat on his back underneath her, and the lens sits low at the viewer's abdomen looking upward from his pelvis; "
|
||||
"the woman faces the viewer in a low squat mounted over his hips with knees bent wide and close to the camera; "
|
||||
f"the viewer supports the underside of her thighs, her torso stays close above the centered contact, and the high room background behind her upper body reinforces the low supine viewpoint {contact}"
|
||||
)
|
||||
if "cowgirl" in position_context or "straddling a partner" in position_context or "squatting on top" in position_context:
|
||||
return sentence(
|
||||
"POV cowgirl position: the viewer lies on his back while the woman straddles his hips facing him; "
|
||||
f"her torso, hips, and open thighs fill the frame from below {contact}"
|
||||
"POV frontal cowgirl wide-thigh bridge position: the viewer reclines underneath her with lower abdomen and pelvis anchoring the bottom edge; "
|
||||
"the woman straddles his hips facing him, her thighs form a wide horizontal thigh bridge from left edge to right edge, "
|
||||
f"knees planted outside the viewer's hips, torso upright above the centered contact point, viewer hands grip the sides of her thighs, and centered contact remains below her belly {contact}"
|
||||
)
|
||||
if "lotus" in position_context or "seated in a partner's lap" in position_context:
|
||||
return sentence(
|
||||
@@ -449,9 +569,15 @@ def pov_hardcore_pose_sentence(
|
||||
or "bed edge" in position_context
|
||||
or (not position_text and "kneels between her legs" in context)
|
||||
):
|
||||
if "penetrates her ass" in contact:
|
||||
return sentence(
|
||||
"POV raised-edge penetration position: the woman reclines at the raised edge with thighs open toward the viewer; "
|
||||
f"the viewer kneels between her legs with his hands near her hips {contact}"
|
||||
)
|
||||
return sentence(
|
||||
"POV raised-edge penetration position: the woman reclines at the raised edge with thighs open toward the viewer; "
|
||||
f"the viewer kneels between her legs with his hands near her hips {contact}"
|
||||
"POV elevated-edge missionary position: the woman lies flat on her back across a flat elevated support with hair, shoulders, spine, and hips aligned on one horizontal surface; "
|
||||
"her legs open toward the viewer at the foot edge, thighs forming a broad U-frame around the centered contact line; "
|
||||
f"the viewer stands, kneels, or braces at the foot edge with hands holding her calves or outer thighs and feet, shins, or side-dropping legs placed below the support edge {contact}"
|
||||
)
|
||||
if "standing" in position_context:
|
||||
return sentence(
|
||||
|
||||
Reference in New Issue
Block a user