diff --git a/tests-api/openapi.yaml b/tests-api/openapi.yaml new file mode 100644 index 000000000..eba4079f9 --- /dev/null +++ b/tests-api/openapi.yaml @@ -0,0 +1,895 @@ +openapi: 3.0.3 +info: + title: ComfyUI API + description: 'API for ComfyUI - A powerful and modular UI for Stable Diffusion. + + + This API allows you to interact with ComfyUI programmatically, including: + + - Submitting workflows for execution + + - Managing the execution queue + + - Retrieving generated images + + - Managing models + + - Retrieving node information + + ' + version: 1.0.0 + license: + name: GNU General Public License v3.0 + url: https://github.com/comfyanonymous/ComfyUI/blob/master/LICENSE +servers: +- url: / + description: Default ComfyUI server +tags: +- name: workflow + description: Workflow execution and management +- name: queue + description: Queue management +- name: image + description: Image handling +- name: node + description: Node information +- name: model + description: Model management +- name: system + description: System information +- name: internal + description: Internal API routes +paths: + /api/prompt: + get: + tags: + - workflow + summary: Get information about current prompt execution + description: Returns information about the current prompt in the execution queue + operationId: getPromptInfo + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/PromptInfo' + post: + tags: + - workflow + summary: Submit a workflow for execution + description: 'Submit a workflow to be executed by the backend. + + The workflow is a JSON object describing the nodes and their connections. + + ' + operationId: executePrompt + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/PromptRequest' + responses: + '200': + description: Success - Prompt accepted + content: + application/json: + schema: + $ref: '#/components/schemas/PromptResponse' + '400': + description: Invalid prompt + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' + /api/queue: + get: + tags: + - queue + summary: Get queue information + description: Returns information about running and pending items in the queue + operationId: getQueueInfo + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/QueueInfo' + post: + tags: + - queue + summary: Manage queue + description: Clear the queue or delete specific items + operationId: manageQueue + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + clear: + type: boolean + description: If true, clears the entire queue + delete: + type: array + description: Array of prompt IDs to delete from the queue + items: + type: string + format: uuid + responses: + '200': + description: Success + /api/interrupt: + post: + tags: + - workflow + summary: Interrupt the current execution + description: Interrupts the currently running workflow execution + operationId: interruptExecution + responses: + '200': + description: Success + /api/free: + post: + tags: + - system + summary: Free resources + description: Unload models and/or free memory + operationId: freeResources + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + unload_models: + type: boolean + description: If true, unloads models from memory + free_memory: + type: boolean + description: If true, frees GPU memory + responses: + '200': + description: Success + /api/history: + get: + tags: + - workflow + summary: Get execution history + description: Returns the history of executed workflows + operationId: getHistory + parameters: + - name: max_items + in: query + description: Maximum number of history items to return + required: false + schema: + type: integer + format: int32 + responses: + '200': + description: Success + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/HistoryItem' + post: + tags: + - workflow + summary: Manage history + description: Clear history or delete specific items + operationId: manageHistory + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + clear: + type: boolean + description: If true, clears the entire history + delete: + type: array + description: Array of prompt IDs to delete from history + items: + type: string + format: uuid + responses: + '200': + description: Success + /api/history/{prompt_id}: + get: + tags: + - workflow + summary: Get specific history item + description: Returns a specific history item by ID + operationId: getHistoryItem + parameters: + - name: prompt_id + in: path + description: ID of the prompt to retrieve + required: true + schema: + type: string + format: uuid + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/HistoryItem' + /api/object_info: + get: + tags: + - node + summary: Get all node information + description: Returns information about all available nodes + operationId: getNodeInfo + responses: + '200': + description: Success + content: + application/json: + schema: + type: object + additionalProperties: + $ref: '#/components/schemas/NodeInfo' + /api/object_info/{node_class}: + get: + tags: + - node + summary: Get specific node information + description: Returns information about a specific node class + operationId: getNodeClassInfo + parameters: + - name: node_class + in: path + description: Name of the node class + required: true + schema: + type: string + responses: + '200': + description: Success + content: + application/json: + schema: + type: object + additionalProperties: + $ref: '#/components/schemas/NodeInfo' + /api/upload/image: + post: + tags: + - image + summary: Upload an image + description: Uploads an image to the server + operationId: uploadImage + requestBody: + required: true + content: + multipart/form-data: + schema: + type: object + properties: + image: + type: string + format: binary + description: The image file to upload + overwrite: + type: string + description: Whether to overwrite if file exists (true/false) + type: + type: string + enum: + - input + - temp + - output + description: Type of directory to store the image in + subfolder: + type: string + description: Subfolder to store the image in + responses: + '200': + description: Success + content: + application/json: + schema: + type: object + properties: + name: + type: string + description: Filename of the uploaded image + subfolder: + type: string + description: Subfolder the image was stored in + type: + type: string + description: Type of directory the image was stored in + '400': + description: Bad request + /api/upload/mask: + post: + tags: + - image + summary: Upload a mask for an image + description: Uploads a mask image and applies it to a referenced original image + operationId: uploadMask + requestBody: + required: true + content: + multipart/form-data: + schema: + type: object + properties: + image: + type: string + format: binary + description: The mask image file to upload + original_ref: + type: string + description: JSON string containing reference to the original image + responses: + '200': + description: Success + content: + application/json: + schema: + type: object + properties: + name: + type: string + description: Filename of the uploaded mask + subfolder: + type: string + description: Subfolder the mask was stored in + type: + type: string + description: Type of directory the mask was stored in + '400': + description: Bad request + /api/view: + get: + tags: + - image + summary: View an image + description: Retrieves an image from the server + operationId: viewImage + parameters: + - name: filename + in: query + description: Name of the file to retrieve + required: true + schema: + type: string + - name: type + in: query + description: Type of directory to retrieve from + required: false + schema: + type: string + enum: + - input + - temp + - output + default: output + - name: subfolder + in: query + description: Subfolder to retrieve from + required: false + schema: + type: string + - name: preview + in: query + description: Preview options (format;quality) + required: false + schema: + type: string + - name: channel + in: query + description: Channel to retrieve (rgb, a, rgba) + required: false + schema: + type: string + enum: + - rgb + - a + - rgba + default: rgba + responses: + '200': + description: Success + content: + image/*: + schema: + type: string + format: binary + '400': + description: Bad request + '404': + description: File not found + /api/view_metadata/{folder_name}: + get: + tags: + - model + summary: View model metadata + description: Retrieves metadata from a safetensors file + operationId: viewModelMetadata + parameters: + - name: folder_name + in: path + description: Name of the model folder + required: true + schema: + type: string + - name: filename + in: query + description: Name of the safetensors file + required: true + schema: + type: string + responses: + '200': + description: Success + content: + application/json: + schema: + type: object + '404': + description: File not found + /api/models: + get: + tags: + - model + summary: Get model types + description: Returns a list of available model types + operationId: getModelTypes + responses: + '200': + description: Success + content: + application/json: + schema: + type: array + items: + type: string + /api/models/{folder}: + get: + tags: + - model + summary: Get models of a specific type + description: Returns a list of available models of a specific type + operationId: getModels + parameters: + - name: folder + in: path + description: Model type folder + required: true + schema: + type: string + responses: + '200': + description: Success + content: + application/json: + schema: + type: array + items: + type: string + '404': + description: Folder not found + /api/embeddings: + get: + tags: + - model + summary: Get embeddings + description: Returns a list of available embeddings + operationId: getEmbeddings + responses: + '200': + description: Success + content: + application/json: + schema: + type: array + items: + type: string + /api/extensions: + get: + tags: + - system + summary: Get extensions + description: Returns a list of available extensions + operationId: getExtensions + responses: + '200': + description: Success + content: + application/json: + schema: + type: array + items: + type: string + /api/system_stats: + get: + tags: + - system + summary: Get system statistics + description: Returns system information including RAM, VRAM, and ComfyUI version + operationId: getSystemStats + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/SystemStats' + /api/ws: + get: + tags: + - workflow + summary: WebSocket connection + description: 'Establishes a WebSocket connection for real-time communication. + + This endpoint is used for receiving progress updates, status changes, and + results from workflow executions. + + ' + operationId: webSocketConnect + parameters: + - name: clientId + in: query + description: Optional client ID for reconnection + required: false + schema: + type: string + responses: + '101': + description: Switching Protocols to WebSocket + /internal/logs: + get: + tags: + - internal + summary: Get logs + description: Returns system logs as a single string + operationId: getLogs + responses: + '200': + description: Success + content: + application/json: + schema: + type: string + /internal/logs/raw: + get: + tags: + - internal + summary: Get raw logs + description: Returns raw system logs with terminal size information + operationId: getRawLogs + responses: + '200': + description: Success + content: + application/json: + schema: + type: object + properties: + entries: + type: array + items: + type: object + properties: + t: + type: string + description: Timestamp + m: + type: string + description: Message + size: + type: object + properties: + cols: + type: integer + description: Terminal columns + rows: + type: integer + description: Terminal rows + /internal/logs/subscribe: + patch: + tags: + - internal + summary: Subscribe to logs + description: Subscribe or unsubscribe to log updates + operationId: subscribeToLogs + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + clientId: + type: string + description: Client ID + enabled: + type: boolean + description: Whether to enable or disable subscription + responses: + '200': + description: Success + /internal/folder_paths: + get: + tags: + - internal + summary: Get folder paths + description: Returns a map of folder names to their paths + operationId: getFolderPaths + responses: + '200': + description: Success + content: + application/json: + schema: + type: object + additionalProperties: + type: string + /internal/files/{directory_type}: + get: + tags: + - internal + summary: Get files + description: Returns a list of files in a specific directory type + operationId: getFiles + parameters: + - name: directory_type + in: path + description: Type of directory (output, input, temp) + required: true + schema: + type: string + enum: + - output + - input + - temp + responses: + '200': + description: Success + content: + application/json: + schema: + type: array + items: + type: string + '400': + description: Invalid directory type +components: + schemas: + PromptRequest: + type: object + required: + - prompt + properties: + prompt: + type: object + description: The workflow graph to execute + additionalProperties: true + number: + type: number + description: Priority number for the queue (lower numbers have higher priority) + front: + type: boolean + description: If true, adds the prompt to the front of the queue + extra_data: + type: object + description: Extra data to be associated with the prompt + additionalProperties: true + client_id: + type: string + description: Client ID for attribution of the prompt + PromptResponse: + type: object + properties: + prompt_id: + type: string + format: uuid + description: Unique identifier for the prompt execution + number: + type: number + description: Priority number in the queue + node_errors: + type: object + description: Any errors in the nodes of the prompt + additionalProperties: true + ErrorResponse: + type: object + properties: + error: + type: object + properties: + type: + type: string + description: Error type + message: + type: string + description: Error message + details: + type: string + description: Detailed error information + extra_info: + type: object + description: Additional error information + additionalProperties: true + node_errors: + type: object + description: Node-specific errors + additionalProperties: true + PromptInfo: + type: object + properties: + exec_info: + type: object + properties: + queue_remaining: + type: integer + description: Number of items remaining in the queue + QueueInfo: + type: object + properties: + queue_running: + type: array + items: + type: object + description: Currently running items + additionalProperties: true + queue_pending: + type: array + items: + type: object + description: Pending items in the queue + additionalProperties: true + HistoryItem: + type: object + properties: + prompt_id: + type: string + format: uuid + description: Unique identifier for the prompt + prompt: + type: object + description: The workflow graph that was executed + additionalProperties: true + extra_data: + type: object + description: Additional data associated with the execution + additionalProperties: true + outputs: + type: object + description: Output data from the execution + additionalProperties: true + NodeInfo: + type: object + properties: + input: + type: object + description: Input specifications for the node + additionalProperties: true + input_order: + type: object + description: Order of inputs for display + additionalProperties: + type: array + items: + type: string + output: + type: array + items: + type: string + description: Output types of the node + output_is_list: + type: array + items: + type: boolean + description: Whether each output is a list + output_name: + type: array + items: + type: string + description: Names of the outputs + name: + type: string + description: Internal name of the node + display_name: + type: string + description: Display name of the node + description: + type: string + description: Description of the node + python_module: + type: string + description: Python module implementing the node + category: + type: string + description: Category of the node + output_node: + type: boolean + description: Whether this is an output node + output_tooltips: + type: array + items: + type: string + description: Tooltips for outputs + deprecated: + type: boolean + description: Whether the node is deprecated + experimental: + type: boolean + description: Whether the node is experimental + api_node: + type: boolean + description: Whether this is an API node + SystemStats: + type: object + properties: + system: + type: object + properties: + os: + type: string + description: Operating system + ram_total: + type: number + description: Total system RAM in bytes + ram_free: + type: number + description: Free system RAM in bytes + comfyui_version: + type: string + description: ComfyUI version + python_version: + type: string + description: Python version + pytorch_version: + type: string + description: PyTorch version + embedded_python: + type: boolean + description: Whether using embedded Python + argv: + type: array + items: + type: string + description: Command line arguments + devices: + type: array + items: + type: object + properties: + name: + type: string + description: Device name + type: + type: string + description: Device type + index: + type: integer + description: Device index (may be omitted for CPU devices) + vram_total: + type: number + description: Total VRAM in bytes + vram_free: + type: number + description: Free VRAM in bytes + torch_vram_total: + type: number + description: Total VRAM as reported by PyTorch + torch_vram_free: + type: number + description: Free VRAM as reported by PyTorch