| import { app } from "../../../scripts/app.js"; |
| app.registerExtension({ |
| name: "pysssss.KSamplerAdvDenoise", |
| async beforeRegisterNodeDef(nodeType) { |
| |
| const origGetExtraMenuOptions = nodeType.prototype.getExtraMenuOptions; |
| nodeType.prototype.getExtraMenuOptions = function (_, options) { |
| const r = origGetExtraMenuOptions?.apply?.(this, arguments); |
|
|
| let stepsWidget = null; |
| let startAtWidget = null; |
| let endAtWidget = null; |
| for (const w of this.widgets || []) { |
| if (w.name === "steps") { |
| stepsWidget = w; |
| } else if (w.name === "start_at_step") { |
| startAtWidget = w; |
| } else if (w.name === "end_at_step") { |
| endAtWidget = w; |
| } |
| } |
|
|
| if (stepsWidget && startAtWidget && endAtWidget) { |
| options.push( |
| { |
| content: "Set Denoise", |
| callback: () => { |
| const steps = +prompt("How many steps do you want?", 15); |
| if (isNaN(steps)) { |
| return; |
| } |
| const denoise = +prompt("How much denoise? (0-1)", 0.5); |
| if (isNaN(denoise)) { |
| return; |
| } |
|
|
| stepsWidget.value = Math.floor(steps / Math.max(0, Math.min(1, denoise))); |
| stepsWidget.callback?.(stepsWidget.value); |
|
|
| startAtWidget.value = stepsWidget.value - steps; |
| startAtWidget.callback?.(startAtWidget.value); |
|
|
| endAtWidget.value = stepsWidget.value; |
| endAtWidget.callback?.(endAtWidget.value); |
| }, |
| }, |
| null |
| ); |
| } |
|
|
| return r; |
| }; |
| }, |
| }); |
|
|