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

120 lines
4.4 KiB
Markdown

# 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:
```python
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:
```python
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