Improve POV outercourse body cues

This commit is contained in:
2026-06-25 17:05:13 +02:00
parent 5cf1b43a3e
commit e45bd67c5b
3 changed files with 49 additions and 34 deletions
+8 -2
View File
@@ -434,6 +434,11 @@
"hips held steady at contact height",
"knees braced close to the body",
"torso leaning forward into the contact",
"torso folded forward over the pelvis",
"shoulders positioned between the open thighs",
"head tucked low near the base of the penis",
"head low under the penis",
"face directly under the penis",
"legs spread enough to keep the contact point visible",
"body angle keeps the penis and face readable",
"shoulders relaxed while the contact stays centered",
@@ -467,6 +472,7 @@
"fingers digging into soft breast flesh",
"one hand guiding the penis",
"both hands bracing the thighs",
"hands braced on the inner thighs",
"hands holding the ankles in place",
"one hand holding the base of the penis",
"hands cupping balls close to the mouth",
@@ -492,8 +498,8 @@
"kneeling boobjob position",
"seated titjob position",
"tight close-up breast-sex position",
"kneeling testicle-sucking position",
"low-angle balls-licking position",
"bent-over testicle-sucking position",
"bent-over balls-licking position",
"kneeling penis-licking position",
"side-profile penis-licking position",
"kneeling handjob position",
+19 -10
View File
@@ -474,28 +474,28 @@ def _pov_hardcore_pose_sentence(
if _is_outercourse_text(context, action_lower):
if any(term in context for term in ("boobjob", "titjob", "breast sex", "breast-sex")):
return outercourse_sentence(
"The woman kneels low between the viewer's thighs, chest directly over his pelvis; "
"both hands press her breasts tightly around the viewer's penis, with the penis shaft vertical in the lower foreground and the glans just below her lips"
"The woman kneels between the viewer's open thighs with her torso bent forward over his pelvis and shoulders low; "
"both hands lift and press her breasts tightly around the viewer's penis shaft in the lower foreground, with the glans just below her lips"
)
if any(term in context for term in ("testicle", "balls licking", "balls-licking", "balls and mouth")):
return outercourse_sentence(
"The woman kneels very low between the viewer's thighs, face below the penis shaft at testicle height; "
"her mouth and tongue contact the viewer's balls while his penis points upward above her forehead in the lower foreground"
"The woman kneels very low between the viewer's open thighs with her torso bent forward and shoulders between his knees; "
"her head is tucked under the penis shaft at the base of the penis, mouth and tongue licking the viewer's balls while his penis points upward above her face in the lower foreground"
)
if any(term in context for term in ("penis licking", "penis-licking", "tongue along", "tongue licking")):
return outercourse_sentence(
"The woman kneels close at the viewer's pelvis, face just above his hips; "
"her tongue runs along the underside of the penis from the penis shaft to the glans while one hand steadies the base of the penis in the lower foreground"
"The woman bends forward between the viewer's open thighs, head low under the viewer's penis with her face directly under the penis; "
"her tongue runs along the underside from the penis shaft to the glans while one hand steadies the base of the penis in the lower foreground"
)
if any(term in context for term in ("handjob", "hand job", "hand wrapped", "hand stroking", "manual stimulation")):
return outercourse_sentence(
"The woman kneels close at the viewer's pelvis with her face behind the penis shaft; "
"one hand wraps around the penis shaft and the other steadies the base of the penis as she strokes toward the glans in the lower foreground"
"The woman kneels between the viewer's open thighs with her torso leaning forward and face visible behind the penis shaft; "
"one hand wraps around the penis shaft in the lower foreground while the other hand steadies the base of the penis as she strokes toward the glans"
)
if any(term in context for term in ("footjob", "soles", "toes curled", "feet stroking")):
return outercourse_sentence(
"The woman faces the viewer with both legs raised toward the camera; "
"her soles wrap around the penis in the lower foreground, toes curled around the penis shaft with her face visible beyond the contact"
"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"
)
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"
@@ -794,17 +794,24 @@ def _is_outercourse_text(*parts: Any) -> bool:
"breast sex",
"breast-sex",
"testicle",
"balls",
"balls licking",
"balls-licking",
"breasts tightly around",
"breasts around",
"penis licking",
"penis-licking",
"tongue along",
"tongue runs along",
"tongue running along",
"handjob",
"hand job",
"hand wrapped",
"hand stroking",
"hand wraps around",
"manual stimulation",
"footjob",
"soles wrap around",
"soles",
"toes curled",
"feet stroking",
@@ -1773,6 +1780,8 @@ def _composition_phrase(
if composition_oral_tokens and not any(token in action_lower for token in composition_oral_tokens):
match = re.search(r"\bwith\s+(.+)$", composition, flags=re.IGNORECASE)
return f"framed with {match.group(1)}" if match else ""
if _is_outercourse_text(action_lower):
return f"{prefix} {composition}"
position = _action_position_phrase(action)
close_or_aftermath = any(
token in composition_lower
+22 -22
View File
@@ -1062,7 +1062,7 @@ def _outercourse_axis_values_for_position(values: list[Any], position: str, axis
"hand_detail": ("balls", "base", "thigh"),
"texture_detail": ("wet", "saliva", "skin"),
"visibility": ("balls", "mouth"),
"body_contact": ("hips", "knees", "thigh", "lower body"),
"body_contact": ("torso", "shoulders", "head tucked", "base of the penis", "knees", "thigh"),
}
return filtered(by_axis.get(axis_name, ("balls", "mouth", "tongue")))
if "penis-licking" in position_text or "penis licking" in position_text:
@@ -1071,7 +1071,7 @@ def _outercourse_axis_values_for_position(values: list[Any], position: str, axis
"hand_detail": ("base", "penis", "thigh"),
"texture_detail": ("wet", "saliva", "skin"),
"visibility": ("tongue", "penis"),
"body_contact": ("hips", "body angled", "lower body"),
"body_contact": ("head low", "face directly", "torso", "pelvis", "base of the penis", "hips", "body angled"),
}
return filtered(by_axis.get(axis_name, ("tongue", "glans", "shaft")))
if "handjob" in position_text or "hand job" in position_text:
@@ -5113,52 +5113,52 @@ def _role_graph(
if any(term in text for term in ("boobjob", "titjob", "breast-sex", "breast sex")):
if man_is_pov:
return (
f"{woman} kneels low between the POV viewer's thighs, chest directly over his pelvis, "
"both hands pressing her breasts tightly around the POV viewer's penis while the glans sits just below her lips."
f"{woman} kneels between the POV viewer's open thighs with her torso bent forward over his pelvis and shoulders low, "
"both hands lifting and pressing her breasts tightly around the POV viewer's penis shaft while the glans sits just below her lips."
)
return (
f"{man} sits with legs apart while {woman} kneels low between his thighs, chest over his pelvis, "
f"both hands pressing her breasts tightly around {man}'s penis while the glans sits just below her lips."
f"{man} sits with legs apart while {woman} kneels between his open thighs with her torso bent forward over his pelvis and shoulders low, "
f"both hands lifting and pressing her breasts tightly around {man}'s penis shaft while the glans sits just below her lips."
)
if any(term in text for term in ("testicle", "balls-licking", "balls licking", "balls and mouth", "balls held")):
if man_is_pov:
return (
f"{woman} kneels very low between the POV viewer's thighs, face below the penis shaft at testicle height, "
"mouth and tongue on the POV viewer's balls while his penis points upward above her forehead."
f"{woman} kneels very low between the POV viewer's open thighs with her torso bent forward and shoulders between his knees, "
"head tucked under the penis shaft at the base of the penis, mouth and tongue on the POV viewer's balls while his penis points upward above her face."
)
return (
f"{man} sits with legs apart while {woman} kneels very low between his thighs, face below the penis shaft at testicle height, "
f"mouth and tongue on his balls while {man}'s penis points upward above her forehead."
f"{man} sits with legs apart while {woman} kneels very low between his open thighs with her torso bent forward and shoulders between his knees, "
f"head tucked under the penis shaft at the base of his penis, mouth and tongue on his balls while {man}'s penis points upward above her face."
)
if "penis-licking" in position_text or "penis licking" in text or "tongue along" in text or "tongue licking" in text:
if man_is_pov:
return (
f"{woman} kneels close at the POV viewer's pelvis, face just above his hips, "
"tongue running along the underside of the POV viewer's penis from the penis shaft to the glans while one hand steadies the base of the penis."
f"{woman} bends forward between the POV viewer's open thighs, head low under the POV viewer's penis with her face directly under the penis, "
"tongue running along the underside from the penis shaft to the glans while one hand steadies the base of the penis."
)
return (
f"{woman} kneels close at {man}'s pelvis, face just above his hips, "
f"tongue running along the underside of {man}'s penis from the penis shaft to the glans while one hand steadies the base of the penis."
f"{woman} bends forward between {man}'s open thighs, head low under {man}'s penis with her face directly under the penis, "
f"tongue running along the underside from the penis shaft to the glans while one hand steadies the base of the penis."
)
if "handjob" in position_text or "handjob" in text or "hand job" in text or "hand wrapped" in text:
if man_is_pov:
return (
f"{woman} kneels close at the POV viewer's pelvis with her face behind the penis shaft, "
"one hand wrapped around the POV viewer's penis shaft and the other hand steadying the base of the penis as she strokes toward the glans."
f"{woman} kneels between the POV viewer's open thighs with her torso leaning forward and face visible behind the penis shaft, "
"one hand wrapped around the POV viewer's penis shaft while the other hand steadies the base of the penis as she strokes toward the glans."
)
return (
f"{woman} kneels close at {man}'s pelvis with her face behind the penis shaft, "
f"one hand wrapped around {man}'s penis shaft and the other hand steadying the base of the penis as she strokes toward the glans."
f"{woman} kneels between {man}'s open thighs with her torso leaning forward and face visible behind the penis shaft, "
f"one hand wrapped around {man}'s penis shaft while the other hand steadies the base of the penis as she strokes toward the glans."
)
if "footjob" in text or "soles" in text or "toes curled" in text or "feet stroking" in text:
if man_is_pov:
return (
f"{woman} faces the POV viewer with legs raised toward the camera, both soles wrapped around the POV viewer's penis "
"in the lower foreground and toes curled around the penis shaft."
f"{woman} faces the POV viewer with her hips back, torso visible behind her raised legs, and both knees bent open toward the camera, "
"both soles wrapped around the POV viewer's penis shaft in the lower foreground."
)
return (
f"{man} reclines with hips forward while {woman} faces him and wraps both soles around {man}'s penis, "
"stroking the penis shaft with her feet while the contact stays centered."
f"{man} reclines with hips forward while {woman} faces him with her hips back and both knees bent open, "
f"wrapping both soles around {man}'s penis shaft while the contact stays centered."
)
if man_is_pov:
return (