ComfyUI/comfy/api/openapi.yaml
doctorpangloss 71698f4099 tests pass
2025-12-26 15:20:45 -08:00

906 lines
26 KiB
YAML

openapi: 3.1.0
info:
title: comfyui
version: 0.0.1
servers:
- description: localhost
url: http://localhost:8188
paths:
/:
get:
summary: (UI) index.html
operationId: get_root_ui
responses:
200:
description: the index.html of the website
content:
text/html:
schema:
type: string
example: "<!DOCTYPE html>..."
/embeddings:
get:
summary: (UI) Get embeddings
operationId: get_embeddings_ui
responses:
200:
description: |
Returns a list of the files located in the embeddings/ directory that can be used as arguments for
embedding nodes. The file extension is omitted.
content:
application/json:
schema:
description: |
File names without extensions in embeddings/ directory
type: array
items:
type: string
/extensions:
get:
summary: (UI) Get extensions
operationId: get_extensions_ui
responses:
200:
description: Returns a list of files located in extensions/**/*.js
content:
application/json:
schema:
type: array
items:
type: string
/upload/image:
post:
summary: (UI) Upload an image.
description: |
Uploads an image to the input/ directory.
Never replaces files. The method will return a renamed file name if it would have overwritten an existing file.
operationId: upload_image_ui
requestBody:
content:
multipart/form-data:
schema:
type: object
description: The upload data
properties:
image:
description: The image binary data
type: string
format: binary
responses:
'200':
description: Successful upload
content:
application/json:
schema:
type: object
properties:
name:
description: |
The name to use in a workflow.
type: string
'400':
description: |
The request was missing an image upload.
/view:
get:
summary: (UI) View image
operationId: view_image_ui
description: |
Reads the image with the specified file name and located in the specified subfolder.
parameters:
- in: query
name: filename
schema:
type: string
required: true
- in: query
name: type
schema:
type: string
enum:
- output
- input
- temp
- in: query
name: subfolder
schema:
type: string
- in: query
name: channel
schema:
type: string
enum:
- 'rgba'
- 'rgb'
- 'a'
- in: query
name: preview
schema:
type: string
pattern: '^(?<format>webp|jpeg);(?<quality>\d{1,2})$'
responses:
'200':
description: Successful retrieval of file
headers:
Content-Disposition:
schema:
type: string
pattern: '^filename=".+"'
content:
image/png:
schema:
type: string
format: binary
image/jpeg:
schema:
type: string
format: binary
image/webp:
schema:
type: string
format: binary
'400':
description: Bad Request
'403':
description: Forbidden
'404':
description: Not Found
/prompt:
get:
summary: (UI) Get queue info
operationId: get_prompt_ui
responses:
200:
description: The current queue information
content:
application/json:
schema:
type: object
properties:
exec_info:
type: object
properties:
queue_remaining:
type: integer
post:
summary: (UI) Post prompt
operationId: post_prompt_ui
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/PromptRequest"
responses:
'200':
description: The prompt was queued and a prompt ID was returned.
content:
application/json:
example:
prompt_id: "some-value"
schema:
type: object
properties:
prompt_id:
description: The ID of the prompt that was queued
type: string
text/plain:
example: "some-value"
schema:
type: string
'400':
description: The prompt was invalid. The validation error is returned as the content.
content:
text/plain:
schema:
type: string
/object_info:
get:
summary: (UI) Get object info
operationId: get_object_info_ui
responses:
'200':
description: The list of supported nodes
content:
application/json:
schema:
type: object
additionalProperties:
$ref: "#/components/schemas/Node"
/history:
get:
summary: (UI) Get history
operationId: get_history_ui
responses:
"200":
description: History
content:
application/json:
schema:
type: object
additionalProperties:
type: object
properties:
prompt:
$ref: "#/components/schemas/QueueTuple"
outputs:
$ref: "#/components/schemas/Outputs"
status:
type: object
properties:
status_str:
type: string
completed:
type: boolean
messages:
type: array
items:
type: string
post:
summary: (UI) Post history
operationId: post_history_ui
requestBody:
content:
application/json:
schema:
type: object
properties:
clear:
type: boolean
delete:
type: array
items:
type: integer
responses:
'200':
description: OK
/queue:
get:
summary: (UI) Get queue
operationId: get_queue_ui
responses:
"200":
description: the queue state
content:
application/json:
schema:
type: object
properties:
queue_running:
type: array
items:
$ref: "#/components/schemas/QueueTuple"
queue_pending:
type: array
items:
$ref: "#/components/schemas/QueueTuple"
post:
summary: (UI) Post queue
operationId: post_queue_ui
requestBody:
content:
application/json:
schema:
type: object
properties:
clear:
type: boolean
delete:
type: array
items:
type: integer
responses:
'200':
description: OK
/interrupt:
post:
summary: (UI) Post interrupt
operationId: post_interrupt_ui
responses:
'200':
description: OK
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
prompt_id:
type: string
description: |
The prompt to interrupt.
/free:
# from 6d281b4ff4ad3918a4f3b4ca4a8b547a2ba3bf80
post:
summary: (UI) Unload models or free memory
operationId: free_ui
responses:
200:
description: The free request was accepted. No content body.
requestBody:
content:
application/json:
schema:
oneOf:
- type: object
properties:
unload_models:
type: boolean
enum: [ true ]
required:
- unload_models
additionalProperties: false
- type: object
properties:
free_memory:
type: boolean
enum: [ true ]
required:
- free_memory
additionalProperties: false
description: >-
A POST request to /free with: {"unload_models":true} will unload models from vram.
A POST request to /free with: {"free_memory":true} will unload models and free all cached data from the last run workflow.
/api/v1/prompts/{prompt_id}:
get:
operationId: get_prompt
summary: (API) Get prompt status
parameters:
- in: path
name: prompt_id
schema:
type: string
required: true
description: |
The ID of the prompt to query.
responses:
204:
description: |
The prompt is still in progress
200:
description: |
Prompt outputs
content:
application/json:
schema:
$ref: "#/components/schemas/Outputs"
404:
description: |
The prompt was not found
500:
description: |
An execution error occurred while processing the prompt.
content:
application/json:
description:
An execution status directly from the workers
schema:
$ref: "#/components/schemas/ExecutionStatusAsDict"
/api/v1/prompts:
get:
operationId: list_prompts
summary: (API) Get last prompt
description: |
Return the last prompt run anywhere that was used to produce an image
The prompt object can be POSTed to run the image again with your own parameters.
The last prompt, whether it was in the UI or via the API, will be returned here.
responses:
200:
description: |
The last prompt.
content:
application/json:
schema:
$ref: "#/components/schemas/Prompt"
404:
description: |
There were no prompts in the history to return.
post:
operationId: generate
summary: (API) Generate image
description: |
Run a prompt to generate an image.
Blocks until the image is produced. This may take an arbitrarily long amount of time due to model loading.
Prompts that produce multiple images will return the last SaveImage output node in the Prompt by default. To return a specific image, remove other
SaveImage nodes.
When images are included in your request body, these are saved and their
filenames will be used in your Prompt.
responses:
200:
headers:
Digest:
description: The digest of the request body
example: SHA256=e5187160a7b2c496773c1c5a45bfd3ffbf25eaa5969328e6469d36f31cf240a3
schema:
type: string
Content-Disposition:
description: The filename when exactly one SaveImage node is specified.
example: filename=ComfyUI_00001.png
schema:
type: string
pattern: '^filename=.+'
Location:
description: The relative URL to revisit this request
schema:
type: string
description: |
The content of the last SaveImage node.
content:
image/png:
schema:
description: |
Binary image data. This will be the contents of the last node that returns image outputs in the workflow.
type: string
format: binary
application/json:
schema:
description: |
The complete outputs dictionary from the workflow.
type: object
required:
- urls
- outputs
properties:
urls:
deprecated: true
description: |
A deprecated list of URLs to binary outputs, whenever save nodes are used.
For each SaveImage node, there will be two URLs: the internal URL returned by the worker, and
the URL for the image based on the `--external-address` / `COMFYUI_EXTERNAL_ADDRESS` configuration.
type: array
items:
type: string
prompt_id:
type: string
description:
The ID of the prompt that was queued and executed
outputs:
$ref: "#/components/schemas/Outputs"
example:
outputs: { }
202:
description: |
The prompt was successfully queued.
content:
application/json:
description: Information about the item that was queued
schema:
type: object
properties:
prompt_id:
type: string
description: The ID of the prompt that was queued
headers:
Location:
description: The relative URL to check on the status of the request
schema:
type: string
Retry-After:
description: |
A hint for the number of seconds to check the provided Location for the status of your request.
This is the server's estimate for when the request will be completed.
204:
description: |
The prompt was run but did not contain any SaveImage outputs, so nothing will be returned.
This could be run to e.g. cause the backend to pre-load a model.
400:
description: |
The prompt is invalid.
content:
application/json:
description: A validation error dictionary from the ComfyUI frontend.
schema:
$ref: "#/components/schemas/ValidationErrorDict"
429:
description: |
The queue is currently too long to process your request.
500:
description: |
An execution error occurred while processing your prompt.
content:
application/json:
description:
An execution status directly from the workers
schema:
$ref: "#/components/schemas/ExecutionStatusAsDict"
507:
description: |
The server had an IOError like running out of disk space.
503:
description: |
The server is too busy to process this request right now.
This should only be returned by a load balancer. Standalone comfyui does not return this.
parameters:
- in: header
name: Accept
schema:
type: string
enum:
- "application/json"
- "image/png"
- "application/json+respond-async"
required: false
description: |
Specifies the media type the client is willing to receive.
If +respond-async is specified after your Accept mimetype, the request will be run async and you will get 202 when the prompt was queued.
- in: header
title: prefer_header
name: Prefer
schema:
type: string
enum:
- "respond-async"
- ""
required: false
allowEmptyValue: true
description: |
When respond-async is in your Prefer header, the request will be run async and you will get 202 when the prompt was queued.
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/Prompt"
multipart/formdata:
schema:
type: object
properties:
prompt:
$ref: "#/components/schemas/Prompt"
files:
description: |
Files to upload along with this request.
The filename specified in the content-disposition can be used in your Prompt.
type: array
items:
type: string
format: binary
components:
schemas:
InputSpec:
type: array
prefixItems:
- oneOf:
- type: string
- type: array
items:
oneOf:
- type: string
- type: number
- type: boolean
- type: object
properties:
default:
type: string
min:
type: number
max:
type: number
step:
type: number
multiline:
type: boolean
items: false
Node:
type: object
properties:
input:
type: object
required:
- required
properties:
required:
type: object
additionalProperties:
$ref: "#/components/schemas/InputSpec"
optional:
type: object
additionalProperties:
$ref: "#/components/schemas/InputSpec"
hidden:
type: object
additionalProperties:
$ref: "#/components/schemas/InputSpec"
output:
type: array
items:
type: string
output_is_list:
description: Indicates if the output of the corresponding index as the item in this array is a list output.
type: array
items:
type: boolean
output_name:
type: array
items:
type: string
name:
type: string
display_name:
type: string
description:
type: string
category:
type: string
output_node:
type: boolean
ExtraData:
type: object
properties:
extra_pnginfo:
type: object
properties:
workflow:
$ref: "#/components/schemas/Workflow"
Prompt:
type: object
description: |
The keys are stringified integers corresponding to nodes.
You can retrieve the last prompt run using GET /api/v1/prompts
additionalProperties:
$ref: '#/components/schemas/PromptNode'
PromptNode:
type: object
required:
- class_type
- inputs
properties:
_meta:
type: object
properties:
title:
type: string
description: |
The title of the node when authored in the workflow. Set only when the end user changed it using the
panel properties in the UI.
class_type:
type: string
description: The node's class type, which maps to a class in NODE_CLASS_MAPPINGS.
inputs:
type: object
additionalProperties:
oneOf:
- type: number
- type: string
- type: boolean
- type: array
description: |
When this is specified, it is a node connection, followed by an output.
minItems: 2
maxItems: 2
prefixItems:
- type: string
- type: integer
description: The inputs for the node, which can be scalar values or references to other nodes' outputs.
is_changed:
oneOf:
- type: array
description: An array of hashes representing whether the node has changed (optional).
items:
type: string
- type: string
description: A string representing whether the node has changed (optional).
Workflow:
type: object
properties:
last_node_id:
type: integer
last_link_id:
type: integer
nodes:
type: array
items:
type: object
properties:
id:
type: integer
type:
type: string
pos:
type: array
maxItems: 2
minItems: 2
items:
type: number
size:
type: object
properties:
"0":
type: number
"1":
type: number
flags:
type: object
additionalProperties:
type: object
order:
type: integer
mode:
type: integer
inputs:
type: array
items:
type: object
properties:
name:
type: string
type:
type: string
link:
type: integer
outputs:
type: array
items:
type: object
properties:
name:
type: string
type:
type: string
links:
type: array
items:
type: integer
slot_index:
type: integer
properties:
type: object
widgets_values:
type: array
items:
type: string
links:
type: array
items:
type: array
items:
minItems: 6
maxItems: 6
oneOf:
- type: integer
- type: string
groups:
type: array
items:
type: object
config:
type: object
extra:
type: object
version:
type: number
PromptRequest:
type: object
required:
- prompt
properties:
client_id:
type: string
prompt:
$ref: "#/components/schemas/Prompt"
extra_data:
$ref: "#/components/schemas/ExtraData"
QueueTuple:
type: array
description: |
An item that was added to the queue.
minItems: 3
maxItems: 5
prefixItems:
- type: number
description: Queue priority.
- type: string
description: The hash id of the prompt object. This should be the the prompt ID.
- $ref: "#/components/schemas/Prompt"
- $ref: "#/components/schemas/ExtraData"
- type: array
description: A list of "good output" node IDs in the prompt.
items:
type: string
Outputs:
description: |
The keys are node IDs, the values are output objects.
type: object
additionalProperties:
$ref: "#/components/schemas/Output"
Output:
type: object
properties:
images:
type: array
items:
$ref: "#/components/schemas/FileOutput"
latents:
type: array
items:
$ref: "#/components/schemas/FileOutput"
additionalProperties:
$ref: "#/components/schemas/FileOutput"
FileOutput:
type: object
required:
- filename
- subfolder
- type
- abs_path
properties:
filename:
type: string
subfolder:
type: string
type:
type: string
abs_path:
type: string
ValidationErrorDict:
type: object
properties:
type:
type: string
message:
type: string
details:
type: string
extra_info:
type: object
required:
- exception_type
- traceback
properties:
exception_type:
type: string
traceback:
type: array
items:
type: string
node_errors:
type: object
description: "Detailed validation errors per node"
additionalProperties:
type: object
properties:
errors:
type: array
items:
$ref: "#/components/schemas/ValidationErrorDict"
dependent_outputs:
type: array
items:
type: string
class_type:
type: string
required:
- type
- details
- extra_info
- message
ExecutionStatusAsDict:
type: object
required:
- status_str
- completed
- messages
properties:
status_str:
type: string
enum:
- "success"
- "error"
completed:
type: boolean
messages:
type: array
items:
type: string