Tune InstaOF hardcore camera and ejaculation wording
This commit is contained in:
@@ -269,9 +269,11 @@ negative prompt outputs when wiring the sampler.
|
|||||||
|
|
||||||
`SxCP Insta/OF Options` outputs `options_json`, which can be connected to the
|
`SxCP Insta/OF Options` outputs `options_json`, which can be connected to the
|
||||||
pair node. Defaults are set so the softcore prompt is solo while the hardcore
|
pair node. Defaults are set so the softcore prompt is solo while the hardcore
|
||||||
prompt can include partners. It also defaults the camera to handheld selfie
|
prompt can include partners. Softcore defaults to handheld selfie framing;
|
||||||
framing. For stronger camera control, connect `SxCP Camera Control` to the pair
|
hardcore defaults to `from_camera_config`, which emits no camera sentence unless
|
||||||
node's optional `camera_config` input.
|
a camera config is connected or you select an explicit hardcore camera mode.
|
||||||
|
For stronger camera control, connect `SxCP Camera Control` to the pair node's
|
||||||
|
optional `camera_config` input.
|
||||||
|
|
||||||
Options:
|
Options:
|
||||||
|
|
||||||
@@ -300,8 +302,10 @@ Options:
|
|||||||
references the softcore outfit, uses it displaced/removed, or makes Woman A
|
references the softcore outfit, uses it displaced/removed, or makes Woman A
|
||||||
explicitly nude.
|
explicitly nude.
|
||||||
- `softcore_camera_mode`: base camera mode for the softcore output.
|
- `softcore_camera_mode`: base camera mode for the softcore output.
|
||||||
- `hardcore_camera_mode`: `same_as_softcore` or a separate base camera mode for
|
- `hardcore_camera_mode`: `from_camera_config`, `same_as_softcore`, or a
|
||||||
the hardcore output.
|
separate base camera mode for the hardcore output. `from_camera_config` is
|
||||||
|
neutral with no connected camera config, and uses `SxCP Camera Control` when
|
||||||
|
one is connected.
|
||||||
- `camera_detail`: `off`, `compact`, or `full` for the pair prompt camera text.
|
- `camera_detail`: `off`, `compact`, or `full` for the pair prompt camera text.
|
||||||
|
|
||||||
## Built-In Categories
|
## Built-In Categories
|
||||||
|
|||||||
+1
-1
@@ -1011,7 +1011,7 @@ class SxCPInstaOFOptions:
|
|||||||
"continuity": (["same_creator_same_room", "same_creator_new_scene"], {"default": "same_creator_same_room"}),
|
"continuity": (["same_creator_same_room", "same_creator_new_scene"], {"default": "same_creator_same_room"}),
|
||||||
"hardcore_clothing_continuity": (["none", "same_outfit", "partially_removed", "implied_nude", "explicit_nude"], {"default": "partially_removed"}),
|
"hardcore_clothing_continuity": (["none", "same_outfit", "partially_removed", "implied_nude", "explicit_nude"], {"default": "partially_removed"}),
|
||||||
"softcore_camera_mode": (camera_mode_choices(), {"default": "handheld_selfie"}),
|
"softcore_camera_mode": (camera_mode_choices(), {"default": "handheld_selfie"}),
|
||||||
"hardcore_camera_mode": (["same_as_softcore"] + camera_mode_choices(), {"default": "same_as_softcore"}),
|
"hardcore_camera_mode": (["from_camera_config", "same_as_softcore"] + camera_mode_choices(), {"default": "from_camera_config"}),
|
||||||
"camera_detail": (camera_detail_choices(), {"default": "compact"}),
|
"camera_detail": (camera_detail_choices(), {"default": "compact"}),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -450,7 +450,7 @@
|
|||||||
{"text": "low-angle explicit body-contact frame", "min_people": 2},
|
{"text": "low-angle explicit body-contact frame", "min_people": 2},
|
||||||
{"text": "close crop on hips, thighs, hands, genitals, and faces", "min_people": 2, "max_people": 3},
|
{"text": "close crop on hips, thighs, hands, genitals, and faces", "min_people": 2, "max_people": 3},
|
||||||
{"text": "wide full-body explicit composition with readable anatomy", "min_people": 2},
|
{"text": "wide full-body explicit composition with readable anatomy", "min_people": 2},
|
||||||
{"text": "creator-shot vertical frame with phone-camera intimacy", "min_people": 2},
|
{"text": "creator-shot vertical frame with close subscriber-content intimacy", "min_people": 2},
|
||||||
{"text": "front-facing explicit frame with body contact centered", "min_people": 2},
|
{"text": "front-facing explicit frame with body contact centered", "min_people": 2},
|
||||||
{"text": "floor-level sex composition with sheets and bodies filling the frame", "min_people": 2},
|
{"text": "floor-level sex composition with sheets and bodies filling the frame", "min_people": 2},
|
||||||
{"text": "tight subscriber-view crop with face and explicit contact visible", "min_people": 2, "max_people": 3}
|
{"text": "tight subscriber-view crop with face and explicit contact visible", "min_people": 2, "max_people": 3}
|
||||||
@@ -471,13 +471,13 @@
|
|||||||
{"text": "mouth-level oral-sex close-up with eyes and hands visible", "min_people": 2, "max_people": 3},
|
{"text": "mouth-level oral-sex close-up with eyes and hands visible", "min_people": 2, "max_people": 3},
|
||||||
{"text": "kneeling oral composition with genitals and face centered", "min_people": 2, "max_people": 3},
|
{"text": "kneeling oral composition with genitals and face centered", "min_people": 2, "max_people": 3},
|
||||||
{"text": "front-view oral-sex frame from bed height", "min_people": 2, "max_people": 3},
|
{"text": "front-view oral-sex frame from bed height", "min_people": 2, "max_people": 3},
|
||||||
{"text": "low phone-camera angle focused on mouth contact", "min_people": 2, "max_people": 3},
|
{"text": "low close-camera angle focused on mouth contact", "min_people": 2, "max_people": 3},
|
||||||
{"text": "mirror-reflected oral scene with face and body visible", "min_people": 2, "max_people": 3},
|
{"text": "mirror-reflected oral scene with face and body visible", "min_people": 2, "max_people": 3},
|
||||||
{"text": "overhead oral-sex frame with thighs and mouth contact readable", "min_people": 2, "max_people": 3},
|
{"text": "overhead oral-sex frame with thighs and mouth contact readable", "min_people": 2, "max_people": 3},
|
||||||
{"text": "side-profile oral composition with saliva and expression visible", "min_people": 2, "max_people": 3},
|
{"text": "side-profile oral composition with saliva and expression visible", "min_people": 2, "max_people": 3},
|
||||||
{"text": "tight crop on mouth, hands, genitals, and eyes", "min_people": 2, "max_people": 3},
|
{"text": "tight crop on mouth, hands, genitals, and eyes", "min_people": 2, "max_people": 3},
|
||||||
{"text": "wide full-body oral-sex composition", "min_people": 2, "max_people": 3},
|
{"text": "wide full-body oral-sex composition", "min_people": 2, "max_people": 3},
|
||||||
{"text": "bedside kneeling oral frame with phone-shot intimacy", "min_people": 2, "max_people": 3}
|
{"text": "bedside kneeling oral frame with close candid intimacy", "min_people": 2, "max_people": 3}
|
||||||
],
|
],
|
||||||
"anal_dp_compositions": [
|
"anal_dp_compositions": [
|
||||||
{"text": "rear-view anal composition with hips and face visible", "min_people": 2, "max_people": 3},
|
{"text": "rear-view anal composition with hips and face visible", "min_people": 2, "max_people": 3},
|
||||||
@@ -516,16 +516,16 @@
|
|||||||
{"text": "full-room group-sex composition with clear adult spacing", "min_people": 4}
|
{"text": "full-room group-sex composition with clear adult spacing", "min_people": 4}
|
||||||
],
|
],
|
||||||
"climax_compositions": [
|
"climax_compositions": [
|
||||||
{"text": "tight post-climax crop on face, body, hands, and visible fluids", "min_people": 1},
|
{"text": "tight post-ejaculation crop on face, body, hands, and visible fluids", "min_people": 1},
|
||||||
{"text": "phone-flash close-up of orgasm aftermath", "min_people": 1},
|
{"text": "direct-flash close-up of orgasm aftermath", "min_people": 1},
|
||||||
{"text": "bed-level climax frame with thighs, face, and fluid detail visible", "min_people": 1},
|
{"text": "bed-level ejaculation frame with thighs, face, and fluid detail visible", "min_people": 1},
|
||||||
{"text": "mirror-reflected post-climax composition", "min_people": 1},
|
{"text": "mirror-reflected post-ejaculation composition", "min_people": 1},
|
||||||
{"text": "front-facing cumshot composition with body and expression centered", "min_people": 1},
|
{"text": "front-facing cumshot composition with body and expression centered", "min_people": 1},
|
||||||
{"text": "overhead post-orgasm frame on rumpled sheets", "min_people": 1},
|
{"text": "overhead post-orgasm frame on rumpled sheets", "min_people": 1},
|
||||||
{"text": "kneeling climax frame with open mouth and body visible", "min_people": 1},
|
{"text": "kneeling ejaculation frame with open mouth and body visible", "min_people": 1},
|
||||||
{"text": "wide aftermath composition with all adult bodies visible", "min_people": 2},
|
{"text": "wide aftermath composition with all adult bodies visible", "min_people": 2},
|
||||||
{"text": "tight subscriber-view crop of climax expression and fluid detail", "min_people": 1},
|
{"text": "tight subscriber-view crop of orgasm expression and fluid detail", "min_people": 1},
|
||||||
{"text": "side-profile post-climax body-line composition", "min_people": 1}
|
{"text": "side-profile post-ejaculation body-line composition", "min_people": 1}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -96,11 +96,11 @@
|
|||||||
{"slug": "black_lacquer_mirror_room", "prompt": "black lacquer mirror room with glossy furniture, velvet curtains, and sharp rim light"}
|
{"slug": "black_lacquer_mirror_room", "prompt": "black lacquer mirror room with glossy furniture, velvet curtains, and sharp rim light"}
|
||||||
],
|
],
|
||||||
"hardcore_mirror_scenes": [
|
"hardcore_mirror_scenes": [
|
||||||
{"slug": "hardcore_bedroom_mirror_pair", "prompt": "large bedroom mirror placed beside a rumpled bed, reflecting explicit adult body contact and the phone-camera angle", "min_people": 2, "max_people": 3},
|
{"slug": "hardcore_bedroom_mirror_pair", "prompt": "large bedroom mirror placed beside a rumpled bed, reflecting explicit adult body contact and the camera angle", "min_people": 2, "max_people": 3},
|
||||||
{"slug": "hardcore_hotel_mirror_pair", "prompt": "hotel suite mirror facing a messy bed, city lights behind it, and enough space for explicit adult positioning", "min_people": 2, "max_people": 3},
|
{"slug": "hardcore_hotel_mirror_pair", "prompt": "hotel suite mirror facing a messy bed, city lights behind it, and enough space for explicit adult positioning", "min_people": 2, "max_people": 3},
|
||||||
{"slug": "hardcore_floor_mirror_set", "prompt": "floor mattress beside a full-length mirror with reflected bodies, warm lamps, and close creator-shot framing", "min_people": 2, "max_people": 3},
|
{"slug": "hardcore_floor_mirror_set", "prompt": "floor mattress beside a full-length mirror with reflected bodies, warm lamps, and close intimate framing", "min_people": 2, "max_people": 3},
|
||||||
{"slug": "hardcore_shower_mirror_pair", "prompt": "private shower room with a fogged mirror wall, wet tile, and reflected explicit adult contact", "min_people": 2, "max_people": 3},
|
{"slug": "hardcore_shower_mirror_pair", "prompt": "private shower room with a fogged mirror wall, wet tile, and reflected explicit adult contact", "min_people": 2, "max_people": 3},
|
||||||
{"slug": "hardcore_vanity_mirror_floor", "prompt": "vanity mirror floor setup with bulbs, scattered clothing, low phone-camera angle, and reflected adult bodies", "min_people": 2, "max_people": 3},
|
{"slug": "hardcore_vanity_mirror_floor", "prompt": "vanity mirror floor setup with bulbs, scattered clothing, low reflected camera angle, and reflected adult bodies", "min_people": 2, "max_people": 3},
|
||||||
{"slug": "hardcore_lacquer_mirror_bed", "prompt": "black lacquer mirror bedroom with glossy reflections, a low bed, and warm rim light around explicit adult contact", "min_people": 2, "max_people": 3},
|
{"slug": "hardcore_lacquer_mirror_bed", "prompt": "black lacquer mirror bedroom with glossy reflections, a low bed, and warm rim light around explicit adult contact", "min_people": 2, "max_people": 3},
|
||||||
{"slug": "hardcore_tripod_mirror_bed", "prompt": "creator bedroom mirror setup with a phone on tripod, bed sheets, reflected bodies, and clear adult-only framing", "min_people": 2, "max_people": 3},
|
{"slug": "hardcore_tripod_mirror_bed", "prompt": "creator bedroom mirror setup with a phone on tripod, bed sheets, reflected bodies, and clear adult-only framing", "min_people": 2, "max_people": 3},
|
||||||
{"slug": "hardcore_threesome_mirror_suite", "prompt": "wide mirror-wall suite arranged for three adults, with a bed, floor cushions, and all bodies visible in direct and reflected views", "min_people": 3, "max_people": 3}
|
{"slug": "hardcore_threesome_mirror_suite", "prompt": "wide mirror-wall suite arranged for three adults, with a bed, floor cushions, and all bodies visible in direct and reflected views", "min_people": 3, "max_people": 3}
|
||||||
@@ -132,27 +132,27 @@
|
|||||||
"hardcore_private_scenes": [
|
"hardcore_private_scenes": [
|
||||||
{"slug": "hardcore_bedroom_phone_tripod", "prompt": "private bedroom sex-content setup with a phone tripod, rumpled sheets, pillows, and warm lamps"},
|
{"slug": "hardcore_bedroom_phone_tripod", "prompt": "private bedroom sex-content setup with a phone tripod, rumpled sheets, pillows, and warm lamps"},
|
||||||
{"slug": "hardcore_hotel_bed_city", "prompt": "luxury hotel suite with city lights, messy satin bedding, floor clothes, and low amber light"},
|
{"slug": "hardcore_hotel_bed_city", "prompt": "luxury hotel suite with city lights, messy satin bedding, floor clothes, and low amber light"},
|
||||||
{"slug": "hardcore_mirror_bedroom", "prompt": "bedroom with a large mirror reflecting the explicit adult scene and a visible phone angle"},
|
{"slug": "hardcore_mirror_bedroom", "prompt": "bedroom with a large mirror reflecting the explicit adult scene and a visible camera angle"},
|
||||||
{"slug": "hardcore_low_mattress_studio", "prompt": "private photo studio with a low mattress, fabric drapes, phone tripod, and controlled warm spotlighting"},
|
{"slug": "hardcore_low_mattress_studio", "prompt": "private photo studio with a low mattress, fabric drapes, tripod, and controlled warm spotlighting"},
|
||||||
{"slug": "hardcore_velvet_room", "prompt": "private velvet room with dark curtains, soft cushions, scattered clothes, and warm red light"},
|
{"slug": "hardcore_velvet_room", "prompt": "private velvet room with dark curtains, soft cushions, scattered clothes, and warm red light"},
|
||||||
{"slug": "hardcore_shower_room", "prompt": "large private shower room with steam, wet tile, glass reflections, and warm reflected light"},
|
{"slug": "hardcore_shower_room", "prompt": "large private shower room with steam, wet tile, glass reflections, and warm reflected light"},
|
||||||
{"slug": "hardcore_lounge_couch", "prompt": "dim private lounge with a wide couch, scattered clothing, side lamps, and soft golden shadows"},
|
{"slug": "hardcore_lounge_couch", "prompt": "dim private lounge with a wide couch, scattered clothing, side lamps, and soft golden shadows"},
|
||||||
{"slug": "hardcore_floor_cushion_room", "prompt": "intimate room with floor cushions, silk sheets, low candles, and close vertical camera framing"},
|
{"slug": "hardcore_floor_cushion_room", "prompt": "intimate room with floor cushions, silk sheets, low candles, and close vertical framing"},
|
||||||
{"slug": "hardcore_ring_light_bed", "prompt": "creator bedroom with ring light reflection, phone on tripod, bed sheets, and visible content setup"},
|
{"slug": "hardcore_ring_light_bed", "prompt": "creator bedroom with ring light reflection, phone on tripod, bed sheets, and visible content setup"},
|
||||||
{"slug": "hardcore_bathroom_counter", "prompt": "private bathroom with counter mirror, wet towels, steam, and explicit creator-shot framing"},
|
{"slug": "hardcore_bathroom_counter", "prompt": "private bathroom with counter mirror, wet towels, steam, and explicit creator-shot framing"},
|
||||||
{"slug": "hardcore_walk_in_closet_floor", "prompt": "mirrored walk-in closet floor with clothes scattered, warm bulbs, and a phone reflection"},
|
{"slug": "hardcore_walk_in_closet_floor", "prompt": "mirrored walk-in closet floor with clothes scattered, warm bulbs, and a phone reflection"},
|
||||||
{"slug": "hardcore_car_backseat", "prompt": "parked private car backseat with tinted windows, dashboard glow, and tight phone-camera framing"}
|
{"slug": "hardcore_car_backseat", "prompt": "parked private car backseat with tinted windows, dashboard glow, and tight close framing"}
|
||||||
],
|
],
|
||||||
"hardcore_bed_scenes": [
|
"hardcore_bed_scenes": [
|
||||||
{"slug": "bed_edge_close_contact", "prompt": "edge of a rumpled bed with pillows pushed aside, sheets pulled tight, and close phone-camera framing"},
|
{"slug": "bed_edge_close_contact", "prompt": "edge of a rumpled bed with pillows pushed aside, sheets pulled tight, and close body framing"},
|
||||||
{"slug": "low_bed_mirror_angle", "prompt": "low bed beside a full-length mirror with visible reflected bodies and warm lamps"},
|
{"slug": "low_bed_mirror_angle", "prompt": "low bed beside a full-length mirror with visible reflected bodies and warm lamps"},
|
||||||
{"slug": "hotel_bed_overhead", "prompt": "hotel bed arranged for an overhead phone shot with satin sheets and city light"},
|
{"slug": "hotel_bed_overhead", "prompt": "hotel bed arranged for an overhead camera shot with satin sheets and city light"},
|
||||||
{"slug": "floor_mattress_creator_set", "prompt": "floor mattress content setup with fabric drapes, ring light shadow, and scattered clothes"},
|
{"slug": "floor_mattress_creator_set", "prompt": "floor mattress content setup with fabric drapes, ring light shadow, and scattered clothes"},
|
||||||
{"slug": "canopy_bed_explicit_set", "prompt": "canopy bed with sheer curtains, warm bedside light, and intimate full-body framing"},
|
{"slug": "canopy_bed_explicit_set", "prompt": "canopy bed with sheer curtains, warm bedside light, and intimate full-body framing"},
|
||||||
{"slug": "velvet_bedroom_wide", "prompt": "velvet bedroom with wide bed, dark curtains, soft cushions, and warm red side light"}
|
{"slug": "velvet_bedroom_wide", "prompt": "velvet bedroom with wide bed, dark curtains, soft cushions, and warm red side light"}
|
||||||
],
|
],
|
||||||
"hardcore_penetrative_scenes": [
|
"hardcore_penetrative_scenes": [
|
||||||
{"slug": "penetration_mirror_bedroom", "prompt": "mirror-facing bedroom setup designed to show explicit body contact and the phone angle"},
|
{"slug": "penetration_mirror_bedroom", "prompt": "mirror-facing bedroom setup designed to show explicit body contact and the camera angle"},
|
||||||
{"slug": "penetration_edge_of_bed", "prompt": "edge-of-bed setup with hips near the camera, rumpled sheets, and warm lamp light"},
|
{"slug": "penetration_edge_of_bed", "prompt": "edge-of-bed setup with hips near the camera, rumpled sheets, and warm lamp light"},
|
||||||
{"slug": "penetration_low_mattress", "prompt": "low mattress studio with side lighting, fabric drapes, and all bodies visible"},
|
{"slug": "penetration_low_mattress", "prompt": "low mattress studio with side lighting, fabric drapes, and all bodies visible"},
|
||||||
{"slug": "penetration_couch_lounge", "prompt": "wide private couch with pillows pushed aside, scattered clothes, and golden shadows"},
|
{"slug": "penetration_couch_lounge", "prompt": "wide private couch with pillows pushed aside, scattered clothes, and golden shadows"},
|
||||||
@@ -161,10 +161,10 @@
|
|||||||
],
|
],
|
||||||
"hardcore_oral_scenes": [
|
"hardcore_oral_scenes": [
|
||||||
{"slug": "oral_bed_kneeling_close", "prompt": "bedside kneeling setup with pillows, warm lamps, and close mouth-level camera framing"},
|
{"slug": "oral_bed_kneeling_close", "prompt": "bedside kneeling setup with pillows, warm lamps, and close mouth-level camera framing"},
|
||||||
{"slug": "oral_mirror_floor", "prompt": "mirror-facing floor setup with bodies reflected and phone held low"},
|
{"slug": "oral_mirror_floor", "prompt": "mirror-facing floor setup with bodies reflected and a low camera angle"},
|
||||||
{"slug": "oral_couch_front_view", "prompt": "private couch arranged for front-view oral contact with soft side lamps"},
|
{"slug": "oral_couch_front_view", "prompt": "private couch arranged for front-view oral contact with soft side lamps"},
|
||||||
{"slug": "oral_shower_steam", "prompt": "steamy shower room with wet tile, glass reflections, and close explicit framing"},
|
{"slug": "oral_shower_steam", "prompt": "steamy shower room with wet tile, glass reflections, and close explicit framing"},
|
||||||
{"slug": "oral_vanity_floor", "prompt": "vanity-room floor with mirror bulbs, scattered lingerie, and low phone-camera angle"},
|
{"slug": "oral_vanity_floor", "prompt": "vanity-room floor with mirror bulbs, scattered lingerie, and low reflected camera angle"},
|
||||||
{"slug": "oral_hotel_bed_close", "prompt": "hotel bed close-up setup with satin sheets, city light, and tight vertical framing"}
|
{"slug": "oral_hotel_bed_close", "prompt": "hotel bed close-up setup with satin sheets, city light, and tight vertical framing"}
|
||||||
],
|
],
|
||||||
"hardcore_anal_scenes": [
|
"hardcore_anal_scenes": [
|
||||||
@@ -198,10 +198,10 @@
|
|||||||
{"slug": "group_lacquer_mirror_lounge", "prompt": "wide black-lacquer mirror lounge with multiple couches, glossy reflections, warm rim light, and all participants visible"}
|
{"slug": "group_lacquer_mirror_lounge", "prompt": "wide black-lacquer mirror lounge with multiple couches, glossy reflections, warm rim light, and all participants visible"}
|
||||||
],
|
],
|
||||||
"hardcore_climax_scenes": [
|
"hardcore_climax_scenes": [
|
||||||
{"slug": "climax_bed_close_flash", "prompt": "rumpled bed close-up setup with direct phone flash, sheets, and visible fluid detail"},
|
{"slug": "climax_bed_close_flash", "prompt": "rumpled bed close-up setup with direct flash, sheets, and visible fluid detail"},
|
||||||
{"slug": "climax_mirror_counter", "prompt": "mirror-facing vanity counter setup with phone reflection and explicit aftermath framing"},
|
{"slug": "climax_mirror_counter", "prompt": "mirror-facing vanity counter setup with reflected bodies and explicit aftermath framing"},
|
||||||
{"slug": "climax_floor_sheets", "prompt": "floor sheets with pillows pushed aside, low lamp light, and close body-detail framing"},
|
{"slug": "climax_floor_sheets", "prompt": "floor sheets with pillows pushed aside, low lamp light, and close body-detail framing"},
|
||||||
{"slug": "climax_hotel_bed_flash", "prompt": "hotel bed with phone-flash lighting, messy satin sheets, and city light behind"},
|
{"slug": "climax_hotel_bed_flash", "prompt": "hotel bed with direct-flash lighting, messy satin sheets, and city light behind"},
|
||||||
{"slug": "climax_shower_tile", "prompt": "wet shower tile scene with steam, reflected light, and visible fluid detail"},
|
{"slug": "climax_shower_tile", "prompt": "wet shower tile scene with steam, reflected light, and visible fluid detail"},
|
||||||
{"slug": "climax_velvet_couch", "prompt": "velvet couch with dark curtains, warm red light, and close explicit aftermath framing"}
|
{"slug": "climax_velvet_couch", "prompt": "velvet couch with dark curtains, warm red light, and close explicit aftermath framing"}
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -302,7 +302,7 @@
|
|||||||
"cum on the belly",
|
"cum on the belly",
|
||||||
"visible orgasmic tension",
|
"visible orgasmic tension",
|
||||||
"messy wet mouth",
|
"messy wet mouth",
|
||||||
"post-climax fluids on skin"
|
"visible sexual fluids on skin"
|
||||||
],
|
],
|
||||||
"expression_detail": [
|
"expression_detail": [
|
||||||
"eyes looking up",
|
"eyes looking up",
|
||||||
@@ -657,7 +657,7 @@
|
|||||||
"cum on breasts and belly",
|
"cum on breasts and belly",
|
||||||
"cum dripping on thighs",
|
"cum dripping on thighs",
|
||||||
"messy wet mouths",
|
"messy wet mouths",
|
||||||
"post-climax fluids on skin",
|
"visible sexual fluids on skin",
|
||||||
"visible arousal on all bodies",
|
"visible arousal on all bodies",
|
||||||
"cum on the ass",
|
"cum on the ass",
|
||||||
"wet sheets under the bodies",
|
"wet sheets under the bodies",
|
||||||
@@ -829,11 +829,11 @@
|
|||||||
"climax_detail": [
|
"climax_detail": [
|
||||||
"cum on breasts and bellies",
|
"cum on breasts and bellies",
|
||||||
"cum dripping down thighs",
|
"cum dripping down thighs",
|
||||||
"multiple post-climax expressions",
|
"multiple post-orgasm expressions",
|
||||||
"wet mouths and visible arousal",
|
"wet mouths and visible arousal",
|
||||||
"sexual fluids on sheets",
|
"sexual fluids on sheets",
|
||||||
"cum on ass and lower back",
|
"cum on ass and lower back",
|
||||||
"messy bodies after climax",
|
"messy bodies after orgasm",
|
||||||
"visible orgasmic tension across the group"
|
"visible orgasmic tension across the group"
|
||||||
],
|
],
|
||||||
"contact_detail": [
|
"contact_detail": [
|
||||||
@@ -854,7 +854,7 @@
|
|||||||
"messy sexual fluids",
|
"messy sexual fluids",
|
||||||
"shiny arousal on genitals",
|
"shiny arousal on genitals",
|
||||||
"wet mouths and bodies",
|
"wet mouths and bodies",
|
||||||
"post-climax fluids on bellies"
|
"visible sexual fluids on bellies"
|
||||||
],
|
],
|
||||||
"group_act": [
|
"group_act": [
|
||||||
{
|
{
|
||||||
@@ -955,7 +955,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Cumshot and climax",
|
"name": "Ejaculation and orgasm aftermath",
|
||||||
"slug": "cumshot_climax",
|
"slug": "cumshot_climax",
|
||||||
"min_people": 1,
|
"min_people": 1,
|
||||||
"inherit_expressions": false,
|
"inherit_expressions": false,
|
||||||
@@ -967,8 +967,8 @@
|
|||||||
"item_templates": [
|
"item_templates": [
|
||||||
"{climax_act} with {fluid_location}, {body_position}, {expression_detail}, and {visibility}",
|
"{climax_act} with {fluid_location}, {body_position}, {expression_detail}, and {visibility}",
|
||||||
"{body_position} during {climax_act}, with {hand_detail}, {fluid_location}, and {fluid_detail}",
|
"{body_position} during {climax_act}, with {hand_detail}, {fluid_location}, and {fluid_detail}",
|
||||||
"{angle} climax view featuring {climax_act}, {body_position}, {body_contact}, {fluid_detail}, and {visibility}",
|
"{angle} ejaculation view featuring {climax_act}, {body_position}, {body_contact}, {fluid_detail}, and {visibility}",
|
||||||
"hardcore post-climax scene with {fluid_location}, {body_position}, {expression_detail}, and {visibility}",
|
"hardcore post-ejaculation scene with {fluid_location}, {body_position}, {expression_detail}, and {visibility}",
|
||||||
"{climax_act} on {surface}, with {body_position}, {body_contact}, {hand_detail}, and {fluid_detail}",
|
"{climax_act} on {surface}, with {body_position}, {body_contact}, {hand_detail}, and {fluid_detail}",
|
||||||
"{angle} view of {fluid_location}, {body_position}, {climax_act}, and {visibility}",
|
"{angle} view of {fluid_location}, {body_position}, {climax_act}, and {visibility}",
|
||||||
"explicit orgasm scene: {climax_act}, {body_position}, {fluid_detail}, {expression_detail}, and {body_contact}",
|
"explicit orgasm scene: {climax_act}, {body_position}, {fluid_detail}, {expression_detail}, and {body_contact}",
|
||||||
@@ -1044,21 +1044,21 @@
|
|||||||
},
|
},
|
||||||
"external cumshot",
|
"external cumshot",
|
||||||
"visible external ejaculation",
|
"visible external ejaculation",
|
||||||
"messy post-climax release",
|
"messy post-ejaculation release",
|
||||||
{
|
{
|
||||||
"text": "orgasm during penetration",
|
"text": "orgasm during penetration",
|
||||||
"min_people": 2
|
"min_people": 2
|
||||||
},
|
},
|
||||||
"post-orgasm hardcore climax",
|
"post-orgasm visible release",
|
||||||
"visible orgasm aftermath",
|
"visible orgasm aftermath",
|
||||||
{
|
{
|
||||||
"text": "shared climax after penetration",
|
"text": "visible post-penetration ejaculation",
|
||||||
"min_people": 2
|
"min_people": 2
|
||||||
},
|
},
|
||||||
"hardcore ejaculation scene"
|
"hardcore ejaculation scene"
|
||||||
],
|
],
|
||||||
"expression_detail": [
|
"expression_detail": [
|
||||||
"eyes closed in climax",
|
"eyes closed during orgasm",
|
||||||
"open mouth and flushed cheeks",
|
"open mouth and flushed cheeks",
|
||||||
"tongue out with cum on lips",
|
"tongue out with cum on lips",
|
||||||
"heavy-lidded satisfied gaze",
|
"heavy-lidded satisfied gaze",
|
||||||
@@ -1134,11 +1134,11 @@
|
|||||||
"visibility": [
|
"visibility": [
|
||||||
"cum clearly visible",
|
"cum clearly visible",
|
||||||
"genitals and fluids visible",
|
"genitals and fluids visible",
|
||||||
"post-climax fluids anatomically clear",
|
"post-ejaculation fluids anatomically clear",
|
||||||
"face and body covered in visible cum",
|
"face and body covered in visible cum",
|
||||||
"open thighs and wetness visible",
|
"open thighs and wetness visible",
|
||||||
"explicit orgasm aftermath visible",
|
"explicit semen aftermath visible",
|
||||||
"hardcore climax detail visible",
|
"hardcore ejaculation detail visible",
|
||||||
"sexual fluids and body contact visible"
|
"sexual fluids and body contact visible"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -219,7 +219,7 @@
|
|||||||
{"name": "options_json", "type": "STRING", "links": [10], "slot_index": 0}
|
{"name": "options_json", "type": "STRING", "links": [10], "slot_index": 0}
|
||||||
],
|
],
|
||||||
"properties": {"Node name for S&R": "SxCPInstaOFOptions"},
|
"properties": {"Node name for S&R": "SxCPInstaOFOptions"},
|
||||||
"widgets_values": ["same_as_hardcore", "couple", 1, 1, "lingerie_tease", "hardcore", 0.45, 0.85, "hybrid", "same_creator_same_room", "handheld_selfie", "same_as_softcore"]
|
"widgets_values": ["same_as_hardcore", "couple", 1, 1, "lingerie_tease", "hardcore", 0.45, 0.85, "hybrid", "same_creator_same_room", "partially_removed", "handheld_selfie", "from_camera_config", "compact"]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 13,
|
"id": 13,
|
||||||
@@ -249,7 +249,7 @@
|
|||||||
{"name": "camera_config", "type": "STRING", "links": [12], "slot_index": 0}
|
{"name": "camera_config", "type": "STRING", "links": [12], "slot_index": 0}
|
||||||
],
|
],
|
||||||
"properties": {"Node name for S&R": "SxCPCameraControl"},
|
"properties": {"Node name for S&R": "SxCPCameraControl"},
|
||||||
"widgets_values": ["handheld_selfie", "three_quarter", "high_angle", "smartphone_wide", "arm_length", "vertical_story", "phone_visible", "locked"]
|
"widgets_values": ["standard", "auto", "auto", "auto", "auto", "auto", "auto", "soft_hint", "compact"]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 15,
|
"id": 15,
|
||||||
|
|||||||
+25
-21
@@ -763,52 +763,52 @@ def _climax_role_graph(role_graph: str, hard_item: str, axis_values: Any = None)
|
|||||||
if "the woman" not in text or "the man" not in text:
|
if "the woman" not in text or "the man" not in text:
|
||||||
return role_graph
|
return role_graph
|
||||||
if "lying between two partners" in text or "lies between" in text:
|
if "lying between two partners" in text or "lies between" in text:
|
||||||
return "the woman lies between two partners, the man under her hips and another partner over her torso as the climax lands on her body"
|
return "the woman lies between two partners, the man under her hips and another partner over her torso as visible semen lands on her body"
|
||||||
if "held between front-and-back partners" in text:
|
if "held between front-and-back partners" in text:
|
||||||
return "the woman is held between the man behind her and another partner in front of her as the climax lands across her body"
|
return "the woman is held between the man behind her and another partner in front of her as visible semen lands across her body"
|
||||||
if "kneeling between standing partners" in text:
|
if "kneeling between standing partners" in text:
|
||||||
return "the woman kneels between standing partners gathered around her face and torso as the climax lands across her body"
|
return "the woman kneels between standing partners gathered around her face and torso for visible ejaculation"
|
||||||
if "side-lying with thighs parted" in text:
|
if "side-lying with thighs parted" in text:
|
||||||
return "the woman lies on her side with thighs parted while the man kneels beside her hips as the climax lands across her thighs and pussy"
|
return "the woman lies on her side with thighs parted while the man kneels beside her hips and ejaculates semen across her thighs and pussy"
|
||||||
if "sitting on the edge of the bed" in text:
|
if "sitting on the edge of the bed" in text:
|
||||||
return "the woman sits on the edge of the bed with knees spread while the man stands close between her legs as the climax lands across her body"
|
return "the woman sits on the edge of the bed with knees spread while the man stands close between her legs and ejaculates semen across her body"
|
||||||
if "lying at the bed edge with thighs open" in text:
|
if "lying at the bed edge with thighs open" in text:
|
||||||
return "the woman lies at the bed edge with thighs open while the man kneels between her legs as the climax lands across her pussy and thighs"
|
return "the woman lies at the bed edge with thighs open while the man kneels between her legs and ejaculates semen across her pussy and thighs"
|
||||||
if "reclining with thighs open" in text or "lying on the back with legs spread" in text:
|
if "reclining with thighs open" in text or "lying on the back with legs spread" in text:
|
||||||
return "the woman lies on her back with thighs open while the man kneels between her legs as the climax lands across her pussy and thighs"
|
return "the woman lies on her back with thighs open while the man kneels between her legs and ejaculates semen across her pussy and thighs"
|
||||||
if "on all fours with hips raised" in text:
|
if "on all fours with hips raised" in text:
|
||||||
return "the woman is on all fours with hips raised while the man is positioned behind her as the climax lands across her ass, thighs, and lower back"
|
return "the woman is on all fours with hips raised while the man is positioned behind her and ejaculates semen across her ass, thighs, and lower back"
|
||||||
if "face-down ass-up" in text:
|
if "face-down ass-up" in text:
|
||||||
return "the woman lies face-down with ass raised while the man is positioned behind her as the climax lands across her lower back and ass"
|
return "the woman lies face-down with ass raised while the man is positioned behind her and ejaculates semen across her lower back and ass"
|
||||||
if "bent over with ass raised" in text or "bent over" in text:
|
if "bent over with ass raised" in text or "bent over" in text:
|
||||||
return "the woman bends forward with hips raised while the man stands behind her as the climax lands across her lower back, ass, and thighs"
|
return "the woman bends forward with hips raised while the man stands behind her with visible semen across her lower back, ass, and thighs"
|
||||||
if "kneeling with mouth open" in text:
|
if "kneeling with mouth open" in text:
|
||||||
return "the woman kneels in front of the man at hip height as the climax lands across her face, lips, and chest"
|
return "the woman kneels in front of the man at hip height as he ejaculates semen onto her face, lips, and chest"
|
||||||
if "kneeling in front of a standing partner" in text:
|
if "kneeling in front of a standing partner" in text:
|
||||||
return "the woman kneels in front of the man at hip height while he stands over her for the climax"
|
return "the woman kneels in front of the man at hip height while he stands over her for visible ejaculation"
|
||||||
if "standing with cum on the body" in text:
|
if "standing with cum on the body" in text:
|
||||||
return "the woman stands braced in front of the man while he stands close at hip level as the climax lands across her body"
|
return "the woman stands braced in front of the man while he stands close at hip level and ejaculates semen across her body"
|
||||||
if "squatting on top of a partner" in text:
|
if "squatting on top of a partner" in text:
|
||||||
return "the woman squats over the man's hips while the man lies on his back under her as the climax lands on her body"
|
return "the woman squats over the man's hips while the man lies on his back under her and ejaculates semen onto her body"
|
||||||
if "reverse cowgirl over a partner's hips" in text:
|
if "reverse cowgirl over a partner's hips" in text:
|
||||||
return "the woman straddles the man's hips facing away while the man lies on his back under her as the climax lands on her body"
|
return "the woman straddles the man's hips facing away while the man lies on his back under her and ejaculates semen onto her body"
|
||||||
if "straddles" in text or "straddling a partner" in text or "straddling a partner's hips" in text or "shared climax after penetration" in text:
|
if "straddles" in text or "straddling a partner" in text or "straddling a partner's hips" in text or "shared climax after penetration" in text:
|
||||||
return "the woman straddles the man's hips while the man lies on his back under her as the climax lands on her body"
|
return "the woman straddles the man's hips while the man lies on his back under her and ejaculates semen onto her body"
|
||||||
if "seated in a partner's lap facing them" in text:
|
if "seated in a partner's lap facing them" in text:
|
||||||
return "the woman sits in the man's lap facing him, legs wrapped around his hips as the climax lands across her body"
|
return "the woman sits in the man's lap facing him, legs wrapped around his hips as he ejaculates semen across her body"
|
||||||
if "lower back" in text or "cum dripping from ass" in text or "cum on lower back" in text or _mentions_rear_entry(text):
|
if "lower back" in text or "cum dripping from ass" in text or "cum on lower back" in text or _mentions_rear_entry(text):
|
||||||
return "the woman bends forward with hips raised while the man stands behind her as the climax lands across her lower back, ass, and thighs"
|
return "the woman bends forward with hips raised while the man stands behind her with visible semen across her lower back, ass, and thighs"
|
||||||
if "cum on face" in text or "cum on tongue" in text or "cum on lips" in text or "cum on tongue and chin" in text:
|
if "cum on face" in text or "cum on tongue" in text or "cum on lips" in text or "cum on tongue and chin" in text:
|
||||||
return "the woman kneels in front of the man at hip height as the climax lands across her face, lips, and chest"
|
return "the woman kneels in front of the man at hip height as he ejaculates semen onto her face, lips, and chest"
|
||||||
if (
|
if (
|
||||||
"cum dripping from pussy" in text
|
"cum dripping from pussy" in text
|
||||||
or "arousal dripping from pussy" in text
|
or "arousal dripping from pussy" in text
|
||||||
or "open thighs" in text
|
or "open thighs" in text
|
||||||
):
|
):
|
||||||
return "the woman lies on her back with thighs open while the man kneels between her legs as the climax lands across her pussy and thighs"
|
return "the woman lies on her back with thighs open while the man kneels between her legs and ejaculates semen across her pussy and thighs"
|
||||||
if role_graph:
|
if role_graph:
|
||||||
return role_graph
|
return role_graph
|
||||||
return "the woman lies on her back with thighs open while the man kneels between her legs as the climax lands across her body"
|
return "the woman lies on her back with thighs open while the man kneels between her legs and ejaculates semen across her body"
|
||||||
|
|
||||||
|
|
||||||
def _dedupe_climax_detail(detail: str, role_graph: str) -> str:
|
def _dedupe_climax_detail(detail: str, role_graph: str) -> str:
|
||||||
@@ -850,6 +850,10 @@ def _dedupe_climax_detail(detail: str, role_graph: str) -> str:
|
|||||||
patterns.append(r"standing with cum on the body")
|
patterns.append(r"standing with cum on the body")
|
||||||
for pattern in patterns:
|
for pattern in patterns:
|
||||||
detail = re.sub(rf"\b{pattern}\b,?\s*", "", detail, flags=re.IGNORECASE)
|
detail = re.sub(rf"\b{pattern}\b,?\s*", "", detail, flags=re.IGNORECASE)
|
||||||
|
if not any(token in lower for token in ("face", "mouth", "lips", "tongue")):
|
||||||
|
detail = re.sub(r"\bsaliva and cum mixed on the mouth\b", "visible semen on skin", detail, flags=re.IGNORECASE)
|
||||||
|
detail = re.sub(r"\bcum on tongue and chin\b", "visible semen on skin", detail, flags=re.IGNORECASE)
|
||||||
|
detail = re.sub(r"\bcum on face and lips\b", "visible semen on skin", detail, flags=re.IGNORECASE)
|
||||||
detail = re.sub(r",\s*,", ",", detail)
|
detail = re.sub(r",\s*,", ",", detail)
|
||||||
detail = re.sub(r"\bwith\s*,\s*", "with ", detail, flags=re.IGNORECASE)
|
detail = re.sub(r"\bwith\s*,\s*", "with ", detail, flags=re.IGNORECASE)
|
||||||
detail = re.sub(r"^with\s+", "", detail, flags=re.IGNORECASE)
|
detail = re.sub(r"^with\s+", "", detail, flags=re.IGNORECASE)
|
||||||
|
|||||||
+30
-27
@@ -2560,55 +2560,55 @@ def _role_graph(
|
|||||||
|
|
||||||
def climax_position_graph(woman: str, man: str, third: str = "") -> str:
|
def climax_position_graph(woman: str, man: str, third: str = "") -> str:
|
||||||
if "lying between two partners" in item_text and third:
|
if "lying between two partners" in item_text and third:
|
||||||
return f"{woman} lies between {man} and {third}, with {man} under her hips and {third} positioned above her torso as the climax lands on her body."
|
return f"{woman} lies between {man} and {third}, with {man} under her hips and {third} positioned above her torso as visible semen lands on her body."
|
||||||
if "held between front-and-back partners" in item_text and third:
|
if "held between front-and-back partners" in item_text and third:
|
||||||
return f"{woman} is held between {man} behind her and {third} in front of her as the climax lands across her body."
|
return f"{woman} is held between {man} behind her and {third} in front of her as visible semen lands across her body."
|
||||||
if "kneeling between standing partners" in item_text and third:
|
if "kneeling between standing partners" in item_text and third:
|
||||||
return f"{woman} kneels between {man} and {third} while both stand close around her face and torso for the climax."
|
return f"{woman} kneels between {man} and {third} while both stand close around her face and torso for visible ejaculation."
|
||||||
if "side-lying with thighs parted" in item_text:
|
if "side-lying with thighs parted" in item_text:
|
||||||
return f"{woman} lies on her side with thighs parted while {man} kneels beside her hips as the climax lands across her thighs and pussy."
|
return f"{woman} lies on her side with thighs parted while {man} kneels beside her hips and ejaculates semen across her thighs and pussy."
|
||||||
if "sitting on the edge of the bed" in item_text:
|
if "sitting on the edge of the bed" in item_text:
|
||||||
return f"{woman} sits on the edge of the bed with knees spread while {man} stands close between her legs as the climax lands across her body."
|
return f"{woman} sits on the edge of the bed with knees spread while {man} stands close between her legs and ejaculates semen across her body."
|
||||||
if "lying at the bed edge with thighs open" in item_text:
|
if "lying at the bed edge with thighs open" in item_text:
|
||||||
return f"{woman} lies at the bed edge with thighs open while {man} kneels between her legs as the climax lands across her pussy and thighs."
|
return f"{woman} lies at the bed edge with thighs open while {man} kneels between her legs and ejaculates semen across her pussy and thighs."
|
||||||
if "reclining with thighs open" in item_text or "lying on the back with legs spread" in item_text:
|
if "reclining with thighs open" in item_text or "lying on the back with legs spread" in item_text:
|
||||||
return f"{woman} lies on her back with thighs open while {man} kneels between her legs as the climax lands across her pussy and thighs."
|
return f"{woman} lies on her back with thighs open while {man} kneels between her legs and ejaculates semen across her pussy and thighs."
|
||||||
if "on all fours with hips raised" in item_text:
|
if "on all fours with hips raised" in item_text:
|
||||||
return f"{woman} is on all fours with hips raised while {man} is positioned behind her as the climax lands across her ass, thighs, and lower back."
|
return f"{woman} is on all fours with hips raised while {man} is positioned behind her and ejaculates semen across her ass, thighs, and lower back."
|
||||||
if "face-down ass-up" in item_text:
|
if "face-down ass-up" in item_text:
|
||||||
return f"{woman} lies face-down with ass raised while {man} is positioned behind her as the climax lands across her lower back and ass."
|
return f"{woman} lies face-down with ass raised while {man} is positioned behind her and ejaculates semen across her lower back and ass."
|
||||||
if "bent over with ass raised" in item_text or "bent over" in item_text:
|
if "bent over with ass raised" in item_text or "bent over" in item_text:
|
||||||
return f"{woman} is bent forward with hips raised while {man} is positioned behind her, climax visible across her lower back, ass, and thighs."
|
return f"{woman} is bent forward with hips raised while {man} is positioned behind her, visible semen across her lower back, ass, and thighs."
|
||||||
if "kneeling with mouth open" in item_text:
|
if "kneeling with mouth open" in item_text:
|
||||||
return f"{woman} kneels in front of {man} at hip height while {man} climaxes toward her face, lips, and chest."
|
return f"{woman} kneels in front of {man} at hip height while {man} ejaculates semen onto her face, lips, and chest."
|
||||||
if "kneeling in front of a standing partner" in item_text:
|
if "kneeling in front of a standing partner" in item_text:
|
||||||
return f"{woman} kneels in front of {man} at hip height while {man} stands over her for the climax."
|
return f"{woman} kneels in front of {man} at hip height while {man} stands over her for visible ejaculation."
|
||||||
if "standing with cum on the body" in item_text:
|
if "standing with cum on the body" in item_text:
|
||||||
return f"{woman} stands braced in front of {man} while he stays close at hip level and the climax lands across her body."
|
return f"{woman} stands braced in front of {man} while he stays close at hip level and ejaculates semen across her body."
|
||||||
if "squatting on top of a partner" in item_text:
|
if "squatting on top of a partner" in item_text:
|
||||||
return f"{woman} squats over {man}'s hips while {man} lies on his back under her as the climax lands on her body."
|
return f"{woman} squats over {man}'s hips while {man} lies on his back under her and ejaculates semen onto her body."
|
||||||
if "reverse cowgirl over a partner's hips" in item_text:
|
if "reverse cowgirl over a partner's hips" in item_text:
|
||||||
return f"{woman} straddles {man}'s hips facing away while {man} lies on his back under her as the climax lands on her body."
|
return f"{woman} straddles {man}'s hips facing away while {man} lies on his back under her and ejaculates semen onto her body."
|
||||||
if any(term in item_text for term in ("straddling a partner", "straddling a partner's hips", "shared climax after penetration", "orgasm during penetration")):
|
if any(term in item_text for term in ("straddling a partner", "straddling a partner's hips", "shared climax after penetration", "orgasm during penetration")):
|
||||||
return f"{woman} straddles {man}'s hips while {man} lies on his back under her, their bodies still aligned from penetration as the climax lands on her body."
|
return f"{woman} straddles {man}'s hips while {man} lies on his back under her, their bodies still aligned from penetration as he ejaculates semen onto her body."
|
||||||
if "seated in a partner's lap facing them" in item_text:
|
if "seated in a partner's lap facing them" in item_text:
|
||||||
return f"{woman} sits in {man}'s lap facing him, legs wrapped around his hips as the climax lands across her body."
|
return f"{woman} sits in {man}'s lap facing him, legs wrapped around his hips as he ejaculates semen across her body."
|
||||||
if any(term in item_text for term in ("lower back", "cum dripping from ass", "cum on lower back")) or mentions_ass(item_text):
|
if any(term in item_text for term in ("lower back", "cum dripping from ass", "cum on lower back")) or mentions_ass(item_text):
|
||||||
return f"{woman} is bent forward with hips raised while {man} is positioned behind her, climax visible across her lower back, ass, and thighs."
|
return f"{woman} is bent forward with hips raised while {man} is positioned behind her, visible semen across her lower back, ass, and thighs."
|
||||||
if any(term in item_text for term in ("cum on face", "cum on tongue", "cum on lips", "cum on face and lips", "cum on tongue and chin")):
|
if any(term in item_text for term in ("cum on face", "cum on tongue", "cum on lips", "cum on face and lips", "cum on tongue and chin")):
|
||||||
if third:
|
if third:
|
||||||
return f"{woman} kneels in the center while {man} and {third} stand close around her face and torso for the climax."
|
return f"{woman} kneels in the center while {man} and {third} stand close around her face and torso for visible ejaculation."
|
||||||
return f"{woman} kneels in front of {man} at hip height while {man} climaxes toward her face, lips, and chest."
|
return f"{woman} kneels in front of {man} at hip height while {man} ejaculates semen onto her face, lips, and chest."
|
||||||
return f"{woman} lies on her back with thighs open while {man} kneels between her legs as the climax lands on her body."
|
return f"{woman} lies on her back with thighs open while {man} kneels between her legs and ejaculates semen onto her body."
|
||||||
|
|
||||||
if people_count == 1:
|
if people_count == 1:
|
||||||
solo = people[0]
|
solo = people[0]
|
||||||
if women_count == 1:
|
if women_count == 1:
|
||||||
if "cumshot" in slug or "climax" in slug:
|
if "cumshot" in slug or "climax" in slug:
|
||||||
return f"{solo} is shown in a solo explicit climax pose with thighs open, one hand on her body, and visible arousal on skin and sheets."
|
return f"{solo} is shown in a solo explicit orgasm pose with thighs open, one hand on her body, and visible arousal on skin and sheets."
|
||||||
return f"{solo} is shown in a solo explicit adult pose with self-touch, open body framing, and direct camera awareness."
|
return f"{solo} is shown in a solo explicit adult pose with self-touch, open body framing, and direct camera awareness."
|
||||||
if "cumshot" in slug or "climax" in slug:
|
if "cumshot" in slug or "climax" in slug:
|
||||||
return f"{solo} is shown in a solo explicit climax pose with one hand on his penis, body angled toward the camera, and visible ejaculation detail."
|
return f"{solo} is shown in a solo visible ejaculation pose with one hand on his penis, body angled toward the camera, and semen visible."
|
||||||
return f"{solo} is shown in a solo explicit adult pose with direct camera awareness and clear body framing."
|
return f"{solo} is shown in a solo explicit adult pose with direct camera awareness and clear body framing."
|
||||||
|
|
||||||
if women_count > 0 and men_count == 0:
|
if women_count > 0 and men_count == 0:
|
||||||
@@ -2642,7 +2642,7 @@ def _role_graph(
|
|||||||
graph = f"{a} penetrates {b} anally while {helper} gives oral contact from the front."
|
graph = f"{a} penetrates {b} anally while {helper} gives oral contact from the front."
|
||||||
used.add(helper)
|
used.add(helper)
|
||||||
elif "cumshot" in slug or "climax" in slug:
|
elif "cumshot" in slug or "climax" in slug:
|
||||||
graph = f"{a} climaxes over {b}'s body while {b} keeps eye contact and one hand on his penis."
|
graph = f"{a} ejaculates semen over {b}'s body while {b} keeps eye contact and one hand on his penis."
|
||||||
else:
|
else:
|
||||||
graph = f"{a} and {b} keep explicit penis and anal contact visible."
|
graph = f"{a} and {b} keep explicit penis and anal contact visible."
|
||||||
return graph + support_sentence(used)
|
return graph + support_sentence(used)
|
||||||
@@ -3534,7 +3534,7 @@ def build_insta_of_options_json(
|
|||||||
continuity: str = "same_creator_same_room",
|
continuity: str = "same_creator_same_room",
|
||||||
hardcore_clothing_continuity: str = "partially_removed",
|
hardcore_clothing_continuity: str = "partially_removed",
|
||||||
softcore_camera_mode: str = "handheld_selfie",
|
softcore_camera_mode: str = "handheld_selfie",
|
||||||
hardcore_camera_mode: str = "same_as_softcore",
|
hardcore_camera_mode: str = "from_camera_config",
|
||||||
camera_detail: str = "compact",
|
camera_detail: str = "compact",
|
||||||
softcore_expression_intensity: float = 0.45,
|
softcore_expression_intensity: float = 0.45,
|
||||||
hardcore_expression_intensity: float = 0.85,
|
hardcore_expression_intensity: float = 0.85,
|
||||||
@@ -3573,7 +3573,7 @@ def _parse_insta_of_options(options_json: str | dict[str, Any] | None) -> dict[s
|
|||||||
"continuity": "same_creator_same_room",
|
"continuity": "same_creator_same_room",
|
||||||
"hardcore_clothing_continuity": "partially_removed",
|
"hardcore_clothing_continuity": "partially_removed",
|
||||||
"softcore_camera_mode": "handheld_selfie",
|
"softcore_camera_mode": "handheld_selfie",
|
||||||
"hardcore_camera_mode": "same_as_softcore",
|
"hardcore_camera_mode": "from_camera_config",
|
||||||
"camera_detail": "compact",
|
"camera_detail": "compact",
|
||||||
"softcore_expression_intensity": 0.45,
|
"softcore_expression_intensity": 0.45,
|
||||||
"hardcore_expression_intensity": 0.85,
|
"hardcore_expression_intensity": 0.85,
|
||||||
@@ -3602,7 +3602,10 @@ def _parse_insta_of_options(options_json: str | dict[str, Any] | None) -> dict[s
|
|||||||
else defaults["hardcore_clothing_continuity"]
|
else defaults["hardcore_clothing_continuity"]
|
||||||
)
|
)
|
||||||
parsed["softcore_camera_mode"] = parsed["softcore_camera_mode"] if parsed["softcore_camera_mode"] in CAMERA_MODE_PROMPTS else defaults["softcore_camera_mode"]
|
parsed["softcore_camera_mode"] = parsed["softcore_camera_mode"] if parsed["softcore_camera_mode"] in CAMERA_MODE_PROMPTS else defaults["softcore_camera_mode"]
|
||||||
if parsed["hardcore_camera_mode"] not in CAMERA_MODE_PROMPTS and parsed["hardcore_camera_mode"] != "same_as_softcore":
|
if (
|
||||||
|
parsed["hardcore_camera_mode"] not in CAMERA_MODE_PROMPTS
|
||||||
|
and parsed["hardcore_camera_mode"] not in ("from_camera_config", "same_as_softcore")
|
||||||
|
):
|
||||||
parsed["hardcore_camera_mode"] = defaults["hardcore_camera_mode"]
|
parsed["hardcore_camera_mode"] = defaults["hardcore_camera_mode"]
|
||||||
parsed["camera_detail"] = parsed["camera_detail"] if parsed["camera_detail"] in CAMERA_DETAIL_CHOICES else defaults["camera_detail"]
|
parsed["camera_detail"] = parsed["camera_detail"] if parsed["camera_detail"] in CAMERA_DETAIL_CHOICES else defaults["camera_detail"]
|
||||||
parsed["softcore_expression_intensity"] = _clamped_float(
|
parsed["softcore_expression_intensity"] = _clamped_float(
|
||||||
|
|||||||
Reference in New Issue
Block a user