Compare commits

...

3 Commits

Author SHA1 Message Date
Alexander Brown
53b1170bd2 Silence some errors on the websocket proxy 2026-01-31 01:53:41 -08:00
Alexander Brown
50c1754da6 deps: Update vite 2026-01-31 00:54:05 -08:00
AustinMroz
be7c34e28b Update control_after_generate schema (#8505)
Updates `control_after_generate` in the schema to support specifying the
default control value as a string

See Comfy-Org/ComfyUI#12187

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-8505-Update-control_after_generate-schema-2f96d73d365081f9bf73c804072bb415)
by [Unito](https://www.unito.io)
2026-01-30 21:34:50 -08:00
9 changed files with 369 additions and 261 deletions

View File

@@ -98,12 +98,10 @@ const config: StorybookConfig = {
},
build: {
rolldownOptions: {
experimental: {
strictExecutionOrder: true
},
treeshake: false,
output: {
keepNames: true
keepNames: true,
strictExecutionOrder: true
},
onwarn: (warning, warn) => {
// Suppress specific warnings

View File

@@ -192,7 +192,7 @@
},
"pnpm": {
"overrides": {
"vite": "^8.0.0-beta.8"
"vite": "^8.0.0-beta.11"
}
}
}

567
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@@ -62,8 +62,8 @@ catalog:
happy-dom: ^20.0.11
husky: ^9.1.7
jiti: 2.6.1
jsonata: ^2.1.0
jsdom: ^27.4.0
jsonata: ^2.1.0
knip: ^5.75.1
lint-staged: ^16.2.7
markdown-table: ^3.0.4
@@ -92,7 +92,7 @@ catalog:
unplugin-icons: ^22.5.0
unplugin-typegpu: 0.8.0
unplugin-vue-components: ^30.0.0
vite: ^8.0.0-beta.8
vite: 8.0.0-beta.11
vite-plugin-dts: ^4.5.4
vite-plugin-html: ^3.2.2
vite-plugin-vue-devtools: ^8.0.0

View File

@@ -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)
)

View File

@@ -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)

View File

@@ -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(),

View File

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

View File

@@ -199,7 +199,17 @@ export default defineConfig({
'/ws': {
target: DEV_SERVER_COMFYUI_URL,
ws: true,
...cloudProxyConfig
...cloudProxyConfig,
configure: (proxy) => {
const ignoreEconn = (err: NodeJS.ErrnoException) => {
if (err.code === 'ECONNRESET' || err.code === 'ECONNABORTED') return
console.error(err)
}
proxy.on('error', ignoreEconn)
proxy.on('proxyReqWs', (_proxyReq, _req, socket) => {
socket.on('error', ignoreEconn)
})
}
},
'/workflow_templates': {
@@ -442,11 +452,9 @@ export default defineConfig({
'console.trace'
]
},
experimental: {
strictExecutionOrder: true
},
output: {
keepNames: true,
strictExecutionOrder: true,
codeSplitting: {
groups: [
{