96 lines
3.4 KiB
JavaScript
96 lines
3.4 KiB
JavaScript
import { app } from "../../../scripts/app.js";
|
|
import { api } from "../../../scripts/api.js";
|
|
import { ComfyWidgets } from "../../../scripts/widgets.js";
|
|
|
|
function displayMessage(message) {
|
|
var w = this.widgets?.find((w) => w.name === "display_text_widget");
|
|
if (w === undefined) {
|
|
w = ComfyWidgets["STRING"](this, "display_text_widget", ["STRING", { multiline: true }], app).widget;
|
|
w.inputEl.readOnly = true;
|
|
w.inputEl.style.opacity = 0.6;
|
|
w.inputEl.style.fontSize = "9pt";
|
|
}
|
|
const display = message.join('\n');
|
|
w.value = 'Sizes in present:\n' + display;
|
|
this.onResize?.(this.size);
|
|
};
|
|
|
|
const ext = {
|
|
name: "jojr.random-sizes.displaymessage",
|
|
async setup() {
|
|
function messageHandler(event) {
|
|
const id = event.detail.id;
|
|
const message = event.detail.message;
|
|
const node = app.graph._nodes_by_id[id];
|
|
if (node && node.displayMessage) node.displayMessage(message);
|
|
else (console.log(`node ${id} couldn't handle a message`));
|
|
}
|
|
api.addEventListener("jojr.random-sizes.sendmessage", messageHandler);
|
|
},
|
|
async beforeRegisterNodeDef(nodeType, nodeData, app) {
|
|
if (nodeType.comfyClass=="JOJR_RandomSize" ) {
|
|
nodeType.prototype.displayMessage = displayMessage;
|
|
const originalNodeCreated = nodeType.prototype.onNodeCreated;
|
|
nodeType.prototype.onNodeCreated = async function () {
|
|
if (originalNodeCreated) {
|
|
originalNodeCreated.apply(this, arguments);
|
|
}
|
|
|
|
const presetWidget = this.widgets.find((w) => w.name === "preset");
|
|
const sizeIndexWidget = this.widgets.find((w) => w.name === "seed");
|
|
|
|
const fetchSizes = async (preset) => {
|
|
try {
|
|
const response = await fetch("/JOJR_RandomSize/get_sizes", {
|
|
method: "POST",
|
|
headers: {
|
|
"Content-Type": "application/json",
|
|
},
|
|
body: JSON.stringify({
|
|
preset: preset,
|
|
}),
|
|
});
|
|
|
|
if (response.ok) {
|
|
const sizes = await response.json();
|
|
console.log("Fetched sizes:", sizes);
|
|
return sizes;
|
|
} else {
|
|
console.error(`Failed to fetch sizes: ${response.status}`);
|
|
return [];
|
|
}
|
|
} catch (error) {
|
|
console.error(`Error fetching sizes for preset ${preset}:`, error);
|
|
return [];
|
|
}
|
|
};
|
|
|
|
const updateSizeIndex = async () => {
|
|
const preset = presetWidget.value;
|
|
|
|
console.log(`Selected preset: ${preset}`);
|
|
|
|
const sizes = await fetchSizes(preset);
|
|
|
|
if (!sizes || !sizes.length) return;
|
|
|
|
const maxSeed = sizes.length - 1;
|
|
|
|
sizeIndexWidget.options.max = maxSeed;
|
|
if(sizeIndexWidget.options.value > maxSeed) {
|
|
sizeIndexWidget.options.value = maxSeed;
|
|
}
|
|
|
|
this.triggerSlot(0);
|
|
};
|
|
|
|
presetWidget.callback = updateSizeIndex;
|
|
|
|
// Initial update
|
|
await updateSizeIndex();
|
|
};
|
|
}
|
|
}
|
|
}
|
|
|
|
app.registerExtension(ext) |