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

# Seedance 2.5 Full

> Doubao Seedance 2.5 全分辨率视频生成：480p / 720p / 1080p，支持样片模式。请求体与火山方舟官方一致。

* 请求体与 [火山方舟视频生成 API](https://www.volcengine.com/docs/82379/1520757) 官方格式一致。素材上限、时长和任务类型与 [Seedance 2.5](https://docs.nodylink.com/api-reference/videos/seedance/seedance-2-5.md) 相同，并开放全部输出分辨率。
* 支持样片模式：先用 480p 低成本出一段样片，确认画面、运镜、动作和对提示词的理解后，再基于这段样片出 1080p 正式片。正式片和样片画面基本一致。
* 异步接口：提交后立即返回任务 `id`，再调用 [查询视频任务](https://docs.nodylink.com/api-reference/videos/task-status.md) 获取结果。
* 计费与时长、分辨率、是否包含参考视频相关，见 [模型价格](https://nodylink.com/pricing)。任务失败自动退款。

## 模型

| 模型 ID | 说明 | 分辨率 |
| - | - | - |
| `Doubao-Seedance-2.5-full` | 全分辨率。支持文生视频、首尾帧、多模态参考、视频编辑、视频延长和样片模式 | 480p / 720p / 1080p |

可用模型以 [模型广场](https://nodylink.com/market) 为准。

## 分辨率

| 分辨率 | 位深 | 说明 |
| - | - | - |
| `480p` | 8bit | 样片模式的样片必须使用这一档 |
| `720p` | 8bit | 直接生成时可用 |
| `1080p` | 10bit，H.265/HEVC | 样片模式的正式片必须使用这一档 |

> [!NOTE]
>
> `1080p` 使用 10bit 位深和 H.265/HEVC 编码，色彩层次更细。少数播放器无法解码时，换用 VLC、MPV 或 QuickTime Player。

**各宽高比的输出像素**

| 分辨率 | 16:9 | 4:3 | 1:1 | 3:4 | 9:16 | 21:9 |
| - | - | - | - | - | - | - |
| 480p | 854×480 | 752×560 | 640×640 | 560×752 | 480×854 | 992×432 |
| 720p | 1280×720 | 1112×834 | 960×960 | 834×1112 | 720×1280 | 1470×630 |
| 1080p | 1920×1080 | 1664×1248 | 1440×1440 | 1248×1664 | 1080×1920 | 2206×946 |

直接生成任意一档时，省略 `draft`，或传 `"draft": false`。两步样片流程见 [样片模式](#样片模式)。

```bash cURL theme={null}
curl https://api.nodylink.com/v2/videos/generations \
  -H "Authorization: Bearer sk-你的密钥" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "Doubao-Seedance-2.5-full",
    "content": [
      {"type": "text", "text": "第一视角穿越雨后的霓虹街道，镜头稳定前行，音频1作为背景音乐"},
      {"type": "audio_url", "audio_url": {"url": "https://example.com/bgm.mp3"}, "role": "reference_audio"}
    ],
    "resolution": "1080p",
    "ratio": "16:9",
    "duration": 20
  }'
```

```python Python theme={null}
import time
import requests

API_KEY = "sk-你的密钥"
BASE = "https://api.nodylink.com"
headers = {"Authorization": f"Bearer {API_KEY}"}

submit = requests.post(
    f"{BASE}/v2/videos/generations",
    headers=headers,
    json={
        "model": "Doubao-Seedance-2.5-full",
        "content": [
            {"type": "text", "text": "第一视角穿越雨后的霓虹街道，镜头稳定前行，音频1作为背景音乐"},
            {"type": "audio_url", "audio_url": {"url": "https://example.com/bgm.mp3"}, "role": "reference_audio"},
        ],
        "resolution": "1080p",
        "ratio": "16:9",
        "duration": 20,
    },
).json()
task_id = submit["id"]


def video_url(data):
    task = data.get("task") or {}
    if task.get("outputs"):
        return task["outputs"][0]
    return (data.get("content") or {}).get("video_url")


while True:
    task = requests.get(f"{BASE}/v2/videos/generations/{task_id}", headers=headers).json()
    if task["status"] == "SUCCESS":
        print(video_url(task["data"]))
        break
    if task["status"] == "FAILURE":
        raise RuntimeError(task["fail_reason"])
    time.sleep(10)
```

```javascript Node.js theme={null}
const API_KEY = "sk-你的密钥";
const BASE = "https://api.nodylink.com";
const headers = {
  Authorization: `Bearer ${API_KEY}`,
  "Content-Type": "application/json",
};

const submit = await fetch(`${BASE}/v2/videos/generations`, {
  method: "POST",
  headers,
  body: JSON.stringify({
    model: "Doubao-Seedance-2.5-full",
    content: [
      { type: "text", text: "第一视角穿越雨后的霓虹街道，镜头稳定前行，音频1作为背景音乐" },
      { type: "audio_url", audio_url: { url: "https://example.com/bgm.mp3" }, role: "reference_audio" },
    ],
    resolution: "1080p",
    ratio: "16:9",
    duration: 20,
  }),
}).then((r) => r.json());

const videoUrl = (data) => data?.task?.outputs?.[0] ?? data?.content?.video_url;

while (true) {
  const task = await fetch(`${BASE}/v2/videos/generations/${submit.id}`, { headers })
    .then((r) => r.json());
  if (task.status === "SUCCESS") {
    console.log(videoUrl(task.data));
    break;
  }
  if (task.status === "FAILURE") throw new Error(task.fail_reason);
  await new Promise((r) => setTimeout(r, 10000));
}
```

```json 200 theme={null}
{
  "id": "a3e7c9d2-5f1b-4a86-b0d4-8c2e6f1a9b57",
  "task_id": "a3e7c9d2-5f1b-4a86-b0d4-8c2e6f1a9b57",
  "object": "video",
  "model": "Doubao-Seedance-2.5-full",
  "status": "queued",
  "progress": 0,
  "created_at": 1792000000
}
```

```json 400 theme={null}
{
  "code": "invalid_duration",
  "message": "duration must be -1 or a positive integer",
  "data": null
}
```

## 鉴权

**Authorization** `string` *required*

`Bearer <API Key>`。在 [API 密钥](https://nodylink.com/dashboard/keys) 页面创建。

## 请求参数

**model** `string` *required*

模型 ID：`Doubao-Seedance-2.5-full`。

**content** `array` *required*

输入内容数组。直接生成时，每一项的结构与 [Seedance 2.5](https://docs.nodylink.com/api-reference/videos/seedance/seedance-2-5.md) 相同。样片转正式片时，数组里只放一个 `draft_task`。

**内容项与上限**

| `type` | `role` | 上限 |
| - | - | - |
| `text` | 无 | 1 条 |
| `image_url` | `first_frame` | 1 张 |
| `image_url` | `last_frame` | 1 张，需与首帧一起使用 |
| `image_url` | `reference_image` | 最多 30 张 |
| `video_url` | `reference_video` | 最多 10 个，单个 2～30 秒，总时长不超过 30 秒 |
| `audio_url` | `reference_audio` | 最多 10 段，单段 2～30 秒，总时长不超过 30 秒 |
| `draft_task` | 无 | 1 个，仅用于把样片转成正式片 |

在提示词中可以用「图片1」「视频1」「音频1」指代参考素材，序号按同类素材在数组中的顺序从 1 开始。

**draft\_task**

**type** `string` *required*

固定为 `draft_task`。

**draft\_task.id** `string` *required*

样片的 `data.task.id`，`cgt-` 开头。填外层 `task_id`（UUID）会返回 400。见 [样片模式](#样片模式)。

**resolution** `string` (default: 720p)

分辨率：`480p`、`720p` 或 `1080p`。样片模式另有限制，见 [样片模式](#样片模式)。

**ratio** `string` (default: adaptive)

宽高比：`16:9`、`4:3`、`1:1`、`3:4`、`9:16`、`21:9`，或 `adaptive`。首帧 / 首尾帧、视频编辑、视频延长任务只能使用 `adaptive`。

**duration** `integer` (default: 5)

视频时长（秒），取值 4～30。传 `-1` 时由模型自动决定时长，提交时按 30 秒上限预扣费用，完成后按实际结果结算。视频编辑任务只能使用 `-1`。

**generate\_audio** `boolean` (default: true)

是否生成与画面同步的音频。

**draft** `boolean` (default: false)

是否开启样片模式。仅 `Doubao-Seedance-2.5-full` 支持。`true` 时 `resolution` 必须是 `480p`，其他分辨率返回 400。

**seed** `integer`

随机种子，取值 -1 到 2^32-1。

**watermark** `boolean` (default: false)

是否添加「AI 生成」水印。

**return\_last\_frame** `boolean` (default: false)

是否额外返回视频最后一帧的图片，用于连续生成。

**output\_format** `string` (default: mp4)

输出格式：`mp4` 或 `mov`。`mov` 面向调色、抠像等后期，部分播放器无法直接播放。

**tools** `array`

增强工具。目前支持联网搜索：`[{"type": "web_search"}]`。

## 素材要求

| 素材 | 要求 |
| - | - |
| 图片 | jpeg / png / webp / bmp / tiff / gif / heic / heif；宽高比 0.4～2.5；边长 300～6000 px；单张小于 30 MB |
| 视频 | mp4 / mov，H.264 或 H.265 编码；480p～1080p；宽高比 0.4～2.5；帧率 24～60；单个不超过 200 MB |
| 音频 | wav / mp3；单个不超过 15 MB |

## 任务类型与限制

模型会根据参考素材和提示词意图判断任务类型。视频编辑、视频延长和首尾帧任务对参数有硬性要求，不满足时任务会在执行阶段失败（费用自动退回）。

| 任务类型 | 触发方式 | 限制 |
| - | - | - |
| 文生视频 | 只有文本 | 无 |
| 参考生视频 | 参考素材 + 普通描述 | 无。提示词中避免出现「编辑」「延长」「续写」「删除」「替换」等词，以免被判为其他任务 |
| 视频编辑 | 参考视频 + 提示词含「编辑视频」「增加」「删除」「修改」「替换」等 | `ratio` 只能为 `adaptive`，`duration` 只能为 `-1`；待编辑视频为 4～30 秒 |
| 视频延长 | 参考视频 + 提示词含「向前延长」「向后延长」「续写」等 | `ratio` 只能为 `adaptive` |
| 首帧 / 首尾帧 | 图片 `role` 为 `first_frame` / `last_frame` | `ratio` 只能为 `adaptive` |

## 样片模式

只有 `Doubao-Seedance-2.5-full` 支持。适合要反复尝试的镜头：不满意的样片直接丢掉，只为选中的那一条付 1080p 的费用。样片按 480p 计费，正式片按 1080p 另行计费。

普通 480p 任务不能当作样片。创建时要带 `"draft": true`。

### 第 1 步：出样片

正常提交，加 `"draft": true`，`resolution` 必须是 `480p`（其他分辨率返回 400）：

```bash theme={null}
curl https://api.nodylink.com/v2/videos/generations \
  -H "Authorization: Bearer sk-你的密钥" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "Doubao-Seedance-2.5-full",
    "content": [
      { "type": "text", "text": "一只橘猫在阳光下的花园里追逐蝴蝶，镜头平稳跟随" }
    ],
    "draft": true,
    "resolution": "480p",
    "duration": 5,
    "ratio": "16:9"
  }'
```

样片生成完成（查询结果 `status` 为 `SUCCESS`）后，记下 `data.task.id`（`cgt-` 开头的样片号），第 2 步要用。这时 `data.task.draft` 为 `true`。

```json theme={null}
{
  "task_id": "b2028cb5-663b-4a43-9760-2cf73bccd3f2",
  "status": "SUCCESS",
  "data": {
    "task": {
      "id": "cgt-20261008150427-s4l8g",
      "draft": true,
      "resolution": "480p"
    }
  }
}
```

上例里第 2 步要填的是 `cgt-20261008150427-s4l8g`，不是外层 `task_id`。

### 第 2 步：用样片出正式片

`content` 里只放一个 `draft_task`，`resolution` 填 `1080p`：

```bash theme={null}
curl https://api.nodylink.com/v2/videos/generations \
  -H "Authorization: Bearer sk-你的密钥" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "Doubao-Seedance-2.5-full",
    "content": [
      { "type": "draft_task", "draft_task": { "id": "cgt-20261008150427-s4l8g" } }
    ],
    "resolution": "1080p"
  }'
```

| 规则 | 字段 |
| - | - |
| 从样片继承，不要再传 | 提示词和参考素材、`duration`、`ratio`、`seed`、`generate_audio`、`omni_reference_task_type` |
| 固定 | `model` 与样片相同；`resolution` 为 `1080p`；不传 `draft` |
| 可以重新指定 | `watermark`、`return_last_frame`、`output_format`、`callback_url`、`execution_expires_after` |

> [!WARNING]
>
> `draft_task.id` 填样片的 `data.task.id`（`cgt-…`），不是 `task_id`（例如 `b2028cb5-663b-4a43-9760-2cf73bccd3f2`）。填 UUID 会返回 400。
>
> 样片必须已经完成（`status` 为 `SUCCESS`）。样片号自创建起 7 天内有效。

## 提交响应

与 [Seedance 2.0](https://docs.nodylink.com/api-reference/videos/seedance/seedance-2-0.md) 相同：返回 `object` 为 `video`、`status` 为 `queued` 的任务对象，用其中的 `id` 查询结果。

## 使用示例

### 多图参考

```json theme={null}
{
  "model": "Doubao-Seedance-2.5-full",
  "content": [
    {"type": "text", "text": "图片1的模特穿着图片2的外套，在图片3的街景中走秀"},
    {"type": "image_url", "image_url": {"url": "https://example.com/model.png"}, "role": "reference_image"},
    {"type": "image_url", "image_url": {"url": "https://example.com/coat.png"}, "role": "reference_image"},
    {"type": "image_url", "image_url": {"url": "https://example.com/street.png"}, "role": "reference_image"}
  ],
  "resolution": "1080p",
  "ratio": "9:16",
  "duration": 12
}
```

### 视频编辑

```json theme={null}
{
  "model": "Doubao-Seedance-2.5-full",
  "content": [
    {"type": "text", "text": "编辑视频1，把画面中的红色汽车替换为白色汽车，其余保持不变"},
    {"type": "video_url", "video_url": {"url": "https://example.com/source.mp4"}, "role": "reference_video"}
  ],
  "ratio": "adaptive",
  "duration": -1,
  "resolution": "1080p"
}
```

### 480p 直接生成

```json theme={null}
{
  "model": "Doubao-Seedance-2.5-full",
  "content": [
    {"type": "text", "text": "海面升起一团雾，帆船缓缓驶出画面"}
  ],
  "resolution": "480p",
  "ratio": "16:9",
  "duration": 5
}
```


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