Extract expression route resolution

This commit is contained in:
2026-06-27 10:13:55 +02:00
parent 58abbaa347
commit a5b648eb98
5 changed files with 178 additions and 29 deletions
+42 -24
View File
@@ -1446,6 +1446,33 @@ def _cast_expression_intensity_override(
)
def _resolve_expression_route(
*,
expression_enabled: bool,
expression_intensity: float,
expression_intensity_source: str,
subject_type: str,
applied_slot: dict[str, Any] | None = None,
character_slots: list[dict[str, Any]] | None = None,
character_slot_map: dict[str, dict[str, Any]] | None = None,
women_count: int = 1,
men_count: int = 1,
expression_phase: str = "",
) -> row_expression_policy.ExpressionRoute:
return row_expression_policy.resolve_expression_route(
expression_enabled=expression_enabled,
expression_intensity=expression_intensity,
expression_intensity_source=expression_intensity_source,
subject_type=subject_type,
applied_slot=applied_slot,
character_slots=character_slots,
character_slot_map=character_slot_map,
women_count=women_count,
men_count=men_count,
expression_phase=expression_phase,
)
def _character_expression_entries(
rng: random.Random,
expression_pool: list[Any],
@@ -2176,30 +2203,21 @@ def _build_custom_row(
if is_pose_category:
source_role_graph = _sanitize_hardcore_environment_anchors(source_role_graph)
role_graph = _pov_role_graph_prompt(source_role_graph, pov_character_labels)
expression_intensity_source = expression_intensity_source or "input"
expression_disabled = not bool(expression_enabled)
if expression_disabled:
expression_intensity_source = "disabled"
elif subject_type in ("woman", "man") and applied_slot:
slot_label = "Woman A" if subject_type == "woman" else "Man A"
if not _slot_expression_enabled(applied_slot):
expression_disabled = True
expression_intensity_source = f"character_slot:{slot_label}:disabled"
else:
slot_expression_intensity = _slot_expression_intensity_for_phase(applied_slot, expression_phase)
if slot_expression_intensity is not None:
expression_intensity = slot_expression_intensity
expression_intensity_source = f"character_slot:{slot_label}"
elif subject_type == "configured_cast" and character_slots:
expression_intensity, expression_intensity_source = _cast_expression_intensity_override(
expression_intensity,
character_slot_map,
women_count,
men_count,
expression_phase,
)
if expression_intensity is None:
expression_disabled = True
expression_route = _resolve_expression_route(
expression_enabled=expression_enabled,
expression_intensity=expression_intensity,
expression_intensity_source=expression_intensity_source,
subject_type=subject_type,
applied_slot=applied_slot,
character_slots=character_slots,
character_slot_map=character_slot_map,
women_count=women_count,
men_count=men_count,
expression_phase=expression_phase,
)
expression_disabled = expression_route.expression_disabled
expression_intensity = expression_route.expression_intensity
expression_intensity_source = expression_route.expression_intensity_source
prompt_axes = _prompt_axes_route(
category=category,