Set up ComfyUI

Configure the manifest

Put dimensions on each asset. Put workflow configuration under providerOptions.comfyui on the style. Set the top-level provider when every style is local, or put "provider": "comfyui" on only the local styles in a mixed manifest:

{
  "name": "my-game",
  "provider": "comfyui",
  "styles": {
    "local-environment": {
      "generator": "map",
      "outDir": "assets/generated/environments",
      "quality": {
        "outDir": "assets/final/environments",
        "palette": [
          "#141b1e", "#23312a", "#384d4f", "#526a8d",
          "#709fcf", "#865c45", "#c6a766", "#f1bb70"
        ],
        "minGridConfidence": "high",
        "fixerPython": ".pixelkiln/pixelfixer/bin/python"
      },
      "seed": 31415,
      "providerOptions": {
        "comfyui": {
          "workflowFile": "workflows/pixel-environment-api.json",
          "outputNodeId": "9",
          "numImages": 4,
          "bindings": {
            "prompt": { "nodeId": "6", "input": "text" },
            "width": { "nodeId": "5", "input": "width" },
            "height": { "nodeId": "5", "input": "height" },
            "batchSize": { "nodeId": "5", "input": "batch_size" },
            "seed": { "nodeId": "3", "input": "seed" }
          }
        }
      }
    }
  },
  "assets": {
    "cliffside_fortress": {
      "prompt": "a fortified monastery carved into a mountain cliff",
      "width": 768,
      "height": 512
    }
  }
}
OptionMeaning
workflowFileAPI-format workflow JSON, relative to the manifest.
outputNodeIdNode whose completed history contains the final images array.
numImagesExpected candidates, from 1 to 16. Defaults to 1.
frames.varyCustom binding whose asset value is the ordered 2–64 item frame sequence. Requires generator: frames.
frames.seedStepOptional integer added per frame to style.seed. Defaults to 0.
bindings.promptWorkflow input replaced with the resolved PixelKiln prompt.
bindings.width / heightInputs replaced with the asset dimensions.
bindings.batchSizeInput replaced with numImages.
bindings.seedOptional sampler seed input. Required when the style declares seed.
bindings.<name>Project-defined input supplied by the asset's matching providerInputs.<name>. Core LoadImage.image and LoadImageMask.image targets upload a manifest-relative PNG/JPEG; other targets receive a scalar.

The quality block is not a ComfyUI request option. It describes PixelKiln's offline final-art gate for ordinary stills and atomic ComfyUI frame sets. Its output directory, palette, confidence threshold, optional transparency floor, fixer revision, frame playback rate, and local fixer interpreter do not affect generation identity or cost. The interpreter path is resolved from the manifest directory. See Manifest quality profiles.

PixelKiln refuses missing nodes and inputs during the offline plan. It also clones the workflow before applying bindings, so one asset cannot mutate the next asset's request.