Files
pyworker/workers/comfyui
Abiola Akinnubi 71ed54ebe4 Endpoint update pr one (#1)
* Added endpoint flexibility along with existing log. extended the log support

* Switched Endpoint back to vast-ai, Added endpoint flexibility along with existing log. extended the log support

* Modify the endpoint return type as optional and check via pyright to ensure there are not compilation/type errors

* Added endpoint flexibility along with existing log. extended the log support

Switched Endpoint back to vast-ai, Added endpoint flexibility along with existing log. extended the log support

Modify the endpoint return type as optional and check via pyright to ensure there are not compilation/type errors

* Endpoint Utils and API changes
2025-06-02 18:43:27 -07:00
..
2024-09-04 11:19:30 -07:00
2024-09-04 11:19:30 -07:00
2025-06-02 18:43:27 -07:00
2024-09-04 11:19:30 -07:00
2025-06-02 18:43:27 -07:00

This is the base PyWorker for comfyui. It can be used to create PyWorker that use various models and workflows. It provides two endpoints:

  1. /prompt: Uses the default comfy workflow defined under misc/default_workflows
  2. /custom_workflow: Allows the client to send their own comfy workflow with each API request.

To use the comfyui PyWorker, $COMFY_MODEL env variable must be set in the template. Current options are sd3 and flux. Each have example clients.

To add new models, a JSON with name $COMFY_MODEL.json must be created under misc/default_workflows

NOTE: default workflows follow this format:

{
  "input": {
    "handler": "RawWorkflow",
    "aws_access_key_id": "your-s3-access-key",
    "aws_secret_access_key": "your-s3-secret-access-key",
    "aws_endpoint_url": "https://my-endpoint.backblaze.com",
    "aws_bucket_name": "your-bucket",
    "webhook_url": "your-webhook-url",
    "webhook_extra_params": {},
    "workflow_json": {}
  }
}

You can ignore all of these fields except for workflow_json.

Fields written as "{{FOO}}" will be replaced using data from a user request. For example, SD3's workflow has the following nodes:

      "5": {
        "inputs": {
          "width": "{{WIDTH}}",
          "height": "{{HEIGHT}}",
          "batch_size": 1
        },

      "6": {
        "inputs": {
          "text": "{{PROMPT}}",
          "clip": ["11", 0]
        },
        "class_type": "CLIPTextEncode",
        "_meta": {
          "title": "CLIP Text Encode (Prompt)"
        }
      },
      ...
      "17": {
        "inputs": {
          "scheduler": "simple",
          "steps": "{{STEPS}}",
          "denoise": 1,
          "model": ["12", 0]
        },
        "class_type": "BasicScheduler",
        "_meta": {
          "title": "BasicScheduler"
        }
      },
      ...
      "25": {
        "inputs": {
          "noise_seed": "{{SEED}}"
        },
        "class_type": "RandomNoise",
        "_meta": {
          "title": "RandomNoise"
        }
      }

Incoming requests have the following JSON format:

{
    prompt: str
    width: int
    height: int
    steps: int
    seed: int
}

Each value in those fields with replace the placeholder of the same name in the default workflow.

See Vast's serverless documentation for more details on how to use comfyui with autoscaler