[backport cloud/1.38] Update control_after_generate schema (#8507)

Backport of #8505 to `cloud/1.38`

Automatically created by backport workflow.

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-8507-backport-cloud-1-38-Update-control_after_generate-schema-2f96d73d365081d399f3f459a843709e)
by [Unito](https://www.unito.io)

Co-authored-by: AustinMroz <austin@comfy.org>
This commit is contained in:
Comfy Org PR Bot
2026-01-31 14:43:00 +09:00
committed by GitHub
parent 26bf6d324e
commit 7d114577b5
4 changed files with 28 additions and 7 deletions

View File

@@ -74,10 +74,14 @@ const addMultiSelectWidget = (
// TODO: Add remote support to multi-select widget // TODO: Add remote support to multi-select widget
// https://github.com/Comfy-Org/ComfyUI_frontend/issues/3003 // https://github.com/Comfy-Org/ComfyUI_frontend/issues/3003
if (inputSpec.control_after_generate) { if (inputSpec.control_after_generate) {
const defaultType =
typeof inputSpec.control_after_generate === 'string'
? inputSpec.control_after_generate
: 'fixed'
widget.linkedWidgets = addValueControlWidgets( widget.linkedWidgets = addValueControlWidgets(
node, node,
widget, widget,
'fixed', defaultType,
undefined, undefined,
transformInputSpecV2ToV1(inputSpec) transformInputSpecV2ToV1(inputSpec)
) )
@@ -209,10 +213,14 @@ const createInputMappingWidget = (
if (!isComboWidget(widget)) { if (!isComboWidget(widget)) {
throw new Error(`Expected combo widget but received ${widget.type}`) throw new Error(`Expected combo widget but received ${widget.type}`)
} }
const defaultType =
typeof inputSpec.control_after_generate === 'string'
? inputSpec.control_after_generate
: 'randomize'
widget.linkedWidgets = addValueControlWidgets( widget.linkedWidgets = addValueControlWidgets(
node, node,
widget, widget,
undefined, defaultType,
undefined, undefined,
transformInputSpecV2ToV1(inputSpec) transformInputSpecV2ToV1(inputSpec)
) )
@@ -284,10 +292,14 @@ const addComboWidget = (
throw new Error(`Expected combo widget but received ${widget.type}`) throw new Error(`Expected combo widget but received ${widget.type}`)
} }
const defaultType =
typeof inputSpec.control_after_generate === 'string'
? inputSpec.control_after_generate
: 'randomize'
widget.linkedWidgets = addValueControlWidgets( widget.linkedWidgets = addValueControlWidgets(
node, node,
widget, widget,
undefined, defaultType,
undefined, undefined,
transformInputSpecV2ToV1(inputSpec) transformInputSpecV2ToV1(inputSpec)
) )

View File

@@ -72,10 +72,14 @@ export const useIntWidget = () => {
['seed', 'noise_seed'].includes(inputSpec.name) ['seed', 'noise_seed'].includes(inputSpec.name)
if (controlAfterGenerate) { if (controlAfterGenerate) {
const defaultType =
typeof inputSpec.control_after_generate === 'string'
? inputSpec.control_after_generate
: 'randomize'
const controlWidget = addValueControlWidget( const controlWidget = addValueControlWidget(
node, node,
widget, widget,
'randomize', defaultType,
undefined, undefined,
undefined, undefined,
transformInputSpecV2ToV1(inputSpec) transformInputSpecV2ToV1(inputSpec)

View File

@@ -2,6 +2,7 @@ import { z } from 'zod'
import { fromZodError } from 'zod-validation-error' import { fromZodError } from 'zod-validation-error'
import { resultItemType } from '@/schemas/apiSchema' import { resultItemType } from '@/schemas/apiSchema'
import { CONTROL_OPTIONS } from '@/types/simplifiedWidget'
const zComboOption = z.union([z.string(), z.number()]) const zComboOption = z.union([z.string(), z.number()])
const zRemoteWidgetConfig = z.object({ const zRemoteWidgetConfig = z.object({
@@ -50,7 +51,9 @@ export const zIntInputOptions = zNumericInputOptions.extend({
* If true, a linked widget will be added to the node to select the mode * If true, a linked widget will be added to the node to select the mode
* of `control_after_generate`. * of `control_after_generate`.
*/ */
control_after_generate: z.boolean().optional() control_after_generate: z
.union([z.boolean(), z.enum(CONTROL_OPTIONS)])
.optional()
}) })
export const zFloatInputOptions = zNumericInputOptions.extend({ export const zFloatInputOptions = zNumericInputOptions.extend({
@@ -74,7 +77,9 @@ export const zStringInputOptions = zBaseInputOptions.extend({
}) })
export const zComboInputOptions = zBaseInputOptions.extend({ export const zComboInputOptions = zBaseInputOptions.extend({
control_after_generate: z.boolean().optional(), control_after_generate: z
.union([z.boolean(), z.enum(CONTROL_OPTIONS)])
.optional(),
image_upload: z.boolean().optional(), image_upload: z.boolean().optional(),
image_folder: resultItemType.optional(), image_folder: resultItemType.optional(),
allow_batch: z.boolean().optional(), allow_batch: z.boolean().optional(),

View File

@@ -15,7 +15,7 @@ export type WidgetValue =
| void | void
| File[] | File[]
const CONTROL_OPTIONS = [ export const CONTROL_OPTIONS = [
'fixed', 'fixed',
'increment', 'increment',
'decrement', 'decrement',