| |
| 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") { |
| 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); |
|
|