mirror of
https://github.com/willmiao/ComfyUI-Lora-Manager.git
synced 2026-06-09 20:39:25 -03:00
fix(doctor): exclude checkpoints/embeddings from duplicate filename detection (#934)
Duplicate filename detection is only relevant for LoRAs, which use basename-only syntax (<lora:name:strength>). Checkpoints and diffusion models reference files via relative paths with extensions, so filename conflicts there are false positives — there is no resolution ambiguity. Both _log_duplicate_filename_summary() and DoctorHandler's _check_filename_conflicts() now skip scanners with model_type != 'lora'.
This commit is contained in:
@@ -995,6 +995,12 @@ class DoctorHandler:
|
|||||||
total_conflict_files = 0
|
total_conflict_files = 0
|
||||||
|
|
||||||
for model_type, label, factory in self._scanner_factories:
|
for model_type, label, factory in self._scanner_factories:
|
||||||
|
# Duplicate filename detection targets LoRAs which use basename-only
|
||||||
|
# syntax (<lora:name:strength>). Checkpoints/embeddings reference
|
||||||
|
# models via relative paths with extensions, so conflicts there would
|
||||||
|
# be false positives.
|
||||||
|
if model_type != "lora":
|
||||||
|
continue
|
||||||
try:
|
try:
|
||||||
scanner = await factory()
|
scanner = await factory()
|
||||||
hash_index = getattr(scanner, "_hash_index", None)
|
hash_index = getattr(scanner, "_hash_index", None)
|
||||||
|
|||||||
@@ -1101,7 +1101,10 @@ class ModelScanner:
|
|||||||
|
|
||||||
def _log_duplicate_filename_summary(self) -> None:
|
def _log_duplicate_filename_summary(self) -> None:
|
||||||
"""Log a batched summary of duplicate filename conflicts once per scan."""
|
"""Log a batched summary of duplicate filename conflicts once per scan."""
|
||||||
if self._hash_index is None:
|
# Duplicate filename detection is only relevant for LoRAs, which use
|
||||||
|
# basename-only syntax (<lora:name:strength>). Checkpoints and embeddings
|
||||||
|
# use full relative paths for resolution, so conflicts are not ambiguous.
|
||||||
|
if self._hash_index is None or self.model_type != "lora":
|
||||||
return
|
return
|
||||||
|
|
||||||
duplicates = self._hash_index.get_duplicate_filenames()
|
duplicates = self._hash_index.get_duplicate_filenames()
|
||||||
|
|||||||
@@ -636,6 +636,8 @@ async def test_log_duplicate_filename_summary_logs_warning(tmp_path: Path, caplo
|
|||||||
root = tmp_path / "loras"
|
root = tmp_path / "loras"
|
||||||
root.mkdir()
|
root.mkdir()
|
||||||
scanner = DummyScanner(root)
|
scanner = DummyScanner(root)
|
||||||
|
# Duplicate filename detection is only active for LoRAs
|
||||||
|
scanner.model_type = "lora"
|
||||||
|
|
||||||
# Simulate duplicate filenames in the hash index
|
# Simulate duplicate filenames in the hash index
|
||||||
scanner._hash_index.add_entry("aaa111", str(root / "model.safetensors"))
|
scanner._hash_index.add_entry("aaa111", str(root / "model.safetensors"))
|
||||||
@@ -646,7 +648,7 @@ async def test_log_duplicate_filename_summary_logs_warning(tmp_path: Path, caplo
|
|||||||
assert len(caplog.records) >= 1
|
assert len(caplog.records) >= 1
|
||||||
log_msg = caplog.records[-1].message
|
log_msg = caplog.records[-1].message
|
||||||
assert "Duplicate filename conflict detected" in log_msg
|
assert "Duplicate filename conflict detected" in log_msg
|
||||||
assert "1 dummy filename(s)" in log_msg
|
assert "1 lora filename(s)" in log_msg
|
||||||
assert "2 files total" in log_msg
|
assert "2 files total" in log_msg
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user