Move pair clothing wording policy
This commit is contained in:
+5
-79
@@ -2476,32 +2476,6 @@ def _pov_composition_prompt(composition: Any, pov_labels: list[str]) -> str:
|
||||
return pov_policy.pov_composition_prompt(composition, pov_labels)
|
||||
|
||||
|
||||
def _body_exposure_scene_text(scene: Any) -> str:
|
||||
text = str(scene or "").strip()
|
||||
if not text:
|
||||
return ""
|
||||
replacements = (
|
||||
(r",?\s*\bscattered (?:clothes|clothing)\b", ""),
|
||||
(r",?\s*\bfloor clothes\b", ""),
|
||||
(r"\bclothes scattered\b", "soft floor shadows"),
|
||||
(r",?\s*\bscattered lingerie\b", ""),
|
||||
(r",?\s*\blingerie visible nearby\b", ""),
|
||||
(r"\boutfit racks\b", "mirror shelves"),
|
||||
(r"\bcostume racks\b", "mirror shelves"),
|
||||
(r"\bhanging outfits\b", "hanging fabric"),
|
||||
(r"\bclothing hooks\b", "wall hooks"),
|
||||
(r"\boutfit-check\b", "creator-shot"),
|
||||
(r"\boutfit framing\b", "body framing"),
|
||||
(r"\bfull outfits\b", "full bodies"),
|
||||
(r"\bcoordinated outfits\b", "coordinated posing"),
|
||||
)
|
||||
for pattern, replacement in replacements:
|
||||
text = re.sub(pattern, replacement, text, flags=re.IGNORECASE)
|
||||
text = re.sub(r"\bwith,\s*", "with ", text, flags=re.IGNORECASE)
|
||||
text = re.sub(r",\s*,", ",", text)
|
||||
return _clean_prompt_punctuation(text)
|
||||
|
||||
|
||||
def _slot_softcore_outfit(slot: dict[str, Any] | None, rng: random.Random | None = None) -> str:
|
||||
if not slot:
|
||||
return ""
|
||||
@@ -2524,53 +2498,6 @@ def _slot_hardcore_clothing(slot: dict[str, Any] | None, rng: random.Random | No
|
||||
return _characteristic_choice(_parse_characteristics_config(slot.get("characteristics")), "hardcore_clothing", rng)
|
||||
|
||||
|
||||
def _softcore_outfit_sentence(label: str, outfit: str) -> str:
|
||||
outfit = str(outfit or "").strip()
|
||||
if not outfit:
|
||||
return ""
|
||||
lower = outfit.lower()
|
||||
if lower.startswith(("wears ", "wearing ", "in ")):
|
||||
return f"{label} {outfit}"
|
||||
return f"{label} wears {outfit}"
|
||||
|
||||
|
||||
def _hardcore_clothing_sentence(label: str, clothing: str) -> str:
|
||||
clothing = str(clothing or "").strip().rstrip(".")
|
||||
if not clothing:
|
||||
return ""
|
||||
lower = clothing.lower()
|
||||
if lower.startswith(("fully nude", "nude")):
|
||||
return f"{label}'s body is fully exposed, bare skin unobstructed"
|
||||
if lower.startswith("partly nude"):
|
||||
return f"{label}'s body is partly exposed"
|
||||
if lower.startswith(("is ", "wears ", "wearing ", "keeps ", "has ", "with ")):
|
||||
return f"{label} {clothing}"
|
||||
return f"{label}'s clothing: {clothing}"
|
||||
|
||||
|
||||
def _character_hardcore_clothing_entries(
|
||||
label_map: dict[str, dict[str, Any]],
|
||||
women_count: int,
|
||||
men_count: int,
|
||||
pov_labels: list[str] | None = None,
|
||||
rng: random.Random | None = None,
|
||||
) -> list[str]:
|
||||
pov_set = set(pov_labels or [])
|
||||
labels = [
|
||||
*[f"Woman {chr(ord('A') + index)}" for index in range(max(0, women_count))],
|
||||
*[f"Man {chr(ord('A') + index)}" for index in range(max(0, men_count))],
|
||||
]
|
||||
entries: list[str] = []
|
||||
for label in labels:
|
||||
if label in pov_set:
|
||||
continue
|
||||
clothing = _slot_hardcore_clothing(label_map.get(label), rng)
|
||||
sentence = _hardcore_clothing_sentence(label, clothing)
|
||||
if sentence:
|
||||
entries.append(sentence)
|
||||
return entries
|
||||
|
||||
|
||||
def _context_from_character_slot(
|
||||
rng: random.Random,
|
||||
slot: dict[str, Any],
|
||||
@@ -4052,7 +3979,7 @@ def _insta_of_partner_styling(
|
||||
label = chr(ord("B") + index)
|
||||
full_label = f"Woman {label}"
|
||||
outfit = _slot_softcore_outfit((label_map or {}).get(full_label), content_rng) or g.choose(content_rng, INSTA_OF_SOFTCORE_PARTNER_WOMEN_OUTFITS)
|
||||
sentence = _softcore_outfit_sentence(full_label, outfit)
|
||||
sentence = pair_clothing.softcore_outfit_sentence(full_label, outfit)
|
||||
if sentence:
|
||||
outfits.append(sentence)
|
||||
for index in range(max(0, men_count)):
|
||||
@@ -4061,7 +3988,7 @@ def _insta_of_partner_styling(
|
||||
if full_label in pov_set:
|
||||
continue
|
||||
outfit = _slot_softcore_outfit((label_map or {}).get(full_label), content_rng) or g.choose(content_rng, INSTA_OF_SOFTCORE_PARTNER_MEN_OUTFITS)
|
||||
sentence = _softcore_outfit_sentence(full_label, outfit)
|
||||
sentence = pair_clothing.softcore_outfit_sentence(full_label, outfit)
|
||||
if sentence:
|
||||
outfits.append(sentence)
|
||||
return {
|
||||
@@ -4143,7 +4070,6 @@ def build_insta_of_pair(
|
||||
softcore_outfit=_insta_of_softcore_outfit,
|
||||
softcore_pose=_insta_of_softcore_pose,
|
||||
softcore_item_prompt_label=_insta_of_softcore_item_prompt_label,
|
||||
body_exposure_scene_text=_body_exposure_scene_text,
|
||||
pov_prompt_directive=_pov_prompt_directive,
|
||||
pov_composition_prompt=_pov_composition_prompt,
|
||||
)
|
||||
@@ -4219,12 +4145,13 @@ def build_insta_of_pair(
|
||||
soft_cast_presence = cast_context["soft_cast_presence"]
|
||||
soft_cast_styling_sentence = cast_context["soft_cast_styling_sentence"]
|
||||
hard_cast = cast_context["hard_cast"]
|
||||
character_hardcore_clothing_entries = _character_hardcore_clothing_entries(
|
||||
character_hardcore_clothing_entries = pair_clothing.character_hardcore_clothing_entries(
|
||||
character_slot_map,
|
||||
hard_women_count,
|
||||
hard_men_count,
|
||||
pov_character_labels,
|
||||
hard_content_rng,
|
||||
_slot_hardcore_clothing,
|
||||
)
|
||||
clothing_route = pair_clothing.resolve_hardcore_pair_clothing(
|
||||
hard_row=hard_row,
|
||||
@@ -4236,13 +4163,12 @@ def build_insta_of_pair(
|
||||
rng=hard_content_rng,
|
||||
continuity_map=INSTA_OF_HARDCORE_CLOTHING_CONTINUITY,
|
||||
choose=g.choose,
|
||||
sentence_builder=_hardcore_clothing_sentence,
|
||||
)
|
||||
default_man_hardcore_clothing_entries = clothing_route["default_man_hardcore_clothing"]
|
||||
hard_clothing_state = clothing_route["hardcore_clothing_state"]
|
||||
hard_clothing_sentence = clothing_route["hardcore_clothing_sentence"]
|
||||
if clothing_route["requires_body_exposure_scene"]:
|
||||
hard_scene = _body_exposure_scene_text(hard_scene)
|
||||
hard_scene = pair_clothing.body_exposure_scene_text(hard_scene)
|
||||
hard_row["source_scene_text"] = hard_row.get("source_scene_text") or hard_row.get("scene_text", "")
|
||||
hard_row["scene_text"] = hard_scene
|
||||
hard_detail_density = options["hardcore_detail_density"]
|
||||
|
||||
Reference in New Issue
Block a user