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: "..." /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: '^(?webp|jpeg);(?\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