Add support for new COMBO input spec and lazy/remote COMBO widgets (#2422)

This commit is contained in:
bymyself
2025-02-07 13:35:42 -07:00
committed by GitHub
parent 340513e27f
commit a914456827
7 changed files with 1043 additions and 14 deletions

View File

@@ -329,18 +329,32 @@ const zStringInputSpec = inputSpec([
})
])
const zComboInputProps = zBaseInputSpecValue.extend({
control_after_generate: z.boolean().optional(),
image_upload: z.boolean().optional(),
type: z.enum(['remote']).optional(),
route: z.string().url().or(z.string().startsWith('/')).optional(),
refresh: z.number().gte(128).safe().or(z.number().lte(0).safe()).optional(),
response_key: z.string().optional(),
query_params: z.record(z.string(), z.string()).optional()
})
// Dropdown Selection.
const zComboInputSpec = inputSpec(
[
z.array(z.any()),
zBaseInputSpecValue.extend({
control_after_generate: z.boolean().optional(),
image_upload: z.boolean().optional()
})
],
[z.array(z.any()), zComboInputProps],
/* allowUpcast=*/ false
)
const zComboInputSpecV2 = inputSpec(
[z.literal('COMBO'), zComboInputProps],
/* allowUpcast=*/ false
)
export function isComboInputSpecV1(
inputSpec: InputSpec
): inputSpec is ComboInputSpec {
return Array.isArray(inputSpec[0])
}
const excludedLiterals = new Set(['INT', 'FLOAT', 'BOOLEAN', 'STRING', 'COMBO'])
const zCustomInputSpec = inputSpec([
@@ -354,6 +368,7 @@ const zInputSpec = z.union([
zBooleanInputSpec,
zStringInputSpec,
zComboInputSpec,
zComboInputSpecV2,
zCustomInputSpec
])
@@ -388,6 +403,8 @@ const zComfyNodeDef = z.object({
})
// `/object_info`
export type ComboInputSpec = z.infer<typeof zComboInputSpec>
export type ComboInputSpecV2 = z.infer<typeof zComboInputSpecV2>
export type InputSpec = z.infer<typeof zInputSpec>
export type ComfyInputsSpec = z.infer<typeof zComfyInputsSpec>
export type ComfyOutputTypesSpec = z.infer<typeof zComfyOutputTypesSpec>