mirror of
https://github.com/willmiao/ComfyUI-Lora-Manager.git
synced 2026-03-24 22:52:12 -03:00
feat(metadata): update metadata archive management and remove provider priority settings
This commit is contained in:
@@ -611,10 +611,10 @@ class BaseModelRoutes(ABC):
|
||||
success = 0
|
||||
needs_resort = False
|
||||
|
||||
# Prepare models to process
|
||||
# Prepare models to process, only those without CivitAI data
|
||||
to_process = [
|
||||
model for model in cache.raw_data
|
||||
if model.get('sha256') and (not model.get('civitai') or 'id' not in model.get('civitai')) and model.get('from_civitai', True)
|
||||
if model.get('sha256') and (not model.get('civitai') or 'id' not in model.get('civitai'))
|
||||
]
|
||||
total_to_process = len(to_process)
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ from ..utils.lora_metadata import extract_trained_words
|
||||
from ..config import config
|
||||
from ..utils.constants import SUPPORTED_MEDIA_EXTENSIONS, NODE_TYPES, DEFAULT_NODE_COLOR
|
||||
from ..services.service_registry import ServiceRegistry
|
||||
from ..services.metadata_service import get_metadata_archive_manager, update_metadata_provider_priority
|
||||
from ..services.metadata_service import get_metadata_archive_manager, update_metadata_providers
|
||||
from ..services.websocket_manager import ws_manager
|
||||
import re
|
||||
|
||||
@@ -736,8 +736,8 @@ class MiscRoutes:
|
||||
# Update settings to enable metadata archive
|
||||
settings.set('enable_metadata_archive_db', True)
|
||||
|
||||
# Update provider priority
|
||||
await update_metadata_provider_priority()
|
||||
# Update metadata providers
|
||||
await update_metadata_providers()
|
||||
|
||||
return web.json_response({
|
||||
'success': True,
|
||||
@@ -768,8 +768,8 @@ class MiscRoutes:
|
||||
# Update settings to disable metadata archive
|
||||
settings.set('enable_metadata_archive_db', False)
|
||||
|
||||
# Update provider priority
|
||||
await update_metadata_provider_priority()
|
||||
# Update metadata providers
|
||||
await update_metadata_providers()
|
||||
|
||||
return web.json_response({
|
||||
'success': True,
|
||||
@@ -796,7 +796,6 @@ class MiscRoutes:
|
||||
|
||||
is_available = archive_manager.is_database_available()
|
||||
is_enabled = settings.get('enable_metadata_archive_db', False)
|
||||
priority = settings.get('metadata_provider_priority', 'archive_db')
|
||||
|
||||
db_size = 0
|
||||
if is_available:
|
||||
@@ -808,7 +807,6 @@ class MiscRoutes:
|
||||
'success': True,
|
||||
'isAvailable': is_available,
|
||||
'isEnabled': is_enabled,
|
||||
'priority': priority,
|
||||
'databaseSize': db_size,
|
||||
'databasePath': archive_manager.get_database_path() if is_available else None
|
||||
})
|
||||
|
||||
@@ -22,7 +22,6 @@ async def initialize_metadata_providers():
|
||||
|
||||
# Get settings
|
||||
enable_archive_db = settings.get('enable_metadata_archive_db', False)
|
||||
priority = settings.get('metadata_provider_priority', 'archive_db')
|
||||
|
||||
providers = []
|
||||
|
||||
@@ -54,23 +53,17 @@ async def initialize_metadata_providers():
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to initialize Civitai API metadata provider: {e}")
|
||||
|
||||
# Set up fallback provider based on priority and available providers
|
||||
# Set up fallback provider based on available providers
|
||||
if len(providers) > 1:
|
||||
# Order providers based on priority setting
|
||||
# Always use Civitai API first, then Archive DB
|
||||
ordered_providers = []
|
||||
if priority == 'archive_db':
|
||||
# Archive DB first, then Civitai API
|
||||
ordered_providers = [p[1] for p in providers if p[0] == 'sqlite']
|
||||
ordered_providers.extend([p[1] for p in providers if p[0] == 'civitai_api'])
|
||||
else:
|
||||
# Civitai API first, then Archive DB
|
||||
ordered_providers = [p[1] for p in providers if p[0] == 'civitai_api']
|
||||
ordered_providers.extend([p[1] for p in providers if p[0] == 'sqlite'])
|
||||
ordered_providers.extend([p[1] for p in providers if p[0] == 'civitai_api'])
|
||||
ordered_providers.extend([p[1] for p in providers if p[0] == 'sqlite'])
|
||||
|
||||
if ordered_providers:
|
||||
fallback_provider = FallbackMetadataProvider(ordered_providers)
|
||||
provider_manager.register_provider('fallback', fallback_provider, is_default=True)
|
||||
logger.info(f"Fallback metadata provider registered with {len(ordered_providers)} providers, priority: {priority}")
|
||||
logger.info(f"Fallback metadata provider registered with {len(ordered_providers)} providers, Civitai API first")
|
||||
elif len(providers) == 1:
|
||||
# Only one provider available, set it as default
|
||||
provider_name, provider = providers[0]
|
||||
@@ -81,20 +74,19 @@ async def initialize_metadata_providers():
|
||||
|
||||
return provider_manager
|
||||
|
||||
async def update_metadata_provider_priority():
|
||||
"""Update metadata provider priority based on current settings"""
|
||||
async def update_metadata_providers():
|
||||
"""Update metadata providers based on current settings"""
|
||||
try:
|
||||
# Get current settings
|
||||
enable_archive_db = settings.get('enable_metadata_archive_db', False)
|
||||
priority = settings.get('metadata_provider_priority', 'archive_db')
|
||||
|
||||
# Reinitialize all providers with new settings
|
||||
provider_manager = await initialize_metadata_providers()
|
||||
|
||||
logger.info(f"Updated metadata provider priority to: {priority}, archive_db enabled: {enable_archive_db}")
|
||||
logger.info(f"Updated metadata providers, archive_db enabled: {enable_archive_db}")
|
||||
return provider_manager
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to update metadata provider priority: {e}")
|
||||
logger.error(f"Failed to update metadata providers: {e}")
|
||||
return await ModelMetadataProviderManager.get_instance()
|
||||
|
||||
async def get_metadata_archive_manager():
|
||||
|
||||
@@ -82,8 +82,7 @@ class SettingsManager:
|
||||
"civitai_api_key": "",
|
||||
"show_only_sfw": False,
|
||||
"language": "en",
|
||||
"enable_metadata_archive_db": False, # Enable metadata archive database
|
||||
"metadata_provider_priority": "archive_db" # Default priority: 'archive_db' or 'civitai_api'
|
||||
"enable_metadata_archive_db": False # Enable metadata archive database
|
||||
}
|
||||
|
||||
def get(self, key: str, default: Any = None) -> Any:
|
||||
|
||||
@@ -12,7 +12,7 @@ from ..services.downloader import get_downloader
|
||||
from ..utils.exif_utils import ExifUtils
|
||||
from ..utils.metadata_manager import MetadataManager
|
||||
from ..services.websocket_manager import ws_manager
|
||||
from ..services.metadata_service import get_default_metadata_provider
|
||||
from ..services.metadata_service import get_default_metadata_provider, get_metadata_provider
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -41,13 +41,15 @@ class ModelRouteUtils:
|
||||
def is_civitai_api_metadata(meta: dict) -> bool:
|
||||
"""
|
||||
Determine if the given civitai metadata is from the civitai API.
|
||||
Returns True if both 'files' and 'images' exist and are non-empty.
|
||||
Returns True if both 'files' and 'images' exist and are non-empty,
|
||||
and the 'source' is not 'archive_db'.
|
||||
"""
|
||||
if not isinstance(meta, dict):
|
||||
return False
|
||||
files = meta.get('files')
|
||||
images = meta.get('images')
|
||||
return bool(files) and bool(images)
|
||||
source = meta.get('source')
|
||||
return bool(files) and bool(images) and source != 'archive_db'
|
||||
|
||||
@staticmethod
|
||||
async def update_model_metadata(metadata_path: str, local_metadata: Dict,
|
||||
@@ -58,12 +60,17 @@ class ModelRouteUtils:
|
||||
|
||||
# Check if we should skip the update to avoid overwriting richer data
|
||||
if civitai_metadata.get('source') == 'archive_db' and ModelRouteUtils.is_civitai_api_metadata(existing_civitai):
|
||||
logger.info(f"Skip civitai update for {local_metadata.get('model_name', '')}: {existing_civitai.get('name', '')}")
|
||||
logger.info(f"Skip civitai update for {local_metadata.get('model_name', '')} ({existing_civitai.get('name', '')})")
|
||||
else:
|
||||
# Create a new civitai metadata by updating existing with new
|
||||
merged_civitai = existing_civitai.copy()
|
||||
merged_civitai.update(civitai_metadata)
|
||||
|
||||
if civitai_metadata.get('source') == 'archive_db':
|
||||
model_name = civitai_metadata.get('model', {}).get('name', '')
|
||||
version_name = civitai_metadata.get('name', '')
|
||||
logger.info(f"Recovered metadata from archive_db for deleted model: {model_name} ({version_name})")
|
||||
|
||||
# Special handling for trainedWords - ensure we don't lose any existing trained words
|
||||
if 'trainedWords' in existing_civitai:
|
||||
existing_trained_words = existing_civitai.get('trainedWords', [])
|
||||
@@ -210,8 +217,12 @@ class ModelRouteUtils:
|
||||
# Check if model metadata exists
|
||||
local_metadata = await ModelRouteUtils.load_local_metadata(metadata_path)
|
||||
|
||||
# Get metadata provider and fetch metadata from unified provider
|
||||
metadata_provider = await get_default_metadata_provider()
|
||||
if model_data.get('from_civitai') is False:
|
||||
# Likely deleted from CivitAI, use archive_db if available
|
||||
metadata_provider = await get_metadata_provider('sqlite')
|
||||
else:
|
||||
metadata_provider = await get_default_metadata_provider()
|
||||
|
||||
civitai_metadata = await metadata_provider.get_model_by_hash(sha256)
|
||||
if not civitai_metadata:
|
||||
# Mark as not from CivitAI if not found
|
||||
|
||||
Reference in New Issue
Block a user