> ## Documentation Index
> Fetch the complete documentation index at: https://dripart-matt-router-pricing-pika-and-guard.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# 将 Comfy Router 与 LiteLLM 配合使用

> 将 Comfy Router 置于 LiteLLM Proxy 之后作为直通端点，并从 x-litellm-response-cost 响应头中记录每次运行的确切美元成本，无需维护价格表。

如果你已经使用 [LiteLLM Proxy](https://docs.litellm.ai/docs/proxy/pass_through) 跟踪支出，就可以把 Comfy Router 作为又一个透传端点添加进来。调用方继续使用自己的 LiteLLM 密钥，而你的 Comfy API 密钥则保留在代理上。

对于会反馈每次运行 Comfy 点数价格的模型（参见[不反馈成本的运行](#不报告成本的运行)），Router 会在 `x-litellm-response-cost` 响应头中以美元为单位反馈一次同步运行的成本。LiteLLM 会在每个透传响应中读取该响应头，并将其记录为该请求的支出，因此你无需为这些模型维护价格表。

<Note>
  LiteLLM 内置的 `fal_ai/` 提供商仅涵盖图像生成。若要通过 LiteLLM 路由常规工作负载，请使用此处所示的透传端点，而不是原生提供商。
</Note>

## 配置透传

<Steps>
  <Step title="创建 Comfy API 密钥">
    在[你的 Comfy 工作区](https://platform.comfy.org/profile/api-keys)中创建密钥，并使其可供 LiteLLM Proxy 进程使用：

    ```bash theme={null}
    export COMFY_API_KEY="comfyui-..."
    ```
  </Step>

  <Step title="将 Router 添加到 config.yaml">
    ```yaml config.yaml theme={null}
    general_settings:
      pass_through_endpoints:
        # Runs and queue submits. Synchronous runs report their exact cost,
        # which replaces cost_per_request for that row.
        - path: "/comfy/v2/models"
          target: "https://api.comfy.org/v2/models"
          include_subpath: true
          methods: ["POST"]
          headers:
            X-API-Key: "os.environ/COMFY_API_KEY"
            content-type: application/json
          cost_per_request: 0.10   # your fallback estimate, in USD
          timeout: 660             # above Router's run deadline (10 minutes by default)

        # Model catalog, queue status polls, and result collection.
        - path: "/comfy/v2/models"
          target: "https://api.comfy.org/v2/models"
          include_subpath: true
          methods: ["GET"]
          headers:
            X-API-Key: "os.environ/COMFY_API_KEY"
          cost_per_request: 0
    ```

    * `include_subpath: true` 会将 `/comfy/v2/models/{provider}/{model}` 转发到 `https://api.comfy.org/v2/models/{provider}/{model}`，因此一对条目即可覆盖所有 Router 模型。
    * 请将 `path` 和 `target` 限定在 `/v2/models` 范围内。若将透传指向 API 根路径，任何持有 LiteLLM 密钥的调用方都能在其他所有 Comfy API 路由上使用你的 Comfy 密钥，从而绕过 LiteLLM 的支出跟踪。
    * `methods` 用于在同一路径上区分这两个条目。它需要 LiteLLM Proxy 的透传端点支持 `methods` 的版本；本页面是基于 v1.103.0 检查的。
    * `X-API-Key` 携带你的 `comfyui-` 密钥。Router 也接受以 `Authorization: Bearer comfyui-...` 形式提供的同一密钥。
    * 请勿开启 `forward_headers`。开启后，LiteLLM 会将所有传入的请求头转发给 Router，包括调用方的 LiteLLM 密钥。关闭时，调用方以 `x-pass-Idempotency-Key` 传递 `Idempotency-Key`：LiteLLM 会去掉 `x-pass-` 前缀并将其转发。普通的 `Idempotency-Key` 请求头不会到达 Router，因此重试会再次运行并产生第二次生成的计费。
    * 将 `timeout` 设置得高于 Router 的[运行截止时间](/zh/development/comfy-router/limitations)，以便 Router 能在 LiteLLM 放弃之前返回自己的 `504` 和请求 ID。截止时间默认为 10 分钟，与 LiteLLM 默认的透传超时 600 秒相同。
  </Step>

  <Step title="通过代理调用 Router">
    调用方使用其 LiteLLM 密钥进行身份验证。请求体是模型自身的输入，与 [Comfy Router 参考](/zh/development/comfy-router/reference)中完全相同：

    ```bash theme={null}
    curl --max-time 660 \
      http://localhost:4000/comfy/v2/models/byteplus/dreamina-seedance-2-5-260628 \
      -H "Authorization: Bearer $LITELLM_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{"content": [{"text": "A red fox trotting through a snowy pine forest", "type": "text"}], "duration": 5, "ratio": "16:9", "resolution": "720p"}'
    ```
  </Step>
</Steps>

## 支出如何记录

报告成本的同步运行会携带以下响应头：

```http theme={null}
X-Comfy-Credits-Used: 12.5
X-Litellm-Response-Cost: 0.0592417062
X-Litellm-Total-Tokens: 0
```

`X-Comfy-Credits-Used` 是该次运行以 Comfy 积分表示的价格，四舍五入到两位小数。`X-Litellm-Response-Cost` 是同一价格由未舍入的积分数量换算成的美元金额，因此用显示的积分数除以换算比率，结果可能与它在最后几位上有所不同。响应头名称不区分大小写，所以 LiteLLM 会将其读取为 `x-litellm-response-cost`。LiteLLM 会原样记录它，并用它替代你的 `cost_per_request`。`x-litellm-total-tokens` 始终为 `0`，因为媒体类运行不按 token 计量。

与 `X-Comfy-Credits-Used` 一样，该响应头报告的是价格，而不是已结算的扣费。请以[工作区计费](https://platform.comfy.org)为准核对，而不是以 LiteLLM 的合计为准。

### 不报告成本的运行

有些运行不会携带 `x-litellm-response-cost`。它与 `X-Comfy-Credits-Used` 在相同的情况下缺失：

* 计费到你自己提供商密钥而不是你的 Comfy 积分的运行
* 尚未列入 Router 的报告每次运行积分价格的模型列表的模型。该列表较为保守，有些提供商完全不在其中
* 没有到达 Comfy 计费的扣费
* 错误响应

当 Router 针对使用相同 `Idempotency-Key`（通过代理发送时为 `x-pass-Idempotency-Key`）的重试重放已存储的结果时，它也会缺失。该重试不会再次计费，因此这次重放不会第二次报告该次运行的确切成本。

当该响应头缺失时，LiteLLM 会回退到端点的 `cost_per_request`。这适用于上述所有情况。因此，错误响应、计费到你自己提供商密钥的运行以及幂等重放，都会按你的估值记录，即使 Comfy 并没有为此扣除你的积分。请把它设置为对典型运行的合理估值，而不是 `0`，这样不报告成本的运行就不会在你的支出报告中显示为免费，同时也要预期这些记录会使 LiteLLM 的合计高于你的 Comfy 账单。一次已被定价且确实没有任何花费的运行会报告 `x-litellm-response-cost: 0`，LiteLLM 会将其记录为零。

## 队列投递

使用[队列投递](/zh/development/comfy-router/queue)时，一次生成会以多个请求的形式到达 LiteLLM，每个请求各自单独成行计入消费：

| 请求 | 方法 | 使用上述配置时的行费用 |
| - | - | - |
| 提交：`/v2/models/{provider}/{model}/requests` | `POST` | 你的 `cost_per_request` 估算值 |
| 每次状态轮询：`.../requests/{request_id}/status` | `GET` | `0` |
| 结果收集：`.../requests/{request_id}` | `GET` | `0` |
| 取消：`.../requests/{request_id}/cancel` | `POST` | 你的 `cost_per_request` 估算值 |

提交响应中的 `status_url`、`response_url` 和 `cancel_url` 都是绝对的 `https://api.comfy.org/...` URL，而 LiteLLM 不会重写响应体。要通过代理调用它们，请把 `https://api.comfy.org` 替换为代理的 `/comfy` 前缀，例如 `http://localhost:4000/comfy/v2/models/...`。如果直接发送给 Comfy，你的 LiteLLM 密钥会被拒绝。

队列响应目前还不包含 `x-litellm-response-cost`，因此一次排队生成会按你的估算值记录，而不是按它的确切价格。按方法拆分端点可以让该估算值只在提交时计一次，而不是每次轮询都计一次。如果要在 LiteLLM 中获得每次运行的精确消费，请使用同步路由。

## 说明

* LiteLLM 会记录消费额，但不会改变计费。无论是否使用该代理，Comfy 都按相同方式为你的工作区计费。
* 每个模型的完整请求与响应 schema 都在 [Comfy Router 参考](/zh/development/comfy-router/reference) 中。截止时间、重试及其他限制见[能力与限制](/zh/development/comfy-router/limitations)。


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.