Reduce split-view cues in POV prompts
This commit is contained in:
+61
-2
@@ -675,10 +675,10 @@ def _pov_camera_phrase(pov_labels: list[str], softcore: bool = False) -> str:
|
||||
return ""
|
||||
if softcore:
|
||||
return (
|
||||
"Camera is the male participant's first-person creator view, with him implied by perspective or foreground cues"
|
||||
"Camera is the male participant's first-person creator view in one continuous frame, with him implied by perspective or foreground cues"
|
||||
)
|
||||
return (
|
||||
"Camera is the male participant's first-person view; only his foreground hands or body cues appear"
|
||||
"Camera is the male participant's first-person view in one continuous frame; only his foreground hands or body cues appear"
|
||||
)
|
||||
|
||||
|
||||
@@ -908,6 +908,57 @@ def _is_foreplay_text(*parts: Any) -> bool:
|
||||
)
|
||||
|
||||
|
||||
def _is_close_foreplay_text(*parts: Any) -> bool:
|
||||
text = " ".join(_clean(part).lower() for part in parts if _clean(part))
|
||||
if not text or not _is_foreplay_text(text):
|
||||
return False
|
||||
return any(
|
||||
term in text
|
||||
for term in (
|
||||
"stand close",
|
||||
"stand face-to-face",
|
||||
"press their bodies",
|
||||
"bodies pressed close",
|
||||
"hips pressed close",
|
||||
"mouth-to-mouth",
|
||||
"deep kissing",
|
||||
"heated kiss",
|
||||
"hands pull clothing",
|
||||
"pull clothing aside",
|
||||
"clothing being removed",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
def _sanitize_foreplay_detail(detail: str, role_graph: str = "", composition: str = "") -> str:
|
||||
detail = _clean(detail)
|
||||
if not detail:
|
||||
return ""
|
||||
if not _is_close_foreplay_text(role_graph, detail, composition):
|
||||
return detail
|
||||
detail = re.sub(
|
||||
r"\b(?:raised edge|edge-supported|edge-of-bed|bed-edge)\s+undressing position\s+(?:featuring|while|with)\s+",
|
||||
"",
|
||||
detail,
|
||||
flags=re.IGNORECASE,
|
||||
)
|
||||
detail = re.sub(
|
||||
r"\b(?:standing kissing|wall-pressed kissing|mirror undressing)\s+position\s+(?:featuring|while|with)\s+",
|
||||
"",
|
||||
detail,
|
||||
flags=re.IGNORECASE,
|
||||
)
|
||||
detail = re.sub(
|
||||
r"\b(?:raised edge|edge-supported|edge-of-bed|bed-edge)\s+undressing position\b",
|
||||
"close standing undressing",
|
||||
detail,
|
||||
flags=re.IGNORECASE,
|
||||
)
|
||||
detail = re.sub(r"\braised-edge open-thigh position\b", "close-body first-person position", detail, flags=re.IGNORECASE)
|
||||
detail = re.sub(r"\s*,\s*", ", ", detail).strip(" ,;")
|
||||
return _clean(detail)
|
||||
|
||||
|
||||
def _is_vaginal_penetration_text(*parts: Any) -> bool:
|
||||
text = " ".join(_clean(part).lower() for part in parts if _clean(part))
|
||||
if not text or _is_outercourse_text(text) or _is_oral_text(text) or _is_foreplay_text(text):
|
||||
@@ -1695,6 +1746,8 @@ def _join_detail_clauses(clauses: list[str]) -> str:
|
||||
|
||||
def _action_position_phrase(action: str) -> str:
|
||||
action = _clean(action).lower()
|
||||
if _is_close_foreplay_text(action):
|
||||
return "single-frame close-body first-person position"
|
||||
if "pov reverse cowgirl" in action:
|
||||
return "reverse-cowgirl first-person position"
|
||||
if "pov cowgirl" in action:
|
||||
@@ -2013,6 +2066,10 @@ def _hardcore_action_sentence(
|
||||
if is_climax:
|
||||
anchor = ""
|
||||
detail = _dedupe_climax_detail(detail, role_graph, detail_density)
|
||||
elif _is_foreplay_text(role_graph, hard_item, composition, _axis_values_text(axis_values)):
|
||||
anchor = ""
|
||||
detail = _sanitize_foreplay_detail(detail, role_graph, composition)
|
||||
detail = _limit_detail_for_density(detail, detail_density, False)
|
||||
elif is_outercourse:
|
||||
anchor = ""
|
||||
detail = _dedupe_outercourse_detail(detail, role_graph, hard_item, axis_values)
|
||||
@@ -2097,6 +2154,8 @@ def _composition_phrase(
|
||||
token in composition_lower
|
||||
for token in ("close-up", "close crop", "tight", "direct-flash", "subscriber-view", "post-ejaculation", "aftermath")
|
||||
)
|
||||
if _is_close_foreplay_text(action_lower) and close_or_aftermath:
|
||||
return f"{prefix} {composition}, in one continuous first-person close-body frame"
|
||||
if position and close_or_aftermath:
|
||||
if detail_density == "compact":
|
||||
return f"{prefix} {composition}, with the {position} still readable"
|
||||
|
||||
Reference in New Issue
Block a user