Consume formatter hints
This commit is contained in:
@@ -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"))
|
||||
|
||||
Reference in New Issue
Block a user