From d17808d9e51b1b3bb89032864f671121b84c9e6f Mon Sep 17 00:00:00 2001 From: Will Miao Date: Tue, 27 Jan 2026 13:01:03 +0800 Subject: [PATCH] feat(autocomplete): add setting to replace underscores with spaces in tag names fixes #784 --- web/comfyui/autocomplete.js | 10 ++++++++-- web/comfyui/settings.js | 39 ++++++++++++++++++++++++++++++++++++- 2 files changed, 46 insertions(+), 3 deletions(-) diff --git a/web/comfyui/autocomplete.js b/web/comfyui/autocomplete.js index 2e94f8df..e92d6212 100644 --- a/web/comfyui/autocomplete.js +++ b/web/comfyui/autocomplete.js @@ -1,7 +1,7 @@ import { api } from "../../scripts/api.js"; import { app } from "../../scripts/app.js"; import { TextAreaCaretHelper } from "./textarea_caret_helper.js"; -import { getPromptTagAutocompletePreference } from "./settings.js"; +import { getPromptTagAutocompletePreference, getTagSpaceReplacementPreference } from "./settings.js"; // Command definitions for category filtering const TAG_COMMANDS = { @@ -231,7 +231,13 @@ const MODEL_BEHAVIORS = { const folder = directories.length ? `${directories.join('/')}/` : ''; return `embedding:${folder}${trimmedName}, `; } else { - return `${relativePath}, `; + let tagText = relativePath; + + if (getTagSpaceReplacementPreference()) { + tagText = tagText.replace(/_/g, ' '); + } + + return `${tagText}, `; } }, }, diff --git a/web/comfyui/settings.js b/web/comfyui/settings.js index 7610a6df..e1bdaa63 100644 --- a/web/comfyui/settings.js +++ b/web/comfyui/settings.js @@ -13,6 +13,9 @@ const AUTO_PATH_CORRECTION_DEFAULT = true; const PROMPT_TAG_AUTOCOMPLETE_SETTING_ID = "loramanager.prompt_tag_autocomplete"; const PROMPT_TAG_AUTOCOMPLETE_DEFAULT = true; +const TAG_SPACE_REPLACEMENT_SETTING_ID = "loramanager.tag_space_replacement"; +const TAG_SPACE_REPLACEMENT_DEFAULT = false; + // ============================================================================ // Helper Functions // ============================================================================ @@ -95,6 +98,32 @@ const getPromptTagAutocompletePreference = (() => { }; })(); +const getTagSpaceReplacementPreference = (() => { + let settingsUnavailableLogged = false; + + return () => { + const settingManager = app?.extensionManager?.setting; + if (!settingManager || typeof settingManager.get !== "function") { + if (!settingsUnavailableLogged) { + console.warn("LoRA Manager: settings API unavailable, using default tag space replacement setting."); + settingsUnavailableLogged = true; + } + return TAG_SPACE_REPLACEMENT_DEFAULT; + } + + try { + const value = settingManager.get(TAG_SPACE_REPLACEMENT_SETTING_ID); + return value ?? TAG_SPACE_REPLACEMENT_DEFAULT; + } catch (error) { + if (!settingsUnavailableLogged) { + console.warn("LoRA Manager: unable to read tag space replacement setting, using default.", error); + settingsUnavailableLogged = true; + } + return TAG_SPACE_REPLACEMENT_DEFAULT; + } + }; +})(); + // ============================================================================ // Register Extension with All Settings // ============================================================================ @@ -131,6 +160,14 @@ app.registerExtension({ tooltip: "When enabled, typing will trigger tag autocomplete suggestions. Commands (e.g., /character, /artist) always work regardless of this setting.", category: ["LoRA Manager", "Autocomplete", "Prompt"], }, + { + id: TAG_SPACE_REPLACEMENT_SETTING_ID, + name: "Replace underscores with spaces in tags", + type: "boolean", + defaultValue: TAG_SPACE_REPLACEMENT_DEFAULT, + tooltip: "When enabled, tag names with underscores will have them replaced with spaces when inserted (e.g., 'blonde_hair' becomes 'blonde hair').", + category: ["LoRA Manager", "Autocomplete", "Tag Formatting"], + }, ], }); @@ -138,4 +175,4 @@ app.registerExtension({ // Exports // ============================================================================ -export { getWheelSensitivity, getAutoPathCorrectionPreference, getPromptTagAutocompletePreference }; +export { getWheelSensitivity, getAutoPathCorrectionPreference, getPromptTagAutocompletePreference, getTagSpaceReplacementPreference };