mirror of
https://github.com/comfyanonymous/ComfyUI.git
synced 2026-01-08 13:20:50 +08:00
912 lines
28 KiB
YAML
912 lines
28 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:
|
||
Idempotency-Key:
|
||
description: |
|
||
The API supports idempotency for safely retrying requests without accidentally performing the same operation twice. When creating or updating an object, use an idempotency key. Then, if a connection error occurs, you can safely repeat the request without risk of creating a second object or performing the update twice.
|
||
|
||
To perform an idempotent request, provide an additional IdempotencyKey element to the request options.
|
||
|
||
Idempotency works by saving the resulting status code and body of the first request made for any given idempotency key, regardless of whether it succeeds or fails. Subsequent requests with the same key return the same result, including 500 errors.
|
||
|
||
A client generates an idempotency key, which is a unique key that the server uses to recognize subsequent retries of the same request. How you create unique keys is up to you, but we suggest using V4 UUIDs, or another random string with enough entropy to avoid collisions. Idempotency keys are up to 255 characters long.
|
||
|
||
You can remove keys from the system automatically after they’re at least 24 hours old. We generate a new request if a key is reused after the original is pruned. The idempotency layer compares incoming parameters to those of the original request and errors if they’re the same to prevent accidental misuse.
|
||
example: XFDSF000213
|
||
schema:
|
||
type: string
|
||
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=.+'
|
||
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
|
||
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 |