From 7d114577b503c59532ed0e16a8409d9ff51df407 Mon Sep 17 00:00:00 2001 From: Comfy Org PR Bot Date: Sat, 31 Jan 2026 14:43:00 +0900 Subject: [PATCH] [backport cloud/1.38] Update control_after_generate schema (#8507) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- .../widgets/composables/useComboWidget.ts | 18 +++++++++++++++--- .../widgets/composables/useIntWidget.ts | 6 +++++- src/schemas/nodeDefSchema.ts | 9 +++++++-- src/types/simplifiedWidget.ts | 2 +- 4 files changed, 28 insertions(+), 7 deletions(-) diff --git a/src/renderer/extensions/vueNodes/widgets/composables/useComboWidget.ts b/src/renderer/extensions/vueNodes/widgets/composables/useComboWidget.ts index 75cf47fec..f398f9b0b 100644 --- a/src/renderer/extensions/vueNodes/widgets/composables/useComboWidget.ts +++ b/src/renderer/extensions/vueNodes/widgets/composables/useComboWidget.ts @@ -74,10 +74,14 @@ const addMultiSelectWidget = ( // TODO: Add remote support to multi-select widget // https://github.com/Comfy-Org/ComfyUI_frontend/issues/3003 if (inputSpec.control_after_generate) { + const defaultType = + typeof inputSpec.control_after_generate === 'string' + ? inputSpec.control_after_generate + : 'fixed' widget.linkedWidgets = addValueControlWidgets( node, widget, - 'fixed', + defaultType, undefined, transformInputSpecV2ToV1(inputSpec) ) @@ -209,10 +213,14 @@ const createInputMappingWidget = ( if (!isComboWidget(widget)) { 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( node, widget, - undefined, + defaultType, undefined, transformInputSpecV2ToV1(inputSpec) ) @@ -284,10 +292,14 @@ const addComboWidget = ( 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( node, widget, - undefined, + defaultType, undefined, transformInputSpecV2ToV1(inputSpec) ) diff --git a/src/renderer/extensions/vueNodes/widgets/composables/useIntWidget.ts b/src/renderer/extensions/vueNodes/widgets/composables/useIntWidget.ts index 0c257c15b..f307aa0e1 100644 --- a/src/renderer/extensions/vueNodes/widgets/composables/useIntWidget.ts +++ b/src/renderer/extensions/vueNodes/widgets/composables/useIntWidget.ts @@ -72,10 +72,14 @@ export const useIntWidget = () => { ['seed', 'noise_seed'].includes(inputSpec.name) if (controlAfterGenerate) { + const defaultType = + typeof inputSpec.control_after_generate === 'string' + ? inputSpec.control_after_generate + : 'randomize' const controlWidget = addValueControlWidget( node, widget, - 'randomize', + defaultType, undefined, undefined, transformInputSpecV2ToV1(inputSpec) diff --git a/src/schemas/nodeDefSchema.ts b/src/schemas/nodeDefSchema.ts index 0a03388cd..4307150d1 100644 --- a/src/schemas/nodeDefSchema.ts +++ b/src/schemas/nodeDefSchema.ts @@ -2,6 +2,7 @@ import { z } from 'zod' import { fromZodError } from 'zod-validation-error' import { resultItemType } from '@/schemas/apiSchema' +import { CONTROL_OPTIONS } from '@/types/simplifiedWidget' const zComboOption = z.union([z.string(), z.number()]) 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 * 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({ @@ -74,7 +77,9 @@ export const zStringInputOptions = 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_folder: resultItemType.optional(), allow_batch: z.boolean().optional(), diff --git a/src/types/simplifiedWidget.ts b/src/types/simplifiedWidget.ts index 40b74f98b..b4654406b 100644 --- a/src/types/simplifiedWidget.ts +++ b/src/types/simplifiedWidget.ts @@ -15,7 +15,7 @@ export type WidgetValue = | void | File[] -const CONTROL_OPTIONS = [ +export const CONTROL_OPTIONS = [ 'fixed', 'increment', 'decrement',