import { ComfyApp, app } from "../../scripts/app.js"; import { api } from "../../scripts/api.js"; let get_wildcards_list; try { const ImpactPack = await import("../ComfyUI-Impact-Pack/impact-pack.js"); get_wildcards_list = ImpactPack.get_wildcards_list; } catch (error) { } // fallback if(!get_wildcards_list) { get_wildcards_list = () => { return ["Impact Pack isn't installed or is outdated."]; } } let pb_cache = {}; async function get_prompt_builder_items(category) { if(pb_cache[category]) return pb_cache[category]; else { let res = await api.fetchApi(`/inspire/prompt_builder?category=${category}`); let data = await res.json(); pb_cache[category] = data.presets; return data.presets; } } app.registerExtension({ name: "Comfy.Inspire.Prompts", nodeCreated(node, app) { if(node.comfyClass == "WildcardEncode //Inspire") { const wildcard_text_widget_index = node.widgets.findIndex((w) => w.name == 'wildcard_text'); const populated_text_widget_index = node.widgets.findIndex((w) => w.name == 'populated_text'); const mode_widget_index = node.widgets.findIndex((w) => w.name == 'mode'); const wildcard_text_widget = node.widgets[wildcard_text_widget_index]; const populated_text_widget = node.widgets[populated_text_widget_index]; // lora selector, wildcard selector let combo_id = 5; Object.defineProperty(node.widgets[combo_id], "value", { set: (value) => { const stackTrace = new Error().stack; if(stackTrace.includes('inner_value_change')) { if(value != "Select the LoRA to add to the text") { let lora_name = value; if (lora_name.endsWith('.safetensors')) { lora_name = lora_name.slice(0, -12); } wildcard_text_widget.value += ``; } } }, get: () => { return "Select the LoRA to add to the text"; } }); Object.defineProperty(node.widgets[combo_id+1], "value", { set: (value) => { const stackTrace = new Error().stack; if(stackTrace.includes('inner_value_change')) { if(value != "Select the Wildcard to add to the text") { if(wildcard_text_widget.value != '') wildcard_text_widget.value += ', ' wildcard_text_widget.value += value; } } }, get: () => { return "Select the Wildcard to add to the text"; } }); Object.defineProperty(node.widgets[combo_id+1].options, "values", { set: (x) => {}, get: () => { return get_wildcards_list(); } }); // Preventing validation errors from occurring in any situation. node.widgets[combo_id].serializeValue = () => { return "Select the LoRA to add to the text"; } node.widgets[combo_id+1].serializeValue = () => { return "Select the Wildcard to add to the text"; } // wildcard populating populated_text_widget.inputEl.disabled = true; const mode_widget = node.widgets[mode_widget_index]; // mode combo Object.defineProperty(mode_widget, "value", { set: (value) => { node._mode_value = value == true || value == "Populate"; populated_text_widget.inputEl.disabled = value == true || value == "Populate"; }, get: () => { if(node._mode_value != undefined) return node._mode_value; else return true; } }); } else if(node.comfyClass == "PromptBuilder //Inspire") { const preset_widget = node.widgets[node.widgets.findIndex(obj => obj.name === 'preset')]; const category_widget = node.widgets[node.widgets.findIndex(obj => obj.name === 'category')]; Object.defineProperty(preset_widget.options, "values", { set: (x) => {}, get: () => { get_prompt_builder_items(category_widget.value); if(pb_cache[category_widget.value] == undefined) { return ["#PRESET"]; } return pb_cache[category_widget.value]; } }); Object.defineProperty(preset_widget, "value", { set: (x) => { const stackTrace = new Error().stack; if(stackTrace.includes('inner_value_change')) { if(node.widgets[2].value) { node.widgets[2].value += ', '; } const y = x.split(':'); if(y.length == 2) node.widgets[2].value += y[1].trim(); else node.widgets[2].value += x.trim(); if(node.widgets_values) { node.widgets_values[2] = node.widgets[2].values; } }; }, get: () => { return '#PRESET'; } }); preset_widget.serializeValue = (workflowNode, widgetIndex) => { return "#PRESET"; }; } else if(node.comfyClass == "SeedExplorer //Inspire" || node.comfyClass == "RegionalSeedExplorerMask //Inspire" || node.comfyClass == "RegionalSeedExplorerColorMask //Inspire") { const prompt_widget = node.widgets[node.widgets.findIndex(obj => obj.name === 'seed_prompt')]; const seed_widget = node.widgets[node.widgets.findIndex(obj => obj.name === 'additional_seed')]; const strength_widget = node.widgets[node.widgets.findIndex(obj => obj.name === 'additional_strength')]; let allow_init_seed = node.comfyClass == "SeedExplorer //Inspire"; node.addWidget("button", "Add to prompt", null, () => { if(!prompt_widget.value?.trim() && allow_init_seed) { prompt_widget.value = ''+seed_widget.value; } else { if(prompt_widget.value?.trim()) prompt_widget.value += ', '; prompt_widget.value += `${seed_widget.value}:${strength_widget.value.toFixed(2)}`; seed_widget.value += 1; } }); } } });