> ## Documentation Index
> Fetch the complete documentation index at: https://docs.comfy.org/llms.txt
> Use this file to discover all available pages before exploring further.

# 将 Seed Audio 1.0 Multilingual 与 Comfy Router 配合使用

> 通过 Comfy Router 调用 byteplus/seed-audio-1.0-multilingual：端点、请求结构以及 Router 返回的响应。

`byteplus/seed-audio-1.0-multilingual` 的 API 参考，由 Comfy Router 从 BytePlus 提供。

## 快速开始

在[你的 Comfy 工作区](https://platform.comfy.org/profile/api-keys)中创建一个密钥，并将其导出为 `COMFY_API_KEY`。Python 和 TypeScript 代码片段使用 Comfy SDK（`pip install comfy-sdk`、`npm install @comfyorg/sdk`）；cURL 代码片段是在原始 HTTP 上执行同样的调用。

**模型 ID：** `byteplus/seed-audio-1.0-multilingual`

**端点：** `POST https://api.comfy.org/v2/models/byteplus/seed-audio-1.0-multilingual`

<Tabs>
  <Tab title="Wait for the result">
    <CodeGroup>
      ```python Python theme={null}
      from comfy_sdk import Comfy

      # Reads COMFY_API_KEY from the environment.
      # The SDK automatically creates an idempotency key and reuses it for automatic retries.
      with Comfy() as client:
          result = client.models.run(
              "byteplus/seed-audio-1.0-multilingual",
              {
                  "audio_config": {
                      "format": "wav",
                      "sample_rate": 24000,
                  },
                  "text_prompt": "Hello from Comfy Router.",
              },
          )

      print(result)
      ```

      ```typescript TypeScript theme={null}
      import { comfy } from "@comfyorg/sdk";

      // Reads COMFY_API_KEY from the environment.
      // The SDK automatically creates an idempotency key and reuses it for automatic retries.
      const { data } = await comfy.models.run("byteplus/seed-audio-1.0-multilingual", {
        audio_config: {
          format: "wav",
          sample_rate: 24000,
        },
        text_prompt: "Hello from Comfy Router.",
      });

      console.log(data);
      ```

      ```bash cURL theme={null}
      curl https://api.comfy.org/v2/models/byteplus/seed-audio-1.0-multilingual \
        -H "X-API-Key: $COMFY_API_KEY" \
        -H "Idempotency-Key: $(uuidgen)" \
        -H "Content-Type: application/json" \
        -d "{\"audio_config\": {\"format\":\"wav\",\"sample_rate\":24000}, \"text_prompt\": \"Hello from Comfy Router.\"}"
      ```
    </CodeGroup>
  </Tab>

  <Tab title="Queue and collect later">
    <CodeGroup>
      ```python Python theme={null}
      from comfy_sdk import Comfy

      # Reads COMFY_API_KEY from the environment.
      # Each submit() call mints its own Idempotency-Key and reuses it for automatic retries.
      with Comfy() as client:
          handle = client.models.submit(
              "byteplus/seed-audio-1.0-multilingual",
              {
                  "audio_config": {
                      "format": "wav",
                      "sample_rate": 24000,
                  },
                  "text_prompt": "Hello from Comfy Router.",
              },
          )
          print("request_id:", handle.request_id)  # with the model ID, all another process needs

          # Poll until the request completes, waiting the Retry-After the server names.
          for update in handle.iter_events():
              print(update.status, update.queue_position)

          # The provider's own payload, the same value models.run() returns.
          # A request that failed or was cancelled raises the typed Router error here.
          result = handle.get()

      print(result)
      ```

      ```typescript TypeScript theme={null}
      import { comfy } from "@comfyorg/sdk";

      // Reads COMFY_API_KEY from the environment.
      // Each submit() call mints its own Idempotency-Key and reuses it for automatic retries.
      const handle = await comfy.models.submit("byteplus/seed-audio-1.0-multilingual", {
        audio_config: {
          format: "wav",
          sample_rate: 24000,
        },
        text_prompt: "Hello from Comfy Router.",
      });
      console.log("requestId:", handle.requestId); // with the model ID, all another process needs

      // Poll until the request completes, waiting the Retry-After the server names.
      for await (const update of handle.events()) {
        console.log(update.status, update.queuePosition);
      }

      // The same result models.run() returns. A request that failed or was cancelled rejects here.
      const result = await handle.get();

      console.log(result.data);
      ```

      ```bash cURL theme={null}
      # 1. Submit. Router answers 201 with request_id, status_url, response_url and cancel_url.
      curl https://api.comfy.org/v2/models/byteplus/seed-audio-1.0-multilingual/requests \
        -H "X-API-Key: $COMFY_API_KEY" \
        -H "Idempotency-Key: $(uuidgen)" \
        -H "Content-Type: application/json" \
        -d "{\"audio_config\": {\"format\":\"wav\",\"sample_rate\":24000}, \"text_prompt\": \"Hello from Comfy Router.\"}"

      # 2. Poll until status is COMPLETED, waiting the Retry-After seconds each response names.
      REQUEST_ID="<request_id from the 201 body>"
      curl -i https://api.comfy.org/v2/models/byteplus/seed-audio-1.0-multilingual/requests/$REQUEST_ID/status \
        -H "X-API-Key: $COMFY_API_KEY"

      # 3. Collect. 200 with the model's native output, 202 with the status body while it is still running.
      curl https://api.comfy.org/v2/models/byteplus/seed-audio-1.0-multilingual/requests/$REQUEST_ID \
        -H "X-API-Key: $COMFY_API_KEY"
      ```
    </CodeGroup>
  </Tab>
</Tabs>

## Schema

### 输入

<ParamField body="audio_config" type="object">
  输出音频配置。
</ParamField>

<ParamField body="audio_config.enable_subtitle" type="boolean">
  是否启用字幕服务。启用后，响应会包含话语级和词级时间戳（默认：否）。
</ParamField>

<ParamField body="audio_config.format" type="string">
  输出音频格式：wav（默认）、mp3、pcm 或 ogg\_opus。

  可选值：`wav`、`mp3`、`pcm`、`ogg_opus`
</ParamField>

<ParamField body="audio_config.loudness_rate" type="integer">
  -50 至 100；100 表示 2.0 倍音量，-50 表示 0.5 倍音量（默认：0）。

  范围：`-50` 至 `100`
</ParamField>

<ParamField body="audio_config.pitch_rate" type="integer">
  -12 至 12（默认：0）。

  范围：`-12` 至 `12`
</ParamField>

<ParamField body="audio_config.sample_rate" type="integer">
  输出采样率：8000、16000、24000（默认）、32000、44100 或 48000。

  可选值：`8000`、`16000`、`24000`、`32000`、`44100`、`48000`
</ParamField>

<ParamField body="audio_config.speech_rate" type="integer">
  -50 至 100；100 表示 2.0 倍语速，-50 表示 0.5 倍语速（默认：0）。

  范围：`-50` 至 `100`
</ParamField>

<ParamField body="model" type="string">
  模型标识符。支持的模型：seed-audio-1.0 和 seed-audio-1.0-multilingual。直接以 v1 调用 POST /proxy/byteplus/api/v3/tts/create 时必须提供它：代理会拒绝任何其他值，省略该值时也会以 400 拒绝。它不在此 schema 的 `required` 列表中，因为 Comfy Router 会从 /v2/models/byteplus/\{model} 的 `{model}` 路径段填充它，所以 Router 调用方可以省略。
</ParamField>

<ParamField body="references" type="object[]">
  参考资源。纯文本生成时省略。最多 3 个音频参考（每个最长 30 秒、解码后最大 10 MB；wav、mp3、pcm 或 ogg\_opus），或恰好 1 个图像参考（解码后最大 10 MB；jpeg、png 或 webp）。图像参考不能与音频参考混用。这些上限由 BytePlus 设定，且以解码后的字节数表示：base64 会使资源膨胀约 4/3，而一次 Comfy Router 调用的整个 JSON 文档上限为 10 MiB，因此发送到 /v2/models/byteplus/\{model} 的内联 `audio_data`/`image_data` 参考，解码后必须保持在约 7.5 MB 以下。更大的资源请使用 `audio_url`/`image_url`：若内联发送，达到 BytePlus 自身 10 MB 上限的参考会在验证运行之前被以 413 拒绝。
</ParamField>

<ParamField body="references[].audio_data" type="string">
  Base64 编码的参考音频。
</ParamField>

<ParamField body="references[].audio_url" type="string">
  远程参考音频文件的 URL。
</ParamField>

<ParamField body="references[].image_data" type="string">
  Base64 编码的参考图像。
</ParamField>

<ParamField body="references[].image_url" type="string">
  远程参考图像的 URL。
</ParamField>

<ParamField body="references[].speaker" type="string">
  音色 ID。可以是受支持的 Doubao TTS 音色，也可以是声音克隆的音色 ID。
</ParamField>

<ParamField body="text_prompt" type="string" required>
  要合成的提示词或文本（1 至 3,000 个字符；空字符串会被拒绝）。提供音频参考时，按顺序使用 @Audio1、@Audio2 和 @Audio3 引用它们。
</ParamField>

<ParamField body="watermark" type="object">
  水印配置对象。接受空对象。
</ParamField>

<ParamField body="watermark.aigc_metadata" type="object">
  隐式水印。向合成音频的头部添加元数据。
</ParamField>

<ParamField body="watermark.aigc_metadata.content_producer" type="string">
  合成服务提供商的名称或代码。
</ParamField>

<ParamField body="watermark.aigc_metadata.content_propagator" type="string">
  内容分发服务提供商的名称或代码。
</ParamField>

<ParamField body="watermark.aigc_metadata.enable" type="boolean">
  是否启用隐式水印（默认：否）。
</ParamField>

<ParamField body="watermark.aigc_metadata.produce_id" type="string">
  内容生产 ID。
</ParamField>

<ParamField body="watermark.aigc_metadata.propagate_id" type="string">
  内容分发 ID。
</ParamField>

<ParamField body="watermark.aigc_watermark" type="boolean">
  显式水印切换开关。在合成音频的末尾添加音频节奏标记（默认：否）。
</ParamField>

由 Router 在 `GET /v2/models/byteplus/seed-audio-1.0-multilingual/openapi.json` 提供的 schema 生成，这也是请求到达提供商之前 Router 用于验证调用的同一份文档。

### 输出

<ResponseField name="audio" type="string">
  生成的音频数据，采用 Base64 编码。
</ResponseField>

<ResponseField name="code" type="integer">
  状态码。详情请参阅官方错误码文档。
</ResponseField>

<ResponseField name="duration" type="number">
  变速或后处理之后的时长，单位为秒。

  格式：`double`
</ResponseField>

<ResponseField name="message" type="string">
  状态详情。
</ResponseField>

<ResponseField name="original_duration" type="number">
  模型原始输出时长，单位为秒。用于计费，上限为 120 秒。

  格式：`double`
</ResponseField>

<ResponseField name="subtitle" type="object">
  音频的字幕信息。仅当请求中 audio\_config.enable\_subtitle 设为 true 时才会返回。
</ResponseField>

<ResponseField name="subtitle.sentences" type="object[]">
  句子级字幕信息。
</ResponseField>

<ResponseField name="subtitle.sentences[].end_time" type="integer">
  分段结束时间，单位为毫秒，从音频开头算起。
</ResponseField>

<ResponseField name="subtitle.sentences[].start_time" type="integer">
  分段开始时间，单位为毫秒，从音频开头算起。
</ResponseField>

<ResponseField name="subtitle.sentences[].text" type="string">
  该分段的完整文本。
</ResponseField>

<ResponseField name="subtitle.text" type="string">
  与音频对应的字幕文本。
</ResponseField>

<ResponseField name="subtitle.words" type="object[]">
  单词级字幕信息。
</ResponseField>

<ResponseField name="subtitle.words[].end_time" type="integer">
  分段结束时间，单位为毫秒，从音频开头算起。
</ResponseField>

<ResponseField name="subtitle.words[].start_time" type="integer">
  分段开始时间，单位为毫秒，从音频开头算起。
</ResponseField>

<ResponseField name="subtitle.words[].text" type="string">
  该分段的完整文本。
</ResponseField>

<ResponseField name="url" type="string">
  临时音频 URL，有效期为 2 小时。
</ResponseField>

## 示例

### 输入

```json theme={null}
{
  "audio_config": {
    "format": "wav",
    "sample_rate": 24000
  },
  "text_prompt": "Hello from Comfy Router."
}
```

### 输出

```json theme={null}
{
  "audio": "PGJhc2U2ND4=",
  "duration": 1.2,
  "original_duration": 1.2,
  "url": "https://example.invalid/byteplus/seed-audio/generated.wav"
}
```

## 发布前须知

SDK 会生成 `Idempotency-Key` 并在自动重试中复用它。手动重试时，请复用原始 key。Router 最长可保持连接 10 分钟。

请求失败时，Router 会发送 `X-Comfy-Error-Type` 响应头说明原因。`422` 表示 Router 在调用提供商之前就拒绝了输入。生成的资源请及时下载，因为[结果链接会过期](/zh/development/comfy-router/reference#结果资产)。

<CardGroup cols={3}>
  <Card title="请求头" icon="list" href="/zh/development/comfy-router/quickstart">
    身份验证、幂等性、请求 ID、错误分类、重试节奏、消费限额。
  </Card>

  <Card title="使用 Router API" icon="code" href="/zh/development/comfy-router/quickstart">
    模型发现、校验错误、重试与计费。
  </Card>

  <Card title="限制" icon="triangle-exclamation" href="/zh/development/comfy-router/limitations">
    Router 目前不支持的功能，以及替代方案。
  </Card>
</CardGroup>
