A Python client library for interacting with ComfyUI API
Project description
ComfyUI API Client
A Python client library for interacting with ComfyUI API. This library provides a convenient wrapper to queue workflows, upload images/masks, and retrieve generated results (images, videos, audio, etc.) programmatically.
Features
- Workflow Management: Queue workflows easily and wait for results.
- File Management: Upload input images and masks directly to ComfyUI.
- Generic Output Handling: Automatically handles various output types (Images, Videos/GIFs, Audio).
- Execution Control: Interrupt running tasks, check queue status, and view history.
- Node Info: Retrieve definitions for ComfyUI nodes.
Installation
pip install comfyui_xy
How to Get Workflow JSON
To use this API, you need the workflow in API Format, which is different from the standard JSON saved by ComfyUI.
-
Enable Dev Mode Options:
- In ComfyUI web interface, click the Settings (gear icon) in the menu.
- Check the option "Enable Dev mode Options".
-
Save as API Format:
- Once Dev Mode is enabled, you will see a new button in the menu: "Save (API Format)".
- Click this button to save your workflow as a JSON file (e.g.,
workflow_api.json). - Use this JSON file with the
ComfyUiClient.
Quick Start
import json
from comfyui_xy import ComfyUiClient
# 1. Initialize Client
client = ComfyUiClient(url="http://127.0.0.1:8188")
# 2. Load Workflow
# You should export the workflow in "API Format" from ComfyUI
with open("workflow_api.json", "r", encoding="utf-8") as f:
workflow = json.load(f)
# 3. Modify Parameters (Optional)
# e.g., Change the seed in KSampler (Node ID "3")
import random
workflow["3"]["inputs"]["seed"] = random.randint(1, 1000000000)
# 4. Run Workflow
print("Queueing workflow...")
results = client.process_workflow(workflow)
# 5. Handle Results
for i, result in enumerate(results):
print(f"Received file: {result.filename} ({result.file_type})")
# Save to disk
result.save(f"output_{i}_{result.filename}")
# Show if it's an image
if result.file_type == "image":
result.show()
Detailed Usage
1. Initialization
from comfyui_xy import ComfyUiClient
# Default local server (http://127.0.0.1:8188)
client = ComfyUiClient()
# Specify URL
client = ComfyUiClient(url="http://127.0.0.1:8188")
# Remote server with HTTPS
client = ComfyUiClient(url="https://my-comfyui-server.com:8188")
2. Uploading Files
You can upload images or masks before running a workflow. These files are saved in the input directory of ComfyUI.
# Upload an image
# Returns the filename used by ComfyUI (useful for setting node inputs)
image_name = client.upload_image("path/to/my_image.png")
# Upload a mask
mask_name = client.upload_mask("path/to/my_mask.png")
# Example: Set the uploaded image in a LoadImage node (e.g., Node ID "10")
workflow["10"]["inputs"]["image"] = image_name
3. Processing Workflows
The process_workflow method is a high-level helper that:
- Queues the prompt.
- Waits for execution to finish.
- Downloads all generated files.
results = client.process_workflow(workflow)
Return Value:
It returns a list of ComfyResponse objects.
4. Handling Responses (ComfyResponse)
The ComfyResponse object wraps the raw data returned by ComfyUI.
-
Attributes:
data: Raw bytes of the file.filename: Original filename on server.file_type: Type of file (e.g., 'image', 'video', 'audio').image: APIL.Imageobject (if the file is a valid image).
-
Methods:
save(path=None): Save file to disk. Ifpathis None, usesfilename.show(): Opens the image in the default viewer (only for images).
5. Advanced Controls
Interrupt Execution:
client.interrupt()
Get System Status:
# Get Queue Status (Pending/Running tasks)
queue_info = client.get_queue()
# Get Full History
history = client.get_history_all()
# Get Node Information
node_info = client.get_object_info("KSampler")
Async Support
You can use AsyncComfyUiClient for asynchronous operations using aiohttp.
import asyncio
from comfyui_xy import AsyncComfyUiClient
async def main():
async with AsyncComfyUiClient(url="http://127.0.0.1:8188") as client:
# Most methods are awaitable
results = await client.process_workflow(workflow)
if __name__ == "__main__":
asyncio.run(main())
Examples
Check the examples/ directory for more complete scripts:
basic_workflow.py: Simple Text-to-Image generation.image_to_image.py: Uploading an image and processing it.advanced_control.py: Inspecting queue and system info.
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file comfyui_xy-0.2.0.tar.gz.
File metadata
- Download URL: comfyui_xy-0.2.0.tar.gz
- Upload date:
- Size: 12.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
14a8686d4c2912491d0d063afd9fb1b627febe148d0f626e006271fe098307f1
|
|
| MD5 |
6ffa157c01a1efce4345621727680249
|
|
| BLAKE2b-256 |
8179e5759475378390955b8c084c439f1442d96c36ef155525a61cd18d63e4e5
|
File details
Details for the file comfyui_xy-0.2.0-py3-none-any.whl.
File metadata
- Download URL: comfyui_xy-0.2.0-py3-none-any.whl
- Upload date:
- Size: 6.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2e43da1f9daed9652a01e474645b7d1d4c7023158b8ef1e5ecda670811f412aa
|
|
| MD5 |
7da20130d473a66cd7fcc5aaae9c6251
|
|
| BLAKE2b-256 |
a6660367e666f3804f0193b7b8ce1a61a27ae8c918612cd697bf134653fa7810
|