feat(civitai): wire subfolder resolution and sidecar metadata into download

Add base_model, model_id, version_id params to download_civit_model.
Call resolve_save_path when subfolder sorting is enabled. Pass model_id
and version_id to DownloadManager.enqueue so _fetch_sidecar downloads
metadata JSON and preview images alongside the model file. Extract
version_id from the download URL as fallback when not provided.
This commit is contained in:
CalamitousFelicitousness
2026-03-20 04:33:20 +00:00
parent 91d21eefb6
commit 202862fb64
+14 -2
View File
@@ -406,14 +406,24 @@ def download_civit_preview(model_path: str, preview_url: str):
return 200, str(total_size), ''
def download_civit_model(model_url: str, model_name: str = '', model_path: str = '', model_type: str = '', token: str = None):
def download_civit_model(model_url: str, model_name: str = '', model_path: str = '', model_type: str = '', token: str = None,
base_model: str = '', model_id: int = 0, version_id: int = 0):
"""Legacy function — delegates to DownloadManager for non-blocking downloads."""
if not model_url:
log.error('Model download: no url provided')
return None
if not version_id:
import re
match = re.search(r'/api/download/models/(\d+)', model_url)
if match:
version_id = int(match.group(1))
from modules.civitai.filemanage_civitai import get_type_folder
if not model_path:
folder = str(get_type_folder(model_type or 'Checkpoint'))
if getattr(shared.opts, 'civitai_save_subfolder_enabled', False):
from modules.civitai.filemanage_civitai import resolve_save_path
folder = str(resolve_save_path(model_type or 'Checkpoint', model_name=model_name, base_model=base_model))
else:
folder = str(get_type_folder(model_type or 'Checkpoint'))
elif os.path.isabs(model_path):
folder = model_path
else:
@@ -424,6 +434,8 @@ def download_civit_model(model_url: str, model_name: str = '', model_path: str =
filename=model_name or "Unknown",
model_type=model_type,
token=token,
model_id=model_id,
version_id=version_id,
)
# Wait for completion (legacy blocking behavior)
while item.status in ("queued", "downloading", "verifying"):