mirror of
https://github.com/willmiao/ComfyUI-Lora-Manager.git
synced 2026-03-25 23:25:43 -03:00
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.
This commit is contained in:
@@ -24,6 +24,7 @@ from ..config import config
|
||||
standalone_mode = 'nodes' not in sys.modules
|
||||
|
||||
from ..services.service_registry import ServiceRegistry # Add ServiceRegistry import
|
||||
from ..services.downloader import get_downloader
|
||||
|
||||
# Only import MetadataRegistry in non-standalone mode
|
||||
if not standalone_mode:
|
||||
@@ -372,21 +373,23 @@ class RecipeRoutes:
|
||||
"loras": []
|
||||
}, status=400)
|
||||
|
||||
# Download image directly from URL
|
||||
session = await self.civitai_client.session
|
||||
# Download image using unified downloader
|
||||
downloader = await get_downloader()
|
||||
# Create a temporary file to save the downloaded image
|
||||
with tempfile.NamedTemporaryFile(delete=False, suffix='.jpg') as temp_file:
|
||||
temp_path = temp_file.name
|
||||
|
||||
async with session.get(image_url) as response:
|
||||
if response.status != 200:
|
||||
return web.json_response({
|
||||
"error": f"Failed to download image from URL: HTTP {response.status}",
|
||||
"loras": []
|
||||
}, status=400)
|
||||
|
||||
with open(temp_path, 'wb') as f:
|
||||
f.write(await response.read())
|
||||
success, result = await downloader.download_file(
|
||||
image_url,
|
||||
temp_path,
|
||||
use_auth=False # Image downloads typically don't need auth
|
||||
)
|
||||
|
||||
if not success:
|
||||
return web.json_response({
|
||||
"error": f"Failed to download image from URL: {result}",
|
||||
"loras": []
|
||||
}, status=400)
|
||||
|
||||
# Use meta field from image_info as metadata
|
||||
if 'meta' in image_info:
|
||||
@@ -430,8 +433,7 @@ class RecipeRoutes:
|
||||
# Parse the metadata
|
||||
result = await parser.parse_metadata(
|
||||
metadata,
|
||||
recipe_scanner=self.recipe_scanner,
|
||||
civitai_client=self.civitai_client
|
||||
recipe_scanner=self.recipe_scanner
|
||||
)
|
||||
|
||||
# For URL mode, include the image data as base64
|
||||
@@ -532,8 +534,7 @@ class RecipeRoutes:
|
||||
# Parse the metadata
|
||||
result = await parser.parse_metadata(
|
||||
metadata,
|
||||
recipe_scanner=self.recipe_scanner,
|
||||
civitai_client=self.civitai_client
|
||||
recipe_scanner=self.recipe_scanner
|
||||
)
|
||||
|
||||
# Add base64 image data to result
|
||||
|
||||
@@ -258,7 +258,7 @@ class UpdateRoutes:
|
||||
|
||||
try:
|
||||
downloader = await Downloader.get_instance()
|
||||
success, data = await downloader.make_request('GET', github_url, headers={'Accept': 'application/vnd.github+json'})
|
||||
success, data = await downloader.make_request('GET', github_url, custom_headers={'Accept': 'application/vnd.github+json'})
|
||||
|
||||
if not success:
|
||||
logger.warning(f"Failed to fetch GitHub commit: {data}")
|
||||
@@ -424,7 +424,7 @@ class UpdateRoutes:
|
||||
|
||||
try:
|
||||
downloader = await Downloader.get_instance()
|
||||
success, data = await downloader.make_request('GET', github_url, headers={'Accept': 'application/vnd.github+json'})
|
||||
success, data = await downloader.make_request('GET', github_url, custom_headers={'Accept': 'application/vnd.github+json'})
|
||||
|
||||
if not success:
|
||||
logger.warning(f"Failed to fetch GitHub release: {data}")
|
||||
|
||||
Reference in New Issue
Block a user