Files
ComfyUI-Lora-Manager/METADATA_PROVIDER_REFACTOR_SUMMARY.md
Will Miao 6fd74952b7 Refactor metadata handling to use unified provider system
- Replaced direct usage of Civitai client with a fallback metadata provider across all recipe parsers.
- Updated metadata service to improve initialization and error handling.
- Enhanced download manager to utilize a downloader service for file operations.
- Improved recipe scanner to fetch model information through the new metadata provider.
- Updated utility functions to streamline image downloading and processing.
- Added comprehensive logging and error handling for better debugging and reliability.
- Introduced `get_default_metadata_provider()` for simplified access to the default provider.
- Ensured backward compatibility with existing APIs and workflows.
2025-09-09 20:57:45 +08:00

4.4 KiB

Metadata Provider Refactor Summary

Overview

This refactor improves the metadata provider initialization logic and replaces direct Civitai client usage with the unified FallbackMetadataProvider system throughout the codebase.

Key Changes

1. Enhanced Metadata Service (py/services/metadata_service.py)

Improved initialize_metadata_providers():

  • Added provider clearing for proper reinitialization
  • Enhanced error handling and validation
  • Better logging for debugging
  • Improved provider ordering logic based on priority settings
  • More robust database path validation

Enhanced update_metadata_provider_priority():

  • More robust error handling
  • Proper reinitalization of all providers
  • Better logging for setting changes

New helper function:

  • Added get_default_metadata_provider() for easier access to the default provider

2. Updated Recipe Parsers

All recipe parsers now use the unified metadata provider instead of direct civitai_client:

Files Updated:

  • py/recipes/parsers/civitai_image.py
  • py/recipes/parsers/comfy.py
  • py/recipes/parsers/automatic.py
  • py/recipes/parsers/recipe_format.py
  • py/recipes/parsers/meta_format.py

Changes Made:

  • Added import for get_default_metadata_provider
  • Replaced civitai_client.get_model_by_hash() with metadata_provider.get_model_by_hash()
  • Replaced civitai_client.get_model_version_info() with metadata_provider.get_model_version_info()
  • Updated method signatures to indicate civitai_client parameter is deprecated

3. Download Manager Updates (py/services/download_manager.py)

Metadata Operations:

  • Replaced direct civitai_client usage with metadata_provider for:
    • get_model_version() calls for version info

Download Operations:

  • Replaced civitai_client.download_file() with direct downloader.download_file() calls
  • Replaced civitai_client.download_preview_image() with downloader.download_to_memory() for images
  • Added proper authentication flags (use_auth=True for model files, use_auth=False for preview images)

4. Recipe Scanner Updates (py/services/recipe_scanner.py)

  • Added import for get_default_metadata_provider
  • Replaced civitai_client.get_model_version_info() with metadata_provider.get_model_version_info()

5. Utility Functions Updates (py/utils/routes_common.py)

  • Added import for get_downloader
  • Replaced preview image downloads with direct downloader usage
  • Improved image optimization logic to work with in-memory downloads
  • Better error handling for download and image processing operations

Benefits

1. Unified Metadata Access

  • All metadata requests now go through the fallback provider system
  • Automatic failover between SQLite archive database and Civitai API
  • Consistent metadata access patterns across all components

2. Improved Download Performance

  • Direct use of the optimized downloader service
  • Better connection pooling and retry logic
  • Proper authentication handling
  • Support for resumable downloads

3. Better Configuration Management

  • Settings changes now properly update provider priority
  • Clear separation between metadata and download operations
  • Improved error handling and logging

4. Enhanced Reliability

  • Fallback mechanisms ensure metadata is always available when possible
  • Better error handling and recovery
  • Consistent behavior across all parsers and services

Usage

Settings Changes

When users change metadata provider settings:

  1. The update_metadata_provider_priority() function is automatically called
  2. All providers are reinitialized with the new settings
  3. The fallback provider is updated with the correct priority order

Metadata Access

All components now use:

from ...services.metadata_service import get_default_metadata_provider

metadata_provider = await get_default_metadata_provider()
result = await metadata_provider.get_model_by_hash(hash_value)

Downloads

All downloads now use the unified downloader:

from ...services.downloader import get_downloader

downloader = await get_downloader()
success, result = await downloader.download_file(url, path, use_auth=True)

Compatibility

  • All existing APIs and interfaces remain unchanged
  • Backward compatibility maintained for existing workflows
  • No changes required for external integrations

Testing

  • All updated files pass syntax validation
  • Existing functionality preserved
  • Enhanced error handling and logging for better debugging