From f86198d23438c9b7d015159943135264e93f407b Mon Sep 17 00:00:00 2001 From: Will Miao Date: Thu, 16 Jul 2026 15:36:54 +0800 Subject: [PATCH] fix(loras): include folder prefix in context menu and bulk send-to-workflow When using full path lora syntax, the context menu (single/bulk) and bulk copy actions were passing only the file basename to buildLoraSyntax(), ignoring the folder prefix. This caused the output to look like legacy A1111 format even when full path mode was enabled. Aligns all entry points with ModelCard.handleSendToWorkflow(), which correctly includes the folder prefix. Also fixes selectAllVisibleModels() to cache the folder field, preventing missing prefix on select-all-then-send flows. --- static/js/components/ContextMenu/LoraContextMenu.js | 4 +++- static/js/managers/BulkManager.js | 8 ++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/static/js/components/ContextMenu/LoraContextMenu.js b/static/js/components/ContextMenu/LoraContextMenu.js index 069b7cab..b9806cee 100644 --- a/static/js/components/ContextMenu/LoraContextMenu.js +++ b/static/js/components/ContextMenu/LoraContextMenu.js @@ -152,7 +152,9 @@ export class LoraContextMenu extends BaseContextMenu { sendLoraToWorkflow(replaceMode) { const card = this.currentCard; const usageTips = JSON.parse(card.dataset.usage_tips || '{}'); - const loraSyntax = buildLoraSyntax(card.dataset.file_name, usageTips); + const folder = card.dataset.folder || ''; + const loraName = folder ? `${folder}/${card.dataset.file_name}` : card.dataset.file_name; + const loraSyntax = buildLoraSyntax(loraName, usageTips); sendLoraToWorkflow(loraSyntax, replaceMode, 'lora'); } diff --git a/static/js/managers/BulkManager.js b/static/js/managers/BulkManager.js index 3932ba52..5e57420e 100644 --- a/static/js/managers/BulkManager.js +++ b/static/js/managers/BulkManager.js @@ -397,6 +397,7 @@ export class BulkManager { const updated = { ...existing, fileName: card.dataset.file_name ?? existing.fileName, + folder: card.dataset.folder ?? existing.folder, usageTips: card.dataset.usage_tips ?? existing.usageTips, modelName: card.dataset.name ?? existing.modelName, }; @@ -494,7 +495,8 @@ export class BulkManager { if (metadata) { const usageTips = JSON.parse(metadata.usageTips || '{}'); - loraSyntaxes.push(buildLoraSyntax(metadata.fileName, usageTips)); + const loraName = metadata.folder ? `${metadata.folder}/${metadata.fileName}` : metadata.fileName; + loraSyntaxes.push(buildLoraSyntax(loraName, usageTips)); } else { missingLoras.push(filepath); } @@ -537,7 +539,8 @@ export class BulkManager { if (metadata) { const usageTips = JSON.parse(metadata.usageTips || '{}'); - loraSyntaxes.push(buildLoraSyntax(metadata.fileName, usageTips)); + const loraName = metadata.folder ? `${metadata.folder}/${metadata.fileName}` : metadata.fileName; + loraSyntaxes.push(buildLoraSyntax(loraName, usageTips)); } else { missingLoras.push(filepath); } @@ -674,6 +677,7 @@ export class BulkManager { const modelId = this.parseModelId(item?.civitai?.modelId); metadataCache.set(item.file_path, { fileName: item.file_name, + folder: item.folder || '', usageTips: item.usage_tips || '{}', modelName: item.name || item.file_name, ...(modelId !== null ? { modelId } : {})