This project allows you to run ComfyUI workflows as a serverless API endpoint on the RunPod platform. Submit workflows via API calls and receive generated images as base64 strings or S3 URLs.
runpod/worker-comfyui:<version>-sd3).test_resources/workflows/โ or get your ownโ .These images are available on Docker Hub under runpod/worker-comfyui:
runpod/worker-comfyui:<version>-base: Clean ComfyUI install with no models.runpod/worker-comfyui:<version>-flux1-schnell: Includes checkpoint, text encoders, and VAE for FLUX.1 schnellโ .runpod/worker-comfyui:<version>-flux1-dev: Includes checkpoint, text encoders, and VAE for FLUX.1 devโ .runpod/worker-comfyui:<version>-sdxl: Includes checkpoint and VAEs for Stable Diffusion XLโ .runpod/worker-comfyui:<version>-sd3: Includes checkpoint for Stable Diffusion 3 mediumโ .Replace <version> with the current release tag, check the releases pageโ for the latest version.
The worker exposes standard RunPod serverless endpoints (/run, /runsync, /health). By default, images are returned as base64 strings. You can configure the worker to upload images to an S3 bucket instead by setting specific environment variables (see Configuration Guideโ ).
Use the /runsync endpoint for synchronous requests that wait for the job to complete and return the result directly. Use the /run endpoint for asynchronous requests that return immediately with a job ID; you'll need to poll the /status endpoint separately to get the result.
{
"input": {
"workflow": {
"6": {
"inputs": {
"text": "a ball on the table",
"clip": ["30", 1]
},
"class_type": "CLIPTextEncode",
"_meta": {
"title": "CLIP Text Encode (Positive Prompt)"
}
}
},
"images": [
{
"name": "input_image_1.png",
"image": "data:image/png;base64,iVBOR..."
}
]
}
}
The following tables describe the fields within the input object:
| Field Path | Type | Required | Description |
|---|---|---|---|
input | Object | Yes | Top-level object containing request data. |
input.workflow | Object | Yes | The ComfyUI workflow exported in the required formatโ . |
input.images | Array | No | Optional array of input images. Each image is uploaded to ComfyUI's input directory and can be referenced by its name in the workflow. |
input.comfy_org_api_key | String | No | Optional per-request Comfy.org API key for API Nodes. Overrides the COMFY_ORG_API_KEY environment variable if both are set. |
input.images ObjectEach object within the input.images array must contain:
| Field Name | Type | Required | Description |
|---|---|---|---|
name | String | Yes | Filename used to reference the image in the workflow (e.g., via a "Load Image" node). Must be unique within the array. |
image | String | Yes | Base64 encoded string of the image. A data URI prefix (e.g., data:image/png;base64,) is optional and will be handled correctly. |
Note
Size Limits: RunPod endpoints have request size limits (e.g., 10MB for
/run, 20MB for/runsync). Large base64 input images can exceed these limits. See RunPod Docsโ .
Warning
Breaking Change in Output Format (5.0.0+)
Versions
< 5.0.0returned the primary image data (S3 URL or base64 string) directly within anoutput.messagefield. Starting with5.0.0, the output format has changed significantly, see below
{
"id": "sync-uuid-string",
"status": "COMPLETED",
"output": {
"images": [
{
"filename": "ComfyUI_00001_.png",
"type": "base64",
"data": "iVBORw0KGgoAAAANSUhEUg..."
}
]
},
"delayTime": 123,
"executionTime": 4567
}
| Field Path | Type | Required | Description |
|---|---|---|---|
output | Object | Yes | Top-level object containing the results of the job execution. |
output.images | Array of Objects | No | Present if the workflow generated images. Contains a list of objects, each representing one output image. |
output.errors | Array of Strings | No | Present if non-fatal errors or warnings occurred during processing (e.g., S3 upload failure, missing data). |
output.imagesEach object in the output.images array has the following structure:
| Field Name | Type | Description |
|---|---|---|
filename | String | The original filename assigned by ComfyUI during generation. |
type | String | Indicates the format of the data. Either "base64" or "s3_url" (if S3 upload is configured). |
data | String | Contains either the base64 encoded image string or the S3 URL for the uploaded image file. |
Note
The `output.images` field provides a list of all generated images (excluding temporary ones).
- If S3 upload is not configured (default),
typewill be"base64"anddatawill contain the base64 encoded image string.- If S3 upload is configured,
typewill be"s3_url"anddatawill contain the S3 URL. See the Configuration Guideโ for an S3 example response.- Clients interacting with the API need to handle this list-based structure under
output.images.
To interact with your deployed RunPod endpoint:
API Keys section).Overview page of your endpoint.Send a workflow to the /runsync endpoint (waits for completion). Replace <api_key> and <endpoint_id>. The -d value should contain the JSON input described aboveโ .
curl -X POST \
-H "Authorization: Bearer <api_key>" \
-H "Content-Type: application/json" \
-d '{"input":{"workflow":{... your workflow JSON ...}}}' \
https://api.runpod.ai/v2/<endpoint_id>/runsync
You can also use the /run endpoint for asynchronous jobs and then poll the /status to see when the job is done. Or you add a webhook into your requestโ to be notified when the job is done.
Refer to test_input.jsonโ for a complete input example.
To get the correct workflow JSON for the API:
Workflow > Export (API)workflow.json file will be downloaded. Use the content of this file as the value for the input.workflow field in your API requests.To enable SSH access to the worker, set the PUBLIC_KEY environment variable to your SSH public key. The worker will start an SSH server automatically. Make sure to expose port 22 in your RunPod template so you can connect.
Content type
Image
Digest
sha256:9aa496da3โฆ
Size
35.1 GB
Last updated
21 days ago
docker pull runpod/worker-comfyui:5.10.0-flux1-dev