> ## Documentation Index
> Fetch the complete documentation index at: https://dripart-chore-mintlify-theme-mint.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Comfy Router 的能力与限制

> 选择 Comfy Router 还是合作伙伴代理，为长时间运行的调用做好规划，并了解恢复、速率限制与资产存储。

Router 通过一次同步 HTTP 调用运行合作伙伴模型，或通过一个已排队的请求运行：你提交请求，稍后再收集结果。当你的应用能够等待一个已完成的结果，或稍后收集结果，并且能够处理模型自身的输入和输出字段时，就使用它。

## Router 支持的功能

| 需求          | Router 支持情况                                                                                   | 备选方案或后续步骤                                                                  |
| ----------- | --------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------- |
| 通过单个请求生成    | `POST /v2/models/{provider}/{model}` 返回已完成的结果。                                                | 从[快速入门](/zh/development/comfy-router/quickstart)开始。                        |
| 提交任务并稍后收集结果 | 队列投递：`POST /v2/models/{provider}/{model}/requests` 返回一个 `request_id`，可用于轮询并收集结果。没有完成 webhook。 | 使用[队列投递](/zh/development/comfy-router/queue)。具备提交和轮询操作的合作伙伴代理会公开提供商自身的控制项。 |
| 显示进度或流式输出   | 调用期间没有实时进度、流式传输或预览帧。                                                                          | 显示不确定状态，或使用受支持的代理操作。                                                       |
| 连接丢失后恢复     | 当 Router 保留了已接受生成的句柄时，可使用同键收集。                                                                | 保留该键并遵循[重试引导](/zh/development/comfy-router/api#retry-outcomes)。            |
| 对账 Comfy 费用 | 响应中没有通用的 Comfy 成本或信用余额字段。                                                                     | 使用[工作区计费](https://platform.comfy.org)。                                     |
| 永久存储结果      | 资产 URL 可能会过期，包括重新托管和重放的 URL。                                                                  | 下载资产；参见[结果资产](/zh/development/comfy-router/reference#结果资产)。                |
| 内联发送大型媒体    | 请求体有大小上限，base64 编码的媒体也计入该上限。                                                                  | 将请求体保持在上限之内；参见[请求体大小](#请求正文设有上限)。                                          |

<span id="no-queued-submission" />

## 队列提交

同步路由在模型运行期间会一直保持连接；对于异步提供商，Router 会提交任务并在内部轮询。排队式投递（提交、获取 `request_id`、轮询、收集）则是另一种选择：参见[队列投递](/zh/development/comfy-router/queue)。它的作用域限定在凭据所属的工作区内，因此需要使用在你的 Comfy 工作区中创建的密钥。没有工作区的传统密钥、自带密钥的请求，或队列无法运行的模型，都会在提交路由上返回 `403` 和 `not_enabled`。两种模式都不提供回调或 webhook。

如果你的请求无法保持打开足够长的时间，就把它放入队列。当你需要使用提供商自己的提交与轮询控制时，请使用[合作伙伴代理](#router-并不覆盖每个合作伙伴操作)。

目前有两个模型仅支持同步方式，若将它们提交到队列，会被以 `403` / `not_enabled` 拒绝：`elevenlabs/eleven_sfx_v2` 和 `elevenlabs/eleven_v3`。它们返回的是原始音频字节，而不是 JSON 结果文档，队列投递无处存储这些内容。请在同步路由上运行它们，该路由会正常返回这些字节。

LTX v1 的文生视频和图生视频操作出于同样的原因返回原始视频字节，队列投递同样无法存储它们，但它们只能通过位于 `/proxy/ltx/v1/…` 的[合作伙伴代理](#router-并不覆盖每个合作伙伴操作)访问，而不能通过 Router 模型 ID 访问：每个 `ltx/*` 目录模型都会解析为可排队的 v2 提交与轮询操作。

## 调用会在服务器截止时间被中断

Router 的默认截止时间是 **10 分钟**，具体可由部署方配置。请将你的客户端超时设置为大于该值，这样 Router 才能先返回它自己的错误和请求 ID。

`504` / `deadline_exceeded` 表示 Router 停止了等待；`504` / `provider_timeout` 表示提供商超时。超时或连接中断并不能证明某次生成未被计费，也不会取消提供商已接受的工作。在重试之前，请先阅读[超时与收费](/zh/development/comfy-router/api#timeouts-and-collection)。

<span id="no-way-to-resume-a-call-you-lost" />

## 恢复取决于提供商

对于一次已被接受的「提交并轮询」式生成，Router 可以保留提供商句柄。复用同一个 `Idempotency-Key` 即可稍后收集结果；已完成且可重放的响应也可以从该 key 记录中获取。

并非每个已断开连接的调用都可恢复。在发送之前先保存请求和 key，然后使用[重试结果表](/zh/development/comfy-router/api#retry-outcomes)。使用新的 key 会创建新的调用，并可能产生额外费用。

## 请求正文设有上限

Router 会拒绝正文大于 **100 MiB（104,857,600 字节）** 的请求。该上限针对你发送的原始字节，在 Router 解析任何内容之前测量，因此适用于所有路由，也适用于同步投递与队列投递。

调用方通常会在内联媒体上遇到这一限制。Base64 编码会将二进制数据膨胀约 4/3，因此，携带编码媒体的正文在实际图像、音频或视频字节约为 **75 MB** 时仍能通过上限。要按编码后的字符串计算大小，而不是按磁盘上的文件，并统计一次调用中的所有输入：一个携带两张参考图像的请求会同时在两者上消耗额度，提示词、参数和 JSON 结构也计入其中。

**拒绝的形态。** 返回 `413`，并在 `X-Comfy-Error-Type` 上带有 `invalid_input`，`X-Comfy-Request-Id` 也像其他任何响应一样设置。正文是一个 [`RouterErrorResponse`](/zh/development/comfy-router/reference#routererrorresponse)，其 `detail` 描述被超出的是哪项上限。应根据 `error_type` 进行分支处理，而不是解析 `detail`；如果 API 返回值与本文在数值上出现分歧，以 API 返回值为准。Router 在分发任何内容之前就抛出拒绝，因此没有运行生成，也没有产生费用。

该上限适用于每个请求，无论其是否携带 `Idempotency-Key`。它不是幂等性限制，重新发送相同的键不会改变结果：过大的正文在每次尝试时都过大。

**提供商可能会施加自己的更低限制，而在这一上限处通常正是如此。** 提供商发布各自对内联媒体的上限，具有约束力的限制取两者中较小者。例如，Google 的模型最多接受 20 MB（十进制，20,000,000 字节）的内联负载，Google 模型页面上的 `Size limit: 20MB` 一行，就是引自 Google 自身规范的 Google 逐字段限制，而不是 Router 对整个请求正文的限制。Router 的上限被有意设在其所对接的每一项合作伙伴限制之上，因此对于单个内联资产，通常你先碰到的是提供商自己的限制；而 Router 的上限在单次正文包含多个资产时才会起作用。能通过 Router 的上限但超出提供商自身限制的正文，会被提供商而非 Router 拒绝，并会作为提供商错误返回，而不是 `413`。

## 请求按调用方进行速率限制

| 响应                                   | 原因                     | 操作                             |
| ------------------------------------ | ---------------------- | ------------------------------ |
| `429` / `concurrency_limit_exceeded` | 并发调用过多，或在承诺支出上限之下余量不足。 | 减少并发工作。支出响应头可将支出上限与调用次数限制区分开来。 |
| `429` / `rate_limited`               | 请求额度已耗尽。               | 等待 `Retry-After` 后再重试。         |

请求速率限制适用于调用以及目录/schema 读取，包括在生成之前就被拒绝的请求。它跟随经过身份验证的调用方，而不是来源 IP。使用调用方自己的提供商密钥的调用不受此限制；提供商自身的限制仍然适用。

缓存目录与 schema 读取。使用 `ETag` 和 `If-None-Match` 重新验证 schema。重试字段与承诺支出字段见[响应头](/zh/development/comfy-router/headers)。

## 调用运行期间没有进度更新

Router 只返回最终响应，不提供流式 token、服务器发送事件、百分比更新或中间预览帧。在请求过程中，提供商的内部轮询状态不会被转发。

请显示一个不确定进度的指示器。如果你需要进度或流式输出，请使用能够暴露这些信息的合作伙伴代理操作。

<span id="no-cost-or-credit-figures-on-a-response" />

## Comfy 费用与用量

响应可能包含提供商的用量或成本字段。它们并不代表通用的 Comfy 计费。`X-Comfy-Credits-Used` 是可选的，并且不会被重放。请使用 Comfy 平台查询余额、用量和发票。

目录提供的是计费事实，包括 `billing.charges_on_policy_rejection`，而不是价格。请显式处理 `yes`、`no` 和 `unknown`。参见[计费](/zh/development/comfy-router/api#model-billing-facts)。

## Router 并不覆盖每个合作伙伴操作

Router 运行模型。文件上传、账户读取、资产管理、流式传输以及提供商任务控制可能需要 `/proxy/…` 下的合作伙伴代理路由。请查阅 [Comfy API 规范](/openapi-v2.yaml)；支持情况因提供商而异。

## 模型输出与存储资产

输入和输出字段因模型而异。从提供商 SDK 或代理迁移时，路由方式以及结果读取方式都可能发生变化。

部分资产会重新托管到 Comfy 存储上，其他资产则是提供商 URL 或内联字节。关于生命周期和重放行为，请参阅[结果资产](/zh/development/comfy-router/reference#结果资产)。

## 下一步

<CardGroup cols={2}>
  <Card title="快速入门" icon="rocket" href="/zh/development/comfy-router/quickstart">
    通过 Comfy Router 生成你的第一张图像。
  </Card>

  <Card title="使用 Router API" icon="code" href="/zh/development/comfy-router/api">
    选择一个模型、查看其 schema，并处理结果与重试。
  </Card>
</CardGroup>
