Runpod serverless worker for RunPod
6.9K
| Environment Variable | Description | Default |
|---|---|---|
REFRESH_WORKER | When you want stop the worker after each finished job to have a clean state, see official documentation. | false |
This is only needed if you want to upload the generated picture to AWS S3. If you don't configure this, your image will be exported as base64-encoded string.
BUCKET_ENDPOINT_URL)BUCKET_ACCESS_KEY_ID & BUCKET_SECRET_ACCESS_KEY) for that IAM| Environment Variable | Description | Example |
|---|---|---|
BUCKET_ENDPOINT_URL | The endpoint URL of your S3 bucket. | https://<bucket>.s3.<region>.amazonaws.com |
BUCKET_ACCESS_KEY_ID | Your AWS access key ID for accessing the S3 bucket. | AKIAIOSFODNN7EXAMPLE |
BUCKET_SECRET_ACCESS_KEY | Your AWS secret access key for accessing the S3 bucket. | wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY |
New Templaterunpod-worker-comfy (it can be anything you want)<dockerhub_username>/<repository_name>:tag, in this case: timpietruskyblibla/runpod-worker-comfy:latest (or dev if you want to have the development release)20 GBSave TemplateServerless > Endpoints and click on New Endpointcomfyrunpow-worker-comfy (or whatever name you gave your template)0 (whatever makes sense for you)3 (whatever makes sense for you)5 (you can leave the default)enabled (doesn't cost more, but provides faster boot of our worker, which is good)1deployThe following describes which fields exist when doing requests to the API. We only describe the fields that are sent via input as those are needed by the worker itself. For a full list of fields, please take a look at the official documentation.
{
"input": {
"workflow": {},
"images": [
{
"name": "example_image_name.png",
"image": "base64_encoded_string"
}
]
}
}
| Field Path | Type | Required | Description |
|---|---|---|---|
input | Object | Yes | The top-level object containing the request data. |
input.workflow | Object | Yes | Contains the ComfyUI workflow configuration. |
input.images | Array | No | An array of images. Each image will be added into the "input"-folder of ComfyUI and can then be used in the workflow by using it's name |
An array of images, where each image should have a different name.
🚨 The request body for a RunPod endpoint is 10 MB for /run and 20 MB for /runsync, so make sure that your input images are not super huge as this will be blocked by RunPod otherwise, see the official documentation
| Field Name | Type | Required | Description |
|---|---|---|---|
name | String | Yes | The name of the image. Please use the same name in your workflow to reference the image. |
image | String | Yes | A base64 encoded string of the image. |
API Keys and then on the API Key button<api_key> with your key<endpoint_id> with the ID of the endpoint, you find that when you click on your endpoint, it's part of the URLs shown at the bottom of the first boxcurl -H "Authorization: Bearer <api_key>" https://api.runpod.ai/v2/<endpoint_id>/health
You can either create a new job async by using /run or a sync by using runsync. The example here is using a sync job and waits until the response is delivered.
The API expects a JSON in this form, where workflow is the workflow from ComfyUI, exported as JSON and images is optional.
Please also take a look at the test_input.json to see how the API input should look like.
curl -X POST -H "Authorization: Bearer <api_key>" -H "Content-Type: application/json" -d '{"input":{"workflow":{"3":{"inputs":{"seed":1337,"steps":20,"cfg":8,"sampler_name":"euler","scheduler":"normal","denoise":1,"model":["4",0],"positive":["6",0],"negative":["7",0],"latent_image":["5",0]},"class_type":"KSampler"},"4":{"inputs":{"ckpt_name":"sd_xl_base_1.0.safetensors"},"class_type":"CheckpointLoaderSimple"},"5":{"inputs":{"width":512,"height":512,"batch_size":1},"class_type":"EmptyLatentImage"},"6":{"inputs":{"text":"beautiful scenery nature glass bottle landscape, purple galaxy bottle,","clip":["4",1]},"class_type":"CLIPTextEncode"},"7":{"inputs":{"text":"text, watermark","clip":["4",1]},"class_type":"CLIPTextEncode"},"8":{"inputs":{"samples":["3",0],"vae":["4",2]},"class_type":"VAEDecode"},"9":{"inputs":{"filename_prefix":"ComfyUI","images":["8",0]},"class_type":"SaveImage"}}}}' https://api.runpod.ai/v2/<endpoint_id>/runsync
# Response with AWS S3 bucket configuration
# {"delayTime":2188,"executionTime":2297,"id":"sync-c0cd1eb2-068f-4ecf-a99a-55770fc77391-e1","output":{"message":"https://bucket.s3.region.amazonaws.com/10-23/sync-c0cd1eb2-068f-4ecf-a99a-55770fc77391-e1/c67ad621.png","status":"success"},"status":"COMPLETED"}
# Response as base64-encoded image
# {"delayTime":2188,"executionTime":2297,"id":"sync-c0cd1eb2-068f-4ecf-a99a-55770fc77391-e1","output":{"message":"base64encodedimage","status":"success"},"status":"COMPLETED"}
Settings (gear icon in the top right of the menu)Enable Dev mode Options: enableSettingsSave (API Format) button, which will download a file named workflow_api.jsonYou can now take the content of this file and put it into your workflow when interacting with the API.
You can build the image locally: docker build -t timpietruskyblibla/runpod-worker-comfy:dev --platform linux/amd64 .
🚨 It's important to specify the --platform linux/amd64, otherwise you will get an error on RunPod, see #13
Both tests will use the data from test_input.json, so make your changes in there to test this properly.
python -m venv venv.\venv\Scripts\activate (Windows) or source ./venv/bin/activate (Mac / Linux)pip install -r requirements.txtNote: Our hope was that we can use this Docker Image with Docker Desktop on Windows. But regardless what we did, it was not possible. So we decided to use Ubuntu as part of WSL (Windows Subsystem for Linux) inside of Windows. This works without any problems, but only if you don't run Docker on Windows itself.
To run the Docker image on Windows, we need to have WSL2 and a Linux distro (like Ubuntu) installed on Windows.
wsl -d Ubuntusudo apt updatesudo apt-get install docker-composenvidia runtimeEnable GPU acceleration on Ubuntu on WSL2 to use NVIDIA CUDA
Add your user to the docker group, so that you can use Docker without sudo: sudo usermod -aG docker $USER
python -m unittest discoverpython -m unittest tests.test_rp_handler.TestRunpodWorkerComfy.test_bucket_endpoint_not_configuredYou can also start the handler itself to have the local server running: python src/rp_handler.py
To get this to work you will also need to start "ComfyUI", otherwise the handler will not work.
docker-compose upThe repo contains two workflows that publish the image to Docker hub using Github Actions:
dev tag on every push to the main branchlatest and the release tag. It will only be triggered when you create a release on GitHubIf you want to use this, you should add these secrets to your repository:
| Configuration Variable | Description | Example Value |
|---|---|---|
DOCKERHUB_USERNAME | Your Docker Hub username. | your-username |
DOCKERHUB_TOKEN | Your Docker Hub token for authentication. | your-token |
DOCKERHUB_REPO | The repository on Docker Hub where the image will be pushed. | timpietruskyblibla |
DOCKERHUB_IMG | The name of the image to be pushed to Docker Hub. | runpod-worker-comfy |
Content type
Image
Digest
sha256:6aa28603c…
Size
5.1 GB
Last updated
over 1 year ago
docker pull bennykok/comfydeploy-runpod-worker