| |
|
| | import { app } from '../../scripts/app.js'
|
| | import { addNode } from "./node_options/common/utils.js";
|
| |
|
| | const ext = {
|
| | name: "efficiency.WorkflowFix",
|
| | };
|
| |
|
| | function reloadHiResFixNode(originalNode) {
|
| |
|
| |
|
| | const position = originalNode.pos && originalNode.pos.length === 2 ? { x: originalNode.pos[0], y: originalNode.pos[1] } : { x: 0, y: 0 };
|
| |
|
| |
|
| | const newNode = addNode("HighRes-Fix Script", originalNode, position);
|
| |
|
| |
|
| | originalNode.inputs.forEach((input, index) => {
|
| | if (input && input.link !== null) {
|
| | const originLinkInfo = originalNode.graph.links[input.link];
|
| | if (originLinkInfo) {
|
| | const originNode = originalNode.graph.getNodeById(originLinkInfo.origin_id);
|
| | if (originNode) {
|
| | originNode.connect(originLinkInfo.origin_slot, newNode, index);
|
| | }
|
| | }
|
| | }
|
| | });
|
| |
|
| |
|
| | originalNode.outputs.forEach((output, index) => {
|
| | if (output && output.links) {
|
| | output.links.forEach(link => {
|
| | const targetLinkInfo = originalNode.graph.links[link];
|
| | if (targetLinkInfo) {
|
| | const targetNode = originalNode.graph.getNodeById(targetLinkInfo.target_id);
|
| | if (targetNode) {
|
| | newNode.connect(index, targetNode, targetLinkInfo.target_slot);
|
| | }
|
| | }
|
| | });
|
| | }
|
| | });
|
| |
|
| |
|
| | originalNode.graph.remove(originalNode);
|
| |
|
| | return newNode;
|
| | }
|
| |
|
| | ext.loadedGraphNode = function(node, app) {
|
| | const originalNode = node;
|
| | const kSamplerTypes = [
|
| | "KSampler (Efficient)",
|
| | "KSampler Adv. (Efficient)",
|
| | "KSampler SDXL (Eff.)"
|
| | ];
|
| |
|
| |
|
| | |
| | |
| | |
| | |
| | |
| |
|
| | if (node.comfyClass === "Efficient Loader" || node.comfyClass === "Eff. Loader SDXL") {
|
| | const tokenWidget = node.widgets.find(w => w.name === "token_normalization");
|
| | const weightWidget = node.widgets.find(w => w.name === "weight_interpretation");
|
| |
|
| | if (typeof tokenWidget.value === 'number') {
|
| | console.log("[EfficiencyUpdate]", `Fixing '${node.comfyClass}' token and weight widgets:`, node);
|
| | const index = node.widgets.indexOf(tokenWidget);
|
| | if (index !== -1) {
|
| | for (let i = node.widgets.length - 1; i > index + 1; i--) {
|
| | node.widgets[i].value = node.widgets[i - 2].value;
|
| | }
|
| | }
|
| | tokenWidget.value = "none";
|
| | weightWidget.value = "comfy";
|
| | }
|
| | }
|
| |
|
| |
|
| | |
| | |
| | |
| | |
| |
|
| | else if (kSamplerTypes.includes(node.comfyClass)) {
|
| |
|
| | const seedWidgetName = (node.comfyClass === "KSampler (Efficient)") ? "seed" : "noise_seed";
|
| | const stepsWidgetName = (node.comfyClass === "KSampler (Efficient)") ? "steps" : "start_at_step";
|
| |
|
| | const seedWidget = node.widgets.find(w => w.name === seedWidgetName);
|
| | const stepsWidget = node.widgets.find(w => w.name === stepsWidgetName);
|
| |
|
| | if (isNaN(seedWidget.value) && isNaN(stepsWidget.value)) {
|
| | console.log("[EfficiencyUpdate]", `Fixing '${node.comfyClass}' node widgets:`, node);
|
| | for (let i = 0; i < node.widgets.length - 1; i++) {
|
| | node.widgets[i].value = node.widgets[i + 1].value;
|
| | }
|
| | node.widgets[node.widgets.length - 1].value = "true";
|
| | }
|
| | }
|
| |
|
| |
|
| | |
| | |
| | |
| | |
| |
|
| |
|
| | else if (node.comfyClass === "HighRes-Fix Script") {
|
| | const upscaleTypeWidget = node.widgets.find(w => w.name === "upscale_type");
|
| |
|
| | if (upscaleTypeWidget && upscaleTypeWidget.value !== "latent" && upscaleTypeWidget.value !== "pixel" && upscaleTypeWidget.value !== "both") {
|
| | console.log("[EfficiencyUpdate]", "Reloading 'HighRes-Fix Script' node:", node);
|
| |
|
| |
|
| | const newNode = reloadHiResFixNode(node);
|
| |
|
| |
|
| | const targetWidgetNames = ["latent_upscaler", "upscale_by", "hires_steps", "denoise", "iterations"];
|
| |
|
| |
|
| | const originalValues = originalNode.widgets.slice(0, 5).map(w => w.value);
|
| |
|
| | targetWidgetNames.forEach((name, index) => {
|
| | const widget = newNode.widgets.find(w => w.name === name);
|
| | if (widget && originalValues[index] !== undefined) {
|
| | if (name === "latent_upscaler" && typeof originalValues[index] === 'string') {
|
| | widget.value = originalValues[index].replace("SD-Latent-Upscaler", "city96");
|
| | } else {
|
| | widget.value = originalValues[index];
|
| | }
|
| | }
|
| | });
|
| | }
|
| | }
|
| | }
|
| |
|
| | app.registerExtension(ext);
|
| |
|