Randomize as new default, seedControl is a widget except when seed is converted to input

This commit is contained in:
Julien Lubimiv 2023-03-30 01:36:15 -04:00
parent d3a375c8fb
commit 381976611c
4 changed files with 58 additions and 28 deletions

1
.gitignore vendored
View File

@ -8,3 +8,4 @@ temp/
custom_nodes/
!custom_nodes/example_node.py.example
extra_model_paths.yaml
/.vs

View File

@ -1,13 +1,17 @@
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";
const VALID_TYPES = ["STRING", "combo", "number"];
function isConvertableWidget(widget, config) {
return VALID_TYPES.includes(widget.type) || VALID_TYPES.includes(config[0]);
if (widget.name == "seed control after generating")
widget.allowConvertToInput = false;
else
return VALID_TYPES.includes(widget.type) || VALID_TYPES.includes(config[0]);
}
function hideWidget(node, widget, suffix = "") {
widget.origType = widget.type;
widget.origComputeSize = widget.computeSize;
@ -23,7 +27,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 +44,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);
@ -284,8 +288,8 @@ app.registerExtension({
}
}
if (widget.type === "number") {
addRandomizeWidget(this, widget, "Random after every gen");
if (widget.type === "combo") {
addSeedControlWidget(this, widget, "randomize");
}
// When our value changes, update other widgets to reflect our changes

View File

@ -771,6 +771,12 @@ class ComfyApp {
widget.value = widget.value.slice(7);
}
}
if (widget.name == "seed control after generating") {
if (widget.value == true) {
widget.value = "randomize";
}
}
}
}
}

View File

@ -10,37 +10,56 @@ 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, defaultValue = "randomize", values) {
const seedControl = node.addWidget("combo", "seed control after generating", "randomize", 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);
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, "randomize");
seed.widget.linkedWidgets = [randomize];
return { widget: seed, randomize };
seed.widget.linkedWidgets = [seedControl];
return { widget: seed, seedControl };
}
const MultilineSymbol = Symbol();