From 7429161b57355ba95b8d9803f3d21d00a0abccee Mon Sep 17 00:00:00 2001 From: Julien Lubimiv Date: Mon, 27 Mar 2023 18:12:13 -0400 Subject: [PATCH] Seed controls added to Ksamplers --- web/extensions/core/widgetInputs.js | 8 ++-- web/scripts/widgets.js | 67 +++++++++++++++++++---------- 2 files changed, 49 insertions(+), 26 deletions(-) diff --git a/web/extensions/core/widgetInputs.js b/web/extensions/core/widgetInputs.js index ff9227d28..d571f00a9 100644 --- a/web/extensions/core/widgetInputs.js +++ b/web/extensions/core/widgetInputs.js @@ -1,4 +1,4 @@ -import { ComfyWidgets, addRandomizeWidget } from "/scripts/widgets.js"; +import { ComfyWidgets, addSeedControlWidget } from "/scripts/widgets.js"; import { app } from "/scripts/app.js"; const CONVERTED_TYPE = "converted-widget"; @@ -23,7 +23,7 @@ function hideWidget(node, widget, suffix = "") { return widget.value; }; - // Hide any linked widgets, e.g. seed+randomize + // Hide any linked widgets, e.g. seed+seedControl if (widget.linkedWidgets) { for (const w of widget.linkedWidgets) { hideWidget(node, w, ":" + widget.name); @@ -40,7 +40,7 @@ function showWidget(widget) { delete widget.origComputeSize; delete widget.origSerializeValue; - // Hide any linked widgets, e.g. seed+randomize + // Hide any linked widgets, e.g. seed+seedControl if (widget.linkedWidgets) { for (const w of widget.linkedWidgets) { showWidget(w); @@ -285,7 +285,7 @@ app.registerExtension({ } if (widget.type === "number") { - addRandomizeWidget(this, widget, "Random after every gen"); + addSeedControlWidget(this, widget, "fixed_seed"); } // When our value changes, update other widgets to reflect our changes diff --git a/web/scripts/widgets.js b/web/scripts/widgets.js index 5f5043cd0..d7fc9ad6b 100644 --- a/web/scripts/widgets.js +++ b/web/scripts/widgets.js @@ -10,37 +10,60 @@ function getNumberDefaults(inputData, defaultStep) { return { val: defaultVal, config: { min, max, step: 10.0 * step } }; } -export function addRandomizeWidget(node, targetWidget, name, defaultValue = false) { - const randomize = node.addWidget("toggle", name, defaultValue, function (v) {}, { - on: "enabled", - off: "disabled", - serialize: false, // Don't include this in prompt. - }); +export function addSeedControlWidget(node, targetWidget, defauly, options) { + const seedControl = node.addWidget("combo", "seed control after generating", "Fixed Seed", function (v) { }, { + values: ["Fixed Seed", "increment", "decrement", "randomize"] },) + seedControl.afterQueued = () => { - randomize.afterQueued = () => { - if (randomize.value) { - const min = targetWidget.options?.min; - let max = targetWidget.options?.max; - if (min != null || max != null) { - if (max) { - // limit max to something that javascript can handle - max = Math.min(1125899906842624, max); + const min = targetWidget.options?.min; + let max = targetWidget.options?.max; + + + + var v = seedControl.value; + + switch (v) { + case ("Fixed Seed"): + console.log("Fixed Seed"); + break; + case ("increment"): + targetWidget.value += 1; + console.log("increment"); + break; + case ("decrement"): + targetWidget.value -= 1; + console.log("decrement"); + break; + case ("randomize"): + const min = targetWidget.options?.min; + let max = targetWidget.options?.max; + if (min != null || max != null) { + if (max) { + // limit max to something that javascript can handle + max = Math.min(1125899906842624, max); + console.log("Random"); + } + targetWidget.value = Math.floor(Math.random() * ((max ?? 9999999999) - (min ?? 0) + 1) + (min ?? 0)); + console.log("Random"); + } else { + targetWidget.value = Math.floor(Math.random() * 1125899906842624); + console.log("Random"); } - targetWidget.value = Math.floor(Math.random() * ((max ?? 9999999999) - (min ?? 0) + 1) + (min ?? 0)); - } else { - targetWidget.value = Math.floor(Math.random() * 1125899906842624); - } + break; + default: + console.log("default (fail)"); } }; - return randomize; + + return seedControl; } function seedWidget(node, inputName, inputData) { const seed = ComfyWidgets.INT(node, inputName, inputData); - const randomize = addRandomizeWidget(node, seed.widget, "Random seed after every gen", true); + const seedControl = addSeedControlWidget(node, seed.widget, "Fixed Seed"); - seed.widget.linkedWidgets = [randomize]; - return { widget: seed, randomize }; + seed.widget.linkedWidgets = [seedControl]; + return { widget: seed, seedControl}; } const MultilineSymbol = Symbol();