From 718da9a68dc7c32826017f4abafafa8b75d39d9c Mon Sep 17 00:00:00 2001 From: Ethanfel Date: Sat, 27 Jun 2026 22:27:41 +0200 Subject: [PATCH] Clean SDXL imperative hand tags --- sdxl_tag_policy.py | 7 ++++++- tools/prompt_route_simulation.py | 7 +++++++ tools/prompt_smoke.py | 2 ++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/sdxl_tag_policy.py b/sdxl_tag_policy.py index 1db7041..038adf9 100644 --- a/sdxl_tag_policy.py +++ b/sdxl_tag_policy.py @@ -67,7 +67,12 @@ def split_tag_text(text: Any) -> list[str]: text = re.sub(r"(? str: diff --git a/tools/prompt_route_simulation.py b/tools/prompt_route_simulation.py index b590974..6445191 100644 --- a/tools/prompt_route_simulation.py +++ b/tools/prompt_route_simulation.py @@ -600,6 +600,12 @@ def _sdxl_sentence_boundary_tag_issues(name: str, sdxl_prompt: str) -> list[str] return [] +def _sdxl_imperative_tag_issues(name: str, sdxl_prompt: str) -> list[str]: + if re.search(r"\bkeep\s+hands\b", sdxl_prompt, flags=re.IGNORECASE): + return [f"{name}.sdxl_prompt: imperative_keep_hands_tag"] + return [] + + def _trace_dict(formatter_name: str, payload: dict[str, Any]) -> tuple[dict[str, Any], str]: trace_text = str(payload.get("route_trace_json") or "") if not trace_text: @@ -741,6 +747,7 @@ def _formatter_issues( issues.extend(_sdxl_hyphen_fragment_issues(name, sdxl_prompt)) issues.extend(_sdxl_character_pair_fragment_issues(name, sdxl_prompt)) issues.extend(_sdxl_sentence_boundary_tag_issues(name, sdxl_prompt)) + issues.extend(_sdxl_imperative_tag_issues(name, sdxl_prompt)) for label, value in ( (f"{name}.krea_negative", krea.get("negative_prompt")), diff --git a/tools/prompt_smoke.py b/tools/prompt_smoke.py index 3eb8a64..0a33727 100644 --- a/tools/prompt_smoke.py +++ b/tools/prompt_smoke.py @@ -4685,6 +4685,8 @@ def smoke_sdxl_tag_policy() -> None: _expect("woman" not in subject_pair_tags and "man are mid-transition" not in subject_pair_tags, "SDXL tag splitter emitted broken paired character fragments") sentence_boundary_tags = sdxl_tag_policy.split_tag_text("keep hands on hips, breasts, thighs. Man watches close") sentence_boundary_tags_lower = [tag.lower() for tag in sentence_boundary_tags] + _expect("hands on hips" in sentence_boundary_tags_lower, "SDXL tag splitter did not clean leading keep imperative") + _expect("keep hands on hips" not in sentence_boundary_tags_lower, "SDXL tag splitter kept leading keep imperative") _expect("thighs" in sentence_boundary_tags, "SDXL tag splitter lost pre-period tag") _expect("man watches close" in sentence_boundary_tags_lower, "SDXL tag splitter did not split sentence-boundary tag") _expect(