diff --git a/locales/de.json b/locales/de.json index a9855674..aea0c592 100644 --- a/locales/de.json +++ b/locales/de.json @@ -16,7 +16,9 @@ "loading": "Wird geladen...", "unknown": "Unbekannt", "date": "Datum", - "version": "Version" + "version": "Version", + "enabled": "Aktiviert", + "disabled": "Deaktiviert" }, "language": { "select": "Sprache", @@ -178,7 +180,8 @@ "folderSettings": "Ordner-Einstellungen", "downloadPathTemplates": "Download-Pfad-Vorlagen", "exampleImages": "Beispielbilder", - "misc": "Verschiedenes" + "misc": "Verschiedenes", + "metadataArchive": "Metadaten-Archiv-Datenbank" }, "contentFiltering": { "blurNsfwContent": "NSFW-Inhalte unscharf stellen", @@ -273,6 +276,30 @@ "misc": { "includeTriggerWords": "Trigger Words in LoRA-Syntax einschließen", "includeTriggerWordsHelp": "Trainierte Trigger Words beim Kopieren der LoRA-Syntax in die Zwischenablage einschließen" + }, + "metadataArchive": { + "enableArchiveDb": "Metadaten-Archiv-Datenbank aktivieren", + "enableArchiveDbHelp": "Verwenden Sie eine lokale Datenbank, um auf Metadaten von Modellen zuzugreifen, die von Civitai gelöscht wurden.", + "status": "Status", + "statusAvailable": "Verfügbar", + "statusUnavailable": "Nicht verfügbar", + "enabled": "Aktiviert", + "management": "Datenbankverwaltung", + "managementHelp": "Laden Sie die Metadaten-Archiv-Datenbank herunter oder entfernen Sie sie", + "downloadButton": "Datenbank herunterladen", + "downloadingButton": "Wird heruntergeladen...", + "downloadedButton": "Heruntergeladen", + "removeButton": "Datenbank entfernen", + "removingButton": "Wird entfernt...", + "downloadSuccess": "Metadaten-Archiv-Datenbank erfolgreich heruntergeladen", + "downloadError": "Fehler beim Herunterladen der Metadaten-Archiv-Datenbank", + "removeSuccess": "Metadaten-Archiv-Datenbank erfolgreich entfernt", + "removeError": "Fehler beim Entfernen der Metadaten-Archiv-Datenbank", + "removeConfirm": "Sind Sie sicher, dass Sie die Metadaten-Archiv-Datenbank entfernen möchten? Dadurch wird die lokale Datenbankdatei gelöscht und Sie müssen sie erneut herunterladen, um diese Funktion zu nutzen.", + "preparing": "Download wird vorbereitet...", + "connecting": "Verbindung zum Download-Server wird hergestellt...", + "completed": "Abgeschlossen", + "downloadComplete": "Download erfolgreich abgeschlossen" } }, "loras": { diff --git a/locales/en.json b/locales/en.json index 343b813a..251688f6 100644 --- a/locales/en.json +++ b/locales/en.json @@ -279,16 +279,11 @@ }, "metadataArchive": { "enableArchiveDb": "Enable Metadata Archive Database", - "enableArchiveDbHelp": "Use local database for faster metadata retrieval and access to deleted models. Recommended for better performance.", - "providerPriority": "Metadata Provider Priority", - "providerPriorityHelp": "Choose which metadata source to try first when loading model information", - "priorityArchiveDb": "Archive Database (Recommended)", - "priorityCivitaiApi": "Civitai API", + "enableArchiveDbHelp": "Use a local database to access metadata for models that have been deleted from Civitai.", "status": "Status", "statusAvailable": "Available", "statusUnavailable": "Not Available", "enabled": "Enabled", - "currentPriority": "Current Priority", "management": "Database Management", "managementHelp": "Download or remove the metadata archive database", "downloadButton": "Download Database", diff --git a/locales/es.json b/locales/es.json index 274c497f..691e4651 100644 --- a/locales/es.json +++ b/locales/es.json @@ -16,7 +16,9 @@ "loading": "Cargando...", "unknown": "Desconocido", "date": "Fecha", - "version": "Versión" + "version": "Versión", + "enabled": "Habilitado", + "disabled": "Deshabilitado" }, "language": { "select": "Idioma", @@ -178,7 +180,8 @@ "folderSettings": "Configuración de carpetas", "downloadPathTemplates": "Plantillas de rutas de descarga", "exampleImages": "Imágenes de ejemplo", - "misc": "Varios" + "misc": "Varios", + "metadataArchive": "Base de datos de archivo de metadatos" }, "contentFiltering": { "blurNsfwContent": "Difuminar contenido NSFW", @@ -273,6 +276,30 @@ "misc": { "includeTriggerWords": "Incluir palabras clave en la sintaxis de LoRA", "includeTriggerWordsHelp": "Incluir palabras clave entrenadas al copiar la sintaxis de LoRA al portapapeles" + }, + "metadataArchive": { + "enableArchiveDb": "Habilitar base de datos de archivo de metadatos", + "enableArchiveDbHelp": "Utiliza una base de datos local para acceder a metadatos de modelos que han sido eliminados de Civitai.", + "status": "Estado", + "statusAvailable": "Disponible", + "statusUnavailable": "No disponible", + "enabled": "Habilitado", + "management": "Gestión de base de datos", + "managementHelp": "Descargar o eliminar la base de datos de archivo de metadatos", + "downloadButton": "Descargar base de datos", + "downloadingButton": "Descargando...", + "downloadedButton": "Descargado", + "removeButton": "Eliminar base de datos", + "removingButton": "Eliminando...", + "downloadSuccess": "Base de datos de archivo de metadatos descargada exitosamente", + "downloadError": "Error al descargar la base de datos de archivo de metadatos", + "removeSuccess": "Base de datos de archivo de metadatos eliminada exitosamente", + "removeError": "Error al eliminar la base de datos de archivo de metadatos", + "removeConfirm": "¿Estás seguro de que quieres eliminar la base de datos de archivo de metadatos? Esto eliminará el archivo de base de datos local y tendrás que descargarlo de nuevo para usar esta función.", + "preparing": "Preparando descarga...", + "connecting": "Conectando al servidor de descarga...", + "completed": "Completado", + "downloadComplete": "Descarga completada exitosamente" } }, "loras": { diff --git a/locales/fr.json b/locales/fr.json index a86b464c..0424a93a 100644 --- a/locales/fr.json +++ b/locales/fr.json @@ -16,7 +16,9 @@ "loading": "Chargement...", "unknown": "Inconnu", "date": "Date", - "version": "Version" + "version": "Version", + "enabled": "Activé", + "disabled": "Désactivé" }, "language": { "select": "Langue", @@ -178,7 +180,8 @@ "folderSettings": "Paramètres des dossiers", "downloadPathTemplates": "Modèles de chemin de téléchargement", "exampleImages": "Images d'exemple", - "misc": "Divers" + "misc": "Divers", + "metadataArchive": "Base de données d'archive des métadonnées" }, "contentFiltering": { "blurNsfwContent": "Flouter le contenu NSFW", @@ -273,6 +276,30 @@ "misc": { "includeTriggerWords": "Inclure les mots-clés dans la syntaxe LoRA", "includeTriggerWordsHelp": "Inclure les mots-clés d'entraînement lors de la copie de la syntaxe LoRA dans le presse-papiers" + }, + "metadataArchive": { + "enableArchiveDb": "Activer la base de données d'archive des métadonnées", + "enableArchiveDbHelp": "Utiliser une base de données locale pour accéder aux métadonnées des modèles supprimés de Civitai.", + "status": "Statut", + "statusAvailable": "Disponible", + "statusUnavailable": "Non disponible", + "enabled": "Activé", + "management": "Gestion de la base de données", + "managementHelp": "Télécharger ou supprimer la base de données d'archive des métadonnées", + "downloadButton": "Télécharger la base de données", + "downloadingButton": "Téléchargement...", + "downloadedButton": "Téléchargé", + "removeButton": "Supprimer la base de données", + "removingButton": "Suppression...", + "downloadSuccess": "Base de données d'archive des métadonnées téléchargée avec succès", + "downloadError": "Échec du téléchargement de la base de données d'archive des métadonnées", + "removeSuccess": "Base de données d'archive des métadonnées supprimée avec succès", + "removeError": "Échec de la suppression de la base de données d'archive des métadonnées", + "removeConfirm": "Êtes-vous sûr de vouloir supprimer la base de données d'archive des métadonnées ? Cela supprimera le fichier local et vous devrez la télécharger à nouveau pour utiliser cette fonctionnalité.", + "preparing": "Préparation du téléchargement...", + "connecting": "Connexion au serveur de téléchargement...", + "completed": "Terminé", + "downloadComplete": "Téléchargement terminé avec succès" } }, "loras": { diff --git a/locales/ja.json b/locales/ja.json index cef7074b..f4bad7a6 100644 --- a/locales/ja.json +++ b/locales/ja.json @@ -16,7 +16,9 @@ "loading": "読み込み中...", "unknown": "不明", "date": "日付", - "version": "バージョン" + "version": "バージョン", + "enabled": "有効", + "disabled": "無効" }, "language": { "select": "言語", @@ -178,7 +180,8 @@ "folderSettings": "フォルダ設定", "downloadPathTemplates": "ダウンロードパステンプレート", "exampleImages": "例画像", - "misc": "その他" + "misc": "その他", + "metadataArchive": "メタデータアーカイブデータベース" }, "contentFiltering": { "blurNsfwContent": "NSFWコンテンツをぼかす", @@ -273,6 +276,30 @@ "misc": { "includeTriggerWords": "LoRA構文にトリガーワードを含める", "includeTriggerWordsHelp": "LoRA構文をクリップボードにコピーする際、学習済みトリガーワードを含めます" + }, + "metadataArchive": { + "enableArchiveDb": "メタデータアーカイブデータベースを有効化", + "enableArchiveDbHelp": "Civitaiから削除されたモデルのメタデータにアクセスするためにローカルデータベースを使用します。", + "status": "ステータス", + "statusAvailable": "利用可能", + "statusUnavailable": "利用不可", + "enabled": "有効", + "management": "データベース管理", + "managementHelp": "メタデータアーカイブデータベースのダウンロードまたは削除", + "downloadButton": "データベースをダウンロード", + "downloadingButton": "ダウンロード中...", + "downloadedButton": "ダウンロード済み", + "removeButton": "データベースを削除", + "removingButton": "削除中...", + "downloadSuccess": "メタデータアーカイブデータベースのダウンロードが完了しました", + "downloadError": "メタデータアーカイブデータベースのダウンロードに失敗しました", + "removeSuccess": "メタデータアーカイブデータベースが削除されました", + "removeError": "メタデータアーカイブデータベースの削除に失敗しました", + "removeConfirm": "本当にメタデータアーカイブデータベースを削除しますか?ローカルのデータベースファイルが削除され、この機能を再度利用するには再ダウンロードが必要です。", + "preparing": "ダウンロードを準備中...", + "connecting": "ダウンロードサーバーに接続中...", + "completed": "完了", + "downloadComplete": "ダウンロードが正常に完了しました" } }, "loras": { diff --git a/locales/ko.json b/locales/ko.json index 09765802..5eccaead 100644 --- a/locales/ko.json +++ b/locales/ko.json @@ -16,7 +16,9 @@ "loading": "로딩 중...", "unknown": "알 수 없음", "date": "날짜", - "version": "버전" + "version": "버전", + "enabled": "활성화됨", + "disabled": "비활성화됨" }, "language": { "select": "언어", @@ -178,7 +180,8 @@ "folderSettings": "폴더 설정", "downloadPathTemplates": "다운로드 경로 템플릿", "exampleImages": "예시 이미지", - "misc": "기타" + "misc": "기타", + "metadataArchive": "메타데이터 아카이브 데이터베이스" }, "contentFiltering": { "blurNsfwContent": "NSFW 콘텐츠 블러 처리", @@ -273,6 +276,30 @@ "misc": { "includeTriggerWords": "LoRA 문법에 트리거 단어 포함", "includeTriggerWordsHelp": "LoRA 문법을 클립보드에 복사할 때 학습된 트리거 단어를 포함합니다" + }, + "metadataArchive": { + "enableArchiveDb": "메타데이터 아카이브 데이터베이스 활성화", + "enableArchiveDbHelp": "Civitai에서 삭제된 모델의 메타데이터에 접근하기 위해 로컬 데이터베이스를 사용합니다.", + "status": "상태", + "statusAvailable": "사용 가능", + "statusUnavailable": "사용 불가", + "enabled": "활성화됨", + "management": "데이터베이스 관리", + "managementHelp": "메타데이터 아카이브 데이터베이스를 다운로드하거나 제거합니다", + "downloadButton": "데이터베이스 다운로드", + "downloadingButton": "다운로드 중...", + "downloadedButton": "다운로드 완료", + "removeButton": "데이터베이스 제거", + "removingButton": "제거 중...", + "downloadSuccess": "메타데이터 아카이브 데이터베이스가 성공적으로 다운로드되었습니다", + "downloadError": "메타데이터 아카이브 데이터베이스 다운로드 실패", + "removeSuccess": "메타데이터 아카이브 데이터베이스가 성공적으로 제거되었습니다", + "removeError": "메타데이터 아카이브 데이터베이스 제거 실패", + "removeConfirm": "메타데이터 아카이브 데이터베이스를 제거하시겠습니까? 이 작업은 로컬 데이터베이스 파일을 삭제하며, 이 기능을 사용하려면 다시 다운로드해야 합니다.", + "preparing": "다운로드 준비 중...", + "connecting": "다운로드 서버에 연결 중...", + "completed": "완료됨", + "downloadComplete": "다운로드가 성공적으로 완료되었습니다" } }, "loras": { diff --git a/locales/ru.json b/locales/ru.json index c32f9357..212c2c6f 100644 --- a/locales/ru.json +++ b/locales/ru.json @@ -16,7 +16,9 @@ "loading": "Загрузка...", "unknown": "Неизвестно", "date": "Дата", - "version": "Версия" + "version": "Версия", + "enabled": "Включено", + "disabled": "Отключено" }, "language": { "select": "Язык", @@ -178,7 +180,8 @@ "folderSettings": "Настройки папок", "downloadPathTemplates": "Шаблоны путей загрузки", "exampleImages": "Примеры изображений", - "misc": "Разное" + "misc": "Разное", + "metadataArchive": "Архив метаданных" }, "contentFiltering": { "blurNsfwContent": "Размывать NSFW контент", @@ -273,6 +276,30 @@ "misc": { "includeTriggerWords": "Включать триггерные слова в синтаксис LoRA", "includeTriggerWordsHelp": "Включать обученные триггерные слова при копировании синтаксиса LoRA в буфер обмена" + }, + "metadataArchive": { + "enableArchiveDb": "Включить архив метаданных", + "enableArchiveDbHelp": "Использовать локальную базу данных для доступа к метаданным моделей, удалённых с Civitai.", + "status": "Статус", + "statusAvailable": "Доступно", + "statusUnavailable": "Недоступно", + "enabled": "Включено", + "management": "Управление базой данных", + "managementHelp": "Скачать или удалить базу данных архива метаданных", + "downloadButton": "Скачать базу данных", + "downloadingButton": "Скачивание...", + "downloadedButton": "Скачано", + "removeButton": "Удалить базу данных", + "removingButton": "Удаление...", + "downloadSuccess": "База данных архива метаданных успешно загружена", + "downloadError": "Не удалось загрузить базу данных архива метаданных", + "removeSuccess": "База данных архива метаданных успешно удалена", + "removeError": "Не удалось удалить базу данных архива метаданных", + "removeConfirm": "Вы уверены, что хотите удалить базу данных архива метаданных? Это удалит локальный файл базы данных, и для использования этой функции потребуется повторная загрузка.", + "preparing": "Подготовка к загрузке...", + "connecting": "Подключение к серверу загрузки...", + "completed": "Завершено", + "downloadComplete": "Загрузка успешно завершена" } }, "loras": { diff --git a/locales/zh-CN.json b/locales/zh-CN.json index a9b6a1e6..b419ae0d 100644 --- a/locales/zh-CN.json +++ b/locales/zh-CN.json @@ -16,7 +16,9 @@ "loading": "加载中...", "unknown": "未知", "date": "日期", - "version": "版本" + "version": "版本", + "enabled": "已启用", + "disabled": "已禁用" }, "language": { "select": "语言", @@ -178,7 +180,8 @@ "folderSettings": "文件夹设置", "downloadPathTemplates": "下载路径模板", "exampleImages": "示例图片", - "misc": "其他" + "misc": "其他", + "metadataArchive": "元数据归档数据库" }, "contentFiltering": { "blurNsfwContent": "模糊 NSFW 内容", @@ -273,6 +276,30 @@ "misc": { "includeTriggerWords": "复制 LoRA 语法时包含触发词", "includeTriggerWordsHelp": "复制 LoRA 语法到剪贴板时包含训练触发词" + }, + "metadataArchive": { + "enableArchiveDb": "启用元数据归档数据库", + "enableArchiveDbHelp": "使用本地数据库访问已从 Civitai 删除的模型元数据。", + "status": "状态", + "statusAvailable": "可用", + "statusUnavailable": "不可用", + "enabled": "已启用", + "management": "数据库管理", + "managementHelp": "下载或移除元数据归档数据库", + "downloadButton": "下载数据库", + "downloadingButton": "正在下载...", + "downloadedButton": "已下载", + "removeButton": "移除数据库", + "removingButton": "正在移除...", + "downloadSuccess": "元数据归档数据库下载成功", + "downloadError": "元数据归档数据库下载失败", + "removeSuccess": "元数据归档数据库移除成功", + "removeError": "元数据归档数据库移除失败", + "removeConfirm": "你确定要移除元数据归档数据库吗?这将删除本地数据库文件,如需使用此功能需重新下载。", + "preparing": "正在准备下载...", + "connecting": "正在连接下载服务器...", + "completed": "已完成", + "downloadComplete": "下载成功完成" } }, "loras": { diff --git a/locales/zh-TW.json b/locales/zh-TW.json index 6c498946..7265fadf 100644 --- a/locales/zh-TW.json +++ b/locales/zh-TW.json @@ -16,7 +16,9 @@ "loading": "載入中...", "unknown": "未知", "date": "日期", - "version": "版本" + "version": "版本", + "enabled": "已啟用", + "disabled": "已停用" }, "language": { "select": "語言", @@ -178,7 +180,8 @@ "folderSettings": "資料夾設定", "downloadPathTemplates": "下載路徑範本", "exampleImages": "範例圖片", - "misc": "其他" + "misc": "其他", + "metadataArchive": "中繼資料封存資料庫" }, "contentFiltering": { "blurNsfwContent": "模糊 NSFW 內容", @@ -273,6 +276,30 @@ "misc": { "includeTriggerWords": "在 LoRA 語法中包含觸發詞", "includeTriggerWordsHelp": "複製 LoRA 語法到剪貼簿時包含訓練觸發詞" + }, + "metadataArchive": { + "enableArchiveDb": "啟用中繼資料封存資料庫", + "enableArchiveDbHelp": "使用本機資料庫以存取已從 Civitai 刪除模型的中繼資料。", + "status": "狀態", + "statusAvailable": "可用", + "statusUnavailable": "不可用", + "enabled": "已啟用", + "management": "資料庫管理", + "managementHelp": "下載或移除中繼資料封存資料庫", + "downloadButton": "下載資料庫", + "downloadingButton": "下載中...", + "downloadedButton": "已下載", + "removeButton": "移除資料庫", + "removingButton": "移除中...", + "downloadSuccess": "中繼資料封存資料庫下載成功", + "downloadError": "下載中繼資料封存資料庫失敗", + "removeSuccess": "中繼資料封存資料庫移除成功", + "removeError": "移除中繼資料封存資料庫失敗", + "removeConfirm": "您確定要移除中繼資料封存資料庫嗎?這將刪除本機資料庫檔案,若要再次使用此功能需重新下載。", + "preparing": "準備下載中...", + "connecting": "正在連接下載伺服器...", + "completed": "已完成", + "downloadComplete": "下載成功完成" } }, "loras": { diff --git a/py/routes/base_model_routes.py b/py/routes/base_model_routes.py index 099c2f58..b0a8055f 100644 --- a/py/routes/base_model_routes.py +++ b/py/routes/base_model_routes.py @@ -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) diff --git a/py/routes/misc_routes.py b/py/routes/misc_routes.py index 118afea6..591cc15a 100644 --- a/py/routes/misc_routes.py +++ b/py/routes/misc_routes.py @@ -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 }) diff --git a/py/services/metadata_service.py b/py/services/metadata_service.py index 7823a1f7..86a94eaf 100644 --- a/py/services/metadata_service.py +++ b/py/services/metadata_service.py @@ -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(): diff --git a/py/services/settings_manager.py b/py/services/settings_manager.py index 058d9944..7d99da48 100644 --- a/py/services/settings_manager.py +++ b/py/services/settings_manager.py @@ -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: diff --git a/py/utils/routes_common.py b/py/utils/routes_common.py index a82dbd2f..2c7e13ca 100644 --- a/py/utils/routes_common.py +++ b/py/utils/routes_common.py @@ -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 diff --git a/static/js/managers/SettingsManager.js b/static/js/managers/SettingsManager.js index ac795903..6ef0e404 100644 --- a/static/js/managers/SettingsManager.js +++ b/static/js/managers/SettingsManager.js @@ -850,7 +850,7 @@ export class SettingsManager { } // Special handling for metadata archive settings - if (settingKey === 'enable_metadata_archive_db' || settingKey === 'metadata_provider_priority') { + if (settingKey === 'enable_metadata_archive_db') { await this.updateMetadataArchiveStatus(); } @@ -879,8 +879,6 @@ export class SettingsManager { state.global.settings.compactMode = (value !== 'default'); } else if (settingKey === 'card_info_display') { state.global.settings.cardInfoDisplay = value; - } else if (settingKey === 'metadata_provider_priority') { - state.global.settings.metadata_provider_priority = value; } else { // For any other settings that might be added in the future state.global.settings[settingKey] = value; @@ -891,7 +889,7 @@ export class SettingsManager { try { // For backend settings, make API call - if (settingKey === 'default_lora_root' || settingKey === 'default_checkpoint_root' || settingKey === 'default_embedding_root' || settingKey === 'download_path_templates' || settingKey === 'metadata_provider_priority') { + if (settingKey === 'default_lora_root' || settingKey === 'default_checkpoint_root' || settingKey === 'default_embedding_root' || settingKey === 'download_path_templates') { const payload = {}; if (settingKey === 'download_path_templates') { payload[settingKey] = state.global.settings.download_path_templates; @@ -912,11 +910,6 @@ export class SettingsManager { } showToast('toast.settings.settingsUpdated', { setting: settingKey.replace(/_/g, ' ') }, 'success'); - - // Refresh metadata archive status when provider priority changes - if (settingKey === 'metadata_provider_priority') { - await this.updateMetadataArchiveStatus(); - } } // Apply frontend settings immediately @@ -932,11 +925,6 @@ export class SettingsManager { showToast('toast.settings.displayDensitySet', { density: densityName }, 'success'); } - - // Special handling for metadata archive settings - if (settingKey === 'metadata_provider_priority') { - await this.updateMetadataArchiveStatus(); - } } catch (error) { showToast('toast.settings.settingSaveFailed', { message: error.message }, 'error'); @@ -951,11 +939,6 @@ export class SettingsManager { enableMetadataArchiveCheckbox.checked = state.global.settings.enable_metadata_archive_db || false; } - const metadataProviderPrioritySelect = document.getElementById('metadataProviderPriority'); - if (metadataProviderPrioritySelect) { - metadataProviderPrioritySelect.value = state.global.settings.metadata_provider_priority || 'archive_db'; - } - // Load status await this.updateMetadataArchiveStatus(); } catch (error) { @@ -987,12 +970,6 @@ export class SettingsManager { ${status.isEnabled ? translate('common.status.enabled') : translate('common.status.disabled')} -
- ${translate('settings.metadataArchive.currentPriority')}: - - ${status.priority === 'archive_db' ? translate('settings.metadataArchive.priorityArchiveDb') : translate('settings.metadataArchive.priorityCivitaiApi')} - -
`; // Update button states diff --git a/templates/components/modals/settings_modal.html b/templates/components/modals/settings_modal.html index d150c81d..3b1b3a8a 100644 --- a/templates/components/modals/settings_modal.html +++ b/templates/components/modals/settings_modal.html @@ -419,23 +419,6 @@ -
-
-
- -
-
- -
-
-
- {{ t('settings.metadataArchive.providerPriorityHelp') }} -
-
-