Consume formatter hints

This commit is contained in:
2026-06-27 02:17:04 +02:00
parent dfdfff953b
commit 7d112c0f98
7 changed files with 145 additions and 5 deletions
+20
View File
@@ -5,11 +5,13 @@ from typing import Any
try:
from . import formatter_input as input_policy
from . import category_template_metadata as template_metadata_policy
from . import sdxl_presets as sdxl_policy
from .hardcore_action_metadata import normalize_hardcore_action_family
from .prompt_hygiene import sanitize_negative_text, sanitize_tag_prompt
except ImportError: # Allows local smoke tests with `python -c`.
import formatter_input as input_policy
import category_template_metadata as template_metadata_policy
import sdxl_presets as sdxl_policy
from hardcore_action_metadata import normalize_hardcore_action_family
from prompt_hygiene import sanitize_negative_text, sanitize_tag_prompt
@@ -137,6 +139,18 @@ def _metadata_family_tags(row: dict[str, Any]) -> list[str]:
return tags
def _formatter_hint_tags(*rows: dict[str, Any]) -> list[str]:
tags: list[str] = []
for row in rows:
if not isinstance(row, dict):
continue
for hint in template_metadata_policy.formatter_hints_for_route(row, "sdxl"):
hint = _clean(hint).strip(" ,.")
if hint and hint not in tags:
tags.append(hint)
return tags
def _combine_tags(*parts: Any) -> str:
tags: list[str] = []
seen: set[str] = set()
@@ -288,6 +302,8 @@ def _row_core_tags(row: dict[str, Any], nude_weight: float) -> list[str]:
for tag in _metadata_family_tags(row):
_add_one(tags, seen, tag)
for tag in _formatter_hint_tags(row):
_add(tags, seen, tag)
item = _row_value(row, "item", ("Sexual scene", "Sexual pose", "Erotic outfit", "Clothing")) or _clean(row.get("custom_item"))
pose = _row_value(row, "pose", ("Sexual pose", "Pose"))
@@ -334,6 +350,8 @@ def _quality_tail(quality_preset: str, custom_quality: str) -> str:
def _soft_tags(row: dict[str, Any], root: dict[str, Any], nude_weight: float) -> str:
tags = _row_core_tags(row, nude_weight)
seen = {_tag_key(tag) for tag in tags}
for tag in _formatter_hint_tags(root):
_add(tags, seen, tag)
descriptor = _clean(root.get("shared_descriptor"))
if descriptor and not any("woman" in _tag_key(tag) for tag in tags):
for tag in _character_tags_from_descriptor(descriptor):
@@ -369,6 +387,8 @@ def _hard_tags(row: dict[str, Any], root: dict[str, Any], nude_weight: float) ->
for tag in _metadata_family_tags(row):
_add_one(tags, seen, tag)
for tag in _formatter_hint_tags(row, root):
_add(tags, seen, tag)
hard_scene = _clean(row.get("scene_text"))
hard_item = _clean(row.get("item"))