From 202862fb646b6f0b883b8e7a259a5368eb2b04c1 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Fri, 20 Mar 2026 04:33:20 +0000 Subject: [PATCH] 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. --- modules/civitai/download_civitai.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/modules/civitai/download_civitai.py b/modules/civitai/download_civitai.py index b2e809d06..da5378b41 100644 --- a/modules/civitai/download_civitai.py +++ b/modules/civitai/download_civitai.py @@ -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"):