Improve POV outercourse positioning

This commit is contained in:
2026-06-25 16:17:19 +02:00
parent 186f225778
commit cd076b3c02
3 changed files with 84 additions and 32 deletions
+41 -14
View File
@@ -336,6 +336,7 @@ HARDCORE_POSITION_KEY_CHOICES = [
"boobjob",
"testicle_sucking",
"penis_licking",
"handjob",
"footjob",
"open_thighs",
"front_back",
@@ -379,6 +380,7 @@ HARDCORE_POSITION_KEY_MATCHES = {
"boobjob": ("boobjob", "titjob", "breast-sex", "breast sex"),
"testicle_sucking": ("testicle", "balls-licking", "balls licking", "balls and mouth"),
"penis_licking": ("penis-licking", "penis licking", "tongue along", "tongue licking"),
"handjob": ("handjob", "hand job", "stroking the penis", "hand stroking", "manual stimulation"),
"footjob": ("footjob", "soles", "toes curled", "feet stroking"),
"open_thighs": ("thighs open", "legs spread", "open thighs", "legs open", "reclining with thighs open"),
"front_back": ("front-and-back", "front and back", "one behind and one in front", "between two partners"),
@@ -1023,6 +1025,8 @@ def _outercourse_acts_for_position(values: list[Any], position: str) -> list[Any
return filtered(lambda text: any(term in text for term in ("testicle", "balls")))
if "penis-licking" in position_text or "penis licking" in position_text:
return filtered(lambda text: "licking" in text or "tongue" in text)
if "handjob" in position_text or "hand job" in position_text:
return filtered(lambda text: any(term in text for term in ("handjob", "hand job", "hand wrapped", "two-handed")))
if "footjob" in position_text:
return filtered(lambda text: any(term in text for term in ("footjob", "feet", "soles", "toes")))
return values
@@ -1070,6 +1074,15 @@ def _outercourse_axis_values_for_position(values: list[Any], position: str, axis
"body_contact": ("hips", "body angled", "lower body"),
}
return filtered(by_axis.get(axis_name, ("tongue", "glans", "shaft")))
if "handjob" in position_text or "hand job" in position_text:
by_axis = {
"contact_detail": ("hand", "fingers", "palm", "shaft", "glans"),
"hand_detail": ("hand", "hands", "shaft", "penis"),
"texture_detail": ("fingers", "pressure", "skin", "shaft"),
"visibility": ("hand", "penis", "shaft", "glans"),
"body_contact": ("hips", "knees", "body angle"),
}
return filtered(by_axis.get(axis_name, ("hand", "penis", "shaft")))
if "footjob" in position_text:
by_axis = {
"contact_detail": ("soles", "toes", "shaft"),
@@ -5100,38 +5113,48 @@ 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 between the POV viewer's thighs with her breasts squeezed around the POV viewer's penis, "
"hands pressing both breasts together around the shaft while the glans stays near her mouth."
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."
)
return (
f"{man} sits with legs apart while {woman} kneels between his thighs, squeezing her breasts "
f"around {man}'s penis with both hands while the glans stays near her mouth."
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."
)
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 between the POV viewer's thighs with her mouth at the POV viewer's balls, "
"lips and tongue making visible contact while the POV viewer's penis remains above her face."
f"{woman} kneels very low between the POV viewer's thighs, face below the shaft at testicle height, "
"mouth and tongue on the POV viewer's balls while his penis points upward above her forehead."
)
return (
f"{man} sits with legs apart while {woman} kneels low between his thighs, sucking and licking his balls "
f"with {man}'s penis visible above her face."
f"{man} sits with legs apart while {woman} kneels very low between his thighs, face below the shaft at testicle height, "
f"mouth and tongue on his balls while {man}'s penis points upward above her forehead."
)
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 at the POV viewer's hips with her tongue along the POV viewer's penis, "
"face close to the shaft and glans while her hands steady the base."
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 shaft to glans while one hand steadies the base."
)
return (
f"{woman} kneels at {man}'s hips with her tongue along {man}'s penis, face close to the shaft and glans "
"while her hands steady the base."
f"{woman} kneels close at {man}'s pelvis, face just above his hips, "
f"tongue running along the underside of {man}'s penis from shaft to glans while one hand steadies the base."
)
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 shaft, "
"one hand wrapped around the POV viewer's penis and the other hand steadying the base as she strokes toward the glans."
)
return (
f"{woman} kneels close at {man}'s pelvis with her face behind the shaft, "
f"one hand wrapped around {man}'s penis and the other hand steadying the base 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 while the POV viewer reclines, wrapping both soles around the POV viewer's penis "
"and stroking the shaft with her feet from a clear first-person view."
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 shaft."
)
return (
f"{man} reclines with hips forward while {woman} faces him and wraps both soles around {man}'s penis, "
@@ -6622,6 +6645,10 @@ MAN_LOWER_ACCESS_TERMS = (
"titjob",
"breast sex",
"footjob",
"handjob",
"hand job",
"hand wrapped",
"hand stroking",
"blowjob",
"fellatio",
"penis sucking",