3v324v23's picture
lfs
1e3b872
// Additional functions and imports
import { app } from "../../../scripts/app.js";
import { addMenuHandler, findWidgetByName } from "./common/utils.js";
// A mapping for resolutions based on the type of the loader
const RESOLUTIONS = {
"Efficient Loader": [
{width: 512, height: 512},
{width: 512, height: 768},
{width: 512, height: 640},
{width: 640, height: 512},
{width: 640, height: 768},
{width: 640, height: 640},
{width: 768, height: 512},
{width: 768, height: 768},
{width: 768, height: 640},
],
"Eff. Loader SDXL": [
{width: 1024, height: 1024},
{width: 1152, height: 896},
{width: 896, height: 1152},
{width: 1216, height: 832},
{width: 832, height: 1216},
{width: 1344, height: 768},
{width: 768, height: 1344},
{width: 1536, height: 640},
{width: 640, height: 1536}
]
};
// Function to set the resolution of a node
function setNodeResolution(node, width, height) {
let widthWidget = findWidgetByName(node, "empty_latent_width");
let heightWidget = findWidgetByName(node, "empty_latent_height");
if (widthWidget) {
widthWidget.value = width;
}
if (heightWidget) {
heightWidget.value = height;
}
}
// The callback for the resolution submenu
function resolutionMenuCallback(node, width, height) {
return function() {
setNodeResolution(node, width, height);
};
}
// Show the set resolution submenu
function showResolutionMenu(value, options, e, menu, node) {
const resolutions = RESOLUTIONS[node.type];
if (!resolutions) {
return false;
}
const resolutionOptions = resolutions.map(res => ({
content: `${res.width} x ${res.height}`,
callback: resolutionMenuCallback(node, res.width, res.height)
}));
new LiteGraph.ContextMenu(resolutionOptions, {
event: e,
callback: null,
parentMenu: menu,
node: node
});
return false; // This ensures the original context menu doesn't proceed
}
// Extension Definition
app.registerExtension({
name: "efficiency.SetResolution",
async beforeRegisterNodeDef(nodeType, nodeData, app) {
if (["Efficient Loader", "Eff. Loader SDXL"].includes(nodeData.name)) {
addMenuHandler(nodeType, function (insertOption) {
insertOption({
content: "๐Ÿ“ Set Resolution...",
has_submenu: true,
callback: showResolutionMenu
});
});
}
},
});