Any ComfyUI workflow runs as a job, from the inputs its catalog entry declares
CI / test (push) Successful in 9m7s

A model's catalog entry now says what its workflow takes and makes:
comfyui.inputs, each a placeholder of its name with a type (text, int,
float, bool, choice, image, mask, audio, video, file), bounds, choices
and a default; and comfyui.output, which gains video, audio and files
beside pictures and meshes. POST /v1/workflows/runs with {model, inputs}
checks a request against them before a job is written — a required input
left out, an unknown one, a number out of bounds, a song sent as a
picture, another owner's file id are each refused with what was wrong —
and the job worker replays it to a replica, where the files go into
ComfyUI's input directory, the workflow is filled and run, and the first
file of the model's output kind is the job's result. /v1/models lists
each ComfyUI model's workflow, so a client can build its form.

A PNG result carries the licence in an iTXt chunk, as a GLB does in
asset.extras. A file whose server named no type is typed by its name
before its bytes, so a WAV is audio/wav, not audio/wave.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Ilker ManapandClaude Opus 5.5 committed 2026-10-11 14:28:15 +02:00
1 parent b43e66c95e
commit b6bfc33ef7
20 files changed
+1660 -44

No files matched your search

+49 -1
View File
@@ -8774,7 +8774,14 @@
},
"output": {
"type": "string",
"description": "Output is what the workflow makes: pictures (the default), asked for at /v1/images/generations, or meshes, asked for as a job at /v1/3d/generations from a picture."
"description": "Output is what the workflow makes: pictures (the default), asked for at /v1/images/generations; meshes, asked for as a job at /v1/3d/generations from a picture; or video, audio or files. Every kind is asked for as a job at /v1/workflows/runs too."
},
"inputs": {
"type": "array",
"items": {
"$ref": "#/components/schemas/catalog.Input"
},
"description": "Inputs are what the workflow takes from a request at /v1/workflows/runs, each the placeholder of its name."
},
"nodes": {
"type": "array",
@@ -8879,6 +8886,47 @@
}
}
},
"catalog.Input": {
"type": "object",
"description": "Input is one thing a workflow takes from a request: the placeholder {{name}} in its graph, filled with the request's inputs.name.",
"properties": {
"name": {
"type": "string",
"description": "Name is the placeholder's, and the request's key."
},
"type": {
"type": "string",
"description": "Type is one of text, int, float, bool, choice, image, mask, audio, video, file. The last five are files, sent as base64, a data URL, or the id of a file uploaded to /v1/files, and put in ComfyUI's input directory; the placeholder gets the name they were given there."
},
"required": {
"type": "boolean",
"description": "Required inputs must be in every request; the others take Default, or the workflow's own {{name|default}}."
},
"default": {},
"min": {
"type": "number",
"description": "Min and Max bound a number; for text, Max bounds its length."
},
"max": {
"type": "number"
},
"choices": {
"type": "array",
"items": {
"type": "string"
},
"description": "Choices are what a choice may be."
},
"max_mb": {
"type": "integer",
"description": "MaxMB bounds a file input; zero is the type's own bound."
},
"doc": {
"type": "string",
"description": "Doc says what the input is for, to whoever fills it in."
}
}
},
"catalog.License": {
"type": "object",
"description": "License is the terms what a model makes comes under: said beside every result, and written into a mesh, which travels without the API.",