feat: enhance skip metadata refresh with smart UI and subtle badges, #790

This commit is contained in:
Will Miao
2026-02-09 09:15:29 +08:00
parent 2b74b2373d
commit 765c1c42a9
23 changed files with 283 additions and 18 deletions

View File

@@ -43,6 +43,7 @@ class CheckpointService(BaseModelService):
"sub_type": sub_type,
"favorite": checkpoint_data.get("favorite", False),
"update_available": bool(checkpoint_data.get("update_available", False)),
"skip_metadata_refresh": bool(checkpoint_data.get("skip_metadata_refresh", False)),
"civitai": self.filter_civitai_data(checkpoint_data.get("civitai", {}), minimal=True)
}

View File

@@ -43,6 +43,7 @@ class EmbeddingService(BaseModelService):
"sub_type": sub_type,
"favorite": embedding_data.get("favorite", False),
"update_available": bool(embedding_data.get("update_available", False)),
"skip_metadata_refresh": bool(embedding_data.get("skip_metadata_refresh", False)),
"civitai": self.filter_civitai_data(embedding_data.get("civitai", {}), minimal=True)
}

View File

@@ -48,6 +48,7 @@ class LoraService(BaseModelService):
"notes": lora_data.get("notes", ""),
"favorite": lora_data.get("favorite", False),
"update_available": bool(lora_data.get("update_available", False)),
"skip_metadata_refresh": bool(lora_data.get("skip_metadata_refresh", False)),
"sub_type": sub_type,
"civitai": self.filter_civitai_data(
lora_data.get("civitai", {}), minimal=True

View File

@@ -248,6 +248,7 @@ class ModelScanner:
'tags': tags_list,
'civitai': civitai_slim,
'civitai_deleted': bool(get_value('civitai_deleted', False)),
'skip_metadata_refresh': bool(get_value('skip_metadata_refresh', False)),
}
license_source: Dict[str, Any] = {}

View File

@@ -52,6 +52,7 @@ class PersistentModelCache:
"trained_words",
"license_flags",
"civitai_deleted",
"skip_metadata_refresh",
"exclude",
"db_checked",
"last_checked_at",
@@ -183,6 +184,7 @@ class PersistentModelCache:
"tags": tags.get(file_path, []),
"civitai": civitai,
"civitai_deleted": bool(row["civitai_deleted"]),
"skip_metadata_refresh": bool(row["skip_metadata_refresh"]),
"license_flags": int(license_value),
}
raw_data.append(item)
@@ -491,6 +493,7 @@ class PersistentModelCache:
"civitai_creator_username": "TEXT",
"civitai_model_type": "TEXT",
"civitai_deleted": "INTEGER DEFAULT 0",
"skip_metadata_refresh": "INTEGER DEFAULT 0",
# Persisting without explicit flags should assume CivitAI's documented defaults (0b111001 == 57).
"license_flags": f"INTEGER DEFAULT {DEFAULT_LICENSE_FLAGS}",
}
@@ -563,6 +566,7 @@ class PersistentModelCache:
trained_words_json,
int(license_flags),
1 if item.get("civitai_deleted") else 0,
1 if item.get("skip_metadata_refresh") else 0,
1 if item.get("exclude") else 0,
1 if item.get("db_checked") else 0,
float(item.get("last_checked_at") or 0.0),

View File

@@ -47,6 +47,7 @@ class BulkMetadataRefreshUseCase:
model
for model in cache.raw_data
if model.get("sha256")
and not model.get("skip_metadata_refresh", False)
and (not model.get("civitai") or not model["civitai"].get("id"))
and not (
# Skip models confirmed not on CivitAI when no need to retry

View File

@@ -25,6 +25,7 @@ class BaseModelMetadata:
favorite: bool = False # Whether the model is a favorite
exclude: bool = False # Whether to exclude this model from the cache
db_checked: bool = False # Whether checked in archive DB
skip_metadata_refresh: bool = False # Whether to skip this model during bulk metadata refresh
metadata_source: Optional[str] = None # Last provider that supplied metadata
last_checked_at: float = 0 # Last checked timestamp
_unknown_fields: Dict[str, Any] = field(default_factory=dict, repr=False, compare=False) # Store unknown fields