fix(organize): exclude Civitai meta tags from folder names (#1119)

Follow-up to the keyword-dump guard. The reported model's tag list is
["lora, character, ... face", "base model"], so skipping the dump left the
"base model" label to be picked as the folder name. That label describes
Civitai's listing rather than the model's content, which makes it as
meaningless as a folder as the blob was.

Add CIVITAI_META_TAGS and is_civitai_meta_tag(), and skip those labels in
the automatic fallback. An explicit priority entry still matches them, so a
user who does want a "base model" folder can configure one.

The reported model now resolves to "Krea 2/no tags" instead of
"Krea 2/base model".

Also correct a comment that listed ".civitai.info" among the files sitting
next to a model. LoRA Manager only reads that sidecar -- other tools write
it -- and writes ".metadata.json" itself.
This commit is contained in:
Will Miao
2026-09-23 13:33:59 +08:00
parent 0ada32d0c7
commit 74736f7560
7 changed files with 93 additions and 7 deletions
+34
View File
@@ -412,6 +412,40 @@ def test_resolve_priority_tag_skips_unusable_tags(manager):
assert manager.resolve_priority_tag_for_model([" portrait "], "lora") == "portrait"
def test_resolve_priority_tag_skips_civitai_meta_tags(manager):
"""Civitai's structural labels are not content, so they cannot be folders."""
assert manager.resolve_priority_tag_for_model(["base model"], "lora") == ""
assert (
manager.resolve_priority_tag_for_model(["Base Model"], "lora") == ""
), "the meta tag check must be case-insensitive"
assert manager.resolve_priority_tag_for_model(["base model", " "], "lora") == ""
# A real tag after the label is still used.
assert (
manager.resolve_priority_tag_for_model(["base model", "portrait"], "lora")
== "portrait"
)
def test_resolve_priority_tag_meta_tag_can_be_opted_into(manager):
"""An explicit priority entry still wins over the meta tag exclusion."""
manager.settings["priority_tags"] = {"lora": "base model"}
assert (
manager.resolve_priority_tag_for_model(["base model", "portrait"], "lora")
== "base model"
)
def test_resolve_priority_tag_real_1119_tag_list(manager):
"""End to end for the reported model: both of its tags are unusable."""
assert (
manager.resolve_priority_tag_for_model(
[KEYWORD_DUMP_TAG, "base model"], "lora"
)
== ""
)
def test_auto_set_default_roots(manager):
# Clear any previously auto-set values to test fresh behavior
manager.settings["default_lora_root"] = ""