Learn how to integrate ComfyUI into your Python applications using the API
ComfyUI provides a REST API that allows you to programmatically queue prompts and retrieve generated images. This guide shows you how to use ComfyUI from Python applications.
For production use cases where you need to know when execution is complete and retrieve the generated images, use the WebSocket API:
websocket_example.py
import websocket # pip install websocket-clientimport uuidimport jsonimport urllib.requestimport urllib.parseserver_address = "127.0.0.1:8188"client_id = str(uuid.uuid4())def queue_prompt(prompt, prompt_id): p = {"prompt": prompt, "client_id": client_id, "prompt_id": prompt_id} data = json.dumps(p).encode('utf-8') req = urllib.request.Request(f"http://{server_address}/prompt", data=data) urllib.request.urlopen(req).read()def get_image(filename, subfolder, folder_type): data = {"filename": filename, "subfolder": subfolder, "type": folder_type} url_values = urllib.parse.urlencode(data) with urllib.request.urlopen(f"http://{server_address}/view?{url_values}") as response: return response.read()def get_history(prompt_id): with urllib.request.urlopen(f"http://{server_address}/history/{prompt_id}") as response: return json.loads(response.read())def get_images(ws, prompt): prompt_id = str(uuid.uuid4()) queue_prompt(prompt, prompt_id) output_images = {} # Wait for execution to complete while True: out = ws.recv() if isinstance(out, str): message = json.loads(out) if message['type'] == 'executing': data = message['data'] if data['node'] is None and data['prompt_id'] == prompt_id: break # Execution is done else: continue # previews are binary data # Retrieve the generated images history = get_history(prompt_id)[prompt_id] for node_id in history['outputs']: node_output = history['outputs'][node_id] images_output = [] if 'images' in node_output: for image in node_output['images']: image_data = get_image(image['filename'], image['subfolder'], image['type']) images_output.append(image_data) output_images[node_id] = images_output return output_images# Connect to WebSocketws = websocket.WebSocket()ws.connect(f"ws://{server_address}/ws?clientId={client_id}")# Execute your promptimages = get_images(ws, prompt)# Close the connectionws.close()# Display the imagesfor node_id in images: for image_data in images[node_id]: from PIL import Image import io image = Image.open(io.BytesIO(image_data)) image.show()