diff --git a/__init__.py b/__init__.py index 88ec0edc..4adea9d1 100644 --- a/__init__.py +++ b/__init__.py @@ -5,8 +5,8 @@ from .py.nodes.lora_stacker import LoraStacker NODE_CLASS_MAPPINGS = { LoraManagerLoader.NAME: LoraManagerLoader, - TriggerWordToggle.NAME: TriggerWordToggle - # LoraStacker.NAME: LoraStacker + TriggerWordToggle.NAME: TriggerWordToggle, + LoraStacker.NAME: LoraStacker } WEB_DIRECTORY = "./web/comfyui" diff --git a/py/nodes/lora_loader.py b/py/nodes/lora_loader.py index 9e3398f2..ec287721 100644 --- a/py/nodes/lora_loader.py +++ b/py/nodes/lora_loader.py @@ -23,10 +23,7 @@ class LoraManagerLoader: "placeholder": "LoRA syntax input: " }), }, - "optional": { - **FlexibleOptionalInputType(any_type), - "lora_stack": ("LORA_STACK", {"default": None}), - } + "optional": FlexibleOptionalInputType(any_type), } RETURN_TYPES = ("MODEL", "CLIP", IO.STRING) @@ -58,12 +55,12 @@ class LoraManagerLoader: basename = os.path.basename(lora_path) return os.path.splitext(basename)[0] - def load_loras(self, model, clip, text, lora_stack=None, **kwargs): - print("load_loras kwargs: ", kwargs) + def load_loras(self, model, clip, text, **kwargs): """Loads multiple LoRAs based on the kwargs input and lora_stack.""" loaded_loras = [] all_trigger_words = [] + lora_stack = kwargs.get('lora_stack', None) # First process lora_stack if available if lora_stack: for lora_path, model_strength, clip_strength in lora_stack: diff --git a/py/nodes/lora_stacker.py b/py/nodes/lora_stacker.py index 20c69dbc..8535ce17 100644 --- a/py/nodes/lora_stacker.py +++ b/py/nodes/lora_stacker.py @@ -20,10 +20,7 @@ class LoraStacker: "placeholder": "LoRA syntax input: " }), }, - "optional": { - **FlexibleOptionalInputType(any_type), - "lora_stack": ("LORA_STACK", {"default": None}), - } + "optional": FlexibleOptionalInputType(any_type), } RETURN_TYPES = ("LORA_STACK", IO.STRING) @@ -55,13 +52,13 @@ class LoraStacker: basename = os.path.basename(lora_path) return os.path.splitext(basename)[0] - def stack_loras(self, text, lora_stack=None, **kwargs): - print("stack_loras kwargs: ", kwargs) + def stack_loras(self, text, **kwargs): """Stacks multiple LoRAs based on the kwargs input without loading them.""" stack = [] all_trigger_words = [] # Process existing lora_stack if available + lora_stack = kwargs.get('lora_stack', None) if lora_stack: stack.extend(lora_stack) # Get trigger words from existing stack entries diff --git a/py/nodes/trigger_word_toggle.py b/py/nodes/trigger_word_toggle.py index 9e353043..2de641e2 100644 --- a/py/nodes/trigger_word_toggle.py +++ b/py/nodes/trigger_word_toggle.py @@ -24,7 +24,6 @@ class TriggerWordToggle: FUNCTION = "process_trigger_words" def process_trigger_words(self, id, **kwargs): - print("trigger_words ", kwargs) trigger_words = kwargs.get("trigger_words", "") # Send trigger words to frontend PromptServer.instance.send_sync("trigger_word_update", { diff --git a/web/comfyui/lora_loader.js b/web/comfyui/lora_loader.js index 71763808..61a1df54 100644 --- a/web/comfyui/lora_loader.js +++ b/web/comfyui/lora_loader.js @@ -35,8 +35,12 @@ app.registerExtension({ // Enable widget serialization node.serialize_widgets = true; + node.addInput("lora_stack", 'LORA_STACK', { + "shape": 7 // 7 is the shape of the optional input + }); + // Wait for node to be properly initialized - requestAnimationFrame(() => { + requestAnimationFrame(() => { // Restore saved value if exists let existingLoras = []; if (node.widgets_values && node.widgets_values.length > 0) { diff --git a/web/comfyui/lora_stacker.js b/web/comfyui/lora_stacker.js index 39a199ea..470e2596 100644 --- a/web/comfyui/lora_stacker.js +++ b/web/comfyui/lora_stacker.js @@ -35,6 +35,10 @@ app.registerExtension({ // Enable widget serialization node.serialize_widgets = true; + node.addInput("lora_stack", 'LORA_STACK', { + "shape": 7 // 7 is the shape of the optional input + }); + // Wait for node to be properly initialized requestAnimationFrame(() => { // Restore saved value if exists @@ -105,8 +109,6 @@ app.registerExtension({ } }; }); - - console.log("Lora Stacker node created:", node); } }, }); \ No newline at end of file diff --git a/web/comfyui/loras_widget.js b/web/comfyui/loras_widget.js index 63fb609b..7d544c0b 100644 --- a/web/comfyui/loras_widget.js +++ b/web/comfyui/loras_widget.js @@ -750,7 +750,6 @@ export function addLorasWidget(node, name, opts, callback) { widget.callback = callback; widget.serializeValue = () => { - console.log("Serializing loras data: ", widgetValue); // Add dummy items to avoid the 2-element serialization issue, a bug in comfyui return [...widgetValue, { name: "__dummy_item1__", strength: 0, active: false, _isDummy: true }, diff --git a/web/comfyui/trigger_word_toggle.js b/web/comfyui/trigger_word_toggle.js index 3e24c313..13dee1da 100644 --- a/web/comfyui/trigger_word_toggle.js +++ b/web/comfyui/trigger_word_toggle.js @@ -20,14 +20,13 @@ app.registerExtension({ if (node.comfyClass === "TriggerWord Toggle (LoraManager)") { // Enable widget serialization node.serialize_widgets = true; + + node.addInput("trigger_words", 'string', { + "shape": 7 // 7 is the shape of the optional input + }); // Wait for node to be properly initialized requestAnimationFrame(() => { - node.addInput("trigger_words", 'string', { - "default": "", - "defaultInput": false, // Changed to make it optional - "optional": true // Marking the input as optional - }); // Get the widget object directly from the returned object const result = addTagsWidget(node, "toggle_trigger_words", { defaultVal: [] @@ -60,8 +59,6 @@ app.registerExtension({ this.updateTagsBasedOnMode(node, node.widgets[2].value, value); } } - - console.log("node ", node); }); } },