From 4c2c8c2bc8a7bed7e22d05bcaf6c94e628dea23a Mon Sep 17 00:00:00 2001 From: Will Miao Date: Mon, 19 Jan 2026 14:33:11 +0800 Subject: [PATCH] feat(randomizer): add mode change listener to update downstream trigger words Add LoraRandomizer extension that monitors node mode changes and triggers updates to connected downstream trigger word toggle nodes, matching the behavior implemented for Lora Stacker nodes. --- web/comfyui/lora_randomizer.js | 40 ++++++++++++++++++++++++++++++++++ web/comfyui/lora_stacker.js | 7 ++++++ 2 files changed, 47 insertions(+) create mode 100644 web/comfyui/lora_randomizer.js diff --git a/web/comfyui/lora_randomizer.js b/web/comfyui/lora_randomizer.js new file mode 100644 index 00000000..24001008 --- /dev/null +++ b/web/comfyui/lora_randomizer.js @@ -0,0 +1,40 @@ +import { app } from "../../scripts/app.js"; +import { + getActiveLorasFromNode, + updateDownstreamLoaders, + chainCallback, +} from "./utils.js"; + +app.registerExtension({ + name: "LoraManager.LoraRandomizer", + + async beforeRegisterNodeDef(nodeType, nodeData, app) { + if (nodeType.comfyClass === "Lora Randomizer (LoraManager)") { + chainCallback(nodeType.prototype, "onNodeCreated", async function () { + this.serialize_widgets = true; + + let _mode = this.mode; + const self = this; + Object.defineProperty(this, 'mode', { + get() { + return _mode; + }, + set(value) { + const oldValue = _mode; + _mode = value; + + if (self.onModeChange) { + self.onModeChange(value, oldValue); + } + } + }); + + this.onModeChange = function(newMode, oldMode) { + const isNodeActive = newMode === 0 || newMode === 3; + const activeLoraNames = isNodeActive ? getActiveLorasFromNode(self) : new Set(); + updateDownstreamLoaders(self); + }; + }); + } + }, +}); diff --git a/web/comfyui/lora_stacker.js b/web/comfyui/lora_stacker.js index 703e911e..b76670c0 100644 --- a/web/comfyui/lora_stacker.js +++ b/web/comfyui/lora_stacker.js @@ -146,6 +146,13 @@ app.registerExtension({ isUpdating = false; } }; + + // Setup input widget with autocomplete + inputWidget.callback = setupInputWidgetWithAutocomplete( + this, + inputWidget, + originalCallback + ); }); } },