add option on the settings to change the number of the suggestions

This commit is contained in:
omar92 2023-04-20 21:13:14 +02:00
parent 94e9798a4b
commit 5229c1f972
1 changed files with 42 additions and 19 deletions

View File

@ -4,46 +4,69 @@ import { ComfyWidgets } from "/scripts/widgets.js";
app.registerExtension({ app.registerExtension({
name: "Comfy.SlotDefaults", name: "Comfy.SlotDefaults",
suggestionsNumber: null,
init() { init() {
LiteGraph.middle_click_slot_add_default_node = true; LiteGraph.middle_click_slot_add_default_node = true;
this.suggestionsNumber = app.ui.settings.addSetting({
id: "Comfy.NodeSuggestions.number",
name: "number of nodes suggestions",
type: "slider",
attrs: {
min: 1,
max: 100,
step: 1,
}, },
defaultValue: 5,
onChange: (newVal, oldVal) => {
this.setDefaults(newVal);
}
});
},
slot_types_default_out: {},
slot_types_default_in: {},
async beforeRegisterNodeDef(nodeType, nodeData, app) { async beforeRegisterNodeDef(nodeType, nodeData, app) {
var nodeId = nodeData.name; var nodeId = nodeData.name;
var inputs = []; var inputs = [];
//if (nodeData["input"]["optional"] != undefined) { inputs = nodeData["input"]["required"]; //only show required inputs to reduce the mess also not logical to create node with optional inputs
// inputs = Object.assign({}, nodeData["input"]["required"], nodeData["input"]["optional"]);
//} else {
inputs = nodeData["input"]["required"]; //only show required inputs to reduce the mess also not logica to create node with optional inputs
//}
for (const inputKey in inputs) { for (const inputKey in inputs) {
var input = (inputs[inputKey]); var input = (inputs[inputKey]);
//make sure input[0] is a string
if (typeof input[0] !== "string") continue; if (typeof input[0] !== "string") continue;
// for (const slotKey in inputs[inputKey]) {
var type = input[0] var type = input[0]
if (type in ComfyWidgets) { if (type in ComfyWidgets) {
var customProperties = input[1] var customProperties = input[1]
//console.log(customProperties)
if (!(customProperties?.forceInput)) continue; //ignore widgets that don't force input if (!(customProperties?.forceInput)) continue; //ignore widgets that don't force input
} }
if (!(type in LiteGraph.slot_types_default_out)) { if (!(type in this.slot_types_default_out)) {
LiteGraph.slot_types_default_out[type] = ["Reroute"]; this.slot_types_default_out[type] = ["Reroute"];
} }
if (LiteGraph.slot_types_default_out[type].includes(nodeId)) continue; if (this.slot_types_default_out[type].includes(nodeId)) continue;
LiteGraph.slot_types_default_out[type].push(nodeId); this.slot_types_default_out[type].push(nodeId);
// }
} }
var outputs = nodeData["output"]; var outputs = nodeData["output"];
for (const key in outputs) { for (const key in outputs) {
var type = outputs[key]; var type = outputs[key];
if (!(type in LiteGraph.slot_types_default_in)) { if (!(type in this.slot_types_default_in)) {
LiteGraph.slot_types_default_in[type] = ["Reroute"];// ["Reroute", "Primitive"]; primitive doesn't always work :'() this.slot_types_default_in[type] = ["Reroute"];// ["Reroute", "Primitive"]; primitive doesn't always work :'()
}
LiteGraph.slot_types_default_in[type].push(nodeId);
} }
this.slot_types_default_in[type].push(nodeId);
}
var maxNum = this.suggestionsNumber ? this.suggestionsNumber.value : 5;
this.setDefaults(maxNum);
}, },
setDefaults(maxNum) {
LiteGraph.slot_types_default_out = {};
LiteGraph.slot_types_default_in = {};
for (const type in this.slot_types_default_out) {
LiteGraph.slot_types_default_out[type] = this.slot_types_default_out[type].slice(0, maxNum);
}
for (const type in this.slot_types_default_in) {
LiteGraph.slot_types_default_in[type] = this.slot_types_default_in[type].slice(0, maxNum);
}
}
}); });