{
  "id": "comfy",
  "activation": {
    "onStartup": false
  },
  "enabledByDefault": true,
  "providers": [
    "comfy"
  ],
  "providerAuthEnvVars": {
    "comfy": [
      "COMFY_API_KEY",
      "COMFY_CLOUD_API_KEY"
    ]
  },
  "providerAuthChoices": [
    {
      "provider": "comfy",
      "method": "cloud-api-key",
      "choiceId": "comfy-cloud-api-key",
      "choiceLabel": "Comfy Cloud API key",
      "choiceHint": "Required for cloud workflows",
      "groupId": "comfy",
      "groupLabel": "ComfyUI",
      "groupHint": "Local or cloud workflows",
      "optionKey": "comfyApiKey",
      "cliFlag": "--comfy-api-key",
      "cliOption": "--comfy-api-key <key>",
      "cliDescription": "Comfy Cloud API key",
      "onboardingScopes": [
        "image-generation"
      ]
    }
  ],
  "contracts": {
    "imageGenerationProviders": [
      "comfy"
    ],
    "musicGenerationProviders": [
      "comfy"
    ],
    "videoGenerationProviders": [
      "comfy"
    ]
  },
  "imageGenerationProviderMetadata": {
    "comfy": {
      "configSignals": [
        {
          "rootPath": "plugins.entries.comfy.config",
          "overlayPath": "image",
          "mode": {
            "path": "mode",
            "default": "local",
            "allowed": [
              "local"
            ]
          },
          "requiredAny": [
            "workflow",
            "workflowPath"
          ],
          "required": [
            "promptNodeId"
          ]
        },
        {
          "rootPath": "models.providers.comfy",
          "overlayPath": "image",
          "mode": {
            "path": "mode",
            "default": "local",
            "allowed": [
              "local"
            ]
          },
          "requiredAny": [
            "workflow",
            "workflowPath"
          ],
          "required": [
            "promptNodeId"
          ]
        },
        {
          "rootPath": "plugins.entries.comfy.config",
          "overlayPath": "image",
          "mode": {
            "path": "mode",
            "allowed": [
              "cloud"
            ]
          },
          "requiredAny": [
            "workflow",
            "workflowPath"
          ],
          "required": [
            "promptNodeId",
            "apiKey"
          ]
        },
        {
          "rootPath": "models.providers.comfy",
          "overlayPath": "image",
          "mode": {
            "path": "mode",
            "allowed": [
              "cloud"
            ]
          },
          "requiredAny": [
            "workflow",
            "workflowPath"
          ],
          "required": [
            "promptNodeId",
            "apiKey"
          ]
        }
      ]
    }
  },
  "musicGenerationProviderMetadata": {
    "comfy": {
      "configSignals": [
        {
          "rootPath": "plugins.entries.comfy.config",
          "overlayPath": "music",
          "mode": {
            "path": "mode",
            "default": "local",
            "allowed": [
              "local"
            ]
          },
          "requiredAny": [
            "workflow",
            "workflowPath"
          ],
          "required": [
            "promptNodeId"
          ]
        },
        {
          "rootPath": "models.providers.comfy",
          "overlayPath": "music",
          "mode": {
            "path": "mode",
            "default": "local",
            "allowed": [
              "local"
            ]
          },
          "requiredAny": [
            "workflow",
            "workflowPath"
          ],
          "required": [
            "promptNodeId"
          ]
        },
        {
          "rootPath": "plugins.entries.comfy.config",
          "overlayPath": "music",
          "mode": {
            "path": "mode",
            "allowed": [
              "cloud"
            ]
          },
          "requiredAny": [
            "workflow",
            "workflowPath"
          ],
          "required": [
            "promptNodeId",
            "apiKey"
          ]
        },
        {
          "rootPath": "models.providers.comfy",
          "overlayPath": "music",
          "mode": {
            "path": "mode",
            "allowed": [
              "cloud"
            ]
          },
          "requiredAny": [
            "workflow",
            "workflowPath"
          ],
          "required": [
            "promptNodeId",
            "apiKey"
          ]
        }
      ]
    }
  },
  "videoGenerationProviderMetadata": {
    "comfy": {
      "configSignals": [
        {
          "rootPath": "plugins.entries.comfy.config",
          "overlayPath": "video",
          "mode": {
            "path": "mode",
            "default": "local",
            "allowed": [
              "local"
            ]
          },
          "requiredAny": [
            "workflow",
            "workflowPath"
          ],
          "required": [
            "promptNodeId"
          ]
        },
        {
          "rootPath": "models.providers.comfy",
          "overlayPath": "video",
          "mode": {
            "path": "mode",
            "default": "local",
            "allowed": [
              "local"
            ]
          },
          "requiredAny": [
            "workflow",
            "workflowPath"
          ],
          "required": [
            "promptNodeId"
          ]
        },
        {
          "rootPath": "plugins.entries.comfy.config",
          "overlayPath": "video",
          "mode": {
            "path": "mode",
            "allowed": [
              "cloud"
            ]
          },
          "requiredAny": [
            "workflow",
            "workflowPath"
          ],
          "required": [
            "promptNodeId",
            "apiKey"
          ]
        },
        {
          "rootPath": "models.providers.comfy",
          "overlayPath": "video",
          "mode": {
            "path": "mode",
            "allowed": [
              "cloud"
            ]
          },
          "requiredAny": [
            "workflow",
            "workflowPath"
          ],
          "required": [
            "promptNodeId",
            "apiKey"
          ]
        }
      ]
    }
  },
  "configSchema": {
    "type": "object",
    "additionalProperties": false,
    "properties": {
      "mode": {
        "type": "string",
        "enum": [
          "local",
          "cloud"
        ]
      },
      "baseUrl": {
        "type": "string"
      },
      "apiKey": {
        "type": [
          "string",
          "object"
        ]
      },
      "allowPrivateNetwork": {
        "type": "boolean"
      },
      "workflowPath": {
        "type": "string"
      },
      "workflow": {
        "type": "object"
      },
      "promptNodeId": {
        "type": "string"
      },
      "promptInputName": {
        "type": "string"
      },
      "inputImageNodeId": {
        "type": "string"
      },
      "inputImageInputName": {
        "type": "string"
      },
      "outputNodeId": {
        "type": "string"
      },
      "pollIntervalMs": {
        "type": "integer",
        "minimum": 100
      },
      "timeoutMs": {
        "type": "integer",
        "minimum": 1000
      },
      "image": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "workflowPath": {
            "type": "string"
          },
          "workflow": {
            "type": "object"
          },
          "promptNodeId": {
            "type": "string"
          },
          "promptInputName": {
            "type": "string"
          },
          "inputImageNodeId": {
            "type": "string"
          },
          "inputImageInputName": {
            "type": "string"
          },
          "outputNodeId": {
            "type": "string"
          },
          "pollIntervalMs": {
            "type": "integer",
            "minimum": 100
          },
          "timeoutMs": {
            "type": "integer",
            "minimum": 1000
          }
        }
      },
      "video": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "workflowPath": {
            "type": "string"
          },
          "workflow": {
            "type": "object"
          },
          "promptNodeId": {
            "type": "string"
          },
          "promptInputName": {
            "type": "string"
          },
          "inputImageNodeId": {
            "type": "string"
          },
          "inputImageInputName": {
            "type": "string"
          },
          "outputNodeId": {
            "type": "string"
          },
          "pollIntervalMs": {
            "type": "integer",
            "minimum": 100
          },
          "timeoutMs": {
            "type": "integer",
            "minimum": 1000
          }
        }
      },
      "music": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "workflowPath": {
            "type": "string"
          },
          "workflow": {
            "type": "object"
          },
          "promptNodeId": {
            "type": "string"
          },
          "promptInputName": {
            "type": "string"
          },
          "outputNodeId": {
            "type": "string"
          },
          "pollIntervalMs": {
            "type": "integer",
            "minimum": 100
          },
          "timeoutMs": {
            "type": "integer",
            "minimum": 1000
          }
        }
      }
    }
  }
}
