Extract row expression policy

This commit is contained in:
2026-06-27 08:56:35 +02:00
parent e5822e42f8
commit 3d9dbdc95d
5 changed files with 412 additions and 222 deletions
@@ -169,6 +169,10 @@ Already isolated:
runtime location/composition pool overrides, and generator fallback pool
selection live in `row_pools.py`; `prompt_builder.py` keeps public delegate
wrappers.
- row expression text cleanup, expression intensity weighting,
character-slot/cast expression override resolution, and per-character
expression picking live in `row_expression.py`; `prompt_builder.py` keeps
public delegate wrappers.
- hardcore position/action-filter choices, selected-position normalization,
config JSON builders/parsers, focus-policy toggles, subcategory allow-list
policy, position-key detection, category filtering, and item-template/axis
+6 -5
View File
@@ -82,6 +82,7 @@ Core helper ownership:
| `subject_context.py` | Row subject-context routing for single, couple, configured-cast, group, and layout subjects, combining appearance policy, cast metadata, and generator subject pools. |
| `location_config.py` | Location/composition preset schemas, themed location packs, custom location/composition parsing, pool merge behavior, and location/composition config parsing. |
| `row_location.py` | Built-in row location/composition config application, deterministic scene/composition choice, source metadata, and legacy prompt/caption rewrites. |
| `row_expression.py` | Row expression cleanup, expression intensity weighting, character-slot/cast expression override resolution, and per-character expression selection. |
| `row_pools.py` | Row scene/expression/pose/composition pool routing, category inheritance handling, runtime location/composition pool overrides, and generator fallback pools. |
| `hardcore_position_config.py` | Hardcore position/action-filter choices, selected-position normalization, config JSON builders/parsers, focus-policy toggles, subcategory allow-list policy, position-key detection, and category/template/axis filtering. |
| `pair_options.py` | Insta/OF option schema/defaults, softcore category/outfit/pose pools, partner outfit pools, clothing-continuity labels, negatives, hardcore cast count policy, and hardcore detail-density directives. |
@@ -299,8 +300,8 @@ Edit targets:
### Expression
Expression text is selected by `_expression_pool`, then filtered by
`_expression_entries_for_intensity`.
Expression text is selected by `_expression_pool`, then filtered through
`row_expression.expression_entries_for_intensity`.
Resolution order:
@@ -315,7 +316,7 @@ Edit targets:
- General expression pools: `categories/expression_composition_pools.json`.
- Hardcore-specific expressions: usually `categories/sexual_poses.json` or named
hardcore expression pools.
- Character-level expression settings: slot config and `_cast_expression_intensity_override`.
- Character-level expression settings: slot config and `row_expression.py`.
- Formatter expression wording: `krea_formatter.py` or `caption_naturalizer.py`.
### Pose / Action
@@ -842,8 +843,8 @@ pair metadata through the core Python APIs, then verifies:
| Wrong location | `categories/location_pools.json`, category `scene_pool`, `_scene_pool`. |
| Location good but camera/location layout wrong | `_camera_scene_directive_for_context`, coworking adapter functions. |
| Repeated desk/anchor in POV foreground | Coworking direction/distance/elevation helpers. |
| Wrong expression intensity | Character slot expression settings, `_expression_entries_for_intensity`, expression pools. |
| Expression appears when disabled | `_disable_row_expression`, formatter expression extraction. |
| Wrong expression intensity | Character slot expression settings, `row_expression.py`, expression pools. |
| Expression appears when disabled | `row_expression.disable_row_expression`, formatter expression extraction. |
| Same hardcore action repeats | Hardcore filter config, `sexual_poses.json` weights, `hardcore_position_config.apply_hardcore_position_config_to_subcategory`. |
| Hardcore interaction beat falls back to penetration/oral | `sexual_poses.json` interaction subcategory, `_role_graph`, and `krea_action_context.is_foreplay_text` / `krea_action_positions.hardcore_pose_anchor`. |
| Raw hardcore prompt position is vague | `sexual_poses.json` item templates and role graph templates. |