feat: add auto-fill subfolder toggle to control download target behavior

This commit is contained in:
Dariusz L
2026-06-07 18:10:40 +02:00
parent b7c4f47e90
commit 5e52cab664
2 changed files with 21 additions and 0 deletions
@@ -200,6 +200,10 @@ export const downloadTargetMethods = {
return this.downloadSubfolders.get((category || '').toLowerCase()) || [];
},
isAutoFillSubfolderEnabled() {
return localStorage.getItem('ModelResolver.autoFillSubfolder') !== 'false';
},
getDownloadTargetKey(missing = {}) {
return this.getMissingModelKey?.(missing)
|| `${missing.node_id}:${missing.widget_index}:${missing.subgraph_id || ''}:${missing.is_top_level !== false ? 'T' : 'F'}`;
@@ -288,6 +292,7 @@ export const downloadTargetMethods = {
},
async applySuggestedCivitaiSubfolder(missing, categoryEl, subfolderEl) {
if (!this.isAutoFillSubfolderEnabled()) return;
if (!categoryEl || !subfolderEl || subfolderEl.value.trim()) return;
const saved = this.getSavedDownloadTargetSelection(missing);
if (saved?.subfolderTouched) return;
@@ -589,6 +594,7 @@ export const downloadTargetMethods = {
hf_use_comfy_org_fallback: localStorage.getItem('ModelResolver.hfUseComfyOrgFallback') !== 'false',
hf_use_brave_fallback: localStorage.getItem('ModelResolver.hfUseBraveFallback') !== 'false',
auto_fill_base_model: localStorage.getItem('ModelResolver.autoFillBaseModel') !== 'false',
auto_fill_subfolder: localStorage.getItem('ModelResolver.autoFillSubfolder') !== 'false',
civitai_candidate_limit,
search_source_enabled
};
@@ -631,6 +637,8 @@ export const downloadTargetMethods = {
localStorage.setItem('ModelResolver.hfUseBraveFallback', data.hf_use_brave_fallback ? 'true' : 'false');
if (data.auto_fill_base_model !== undefined)
localStorage.setItem('ModelResolver.autoFillBaseModel', data.auto_fill_base_model ? 'true' : 'false');
if (data.auto_fill_subfolder !== undefined)
localStorage.setItem('ModelResolver.autoFillSubfolder', data.auto_fill_subfolder ? 'true' : 'false');
if (data.civitai_candidate_limit !== undefined)
localStorage.setItem('ModelResolver.civitaiCandidateLimit', `${data.civitai_candidate_limit}`);
+13
View File
@@ -134,6 +134,15 @@ export const optionsMethods = {
<span class="mr-options-switch"></span>
</span>
</label>
<label class="mr-options-toggle-row">
<div class="mr-options-toggle-copy">
<span class="mr-options-toggle-title">Auto-fill subfolder <span class="mr-tooltip-badge" data-tooltip="When enabled, Model Resolver fills a suggested LoRA subfolder when it can infer one from CivitAI metadata and your existing folders. When disabled, the field stays empty unless you click Suggest.">?</span></span>
</div>
<span class="mr-options-toggle-control">
<input id="mr-options-auto-fill-subfolder" class="mr-options-switch-input" type="checkbox" ${tokens.auto_fill_subfolder ? 'checked' : ''}>
<span class="mr-options-switch"></span>
</span>
</label>
</div>
</div>
</div>
@@ -402,6 +411,7 @@ export const optionsMethods = {
const hfUseComfyOrgFallbackInput = this.contentElement.querySelector('#mr-options-hf-use-comfy-org-fallback');
const hfUseBraveFallbackInput = this.contentElement.querySelector('#mr-options-hf-use-brave-fallback');
const autoFillBaseModelInput = this.contentElement.querySelector('#mr-options-auto-fill-base-model');
const autoFillSubfolderInput = this.contentElement.querySelector('#mr-options-auto-fill-subfolder');
const hfTokenCheckBtn = this.contentElement.querySelector('#mr-options-hf-token-check');
const hfTokenCheckStatus = this.contentElement.querySelector('#mr-options-hf-token-check-status');
const braveKeyCheckBtn = this.contentElement.querySelector('#mr-options-brave-key-check');
@@ -442,6 +452,7 @@ export const optionsMethods = {
hfUseComfyOrgFallbackInput,
hfUseBraveFallbackInput,
autoFillBaseModelInput,
autoFillSubfolderInput,
...sourceEnabledInputs,
].filter(Boolean);
@@ -970,6 +981,7 @@ export const optionsMethods = {
hf_use_comfy_org_fallback: Boolean(hfUseComfyOrgFallbackInput?.checked),
hf_use_brave_fallback: Boolean(hfUseBraveFallbackInput?.checked),
auto_fill_base_model: Boolean(autoFillBaseModelInput?.checked),
auto_fill_subfolder: Boolean(autoFillSubfolderInput?.checked),
brave_search_api_key: braveInput?.value || '',
search_source_enabled: sourceEnabled,
};
@@ -985,6 +997,7 @@ export const optionsMethods = {
localStorage.setItem('ModelResolver.hfUseComfyOrgFallback', newSettings.hf_use_comfy_org_fallback ? 'true' : 'false');
localStorage.setItem('ModelResolver.hfUseBraveFallback', newSettings.hf_use_brave_fallback ? 'true' : 'false');
localStorage.setItem('ModelResolver.autoFillBaseModel', newSettings.auto_fill_base_model ? 'true' : 'false');
localStorage.setItem('ModelResolver.autoFillSubfolder', newSettings.auto_fill_subfolder ? 'true' : 'false');
localStorage.setItem('ModelResolver.civitaiCandidateLimit', `${civitaiCandidateLimit}`);
Object.entries(sourceEnabled).forEach(([key, val]) => {
localStorage.setItem(key, val ? 'true' : 'false');