File size: 1,500 Bytes
1e3b872
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
import { app } from "../../../scripts/app.js";
app.registerExtension({
	name: "pysssss.KSamplerAdvDenoise",
	async beforeRegisterNodeDef(nodeType) {
		// Add menu options to conver to/from widgets
		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;
		};
	},
});