Expand hardcore interaction pools

This commit is contained in:
2026-06-26 12:54:35 +02:00
parent 4f0203fc3d
commit a392ab9779
6 changed files with 1203 additions and 11 deletions
+40 -5
View File
@@ -85,6 +85,7 @@ These recipes identify the intended road before editing prompt text.
| Keep character/location but change only sexual pose | `Global Seed` or fixed seed config -> builder/pair | Keep `person_seed` and `scene_seed` fixed; change `pose_seed` and usually `role_seed`; for hardcore categories check `content_seed_axis` | `sexual_poses.json`, `hardcore_position_config`, Krea `_hardcore_action_sentence` |
| Generate a specific hardcore oral/blowjob scene | `Hardcore Position Pool` -> `Hardcore Action Filter` -> `Insta/OF Prompt Pair` or `Prompt Builder` | Use `focus=oral_only` or disable non-oral families; keep `allow_oral=true`; constrain position pool to kneeling/standing/oral variants when needed | `sexual_poses.json` oral subcategory/templates, `_apply_hardcore_position_config_to_subcategory`, `_hardcore_action_sentence` |
| Generate POV oral or POV penetration | `Man Slot` with POV presence -> `character_cast` -> pair/builder -> Krea2 formatter | POV man must be in the cast; use metadata into Krea2; normal camera directive is suppressed by POV | `_pov_hardcore_pose_sentence`, `_pov_action_phrase`, `_cast_prose` omit-label handling |
| Generate porn-scene interaction beats | `Hardcore Position Pool` -> `Hardcore Action Filter` -> pair/builder | Use `focus=interaction_only` for kissing/body worship/transitions/guidance/camera/watching/aftercare, or `focus=manual_only` for fingering/clit/manual stimulation; constrain keys such as `camera_showing`, `wrist_pinning`, `fingering`, `aftercare` | `sexual_poses.json` interaction/manual subcategories, `_role_graph`, Krea `_is_foreplay_text` / `_hardcore_action_sentence` |
| Same woman, same room, softcore and hardcore outputs | `Character Slot/Profile` -> `Insta/OF Options` -> `Insta/OF Prompt Pair` | `continuity=same_creator_same_room`; set `softcore_cast` as needed; use pair metadata into formatter | `build_insta_of_pair`, `softcore_row`, `hardcore_row`, pair metadata fields |
| Same cast in softcore and hardcore | Character slot chain -> `Insta/OF Options` | `softcore_cast=same_as_hardcore`; configure partner slots/outfits if needed | `_insta_of_partner_styling`, character slot clothing, pair Krea branch |
| Change only outfit/clothing | Character clothing or category content route | Keep `person_seed`, `scene_seed`, `pose_seed`; change `content_seed`; slot `softcore_outfit` overrides Insta/OF outfit | `SxCP Character Clothing`, `INSTA_OF_SOFTCORE_OUTFITS`, category item templates |
@@ -205,7 +206,7 @@ This table is the first stop when the selected content is wrong.
| `default_categories.json` men casual subcategories | Male casual outfit/items and men-specific casual pools | Same as above | Medium if men are part of a mixed cast and clothing detail is too strong |
| `default_categories.json` couple casual subcategories | Couple outfit/action-ish soft poses and couple pools | Same as above | Medium because labels and partner styling can duplicate pair mode |
| `erotic_clothes.json` | Provocative/erotic clothing categories and softcore creator scenes | `content`, `scene`, `expression`, `composition` | Medium because nude/implied-nude wording can conflict with clothes |
| `sexual_poses.json` foreplay/oral/outercourse/penetration/etc. | Hardcore action item templates, role graphs, axis values, hardcore pool references | `pose` for pose-content route, also `role`; sometimes `content` aliases matter | High because Krea2 rewrites action and POV position text |
| `sexual_poses.json` foreplay/interaction/manual/oral/outercourse/penetration/etc. | Hardcore action and porn-scene interaction templates, role graphs, axis values, hardcore pool references | `pose` for pose-content route, also `role`; sometimes `content` aliases matter | High because Krea2 rewrites action and POV position text |
| `location_pools.json` | Reusable scene pools and legacy scene extensions | `scene` | Medium when a camera-aware adapter changes scene/composition wording |
| `expression_composition_pools.json` | Reusable expressions and framing/composition pools | `expression`, `composition` | Medium because formatter may label or suppress expressions |
| `generate_prompt_batches.py` legacy pools | Built-in generator clothing, pose, expression, scene, composition lists | Main row seed plus axis config through legacy adapter | Medium because legacy prompt format is field-label heavy |
@@ -268,6 +269,10 @@ Edit targets:
- Normal pose pools: legacy `g.POSES`, `g.EVOCATIVE_POSES`, or JSON `poses`.
- Hardcore positions/actions: `categories/sexual_poses.json`.
- Hardcore interaction beats: `categories/sexual_poses.json` subcategories
`foreplay_teasing`, `manual_stimulation`, `body_worship_touching`,
`clothing_position_transitions`, `dominant_guidance`,
`camera_performance`, `group_coordination`, and `aftercare_cleanup`.
- Position filtering UI: `build_hardcore_position_pool_json`,
`build_hardcore_action_filter_json`, `_apply_hardcore_position_config_to_subcategory`.
- Krea2 action rewrite, POV position rewrite, cleanup: `krea_formatter.py`.
@@ -358,8 +363,8 @@ Hardcore row:
- Category is always `Hardcore sexual poses`.
- Cast count comes from `SxCP Insta/OF Options`.
- Position/action can be constrained by `SxCP Hardcore Position Pool` and
`SxCP Hardcore Action Filter`.
- Position/action/interaction can be constrained by `SxCP Hardcore Position
Pool` and `SxCP Hardcore Action Filter`.
- Clothing comes from character slot hardcore clothing first, then fallback
`hardcore_clothing_continuity`.
- Men receive default hardcore clothing if visible and not configured.
@@ -410,7 +415,7 @@ plain prompt text. When debugging, inspect these fields before editing pools.
| `character_cast_slots` | Character slot chain | POV/camera/formatters | Raw configured slots. |
| `character_slot_status`, `character_profile_status` | Character/profile application | Debug | Explains whether slot/profile was applied or skipped. |
| `pov_character_labels` | Character slot presence mode | Krea/prompt/camera | Labels omitted from visible cast and rewritten as first-person POV. |
| `hardcore_position_config` | Hardcore position/filter nodes | Debug | Active hardcore family/position/action constraints. |
| `hardcore_position_config` | Hardcore position/filter nodes | Debug | Active hardcore family/position/action/interaction constraints, including `interaction_only` and `manual_only`. |
| `negative_prompt` | Category/pair/default negative route | Formatter output | Base negative text before formatter extras. |
| `trigger` | Builder input | Formatter/fallback/debug | Active trigger after fallback to default. |
@@ -453,11 +458,40 @@ flowchart TD
What each part owns:
- `sexual_poses.json`: available positions, families, action templates, role
graph templates, and action-specific pool references.
graph templates, interaction templates, and action-specific pool references.
- `prompt_builder.py`: filters which templates/axes remain available.
- `krea_formatter.py`: rewrites the selected action into model-readable prose,
including POV variants and cleanup.
Current broad hardcore families:
| Family / focus | Subcategories |
| --- | --- |
| `penetrative` / `penetration_only` | `penetrative_sex` |
| `foreplay` / `foreplay_only` | `foreplay_teasing` |
| `interaction` / `interaction_only` | `foreplay_teasing`, `body_worship_touching`, `clothing_position_transitions`, `dominant_guidance`, `camera_performance`, `group_coordination`, `aftercare_cleanup` |
| `manual` / `manual_only` | `manual_stimulation` |
| `oral` / `oral_only` | `oral_sex` |
| `outercourse` / `outercourse_only` | `outercourse_sex`, `manual_stimulation` |
| `anal` / `anal_only` | `anal_double_penetration` |
| `climax` / `climax_only` | `cumshot_climax` |
| `threesome` / `threesome_only` | `threesomes` |
| `group` / `group_only` | `group_sex_orgy` |
The action filter also has independent gates for toys, double-contact,
penetration, foreplay, interaction, manual stimulation, oral, outercourse, anal,
and climax. Keep `allow_interaction=true` when using the broader interaction
family; keep `allow_manual=true` when manual stimulation should remain possible.
`allow_anal=false` blocks anal-sex wording, not ordinary ass-touching interaction
phrases such as ass grabbing or body worship.
Interaction selector keys include kissing/caressing/undressing, body worship,
nipple play, ass grabbing, thigh kissing, hair holding, wrist pinning, dirty
talk, position transitions, guided positioning, camera presentation, watching,
aftercare, cleanup, fingering, clit rubbing, and mutual masturbation. These keys
are still routed through `hardcore_position_config.positions`, so they are
controlled by the same `pose`/`role` debug path as other hardcore action keys.
If one action keeps recurring, inspect:
1. The enabled position family/action flags.
@@ -614,6 +648,7 @@ or pool appears there but not in this map, update the relevant route table.
| Wrong expression intensity | Character slot expression settings, `_expression_entries_for_intensity`, expression pools. |
| Expression appears when disabled | `_disable_row_expression`, formatter expression extraction. |
| Same hardcore action repeats | Hardcore filter config, `sexual_poses.json` weights, `_apply_hardcore_position_config_to_subcategory`. |
| Hardcore interaction beat falls back to penetration/oral | `sexual_poses.json` interaction subcategory, `_role_graph`, and Krea `_is_foreplay_text` / `_hardcore_pose_anchor`. |
| Raw hardcore prompt position is vague | `sexual_poses.json` item templates and role graph templates. |
| Krea2 hardcore prompt position is vague | `_hardcore_action_sentence` or `_pov_hardcore_pose_sentence`. |
| Man appears described in POV | POV labels, `_cast_prose` omit labels, `_pov_action_phrase`. |