Extract Insta pair cast context
This commit is contained in:
+111
@@ -0,0 +1,111 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import Any, Callable
|
||||
|
||||
|
||||
DescriptorFromRow = Callable[[dict[str, Any]], str]
|
||||
CastDescriptors = Callable[..., list[str]]
|
||||
PartnerStyling = Callable[..., dict[str, Any]]
|
||||
CastPhrase = Callable[[int, int], str]
|
||||
|
||||
|
||||
def resolve_insta_pair_cast_context(
|
||||
*,
|
||||
soft_row: dict[str, Any],
|
||||
options: dict[str, Any],
|
||||
parsed_seed_config: dict[str, int],
|
||||
seed: int,
|
||||
row_number: int,
|
||||
ethnicity: str,
|
||||
figure: str,
|
||||
no_plus_women: bool,
|
||||
no_black: bool,
|
||||
hard_women_count: int,
|
||||
hard_men_count: int,
|
||||
character_slots: list[dict[str, Any]],
|
||||
character_slot_map: dict[str, dict[str, Any]],
|
||||
pov_character_labels: list[str],
|
||||
platform_styles: dict[str, str],
|
||||
soft_levels: dict[str, str],
|
||||
hardcore_levels: dict[str, str],
|
||||
descriptor_from_row: DescriptorFromRow,
|
||||
build_cast_descriptors: CastDescriptors,
|
||||
prompt_cast_descriptors: Callable[[str], str],
|
||||
partner_styling: PartnerStyling,
|
||||
cast_phrase: CastPhrase,
|
||||
) -> dict[str, Any]:
|
||||
descriptor = descriptor_from_row(soft_row)
|
||||
cast_descriptors = build_cast_descriptors(
|
||||
descriptor,
|
||||
parsed_seed_config,
|
||||
seed,
|
||||
row_number,
|
||||
ethnicity,
|
||||
figure,
|
||||
no_plus_women,
|
||||
no_black,
|
||||
hard_women_count,
|
||||
hard_men_count,
|
||||
character_slots,
|
||||
)
|
||||
cast_descriptor_text = prompt_cast_descriptors("; ".join(cast_descriptors))
|
||||
same_softcore_cast = options["softcore_cast"] == "same_as_hardcore"
|
||||
soft_cast_descriptor_text = cast_descriptor_text if same_softcore_cast else f"Woman A: {descriptor}"
|
||||
soft_partner_styling = partner_styling(
|
||||
parsed_seed_config,
|
||||
seed,
|
||||
row_number,
|
||||
hard_women_count if same_softcore_cast else 1,
|
||||
hard_men_count if same_softcore_cast else 0,
|
||||
pov_character_labels if same_softcore_cast else [],
|
||||
character_slot_map,
|
||||
)
|
||||
if not same_softcore_cast:
|
||||
soft_partner_styling = {"outfits": [], "pose": ""}
|
||||
soft_partner_outfit_text = "; ".join(soft_partner_styling["outfits"])
|
||||
|
||||
soft_cast = (
|
||||
"solo creator setup with Woman A alone"
|
||||
if options["softcore_cast"] == "solo"
|
||||
else f"soft creator-teaser setup with {cast_phrase(hard_women_count, hard_men_count)}"
|
||||
)
|
||||
soft_cast_presence = (
|
||||
(
|
||||
"Frame Woman A from the POV participant's first-person camera in a soft creator-teaser setup; "
|
||||
"keep the POV participant off-camera as the viewpoint and implied by camera perspective or foreground cues. "
|
||||
)
|
||||
if same_softcore_cast and pov_character_labels
|
||||
else (
|
||||
"Place Woman A and the listed partners together in a soft creator-teaser pose. "
|
||||
if same_softcore_cast
|
||||
else "Keep the softcore version focused on Woman A alone. "
|
||||
)
|
||||
)
|
||||
soft_cast_styling_sentence = (
|
||||
f"Partner softcore styling: {soft_partner_outfit_text}. Cast pose: {soft_partner_styling['pose']}. "
|
||||
if same_softcore_cast and soft_partner_outfit_text
|
||||
else ""
|
||||
)
|
||||
hard_cast = cast_phrase(hard_women_count, hard_men_count)
|
||||
soft_descriptor_sentence = (
|
||||
f"Cast descriptors: {soft_cast_descriptor_text}. "
|
||||
if same_softcore_cast
|
||||
else f"Woman A: {descriptor}. "
|
||||
)
|
||||
|
||||
return {
|
||||
"descriptor": descriptor,
|
||||
"cast_descriptors": cast_descriptors,
|
||||
"cast_descriptor_text": cast_descriptor_text,
|
||||
"soft_cast_descriptor_text": soft_cast_descriptor_text,
|
||||
"soft_partner_styling": soft_partner_styling,
|
||||
"soft_partner_outfit_text": soft_partner_outfit_text,
|
||||
"platform_style": platform_styles[options["platform_style"]],
|
||||
"soft_level": soft_levels[options["softcore_level"]],
|
||||
"hard_level": hardcore_levels[options["hardcore_level"]],
|
||||
"soft_cast": soft_cast,
|
||||
"soft_cast_presence": soft_cast_presence,
|
||||
"soft_cast_styling_sentence": soft_cast_styling_sentence,
|
||||
"hard_cast": hard_cast,
|
||||
"soft_descriptor_sentence": soft_descriptor_sentence,
|
||||
}
|
||||
Reference in New Issue
Block a user