跳转到主要内容
Seedance 2.0(字节跳动)是一款多模态视频生成模型,支持文生视频、图生视频、首尾帧、参考视频四种输入,且输出默认自带同步音频。RuAPI 提供 OpenAI 兼容的异步视频接口:提交任务 → 轮询状态 → 下载视频。USDT 计费,无需外币卡。
默认带声音 —— Seedance 2.0 生成的视频自带同步音频(对白 / 环境音 / 音效),无需任何额外参数。
视频结果仅保留 7 天,生成后请尽快下载保存;过期后链接将无法访问。

可用模型

模型 ID说明
doubao-seedance-2.0-fast更快、更便宜,日常首选
doubao-seedance-2.0画质更高的完整版
准确的价格见主站 价格页面(视频按 token 计费)。

接口地址与鉴权

  • Base URLhttps://www.ruapi.ai/v1
  • 鉴权:请求头带 Authorization: Bearer sk-你的KEY(在控制台「令牌」页创建)
视频是异步的,一共三步:
1

提交任务

POST /v1/videos → 返回任务 id
2

轮询状态

GET /v1/videos/{id} → 直到 status 变成 completed
3

下载视频

GET /v1/videos/{id}/content → 拿到 MP4

第 1 步:提交任务(文生视频)

curl https://www.ruapi.ai/v1/videos \
  -H "Authorization: Bearer sk-你的KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "doubao-seedance-2.0-fast",
    "prompt": "城市夜景,霓虹灯反射在湿漉漉的街道上,赛博朋克风格,镜头缓慢推进",
    "seconds": "5",
    "metadata": { "resolution": "720p", "ratio": "16:9" }
  }'
import requests

resp = requests.post(
    "https://www.ruapi.ai/v1/videos",
    headers={"Authorization": "Bearer sk-你的KEY"},
    json={
        "model": "doubao-seedance-2.0-fast",
        "prompt": "城市夜景,霓虹灯反射在湿漉漉的街道上,赛博朋克风格,镜头缓慢推进",
        "seconds": "5",
        "metadata": {"resolution": "720p", "ratio": "16:9"},
    },
)
task_id = resp.json()["id"]
print("任务已提交:", task_id)
const resp = await fetch("https://www.ruapi.ai/v1/videos", {
  method: "POST",
  headers: {
    Authorization: "Bearer sk-你的KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    model: "doubao-seedance-2.0-fast",
    prompt: "城市夜景,霓虹灯反射在湿漉漉的街道上,赛博朋克风格,镜头缓慢推进",
    seconds: "5",
    metadata: { resolution: "720p", ratio: "16:9" },
  }),
});
const { id } = await resp.json();
console.log("任务已提交:", id);
返回体(id 就是任务号,后面两步都用它):
{
  "id": "task_guXmm9BZpLpYaxfky7mkR2kSlRtgDSe9",
  "object": "video",
  "model": "doubao-seedance-2.0-fast",
  "status": "queued",
  "progress": 0,
  "created_at": 1783579686
}

第 2 步:轮询状态

复数路由 GET /v1/videos/{id} 查询,每 5 秒左右查一次。status 会经历 queued → in_progress → completed
curl https://www.ruapi.ai/v1/videos/task_你的任务ID \
  -H "Authorization: Bearer sk-你的KEY"
import requests

r = requests.get(
    f"https://www.ruapi.ai/v1/videos/{task_id}",
    headers={"Authorization": "Bearer sk-你的KEY"},
).json()
print(r["status"], r.get("progress"))
完成后返回(metadata.url 即下载地址):
{
  "id": "task_guXmm9BZpLpYaxfky7mkR2kSlRtgDSe9",
  "object": "video",
  "status": "completed",
  "progress": 100,
  "metadata": {
    "url": "https://www.ruapi.ai/v1/videos/task_guXmm9BZpLpYaxfky7mkR2kSlRtgDSe9/content"
  }
}

第 3 步:下载视频

curl -L https://www.ruapi.ai/v1/videos/task_你的任务ID/content \
  -H "Authorization: Bearer sk-你的KEY" \
  -o seedance.mp4
video = requests.get(
    f"https://www.ruapi.ai/v1/videos/{task_id}/content",
    headers={"Authorization": "Bearer sk-你的KEY"},
)
with open("seedance.mp4", "wb") as f:
    f.write(video.content)
print("已保存 seedance.mp4")

完整示例:一段脚本跑通全流程

复制即用,把 sk-你的KEY 换成自己的 key:
Python
import time
import requests

BASE = "https://www.ruapi.ai/v1"
HEADERS = {"Authorization": "Bearer sk-你的KEY"}

# 1) 提交任务
resp = requests.post(
    f"{BASE}/videos",
    headers=HEADERS,
    json={
        "model": "doubao-seedance-2.0-fast",
        "prompt": "城市夜景,霓虹灯反射在湿漉漉的街道上,赛博朋克风格,镜头缓慢推进",
        "seconds": "5",
        "metadata": {"resolution": "720p", "ratio": "16:9"},
    },
)
resp.raise_for_status()
task_id = resp.json()["id"]
print("任务已提交:", task_id)

# 2) 轮询直到完成(视频通常需要 1-3 分钟)
while True:
    r = requests.get(f"{BASE}/videos/{task_id}", headers=HEADERS).json()
    print("状态:", r.get("status"), r.get("progress"))
    if r.get("status") == "completed":
        break
    if r.get("status") == "failed":
        raise RuntimeError(f"生成失败: {r.get('error')}")
    time.sleep(5)

# 3) 下载(结果仅保留 7 天,尽快保存)
video = requests.get(f"{BASE}/videos/{task_id}/content", headers=HEADERS)
with open("seedance.mp4", "wb") as f:
    f.write(video.content)
print("已保存 seedance.mp4")

参数说明

顶层字段:
字段类型说明
modelstringdoubao-seedance-2.0-fastdoubao-seedance-2.0
promptstring必填,画面的文字描述
secondsstring时长(秒),支持 4–15 秒,如 "5""10"
metadataobject分辨率、比例、图片/视频输入等,见下表
metadata 内字段:
字段类型说明
resolutionstring"480p" / "720p" / "1080p"
ratiostring画面比例,如 "16:9""9:16""1:1"
input_typestring输入类型(一般可省略,系统会自动推断):text_to_video / first_last_frame / reference
imagesstring[]图片 URL 数组(图生视频用)
videosstring[]视频 URL 数组(参考视频用)
分辨率越高、时长越长,消耗的 token 越多、越贵。不确定就先用 480p / 5 秒跑通再调。

四种输入模式

input_type 通常不用手填,系统按你给的图片 / 视频数量自动推断;也可用 metadata.input_type 显式指定。
模式怎么给输入推断出的 input_type
文生视频只给 prompttext_to_video
图生视频metadata.images1 张reference
首尾帧metadata.images2 张first_last_frame
参考视频metadata.videos1 个视频reference
图片 / 视频必须是公网可访问的 URL(上游要去拉取);图片支持 JPG / PNG / WebP,视频支持 MP4不支持 base64 内联(上游会因请求体过大而失败)。
下面每种模式只展示第 1 步「提交」;第 2 步轮询、第 3 步下载对所有模式都完全一样。

模式一:文生视频

只给文字 prompt,纯靠描述生成。
curl https://www.ruapi.ai/v1/videos \
  -H "Authorization: Bearer sk-你的KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "doubao-seedance-2.0-fast",
    "prompt": "城市夜景,霓虹灯反射在湿漉漉的街道上,赛博朋克风格,镜头缓慢推进",
    "seconds": "5",
    "metadata": { "resolution": "720p", "ratio": "16:9" }
  }'
import requests

resp = requests.post(
    "https://www.ruapi.ai/v1/videos",
    headers={"Authorization": "Bearer sk-你的KEY"},
    json={
        "model": "doubao-seedance-2.0-fast",
        "prompt": "城市夜景,霓虹灯反射在湿漉漉的街道上,赛博朋克风格,镜头缓慢推进",
        "seconds": "5",
        "metadata": {"resolution": "720p", "ratio": "16:9"},
    },
)
print(resp.json()["id"])  # 拿到 task id,再按上文完整脚本轮询、下载

模式二:图生视频(1 张图)

metadata.images1 张图的 URL,以它作参考生成动态视频。prompt 描述你想要的动作 / 运镜。
curl https://www.ruapi.ai/v1/videos \
  -H "Authorization: Bearer sk-你的KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "doubao-seedance-2.0-fast",
    "prompt": "让画面里的人物微笑并自然地挥手,镜头缓慢推进",
    "seconds": "5",
    "metadata": {
      "resolution": "720p",
      "ratio": "16:9",
      "images": ["https://你的域名/portrait.jpg"]
    }
  }'
import requests

resp = requests.post(
    "https://www.ruapi.ai/v1/videos",
    headers={"Authorization": "Bearer sk-你的KEY"},
    json={
        "model": "doubao-seedance-2.0-fast",
        "prompt": "让画面里的人物微笑并自然地挥手,镜头缓慢推进",
        "seconds": "5",
        "metadata": {
            "resolution": "720p",
            "ratio": "16:9",
            "images": ["https://你的域名/portrait.jpg"],
        },
    },
)
print(resp.json()["id"])

模式三:首尾帧(2 张图)

metadata.images2 张图:第 1 张 = 首帧,第 2 张 = 尾帧,生成从首帧平滑过渡到尾帧的视频。
curl https://www.ruapi.ai/v1/videos \
  -H "Authorization: Bearer sk-你的KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "doubao-seedance-2.0-fast",
    "prompt": "从第一张画面平滑过渡到第二张,镜头运动自然,电影感",
    "seconds": "5",
    "metadata": {
      "resolution": "720p",
      "ratio": "16:9",
      "images": [
        "https://你的域名/first.jpg",
        "https://你的域名/last.jpg"
      ]
    }
  }'
import requests

resp = requests.post(
    "https://www.ruapi.ai/v1/videos",
    headers={"Authorization": "Bearer sk-你的KEY"},
    json={
        "model": "doubao-seedance-2.0-fast",
        "prompt": "从第一张画面平滑过渡到第二张,镜头运动自然,电影感",
        "seconds": "5",
        "metadata": {
            "resolution": "720p",
            "ratio": "16:9",
            "images": [
                "https://你的域名/first.jpg",
                "https://你的域名/last.jpg",
            ],
        },
    },
)
print(resp.json()["id"])

模式四:参考视频(1 个视频)

metadata.videos1 个短视频的 URL,参考它的主体动作重新演绎(如换风格、换场景)。
curl https://www.ruapi.ai/v1/videos \
  -H "Authorization: Bearer sk-你的KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "doubao-seedance-2.0-fast",
    "prompt": "保持视频里人物的动作,画面改成赛博朋克霓虹街区风格",
    "seconds": "5",
    "metadata": {
      "resolution": "480p",
      "ratio": "9:16",
      "videos": ["https://你的域名/dance.mp4"]
    }
  }'
import requests

resp = requests.post(
    "https://www.ruapi.ai/v1/videos",
    headers={"Authorization": "Bearer sk-你的KEY"},
    json={
        "model": "doubao-seedance-2.0-fast",
        "prompt": "保持视频里人物的动作,画面改成赛博朋克霓虹街区风格",
        "seconds": "5",
        "metadata": {
            "resolution": "480p",
            "ratio": "9:16",
            "videos": ["https://你的域名/dance.mp4"],
        },
    },
)
print(resp.json()["id"])
参考视频对输入要求较高:请用**时长 ≤ 15 秒、画面有清晰主体(如人物)**的短视频;卡通、无明显主体或过长的视频容易生成失败。建议参考视频的画面比例与目标 ratio 一致(如竖屏源配 9:16)。

进阶:多图 / 多视频参照

imagesvideos 都是数组,可以一次传多个做联合参照(均已实测通过):
  • 多图参照images3 张及以上(官方最多 9 张),综合多张图的主体 / 场景 / 风格生成。传 3 张以上时系统自动判为 reference,无需手填 input_type
  • 多视频参照videos2 个及以上(官方最多 3 个,多段视频合计时长 ≤ 15 秒),参考多段动作合成。
curl https://www.ruapi.ai/v1/videos \
  -H "Authorization: Bearer sk-你的KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "doubao-seedance-2.0-fast",
    "prompt": "综合这几张图的主体和风格,生成一段连贯的视频,镜头自然运动",
    "seconds": "5",
    "metadata": {
      "resolution": "720p",
      "ratio": "16:9",
      "images": [
        "https://你的域名/ref1.jpg",
        "https://你的域名/ref2.jpg",
        "https://你的域名/ref3.jpg"
      ]
    }
  }'
import requests

resp = requests.post(
    "https://www.ruapi.ai/v1/videos",
    headers={"Authorization": "Bearer sk-你的KEY"},
    json={
        "model": "doubao-seedance-2.0-fast",
        "prompt": "综合这几张图的主体和风格,生成一段连贯的视频,镜头自然运动",
        "seconds": "5",
        "metadata": {
            "resolution": "720p",
            "ratio": "16:9",
            "images": [
                "https://你的域名/ref1.jpg",
                "https://你的域名/ref2.jpg",
                "https://你的域名/ref3.jpg",
            ],
        },
    },
)
print(resp.json()["id"])
多视频同理:把 images 换成 videos、传多个短视频 URL 即可(每个建议 ≤ 7 秒、有清晰主体,合计 ≤ 15 秒)。

任务状态

status含义
queued排队中
in_progress生成中
completed完成,metadata.url 为下载地址
failed失败,error 字段说明原因

计费

视频按 token 计费(分辨率 × 时长)。提交时会预扣一笔押金,任务完成后按实际用量多退少不补,最终以扣费为准。价格见 价格页面

常见问题

检查两点:model 名是否写对(doubao-seedance-2.0-fast);地址是否是 https://www.ruapi.ai/v1/videos(带 /v1)。
正常现象。视频生成通常要 1-3 分钟,耐心轮询即可,别把间隔设太短。
很可能已超过 7 天,上游链接过期。请在生成后尽快下载保存。
参考视频对输入要求高。请确认参考视频时长 ≤ 15 秒、画面有清晰主体、且是可公网访问的 MP4;卡通或无明显主体的视频常会失败。
复数 GET /v1/videos/{id}。这是 OpenAI 兼容格式,返回里 metadata.url 直接就是下载地址。

接下来