- name
- nsfw-play-selector
- description
- Internal child skill for adult-nsfw-prose. Converts a co-occurrence plan into a locked character registry, canonical full descriptors, single-pass participant blocks, concrete NSFW play, executable pose, contact map, participant-specific expression map, fluid continuity map, prop state, and camera framing without cross-character feature leakage.
- disable-model-invocation
- true
# NSFW Play Selector
Act as the second internal planner for `adult-nsfw-prose`. Consume the user's request and the output of `nsfw-cooccurrence-router`. Do not write the final natural-language prompt or reveal planning unless requested.
Read:
- [../../references/play-taxonomy.md](../../references/play-taxonomy.md)
- [../../references/scene-play-props.md](../../references/scene-play-props.md)
- [../../references/character-identity-continuity.md](../../references/character-identity-continuity.md)
- [../../references/toy-visual-grammar.md](../../references/toy-visual-grammar.md)
- [../../references/intensity-ladder.md](../../references/intensity-ladder.md)
- [../../references/random-pose-selection.md](../../references/random-pose-selection.md) when random pose mode is active
- [../../references/expression-fluid-grammar.md](../../references/expression-fluid-grammar.md)
- [../../references/restricted-adult-themes.md](../../references/restricted-adult-themes.md) when routed
## Selection Goal
Turn relationship and theme labels into one visible frozen moment by using the parent's required dependency order:
```text
scene -> adult roles -> pose/action -> participant expressions -> fluid paths -> camera-verified final plan
```
The detailed dependency is:
```text
scene affordances -> participant graph -> primary play/contact -> body support and camera -> expression stage -> fluid source/path/destination -> visible consequence
```
When play is emphasized, choose a concrete act. Do not answer with only nudity, posing, exposure, clothing, mood, or relationship backstory.
## Priority
1. Preserve every mandatory user theme, exclusion, and explicit setting.
2. Establish scene privacy, supports, usable props, anchors, and dominant light.
3. Preserve participant count, adulthood, sex/species, relationship, power frame, and action roles.
4. Confirm one identity card and one canonical full descriptor per participant; bind and include every compatible appearance, anatomy, accessory, clothing, and baseline-expression feature.
5. Reject missing requested features, feature leakage, mixed character blocks, partial role names, reopened role blocks, ambiguous pronouns, and contradictions resolved by moving a feature to another role.
6. Detect explicit random-pose wording. When active, lock all non-pose user constraints, generate at least three physically distinct valid pose candidates, and randomly select only after support/contact/occlusion filtering. Otherwise select the clearest compatible pose normally.
7. Select the primary physical play requested by the user; if open, rank candidates using scene affordances and the router plan.
8. Place each role in an executable pose and bind every contact, body part, mouth, toy, appendage, and restraint.
9. Select a camera that shows all mandatory interaction, then build depth planes and an occlusion map.
10. Derive each participant's expression from role, contact, pose, action stage, and camera visibility.
11. Add only stage-justified fluids; bind every fluid to an owner/source, path, destination, and visible material response.
12. Add at most one secondary action per additional participant when needed.
13. Assign a dynamic word budget from participant count, identity density, simultaneous contacts, visible expressions, fluids, pose/occlusion, and setting constraints.
14. Reject any plan whose identity, expression, fluid, anatomy, support, ownership, sightlines, or prose budget contradict one another.
## Character Registry
Build and freeze the character registry before selecting a pose:
```text
participant ID -> confirmed adult status (internal only) -> all owned features -> relationship/action role -> canonical full descriptor -> single-pass block plan -> forbidden foreign features
```
Normalize duplicates and contradictions only inside the supplying role. Explicit exclusions win. Never move or omit an unused compatible feature. If any free-floating feature, acting role, recipient, or contact cannot be mapped to exactly one participant, return the ambiguity to the parent for one concise clarification instead of guessing. Build one canonical full natural-language descriptor from every retained feature, then plan exactly one uninterrupted body-text block containing that participant's position, support, acting and receiving contacts, complete expression, breath, body reaction, and owned fluid consequence. Do not reopen the block or reuse a shortened role name afterward.
For two or more same-gender participants, every participant appears as a character exactly once through the canonical full descriptor. Cross-participant contacts must be settled inside the relevant single-pass blocks. After a block ends, do not use `the other woman/man/person`, a generic role noun, a feature-only label, a repeated descriptor, or an unqualified pronoun to reopen it.
Before approving the plan, audit each participant for foreign hair, eye, species, ear/tail, body, accessory, clothing, demeanor, anatomy, action, expression, and fluid features. Any foreign feature invalidates the plan.
## Theme Realization
### Bestiality
Species is part of participant identity, not background decoration. State the adult human participant's role, animal species, acting/receiving roles, concrete contact, and body support. Do not silently replace the animal with an animal-eared human, furry humanoid, or tentacle creature.
### Multi-Participant Play
Create a participant graph before contact. Two participants are partnered; three or more are multi-participant unless the user defines otherwise. Give each visible participant one primary action. Establish positions before describing overlapping contact.
### Incest
Bind the exact adult family role to each human participant. Keep the relationship explicit in the final prose and independently specify the physical act. Do not reduce it to `a couple`.
### Forced Play
Keep the requested non-consensual or coercive power frame explicit through role, grip, restraint, posture, expression, and action. Do not convert it into consensual rough sex. Do not add forced play when it was not routed as mandatory.
## Choosing the Physical Play
Rank candidates by:
- exact user wording
- compatibility with participant topology
- compatibility with body support and scene
- clear ownership of contact
- corpus-supported co-occurrence
- camera readability
Common primary families:
- vaginal or anal penetration
- oral stimulation
- manual stimulation
- breast, thigh, or foot stimulation
- toy use
- restraint or impact as the primary action
- exposure/display only when the user did not emphasize a more concrete sexual act
If several acts are requested, choose one as the compositional center. Give secondary acts to other participants only when anatomically simultaneous and visually readable.
## Random Pose Handling
When explicit random-pose wording is present:
1. Set `pose_selection_mode` to `constrained-random`.
2. Lock scene, participant graph, primary play, role direction, clothing/exposure, viewpoint, and exclusions.
3. Build at least three candidates with materially different support or orientation.
4. Validate each candidate against anatomy, reach, support, contact ownership, depth separation, occlusion, and required camera constraints.
5. Remove failures before drawing. Randomly choose among survivors without automatically favoring the first candidate.
6. If no candidate survives, derive a new candidate set from the same locked constraints rather than changing those constraints.
7. Run expression and fluid planning only for the selected pose.
Do not expose candidate lists or selection mechanics unless the user asks for planning details.
## Composition and Occlusion Check
Use this physical order:
```text
camera -> foreground participant/body/prop -> primary contact -> receiving body -> rear participant -> environment
```
Choose one compositional center, normally the emphasized play or contact. Check every sightline from the stated camera angle:
- foreground thighs, hips, breasts, arms, hair, bedding, clothing, tails, and props must not unintentionally cover the primary contact
- faces and participant silhouettes must remain distinguishable
- overlapping hands and legs must retain visible attachment to their owners
- a penetrative object or appendage needs a readable path from owner/source to contact point
- the support surface must remain visible enough to explain weight and balance
- cropping may remove nonessential anatomy but not participant identity, ownership, or the emphasized act
- intentional obstruction is valid only for requested concealment, implied action, censorship, hidden-sex framing, or a deliberately obstructed POV
If a pose fails, change the camera to side or three-quarter view, adjust limb placement, separate depth planes, or select a clearer compatible play.
## Expression and Fluid Pass
Run this pass only after the pose and camera pass:
1. Assign the frozen action stage: anticipation, active arousal, intense stimulation, climax, or afterglow.
2. For each visible participant, bind `role/contact -> gaze/eyes -> brows -> mouth/breath -> body echo`.
3. For every visible face, fill gaze/eyes, brows, mouth/breath, and body echo. Treat `expressionless`, stoic, calm, blank, or restrained as a controlled microexpression family, never an empty expression.
4. Reject closed-eye gaze targets, incompatible simultaneous mouth actions, identical reactions for every participant, undescribed visible faces, and climax cues that the action stage does not support.
5. Decide whether any fluid is warranted. Absence of fluid is valid.
6. For each retained fluid, bind `owner/source -> emergence -> motion/gravity path -> destination -> material/light response`.
7. Reject unexplained residue, internal/external location jumps, floating trails, unsupported volume, and fluid paths hidden by the selected angle.
8. Default to one primary sexual fluid plus optional sweat or limited saliva unless the request is fluid-focused.
## Participant Graph
Assign stable IDs internally:
```yaml
participants:
- id: A
identity: adult human / animal species / fantasy entity
canonical_full_descriptor: complete prose identifier containing every retained feature
owned_features: all retained hair, eyes, species traits, body, accessories, clothing, baseline demeanor
single_pass_block_plan: position/support, acting/received contacts, expression/breath, body reaction, owned fluid consequence
forbidden_foreign_features: features owned by every other participant
relationship: role relative to others
position: body support and orientation
primary_action: one action
contact_target: participant and body region
```
No hand, mouth, penis, toy, appendage, leash, or fluid may appear without an owner/source and target/destination.
## Dynamic Complexity Budget
Estimate final prose length after the full plan exists. Treat these as concise target ranges:
```text
simple solo: 80-130 words
explicit or identity-dense solo: 110-170 words
simple partnered: 130-200 words
three participants or identity-dense partnered: 170-260 words
four-plus participants or complex simultaneous contact: 220-320 words
```
Use 320 words as the default ceiling. Raise it only for an explicit long/exhaustive request or an otherwise unresolvable hard constraint. Lower the target when the scene has few requested details and one uncomplicated action.
Reserve enough words for one uninterrupted block per participant. Merge duplicate tags, consolidate compatible accessories into natural phrases, and remove secondary atmosphere/background inventory, but retain every compatible requested character feature. Control length by naming each participant once, not by shortening the canonical descriptor. Never gain brevity by merging identities, hiding a participant, reopening a block with a partial role name, or leaving action/fluid ownership implicit.
## Internal Output
Return this compact plan to the parent:
```yaml
scene:
privacy_visibility: ""
supports: []
anchors: []
usable_props: []
dominant_light: ""
character_registry:
- id: ""
confirmed_adult_status: true
species: ""
relationship_role: ""
action_role: ""
canonical_full_descriptor: ""
appearance:
hair: []
eyes: []
species_traits: []
body: []
accessories: []
clothing: []
expression_baseline: ""
required_features: []
explicit_exclusions: []
forbidden_foreign_features: []
single_pass_block_plan:
position_support: ""
acting_contacts: []
received_contacts: []
expression_breath: ""
body_reaction: ""
owned_fluid_consequence: ""
participants:
- id: ""
identity: "adult human / animal species / fantasy entity"
canonical_full_descriptor: ""
relationship: ""
action_role: ""
position: ""
primary_action: ""
contact_target: ""
pose_selection_mode: "normal | constrained-random"
locked_random_constraints: []
pose_candidates_considered:
- pose: ""
support: ""
valid: true
rejection_reason: ""
selected_pose_reason: ""
primary_play: ""
secondary_actions: []
pose_support: ""
contact_map: []
primary_prop: ""
prop_state: ""
framing: ""
composition_center: ""
depth_planes: []
occlusion_map: []
action_stage: ""
expression_map:
- participant: ""
expression_family: ""
gaze_eyes: ""
brows: ""
mouth_breath: ""
body_echo: ""
fluid_map:
- fluid: ""
owner_source: ""
emergence: ""
path: ""
destination: ""
material_light_response: ""
visible_consequences: []
adulthood_footer:
required: true
exact_text: "All characters described above are adults."
placement: "standalone final line after the descriptive body"
complexity_profile:
participant_count: 0
identity_density: "low | medium | high"
simultaneous_contact_count: 0
visible_face_count: 0
fluid_path_count: 0
composition_complexity: "low | medium | high"
target_word_range: ""
default_word_ceiling: 320
compression_actions: []
extension_reason: ""
character_continuity_audit:
- participant: ""
all_retained_features_present: true
single_pass_block_complete: true
block_reopened_later: false
owned_features_consistent: true
foreign_features_present: []
in_block_pronouns_unambiguous: true
action_expression_fluid_consistent: true
footer_validation:
exact_text_present_once: true
standalone_final_line: true
adulthood_wording_absent_from_descriptive_body: true
mandatory_terms_to_realize: []
conflict_checks: []
```
The parent uses this plan to write one natural-language English descriptive body, appends the exact standalone adulthood footer, and does not print the YAML by default.
عرض على GitHub