From 9de1535931ad3c9fb718181c5544b035cae19e43 Mon Sep 17 00:00:00 2001 From: "Sergey A. Kilimnik" Date: Mon, 27 Mar 2023 13:10:05 +0300 Subject: [PATCH] Change in random seed execution order, if a seed is marked as random, the value is been randomized before call, not after --- web/extensions/core/widgetInputs.js | 2 +- web/scripts/app.js | 29 ++++++++++++++++------------- web/scripts/widgets.js | 5 +++-- 3 files changed, 20 insertions(+), 16 deletions(-) diff --git a/web/extensions/core/widgetInputs.js b/web/extensions/core/widgetInputs.js index ff9227d28..6dea98102 100644 --- a/web/extensions/core/widgetInputs.js +++ b/web/extensions/core/widgetInputs.js @@ -285,7 +285,7 @@ app.registerExtension({ } if (widget.type === "number") { - addRandomizeWidget(this, widget, "Random after every gen"); + addRandomizeWidget(this, widget, "Random every gen"); } // When our value changes, update other widgets to reflect our changes diff --git a/web/scripts/app.js b/web/scripts/app.js index 89eb71122..00cf828c0 100644 --- a/web/scripts/app.js +++ b/web/scripts/app.js @@ -842,6 +842,22 @@ class ComfyApp { async queuePrompt(number, batchCount = 1) { for (let i = 0; i < batchCount; i++) { + + const workflow = this.graph.serialize(); + + for (const n of workflow.nodes) { + const node = graph.getNodeById(n.id); + if (node.widgets) { + for (const widget of node.widgets) { + // Allow widgets to run callbacks after a prompt has been queued + // e.g. random seed after every gen + if (widget.beforeQueued) { + widget.beforeQueued(); + } + } + } + } + const p = await this.graphToPrompt(); try { @@ -851,19 +867,6 @@ class ComfyApp { return; } - for (const n of p.workflow.nodes) { - const node = graph.getNodeById(n.id); - if (node.widgets) { - for (const widget of node.widgets) { - // Allow widgets to run callbacks after a prompt has been queued - // e.g. random seed after every gen - if (widget.afterQueued) { - widget.afterQueued(); - } - } - } - } - this.canvas.draw(true, true); await this.ui.queue.update(); } diff --git a/web/scripts/widgets.js b/web/scripts/widgets.js index 5f5043cd0..f878e644f 100644 --- a/web/scripts/widgets.js +++ b/web/scripts/widgets.js @@ -17,7 +17,7 @@ export function addRandomizeWidget(node, targetWidget, name, defaultValue = fals serialize: false, // Don't include this in prompt. }); - randomize.afterQueued = () => { + randomize.beforeQueued = () => { if (randomize.value) { const min = targetWidget.options?.min; let max = targetWidget.options?.max; @@ -32,12 +32,13 @@ export function addRandomizeWidget(node, targetWidget, name, defaultValue = fals } } }; + return randomize; } 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 randomize = addRandomizeWidget(node, seed.widget, "Random seed every gen", true); seed.widget.linkedWidgets = [randomize]; return { widget: seed, randomize };