Enhance lora loader

This commit is contained in:
Will Miao
2025-03-01 09:10:14 +08:00
parent 6f48762110
commit ebe80e30ab
5 changed files with 467 additions and 4 deletions

View File

@@ -0,0 +1,75 @@
import { app } from "../../scripts/app.js";
import { api } from "../../scripts/api.js";
import { addTagsWidget } from "./tags_widget.js";
import { hideWidgetForGood } from "./utils.js";
// TriggerWordToggle extension for ComfyUI
app.registerExtension({
name: "LoraManager.TriggerWordToggle",
setup() {
// Add message handler to listen for messages from Python
api.addEventListener("trigger_word_update", (event) => {
const { id, message } = event.detail;
this.handleTriggerWordUpdate(id, message);
});
},
async nodeCreated(node) {
if (node.comfyClass === "TriggerWord Toggle (LoraManager)") {
// Enable widget serialization
node.serialize_widgets = true;
node.size = [400, 200];
// Wait for node to be properly initialized
requestAnimationFrame(() => {
// add a hidden widget for excluded trigger words to send to Python
node.hiddenWidget = node.addWidget("text", "hidden_trigger_words", "", (value) => {
// empty callback
});
hideWidgetForGood(node, node.hiddenWidget);
// Get the widget object directly from the returned object
const result = addTagsWidget(node, "trigger_words", {
defaultVal: "[]"
}, (value) => {
// update value of hidden widget
node.hiddenWidget.value = value;
});
node.tagWidget = result.widget;
// Restore saved value if exists
if (node.widgets_values && node.widgets_values.length > 0) {
// 0 is input, 1 is hidden widget, 2 is tag widget
const savedValue = node.widgets_values[2];
if (savedValue) {
result.widget.value = savedValue;
}
}
console.log("trigger word toggle node: ", node);
});
}
},
async nodeRemoved(node) {
if (node.comfyClass === "TriggerWord Toggle (LoraManager)") {
// TODO: Remove widget from node
}
},
// Handle trigger word updates from Python
handleTriggerWordUpdate(id, message) {
const node = app.graph.getNodeById(+id);
if (!node || node.comfyClass !== "TriggerWord Toggle (LoraManager)") {
console.warn("Node not found or not a TriggerWordToggle:", id);
return;
}
if (node.tagWidget) {
// Use widget.value setter instead of setValue
node.tagWidget.value = message;
}
},
});