mirror of
https://github.com/comfyanonymous/ComfyUI.git
synced 2026-01-10 06:10:50 +08:00
- Removed /api/v1/images because you should use your own CDN style image host and /view for maximum compatibility - The /api/v1/prompts POST application/json response will now return the outputs dictionary - Caching has been removed - More tests - Subdirectory prefixes are now supported - Fixed an issue where a Linux frontend and Windows backend would have paths that could not interact with each other correctly
806 lines
24 KiB
YAML
806 lines
24 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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
responses:
|
|
'200':
|
|
description: OK
|
|
/free:
|
|
# from 6d281b4ff4ad3918a4f3b4ca4a8b547a2ba3bf80
|
|
post:
|
|
summary: (UI) Unload models or free memory
|
|
operationId: free
|
|
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:
|
|
get:
|
|
summary: (API) Get 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:
|
|
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=.+'
|
|
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.
|
|
|
|
Additionally, a 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.
|
|
|
|
Hashing function for web browsers:
|
|
|
|
```js
|
|
async function generateHash(body) {
|
|
// Stringify and sort keys in the JSON object
|
|
let str = JSON.stringify(body);
|
|
|
|
// Encode the string as a Uint8Array
|
|
let encoder = new TextEncoder();
|
|
let data = encoder.encode(str);
|
|
|
|
// Create a SHA-256 hash of the data
|
|
let hash = await window.crypto.subtle.digest('SHA-256', data);
|
|
|
|
// Convert the hash (which is an ArrayBuffer) to a hex string
|
|
let hashArray = Array.from(new Uint8Array(hash));
|
|
let hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
|
|
|
|
return hashHex;
|
|
}
|
|
```
|
|
|
|
Hashing function for nodejs:
|
|
|
|
```js
|
|
const crypto = require('crypto');
|
|
|
|
function generateHash(body) {
|
|
// Stringify and sort keys in the JSON object
|
|
let str = JSON.stringify(body);
|
|
|
|
// Create a SHA-256 hash of the string
|
|
let hash = crypto.createHash('sha256');
|
|
hash.update(str);
|
|
|
|
// Return the hexadecimal representation of the hash
|
|
return hash.digest('hex');
|
|
}
|
|
```
|
|
|
|
Hashing function for python:
|
|
```python
|
|
def digest(data: dict | str) -> str:
|
|
json_str = data if isinstance(data, str) else json.dumps(data, separators=(',', ':'))
|
|
json_bytes = json_str.encode('utf-8')
|
|
hash_object = hashlib.sha256(json_bytes)
|
|
return hash_object.hexdigest()
|
|
|
|
```
|
|
type: object
|
|
required:
|
|
- urls
|
|
- outputs
|
|
properties:
|
|
urls:
|
|
type: array
|
|
items:
|
|
type: string
|
|
outputs:
|
|
$ref: "#/components/schemas/Outputs"
|
|
example:
|
|
outputs: { }
|
|
urls: [ "http://127.0.0.1:8188/view?filename=ComfyUI_00001_.png&type=output", "https://comfyui.example.com/view?filename=ComfyUI_00001_.png&type=output" ]
|
|
multipart/mixed:
|
|
encoding:
|
|
"^\\d+$":
|
|
contentType: image/png, image/jpeg, image/webp
|
|
schema:
|
|
type: object
|
|
description: |
|
|
Each of the output nodes' binary values for images, and the "outputs" json object.
|
|
properties:
|
|
outputs:
|
|
$ref: "#/components/schemas/Outputs"
|
|
additionalProperties:
|
|
patternProperties:
|
|
"^\\d+$":
|
|
type: string
|
|
format: binary
|
|
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.
|
|
429:
|
|
description: |
|
|
The queue is currently too long to process your request.
|
|
500:
|
|
description: |
|
|
An unexpected exception occurred and it is being passed to you.
|
|
|
|
This can occur if file was referenced in a LoadImage / LoadImageMask that doesn't exist.
|
|
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"
|
|
- "multipart/mixed"
|
|
required: false
|
|
description: |
|
|
Specifies the media type the client is willing to receive.
|
|
|
|
multipart/mixed will soon be supported to return all the images from the workflow.
|
|
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:
|
|
Node:
|
|
type: object
|
|
properties:
|
|
input:
|
|
type: object
|
|
required:
|
|
- required
|
|
properties:
|
|
required:
|
|
type: object
|
|
additionalProperties:
|
|
type: array
|
|
items:
|
|
minItems: 1
|
|
maxItems: 2
|
|
oneOf:
|
|
- type: string
|
|
- type: number
|
|
- type: object
|
|
properties:
|
|
default:
|
|
type: string
|
|
min:
|
|
type: number
|
|
max:
|
|
type: number
|
|
step:
|
|
type: number
|
|
multiline:
|
|
type: boolean
|
|
- type: array
|
|
items:
|
|
type: string
|
|
hidden:
|
|
type: object
|
|
additionalProperties:
|
|
type: string
|
|
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 |