30 秒视频,50+ 参考图。 立即体验

SeeGen AI API

欢迎使用 SeeGen AI API —— 一个 API,即可调用多款顶尖模型生成电影级视频与高保真图像。

概览

SeeGen AI 是一个统一的生成式 API:用同一套一致的端点即可调用多款领先的 AI 视频与图像模型。通过 model 参数选择模型 —— 所有模型的身份验证、任务提交、状态轮询和 webhook 用法完全一致。

当前可用模型:

  • 视频 —— Seedance 2.0 Pro (sd2)、Seedance 2.0 Fast (sd2-fast)、Seedance 2.0 Mini (sd2-mini)、Seedance 2.5 (sd2.5)、HappyHorse 1.1 (happyhorse)
  • 图像 —— GPT Image 2 (gpt-image-2)、Nano Banana 2 (nano-banana-2)、Nano Banana Pro (nano-banana-pro)、Seedream 5.0 Lite (seedream-v5.0-lite)、Seedream 5.0 Pro (seedream-v5.0-pro)

基础 URL: https://seegen.ai/api/v1

模型: 将上述任一别名传入 model 字段即可(例如 sd2gpt-image-2)。

为什么选择 SeeGen AI?

选择 SeeGen AI 的更多理由:

  • 不止 Seedance 2.0:还有 HappyHorse 1.1、Nano Banana、ChatGPT Image 等更多模型。
  • 无需订阅 —— 按量付费
  • 第一时间接入最新模型
  • 全天候客户支持
  • 支持官方模型相关咨询
  • 面向开发者的控制台访问权限
  • 企业与个人用户均可使用

价格

40% OFF

API Pack

$500$833

125,000 积分 ($0.004/积分)

约 781 个 5 秒视频

40% OFF

API-XL Pack

$2,000$3,332

500,000 积分 ($0.004/积分)

约 3,125 个 5 秒视频

Seedance 2.0 / Fast / Mini / 2.5 —— 费用计算

out = 输出秒数,in = 各输入视频 ⌈时长⌉ 之和(每个视频向上取整,最小值为 out × 2/3)。Seedance 2.5 的计算方式与 Seedance 2.0 相同。在套用任务公式前,各对应模型的基础费率会先乘以 1.5 并四舍五入(1080P 在 sd2.5 上为原生输出,费率为其 720P 的 2.5 倍);与模型无关的超分辨率附加费仍为 2K / 4K 每输出秒 +30 / +40 积分(仅 sd2-fast / sd2-mini 的 1080P 为 +20)。

无视频输入包含视频输入
sd2.5: 480P30 × out23 × (out + in)
sd2.5: 720P60 × out45 × (out + in)
sd2.5: 1080P (原生)150 × out113 × (out + in)
sd2.5: 2K(60 + 30) × out45 × (out + in) + 30 × out
sd2.5: 4K(60 + 40) × out45 × (out + in) + 40 × out
sd2-pro: 480P20 × out15 × (out + in)
sd2-pro: 720P40 × out30 × (out + in)
sd2-pro: 1080P (原生)100 × out75 × (out + in)
sd2-pro: 2K(40 + 30) × out30 × (out + in) + 30 × out
sd2-pro: 4K (原生)200 × out150 × (out + in)
sd2-fast: 480P16 × out12 × (out + in)
sd2-fast: 720P32 × out24 × (out + in)
sd2-fast: 1080P(32 + 20) × out24 × (out + in) + 20 × out
sd2-fast: 2K(32 + 30) × out24 × (out + in) + 30 × out
sd2-fast: 4K(32 + 40) × out24 × (out + in) + 40 × out
sd2-mini: 480P10 × out7.5 × (out + in)
sd2-mini: 720P20 × out15 × (out + in)
sd2-mini: 1080P(20 + 20) × out15 × (out + in) + 20 × out
sd2-mini: 2K(20 + 30) × out15 × (out + in) + 30 × out
sd2-mini: 4K(20 + 40) × out15 × (out + in) + 40 × out

注意: sd2-pro 的 1080P 和 4K 为官方原生输出(4K = 720P 费率的 5 倍);sd2-pro 的 2K 以及所有 sd2-fast / sd2-mini 的 1080P/2K/4K 均由 SeeGen AI 进行超分辨率处理。sd2.5 在 480P/720P/1080P 下为原生生成(1080P = 720P 费率的 2.5 倍,无超分辨率附加费),2K/4K 则自动使用超分辨率。可通过 outputResolution: "4k" 请求任意档位(如 "2k" / "4k";网关会自动选择原生或超分辨率 —— 二者仅价格和 Native 标签不同)。sd2-mini 的定价为 sd2-pro 的 50%,是成本最低的档位。Seedance 2.5 沿用 Seedance 2.0 的单视频时长取整、最小输入时长下限和超分辨率计算方式。在任务计算前,各对应模型的基础费率会先乘以 1.5 并四舍五入(例如带视频的 1080P:75 × 1.5 → 113)。与模型无关的 2K / 4K 超分辨率附加费保持为每输出秒 +30 / +40 积分。若超分辨率处理失败,已完成的任务将返回 720P 兜底结果,且不会部分退还积分。

  • sd2.5 480P,4 秒输出,无视频输入:120 积分
  • sd2.5 720P,5 秒输出,无视频输入:300 积分
  • sd2.5 720P,5 秒输出 + 3 秒输入视频(最小输入时长 4 秒):405 积分
  • sd2.5 1080P 原生,5 秒输出,无视频输入:750 积分
  • sd2.5 1080P 原生,5 秒输出 + 5 秒输入视频:1,130 积分

happyhorse — 每秒积分

输出积分 / 秒5秒示例
720P32160
1080P60300
2K32 + 30310
4K32 + 40360

注意: 2K / 4K 超分辨率是在 720P 基础价格之上叠加的(不会与原生 1080P 叠加计费)。t2v / i2v / r2v 共用相同的每秒费率——参考图不计费。

🎉 限时优惠:所有图片生成立减 33%——以下图片价格均已是优惠后价格。

gpt-image-2 — 每张图片积分

分辨率中等质量高质量
1k10154770
2k (默认)233584125
4k4060154230

每个任务生成 1 张图片。提交 N 个任务即可获得 N 个变体。失败任务将自动退还积分。

nano-banana-2 与 nano-banana-pro — 每张图片积分

分辨率nano-banana-2nano-banana-pro
1k20304060
2k (默认)30454060
4k477074110

每个任务生成 1 张图片。提交 N 个任务即可获得 N 个变体。失败任务将自动退还积分。

Seedream 5.0 — 每张图片积分

模型 / 档位积分
Lite 2k / 4k(统一价)710
Pro 1k (默认)1015
Pro 2k2030

每个任务生成 1 张图片。提交 N 个任务即可获得 N 个变体。失败任务将自动退还积分。 参考图不单独计费。

查询余额:GET /api/v1/account/credits

身份验证

所有 API 请求都需要在 Authorization 请求头中携带 Bearer token。你可以在账户设置中创建和管理 API 密钥。

curl -H "Authorization: Bearer YOUR_API_KEY" \
  https://seegen.ai/api/v1/account/credits

重要提示: API 密钥仅在创建时显示一次,请妥善保存。每个账户最多可创建 10 个 API 密钥。

快速开始

两步生成视频:创建任务,然后轮询获取结果。

# 1. Create a text-to-video task
TASK_ID=$(curl -s -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "sd2",
    "inputs": {
      "prompt": "A golden retriever running on the beach at sunset",
      "duration": "5s",
      "resolution": "1280x720"
    }
  }' \
  https://seegen.ai/api/v1/jobs/createTask | jq -r '.taskId')

echo "Task created: $TASK_ID"

# 2. Poll for result
while true; do
  RESULT=$(curl -s -H "Authorization: Bearer $API_KEY" \
    "https://seegen.ai/api/v1/jobs/queryTask?taskId=$TASK_ID")
  STATUS=$(echo $RESULT | jq -r '.status')
  echo "Status: $STATUS"
  if [ "$STATUS" = "COMPLETED" ] || [ "$STATUS" = "FAILED" ]; then
    echo $RESULT | jq .
    break
  fi
  sleep 5
done

接口

POST/api/v1/jobs/createTask

创建新的视频生成任务

GET/api/v1/jobs/queryTask

查询任务状态和结果

GET/api/v1/account/credits

查询积分余额

POST/api/v1/assets/upload

上传素材(图片/视频/音频)以供审核

GET/api/v1/assets/status

查询素材审核状态

GET/api/v1/assets/list

列出已上传的素材

POST/api/v1/upscale/create

提交独立的视频超分辨率任务(720p / 1080p / 2K / 4K)

GET/api/v1/upscale/query

轮询独立超分辨率任务的状态和结果

选择模型(视频)

有两大模型系列可生成视频。请根据模式和价格进行选择;结合价格部分估算费用。

模型T2VI2V首尾帧多参考R2V原生 1080p原生 4K音频720p / 5秒
sd2.5超分300 积分
sd2200 积分
sd2-fast超分超分160 积分
sd2-mini超分超分100 积分
happyhorse超分160 积分

T2V = 文生视频 · I2V = 图生视频(首帧)· First–Last = 首帧 + 尾帧关键帧 · Multi-Ref = 混合图像/视频/音频参考 · R2V = 1–9 张带角色标记的参考图

Seedance 2.0 / 2.0 Fast / 2.0 Mini / Seedance 2.5

文生视频

根据文本提示词生成视频,无需提供图像。

curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "sd2",
    "inputs": {
      "prompt": "A futuristic city with flying cars at night, neon lights reflecting on wet streets",
      "duration": "5s",
      "resolution": "1280x720"
    }
  }' \
  https://seegen.ai/api/v1/jobs/createTask
参数类型必填描述
promptstring对要生成视频的文字描述。最多 20000 字符。
durationstring视频时长:"4s" 到 "15s";sd2.5 最长支持 "30s"(默认:"5s")
resolutionstring通过分辨率指定宽高比。可选值:auto(默认)、720x720、720x960、960x720、1280x720、720x1280、1280x540
outputResolutionstring输出分辨率档位:"480p"、"720p"(默认)、"1080p"、"2k" 或 "4k"。各模型的原生分辨率不同:Seedance 2.0 Pro:480p/720p/1080p/4k;Seedance 2.0 Fast & Mini:480p/720p;Seedance 2.5:480p/720p/1080p。更高档位会自动超分。
seedint可复现性种子:-1 或省略表示随机;0–2147483647 表示固定值。
generateAudioboolean是否合成同步音轨。默认为 true;传入 false 则生成无声视频。

图生视频

将静态图像转化为动态视频。提供一个图像 URL 作为起始帧。

curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "sd2",
    "inputs": {
      "urls": ["https://example.com/photo.jpg"],  // or "asset://asset-20260326-abc123"
      "prompt": "The woman slowly turns her head and smiles",
      "duration": "5s"
    }
  }' \
  https://seegen.ai/api/v1/jobs/createTask
参数类型必填描述
urlsstring[]包含一个图像 URL(源帧)的数组。支持 HTTP URL 和资源引用(例如 "asset://asset-20260326-abc123")
promptstring对期望动作效果的文字描述
durationstring视频时长:"4s" 到 "15s";sd2.5 最长支持 "30s"(默认:"5s")
outputResolutionstring输出分辨率档位:"480p"、"720p"(默认)、"1080p"、"2k" 或 "4k"。各模型的原生分辨率不同:Seedance 2.0 Pro:480p/720p/1080p/4k;Seedance 2.0 Fast & Mini:480p/720p;Seedance 2.5:480p/720p/1080p。更高档位会自动超分。
seedint可复现性种子:-1 或省略表示随机;0–2147483647 表示固定值。
generateAudioboolean是否合成同步音轨。默认为 true;传入 false 则生成无声视频。

首尾帧

定义起始帧和结束帧,模型会生成两者之间的过渡动画。使用 videoInputMode: "keyframe"

curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "sd2",
    "inputs": {
      "urls": [
        "https://example.com/first-frame.jpg",
        "https://example.com/last-frame.jpg"
      ],
      "prompt": "Smooth camera transition from day to night",
      "duration": "5s",
      "videoInputMode": "keyframe"
    }
  }' \
  https://seegen.ai/api/v1/jobs/createTask
参数类型必填描述
urlsstring[]包含恰好 2 个图像 URL 的数组:[首帧, 尾帧]。支持 HTTP URL 和资源引用(例如 "asset://asset-20260326-abc123")
videoInputModestring必须为 "keyframe"
promptstring指导过渡效果的文字描述
durationstring视频时长:"4s" 到 "15s";sd2.5 最长支持 "30s"(默认:"5s")
outputResolutionstring输出分辨率档位:"480p"、"720p"(默认)、"1080p"、"2k" 或 "4k"。各模型的原生分辨率不同:Seedance 2.0 Pro:480p/720p/1080p/4k;Seedance 2.0 Fast & Mini:480p/720p;Seedance 2.5:480p/720p/1080p。更高档位会自动超分。
seedint可复现性种子:-1 或省略表示随机;0–2147483647 表示固定值。
generateAudioboolean是否合成同步音轨。默认为 true;传入 false 则生成无声视频。

多参考

使用多个参考图像、视频和音频文件来指导生成。使用 videoInputMode: "reference"。对于 sd2.5,这是默认的参考子任务;如需编辑或续写已有视频,请参见下方的 Video Edit & Extend。

curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "sd2",
    "inputs": {
      "urls": [
        "https://example.com/ref1.jpg",
        "https://example.com/ref2.jpg"
      ],
      "videoUrls": ["asset://asset-motion-video"],
      "audioUrls": ["https://example.com/audio.mp3"],
      "prompt": "Character walks through a garden",
      "duration": "5s",
      "videoInputMode": "reference",
      "resolution": "1280x720"
    }
  }' \
  https://seegen.ai/api/v1/jobs/createTask
参数类型必填描述
urlsstring[]参考图像 URL(最多 9 张)。支持 HTTP URL 和资源引用(例如 "asset://asset-20260326-abc123")
videoUrlsstring[]参考视频的 asset:// URI —— 需先通过 /api/v1/assets/upload 上传;不接受外部 URL。sd2:最多 3 个视频,每个 ≤15 秒。sd2.5:最多 10 个视频,每个 2–30 秒且 ≤200MB,参考总时长 ≤30 秒,支持 480p–4K 输入。
audioUrlsstring[]参考音频输入。sd2 / sd2-fast / sd2-mini:最多 3 个音频文件,每个 2–15 秒,总时长 ≤15 秒——这些模型上音频不能作为唯一参考(需至少添加一张图像或一个视频)。sd2.5:最多 10 个文件,每个 ≤15MB 且 2–30 秒,总时长 ≤30 秒,且支持纯音频输入。
videoInputModestring必须为 "reference"
promptstring文字描述
durationstring视频时长:"4s" 到 "15s";sd2.5 最长支持 "30s"(默认:"5s")
resolutionstring参考模式下必填。可选值:720x720、720x960、960x720、1280x720、720x1280、1280x540
outputResolutionstring输出分辨率档位:"480p"、"720p"(默认)、"1080p"、"2k" 或 "4k"。各模型的原生分辨率不同:Seedance 2.0 Pro:480p/720p/1080p/4k;Seedance 2.0 Fast & Mini:480p/720p;Seedance 2.5:480p/720p/1080p。更高档位会自动超分。
seedint可复现性种子:-1 或省略表示随机;0–2147483647 表示固定值。
generateAudioboolean是否合成同步音轨。默认为 true;传入 false 则生成无声视频。

参考约束

  • 最多 9 张图像、3 个视频、3 个音频文件
  • 所有类型合计最多 12 个文件
  • 每个视频/音频文件必须 ≤ 15 秒
  • 图像最短边至少为 400px
  • sd2.5:最多 30 张图片、10 个视频、10 个音频文件,总计 50 个;视频与音频总时长均 ≤ 30 秒

视频编辑与延展

sd2.5 将基于参考的生成拆分为三个子任务。省略 mode 表示普通参考生成,设置 mode: "edit" 可编辑现有视频,设置 mode: "extend" 可延续视频。两者都需要在 videoUrls 中至少包含一个视频,且始终输出与源视频相同的宽高比。

将要操作的视频放在 videoUrls第一位,并在提示词中将其称为“Video 1”。edit 会强制输出时长匹配该第一个(源)视频,其时长必须为 4–30 秒,因此你发送的任何 duration 都会被忽略;计费以源视频时长作为输出时长,并加上所有参考视频作为输入。extend 接受按顺序拼接的 1–3 个片段,你请求的 duration 是本次生成的输出时长(与源时长无关)——按普通参考生成计费。

2.0 系列模型(sd2 / sd2-fast / sd2-mini)也支持 mode: "edit"mode: "extend":它们会根据你的提示词推断操作(需明确描述编辑或延续内容),宽高比跟随源视频,duration 仍由你自行控制并按普通方式计费。

curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "sd2.5",
    "inputs": {
      "mode": "edit",
      "videoUrls": ["asset://asset-source-video"],
      "urls": ["https://example.com/annotation-at-1.2s.png"],
      "source_frame_timestamps_ms": [1200],
      "prompt": "Replace the marked object with a red umbrella",
      "outputResolution": "720p"
    }
  }' \
  https://seegen.ai/api/v1/jobs/createTask
参数类型必填描述
modestring“edit”或“extend”。普通参考生成时省略。
videoUrlsstring[]至少一个视频;第一个为源视频(“Video 1”)——编辑输出时长和计费均以它为准。之后的视频为额外参考(edit)或按顺序拼接的更多片段(extend,最多 3 个)。
urlsstring[]可选的标注/参考图片。
source_frame_timestamps_msnumber[]仅限 mode 为“edit”时使用。urls 中每张图片对应一个非负的源视频毫秒时间戳。
outputResolutionstring输出分辨率档位:"480p"、"720p"(默认)、"1080p"、"2k" 或 "4k"。各模型的原生分辨率不同:Seedance 2.0 Pro:480p/720p/1080p/4k;Seedance 2.0 Fast & Mini:480p/720p;Seedance 2.5:480p/720p/1080p。更高档位会自动超分。

Seedance 参数参考

sd2 / sd2-fast / sd2-mini / sd2.5 模型全部 inputs 参数的完整参考。

参数类型必填描述
promptstring文字描述(文生视频必填,其他模式可选)。最多 20000 字符。
urlsstring[]图片 URL。同时支持 HTTP URL 和素材引用(例如 “asset://asset-20260326-abc123”)。内部映射为 uploadedUrls。
videoUrlsstring[]视频参考 asset:// URI(仅参考模式)。必须先通过 /api/v1/assets/upload 上传——外部 URL 将被拒绝。
audioUrlsstring[]音频参考 URL(仅参考模式)。sd2.5 支持纯音频输入;sd2 / sd2-fast / sd2-mini 需要在音频之外至少附带一张图片或一个视频。
durationstring通常为 “4s” 至 “15s”;sd2.5 最长支持 “30s”。默认值:“5s”
resolutionstring宽高比:auto(默认)| 720x720 | 720x960 | 960x720 | 1280x720 | 720x1280 | 1280x540
outputResolutionstring输出分辨率档位:"480p"、"720p"(默认)、"1080p"、"2k" 或 "4k"。各模型的原生分辨率不同:Seedance 2.0 Pro:480p/720p/1080p/4k;Seedance 2.0 Fast & Mini:480p/720p;Seedance 2.5:480p/720p/1080p。更高档位会自动超分。
videoInputModestring“keyframe”(默认)或 “reference”
modestring参考模式子任务(所有 Seedance 模型):省略表示普通参考生成,“edit”表示编辑 videoUrls 中的第一个视频,“extend”表示延续 1-3 个片段。详见视频编辑与延展。
source_frame_timestamps_msnumber[]仅限 sd2.5 视频编辑:每张标注图片对应一个非负的毫秒时间戳。
seedint用于结果复现的随机种子。填 -1 或省略表示服务器随机。相同种子加相同输入会得到高度接近的结果(因 GPU 的非确定性,并非逐位相同)。取值范围:-1 至 2147483647。
generateAudioboolean是否合成与视频同步的音轨(语音、音效、背景音乐)。默认 true。设为 false 可生成无声视频——速度稍快,适合计划另行配音的场景。
bitrateModestring同一分辨率下的输出码率档位:“standard”(默认)或 “high”。“high”能保留更多细节并减少色带/块状瑕疵,文件体积约为 3-5 倍——不会改变分辨率或价格。
upscaleResolutionstring(已弃用)旧版拆分字段,仍保留以兼容旧版本。新接入应使用 outputResolution,现已可直接传入 “2k” / “4k”。若两者同时传入,upscaleResolution 优先——但在原生支持 1080p 的模型上(Seedance2 Pro / Seedance 2.5),upscaleResolution:“1080p” 会解析为原生 1080p(按原生费率计费)。

顶层请求字段:model(必填)、inputs(必填)、callBackUrl(可选 webhook URL)。

素材

素材是图片、视频和音频文件,在用于视频生成任务前需经过审核流程。上传素材、等待其变为 ACTIVE 状态,然后在任务中使用其 asset:// URL。

注意: 真人图片和视频素材需要经过官方审核,通常在数秒内完成。审核通过后即可直接用作参考。未经审核可能导致生成失败。

上传素材

有两种上传方式:直接发送本地文件(multipart/form-data),或提交可公开访问的 HTTPS URL。无论哪种方式,素材都会自动处理和审核。

方式 A — 直接上传文件(multipart/form-data)

发送本地文件,无需图床。媒体类型通过文件字节检测(不信任文件名后缀)。允许类型:图片(jpg/png/webp/gif/bmp/tiff/heic)、视频(mp4/mov)、音频(wav/mp3)。每个文件最大 50MB(图片 ≤30MB,视频 ≤50MB,音频 ≤15MB)。

curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -F "file=@/path/to/photo.jpg" \
  -F "name=my-photo" \
  https://seegen.ai/api/v1/assets/upload
参数类型必填描述
filefile本地文件(multipart 表单字段)。媒体类型通过内容检测。
namestring素材名称(最多 64 个字符)

方式 B — 通过 URL(application/json)

适用于文件已托管在可公开访问的 HTTPS URL 上的情况。

curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com/photo.jpg",
    "type": "IMAGE",
    "name": "my-photo"
  }' \
  https://seegen.ai/api/v1/assets/upload
参数类型必填描述
urlstring要上传文件的公开可访问 HTTPS URL
typestring"IMAGE"、"AUDIO" 或 "VIDEO"
namestring素材名称(最多 64 个字符)

上传响应

{
  "assetId": 123,
  "volcAssetId": "asset-20260326-abc123",
  "type": "IMAGE",
  "status": "PROCESSING",
  "failReason": null,
  "url": "https://example.com/photo.jpg",
  "name": "my-photo",
  "createdAt": 1711234567890
}

查询素材状态

轮询素材的审核状态。当状态为 PROCESSING 时,该接口会自动检查审核系统的最新结果。

# Query by asset ID (numeric)
curl -H "Authorization: Bearer $API_KEY" \
  "https://seegen.ai/api/v1/assets/status?assetId=123"

# Query by volcAssetId (string)
curl -H "Authorization: Bearer $API_KEY" \
  "https://seegen.ai/api/v1/assets/status?assetId=asset-20260326-abc123"

素材状态值

  • PROCESSING审核中,尚不可用
  • ACTIVE审核通过,可用于任务
  • FAILED审核失败,请查看 failReason

获取素材列表

列出你已上传的素材,可按类型和状态筛选,支持基于游标的分页。

# List all assets
curl -H "Authorization: Bearer $API_KEY" \
  "https://seegen.ai/api/v1/assets/list"

# Filter by type and status
curl -H "Authorization: Bearer $API_KEY" \
  "https://seegen.ai/api/v1/assets/list?type=IMAGE&status=ACTIVE&limit=10"

# Paginate with cursor
curl -H "Authorization: Bearer $API_KEY" \
  "https://seegen.ai/api/v1/assets/list?cursor=100&limit=20"
参数类型必填描述
typestring按类型筛选:"IMAGE"、"AUDIO" 或 "VIDEO"
statusstring按状态筛选:"NONE"、"PROCESSING"、"ACTIVE" 或 "FAILED"
cursornumber分页游标(使用上一次响应中的 nextCursor)
limitnumber每页条数,1-50(默认:20)

列表响应

{
  "items": [
    {
      "assetId": 123,
      "volcAssetId": "asset-20260326-abc123",
      "type": "IMAGE",
      "status": "ACTIVE",
      "failReason": null,
      "url": "https://example.com/photo.jpg",
      "name": "my-photo",
      "width": 1920,
      "height": 1080,
      "size": 245000,
      "duration": null,
      "createdAt": 1711234567890
    }
  ],
  "nextCursor": 122
}

在任务中使用素材

素材状态变为 ACTIVE 后,即可在任务 URL 中使用其 volcAssetId 配合 asset:// 协议:

{
  "model": "sd2",
  "inputs": {
    "urls": ["asset://asset-20260326-abc123"],
    "prompt": "The person slowly looks up and smiles",
    "duration": "5s"
  }
}

HappyHorse 1.1(阿里巴巴)

来自阿里巴巴 DashScope 的备选视频生成模型。支持三种模式:文生视频、首帧图生视频,以及参考图生视频(每次提示词可融合 1–9 张参考图;在提示词中用 character1character2、… 指代主体)。HappyHorse 1.1 支持尾帧、参考视频或参考音频。模型名称:happyhorse

无需素材审核 —— 你可以直接使用公开的 HTTPS 图片 URL,或传入素材库中的 asset:// 引用(会自动解析回原始 R2 URL)。

文生视频

curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "happyhorse",
    "inputs": {
      "prompt": "A panda DJ at a beach party, smoky sunset",
      "duration": "5s",
      "outputResolution": "720p",
      "ratio": "16:9"
    }
  }' \
  https://seegen.ai/api/v1/jobs/createTask

图生视频(首帧)

curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "happyhorse",
    "inputs": {
      "urls": ["https://example.com/panda.jpg"],
      "prompt": "The panda blinks and smiles",
      "duration": "5s",
      "outputResolution": "1080p"
    }
  }' \
  https://seegen.ai/api/v1/jobs/createTask

参考图生视频(1–9 张参考图)

传入 videoWorkflowTab: "multi-reference" 并附上 1–9 张参考图 URL,即可将多个主体融合到同一个输出中。在提示词中用 character1character2、… 指代每张图(与 urls 顺序对应)。画面比例由 ratio 字段控制(没有首帧可供推断)。

curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "happyhorse",
    "inputs": {
      "videoWorkflowTab": "multi-reference",
      "urls": [
        "https://example.com/character.jpg",
        "https://example.com/folding-fan.jpg",
        "https://example.com/earrings.jpg"
      ],
      "prompt": "A woman in red character1 opening folding fan character2, with tassel earrings character3 swinging",
      "duration": "5s",
      "outputResolution": "720p",
      "ratio": "16:9"
    }
  }' \
  https://seegen.ai/api/v1/jobs/createTask

HappyHorse 参数参考

happyhorse 模型全部 inputs 参数的完整参考。

参数类型必填描述
promptstring文本描述。文生视频和参考图生视频为必填;图生视频为选填。非中日韩字符最多 5000 个,或中日韩字符最多 2500 个(超出部分上游会自动截断)。在 r2v 中用 character1/character2/… 指代第 N 张参考图。
urlsstring[]t2v:省略。i2v:恰好 1 个 URL(作为首帧使用)。r2v:1–9 个 URL。支持公开 HTTPS URL 和素材引用(如 "asset://asset-20260326-abc123")。
videoWorkflowTabstring设为 "multi-reference" 以启用参考图生视频模式(必须搭配 1 个及以上 URL)。文生视频/图生视频时省略。
durationstring"3s" 到 "15s"(默认 "5s")。
outputResolutionstring"720p"(默认)或 "1080p"。
ratiostring"16:9" / "9:16" / "1:1" / "4:3" / "3:4"。用于文生视频和参考图生视频 —— 图生视频的画面比例由首帧推断。
seedint0 到 2147483647。留空则使用随机种子。

图片要求(i2v / r2v)

  • 短边 ≥ 300px
  • 宽高比介于 1:2.5 到 2.5:1 之间
  • 格式:JPEG、JPG、PNG、BMP、WEBP
  • 单张图片最大 10MB(r2v:1–9 张输入图片均需满足)

选择模型(图片)

图像模型接收一个 prompt(可选附带参考图)并为每个任务返回一张图片。每次请求按所选模型的档位计费(Seedream Lite 为固定费率)。失败的任务会自动退款。没有批量参数——如需生成多张变体,请为每张图片单独调用一次 createTask

模型T2II2I(编辑)多参考最大分辨率2k / medium
gpt-image-2最多 10 张4k查看定价
nano-banana-2最多 10 张4k查看定价
nano-banana-pro最多 10 张4k查看定价
seedream-v5.0-lite最多 10 张4k固定费率
seedream-v5.0-pro最多 10 张2k查看定价

GPT Image 2

OpenAI 的 GPT Image 2 模型,用于高质量的文生图和图生图编辑。同一套工作流同时支持两种模式——传入 urls 即可自动切换到编辑模式。输出内容会以你请求的格式(PNG / JPEG / WEBP)通过 R2 交付。模型名称:gpt-image-2

文生图

curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-image-2",
    "inputs": {
      "prompt": "A neon-lit cyberpunk alley at midnight, photoreal",
      "quality": "medium",
      "resolution": "2k",
      "aspectRatio": "16:9"
    }
  }' \
  https://seegen.ai/api/v1/jobs/createTask

图生图(编辑)

通过 urls 传入 1–10 张参考图。模型会将它们作为视觉上下文,用于 prompt 中描述的编辑。

curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-image-2",
    "inputs": {
      "urls": ["https://example.com/portrait.jpg"],
      "prompt": "Restyle as oil painting",
      "quality": "medium",
      "resolution": "1k",
      "aspectRatio": "1:1"
    }
  }' \
  https://seegen.ai/api/v1/jobs/createTask

GPT Image 2 参数参考

gpt-image-2 模型全部 inputs 参数的完整参考。

参数类型必填描述
promptstring要生成的图像的文字描述;若提供了 urls,则为要应用的编辑说明。
urlsstring[]图生图(编辑)模式的参考图 URL(1–10 张)。文生图模式下省略此项。仅接受公开的 HTTPS URL。
qualitystring"medium" / "high"。默认值:"medium"。积分消耗按档位递增(详见定价)。
resolutionstring"1k" / "2k" / "4k"。默认值:"2k"。积分消耗按档位递增(详见定价)。
aspectRatiostring"1:1" / "16:9" / "9:16" / "4:3" / "3:4"。默认值:"1:1"。
outputFormatstring"png" / "jpeg" / "webp"。默认值:"png"。

输入图像要求(图生图模式)

  • 每个任务最多 10 张参考图
  • 单张图片最大文件大小 50 MB
  • 最短边 ≥ 256px
  • 宽高比需介于 1:3 与 3:1 之间
  • 支持格式:JPEG、JPG、PNG、WEBP

每张图片的积分消耗随分辨率和质量档位变化——完整对照表参见 定价 部分。

Nano Banana 2

Nano Banana 2 是一款高保真图像模型,宽高比覆盖范围比 gpt-image-2 更广——新增竖屏/横屏预设(3:2、2:3、4:5、5:4)以及电影感的 21:9。同一套工作流同时支持两种模式——传入 urls 即可自动切换到编辑模式。模型名称:nano-banana-2

文生图

curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "nano-banana-2",
    "inputs": {
      "prompt": "A neon-lit cyberpunk alley at midnight, photoreal",
      "resolution": "2k",
      "aspectRatio": "16:9"
    }
  }' \
  https://seegen.ai/api/v1/jobs/createTask

图生图(编辑)

通过 urls 传入 1–10 张参考图。模型会将它们作为视觉上下文,用于 prompt 中描述的编辑。

curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "nano-banana-2",
    "inputs": {
      "urls": ["https://example.com/portrait.jpg"],
      "prompt": "Restyle as oil painting",
      "resolution": "2k",
      "aspectRatio": "1:1"
    }
  }' \
  https://seegen.ai/api/v1/jobs/createTask

Nano Banana 2 参数参考

nano-banana-2 模型全部 inputs 参数的完整参考。

参数类型必填描述
promptstring要生成的图像的文字描述;若提供了 urls,则为要应用的编辑说明。
urlsstring[]图生图(编辑)模式的参考图 URL(1–10 张)。文生图模式下省略此项。仅接受公开的 HTTPS URL。
resolutionstring"1k" / "2k" / "4k"。默认值:"2k"。积分消耗按档位递增(详见定价)。
aspectRatiostring"1:1" / "16:9" / "9:16" / "4:3" / "3:4" / "3:2" / "2:3" / "4:5" / "5:4" / "21:9"。默认值:"1:1"。

输入图像要求(图生图模式)

  • 每个任务最多 10 张参考图
  • 单张图片最大文件大小 50 MB
  • 最短边 ≥ 256px
  • 宽高比需介于 1:3 与 3:1 之间
  • 支持格式:JPEG、JPG、PNG、WEBP

每张图片的积分消耗随分辨率变化——完整对照表参见 定价 部分。

Nano Banana Pro

Nano Banana Pro 是一款高保真图像模型,宽高比覆盖范围比 gpt-image-2 更广——新增竖屏/横屏预设(3:2、2:3、4:5、5:4)以及电影感的 21:9。同一套工作流同时支持两种模式——传入 urls 即可自动切换到编辑模式。模型名称:nano-banana-pro

文生图

curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "nano-banana-pro",
    "inputs": {
      "prompt": "A neon-lit cyberpunk alley at midnight, photoreal",
      "resolution": "2k",
      "aspectRatio": "16:9"
    }
  }' \
  https://seegen.ai/api/v1/jobs/createTask

图生图(编辑)

通过 urls 传入 1–10 张参考图。模型会将它们作为视觉上下文,用于 prompt 中描述的编辑。

curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "nano-banana-pro",
    "inputs": {
      "urls": ["https://example.com/portrait.jpg"],
      "prompt": "Restyle as oil painting",
      "resolution": "2k",
      "aspectRatio": "1:1"
    }
  }' \
  https://seegen.ai/api/v1/jobs/createTask

Nano Banana Pro 参数参考

nano-banana-pro 模型全部 inputs 参数的完整参考。

参数类型必填描述
promptstring要生成的图像的文字描述;若提供了 urls,则为要应用的编辑说明。
urlsstring[]图生图(编辑)模式的参考图 URL(1–10 张)。文生图模式下省略此项。仅接受公开的 HTTPS URL。
resolutionstring"1k" / "2k" / "4k"。默认值:"2k"。积分消耗按档位递增(详见定价)。
aspectRatiostring"1:1" / "16:9" / "9:16" / "4:3" / "3:4" / "3:2" / "2:3" / "4:5" / "5:4" / "21:9"。默认值:"1:1"。

输入图像要求(图生图模式)

  • 每个任务最多 10 张参考图
  • 单张图片最大文件大小 50 MB
  • 最短边 ≥ 256px
  • 宽高比需介于 1:3 与 3:1 之间
  • 支持格式:JPEG、JPG、PNG、WEBP

每张图片的积分消耗随分辨率变化——完整对照表参见 定价 部分。

Seedream 5.0 Lite

快速文生图与图生图,支持 2K 或 4K 分辨率及 15 种宽高比。模型名称:seedream-v5.0-lite

文生图

curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedream-v5.0-lite",
    "inputs": {
      "prompt": "A cinematic product photograph, soft studio light",
      "resolution": "2k",
      "aspectRatio": "1:1"
    }
  }' \
  https://seegen.ai/api/v1/jobs/createTask

图生图(编辑)

curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedream-v5.0-lite",
    "inputs": {
      "prompt": "Restyle the references as a premium fashion campaign",
      "urls": ["https://example.com/reference.png"],
      "resolution": "4k",
      "aspectRatio": "3:4"
    }
  }' \
  https://seegen.ai/api/v1/jobs/createTask

Seedream 5.0 Lite 参数

参数类型必填描述
promptstring图像描述或编辑指令。
urlsstring[]1–10 个公开的 HTTPS 参考图 URL。文生图模式下省略此项。
resolutionstring"2k" 或 "4k"。默认值:"2k"。
aspectRatiostring"1:1"、"1:2"、"2:1"、"1:3"、"3:1"、"2:3"、"3:2"、"3:4"、"4:3"、"4:5"、"5:4"、"9:16"、"16:9"、"9:21" 或 "21:9"。

Seedream 5.0 Pro

高保真生成与编辑,支持 1K 或 2K 分辨率。模型名称:seedream-v5.0-pro

文生图

curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedream-v5.0-pro",
    "inputs": {
      "prompt": "Editorial portrait with dramatic rim lighting",
      "resolution": "2k",
      "aspectRatio": "3:4"
    }
  }' \
  https://seegen.ai/api/v1/jobs/createTask

图生图(编辑)

curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedream-v5.0-pro",
    "inputs": {
      "prompt": "Turn the reference into a cinematic poster",
      "urls": ["https://example.com/reference.png"],
      "resolution": "2k",
      "aspectRatio": "1:2"
    }
  }' \
  https://seegen.ai/api/v1/jobs/createTask

Seedream 5.0 Pro 参数

参数类型必填描述
promptstring图像描述或编辑指令。
urlsstring[]1–10 个公开的 HTTPS 参考图 URL。文生图模式下省略此项。
resolutionstring"1k" 或 "2k"。默认值:"1k"。不支持 4k。
aspectRatiostring"1:1"、"1:2"、"2:1"、"1:3"、"3:1"、"2:3"、"3:2"、"3:4"、"4:3"、"4:5"、"5:4"、"9:16"、"16:9"、"9:21" 或 "21:9"。

视频超分辨率

创建任务

POST /api/v1/upscale/create

# source.url accepts ANY https video URL — your own CDN, OR a file you first
# uploaded to us via /api/v1/assets/upload (pass the r2Url it returns). No need
# to declare which: we detect it. External URLs are validated; our own are trusted.
curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "source": { "type": "url", "url": "https://your-cdn.com/video.mp4" },
    "targetResolution": "2k",
    "callBackUrl": "https://your-server.com/webhook"
  }' \
  https://seegen.ai/api/v1/upscale/create
参数类型必填描述
source.typestring任意来源使用 "url"。("uploadId" 是为向后兼容保留的旧版别名。)
source.urlstring配合 type="url" 使用。任意 https 视频链接——可以是你自己的 CDN,也可以是 /api/v1/assets/upload 返回的 r2Url。对于外部 URL,http 及私有/内网 IP 会被拒绝(SSRF 防护);我们自有素材主机上的 URL 会跳过该检查。
source.r2Urlstring旧版字段——仅配合 type="uploadId" 使用(向后兼容)。新接入应使用 type="url"。
targetResolutionstring"720p"、"1080p"、"2k" 或 "4k"。必须高于源视频分辨率。
callBackUrlstring任务进入终态(completed 或 failed)时调用一次的 Webhook URL。

创建响应

{
  "taskId": "n770mo4sh6rpi690ff3gwymx",
  "orderId": "ord_2026...",
  "status": "validating"
}

查询状态

GET /api/v1/upscale/query?taskId=...

状态依次为 validatingprocessingcompleted / failed

curl -H "Authorization: Bearer $API_KEY" \
  "https://seegen.ai/api/v1/upscale/query?taskId=n770mo4sh6rpi690ff3gwymx"

已完成响应

{
  "taskId": "n770mo4sh6rpi690ff3gwymx",
  "status": "completed",
  "targetResolution": "2k",
  "creditsConsumed": 900,
  "result": {
    "url": "https://static.seegen.ai/standalone-upscale/results/...mp4",
    "probedDurationSeconds": 30,
    "probedSourceResolution": "1280x720"
  },
  "error": null,
  "createdAt": "2026-04-29T01:23:45.000Z",
  "finishedAt": "2026-04-29T01:35:01.000Z"
}

失败响应

{
  "taskId": "n770mo4sh6rpi690ff3gwymx",
  "status": "failed",
  "creditsConsumed": null,
  "result": null,
  "error": {
    "code": "SOURCE_RESOLUTION_TOO_HIGH",
    "message": "Source 3840x2160 is not below target 4k"
  }
}

限制

  • 来源:https 链接或你此前上传的 R2 URL
  • 时长最长 600 秒(不足 5 秒的片段按 5 秒计费)
  • 文件大小 ≤ 200 MB
  • 格式:MP4 / MOV / WebM
  • 源分辨率必须低于目标分辨率

价格

  • 720P:17 积分/秒(5 秒 = 85,30 秒 = 510)
  • 1080P:25 积分/秒(5 秒 = 125,30 秒 = 750)
  • 2K:38 积分/秒(5 秒 = 190,30 秒 = 1140)
  • 4K:50 积分/秒(5 秒 = 250,30 秒 = 1500)
  • 最低计费 5 秒;失败会自动退还积分

错误代码

以下是可以据此采取行动的常见错误。其他失败会返回含义清晰的 message 字段——在假定错误码属于以下之一前,请先阅读该字段。

代码含义
INVALID_URLURL 格式错误或不是 https
URL_NOT_REACHABLE无法获取该 URL——请检查其是否公开可访问
UNSUPPORTED_MEDIA_TYPE文件不是视频,或不是 MP4 / MOV / WebM 格式
FILE_TOO_LARGE源文件超过 200 MB
DURATION_EXCEEDS_LIMIT源视频时长超过 600 秒
SOURCE_RESOLUTION_TOO_HIGH源分辨率已达到或超过目标分辨率——请选择更高的目标分辨率
INSUFFICIENT_CREDITS积分不足——请充值后重试

Webhook 回调

除了轮询之外,你也可以提供 callBackUrl,在任务完成或失败时自动接收结果。

curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "sd2",
    "callBackUrl": "https://your-server.com/webhook/callback",
    "inputs": {
      "prompt": "A cat playing piano",
      "duration": "5s"
    }
  }' \
  https://seegen.ai/api/v1/jobs/createTask

回调负载

任务完成时,我们会向你的 URL 发送一个 POST 请求,格式与 queryTask 响应相同:

// POST to your callBackUrl
{
  "taskId": "task_abc123",
  "model": "sd2",
  "status": "COMPLETED",
  "creditsUsed": 200,
  "output": [
    {
      "url": "https://static.seegen.ai/videos/result.mp4",
      "width": 1280,
      "height": 720
    }
  ],
  "error": null,
  "createTime": 1711234567890,
  "completeTime": 1711234612345
}

重试策略: 如果你的接口返回非 2xx 状态码,我们会按递增延迟(1 秒、5 秒、30 秒)最多重试 3 次。

响应格式

createTask 响应

// 200 OK
{ "taskId": "task_abc123" }

queryTask 响应

{
  "taskId": "task_abc123",
  "model": "sd2",
  "status": "COMPLETED",     // "PENDING" | "PROCESSING" | "COMPLETED" | "FAILED"
  "creditsUsed": 200,
  "output": [                // null when status is not "COMPLETED"
    {
      "url": "https://static.seegen.ai/videos/result.mp4",
      "width": 1280,
      "height": 720
    }
  ],
  "error": null,             // error message when status is "FAILED"
  "createTime": 1711234567890,
  "completeTime": 1711234612345
}

credits 响应

{
  "credits": 5000,
  "availableCredits": 4800
}

错误处理

状态码含义处理方式
400参数无效检查错误信息并修正请求
401API 密钥无效或缺失检查 Authorization 请求头格式
402积分不足前往 seegen.ai 购买更多积分
403访问被拒绝你只能查询自己的任务
404任务未找到确认 taskId 是否正确
429并发限制(3 个任务)等待现有任务完成
500服务器内部错误几秒后重试

提交前校验(带错误码的 400)

Seedance 请求会先对照上游契约进行校验,再扣除积分。校验失败时,createTask 会返回 HTTP 400 和 { "message": "...", "code": "..." },且不会创建任务。错误信息会明确说明触发了哪条限制、该如何修正。

参数类型必填描述
EMPTY_CONTENTcode既未提供 prompt,也没有参考图片 / 视频 / 音频。
AUDIO_ONLY_NOT_SUPPORTEDcode在 sd2 / sd2-fast / sd2-mini 上,参考素材仅有音频。请添加图片或视频,或改用 sd2.5(支持仅音频)。
DURATION_OUT_OF_RANGEcodeduration 不是模型允许范围内的整数(sd2 系列为 "4s"–"15s",sd2.5 为 "4s"–"30s")。
EDIT_SOURCE_VIDEO_REQUIRED / EXTEND_SOURCE_VIDEO_REQUIREDcode请求了 mode "edit" / "extend",但 videoUrls 中没有视频。
EDIT_SOURCE_DURATION_INVALIDcodesd2.5 Video Edit:请求中某个视频时长短于 4s 或长于 30s(ARK 对 edit 任务中的每个视频都要求 4–30s)。
TOO_MANY_REFERENCEScode参考图片 / 视频 / 音频片段数量超过模型上限(sd2 系列为 9 / 3 / 3,sd2.5 为 30 / 10 / 10;extend ≤3 个视频)。
REFERENCE_VIDEO_DURATION_INVALIDcode某个参考视频超过单条上限(sd2 系列 15s,sd2.5 30s),或参考视频总时长超过上限(15s / 30s)。
ASSET_NOT_FOUND / EXTERNAL_URL / READ_TIMEOUT / READ_FAILEDcodevideoUrls 中的某一项无法解析为你已上传的素材,或无法读取其时长。

完整示例

完整流程:上传素材、等待审核、用审核通过的素材创建任务,并轮询结果。

const API_KEY = process.env.API_KEY;
const BASE = "https://seegen.ai/api/v1";
const headers = {
  "Authorization": `Bearer ${API_KEY}`,
  "Content-Type": "application/json",
};

// 1. Upload asset and wait for review
// (To upload a LOCAL file instead of a URL, POST multipart/form-data with a "file"
//  field — no Content-Type header, no "type" — see the Upload Asset section above.)
async function uploadAndWaitForAsset(url, type = "IMAGE") {
  const res = await fetch(`${BASE}/assets/upload`, {
    method: "POST",
    headers,
    body: JSON.stringify({ url, type }),
  });
  if (!res.ok) throw new Error(`Upload failed: ${(await res.json()).message}`);
  const asset = await res.json();
  console.log(`Asset uploaded: ${asset.assetId}, status: ${asset.status}`);

  // Poll until review completes
  while (true) {
    const statusRes = await fetch(
      `${BASE}/assets/status?assetId=${asset.assetId}`,
      { headers }
    );
    const status = await statusRes.json();
    if (status.status === "ACTIVE") {
      console.log(`Asset approved: asset://${status.volcAssetId}`);
      return status.volcAssetId;
    }
    if (status.status === "FAILED") {
      throw new Error(`Asset review failed: ${status.failReason}`);
    }
    await new Promise((r) => setTimeout(r, 3000));
  }
}

// 2. Create a task
async function createTask(inputs, callBackUrl) {
  const res = await fetch(`${BASE}/jobs/createTask`, {
    method: "POST",
    headers,
    body: JSON.stringify({
      model: "sd2",
      inputs,
      ...(callBackUrl && { callBackUrl }),
    }),
  });
  if (!res.ok) throw new Error(`[${res.status}] ${(await res.json()).message}`);
  return res.json();
}

// 3. Poll until done
async function waitForResult(taskId, timeoutMs = 300000) {
  const start = Date.now();
  while (Date.now() - start < timeoutMs) {
    const res = await fetch(
      `${BASE}/jobs/queryTask?taskId=${taskId}`,
      { headers }
    );
    const result = await res.json();
    if (result.status === "COMPLETED") return result;
    if (result.status === "FAILED") throw new Error(result.error);
    await new Promise((r) => setTimeout(r, 5000));
  }
  throw new Error("Timeout waiting for task");
}

// Full workflow: upload → review → generate → result
async function main() {
  // Upload image and wait for review
  const volcAssetId = await uploadAndWaitForAsset(
    "https://example.com/photo.jpg", "IMAGE"
  );

  // Create task with approved asset
  const { taskId } = await createTask({
    urls: [`asset://${volcAssetId}`],
    prompt: "The person slowly looks up and smiles",
    duration: "5s",
  });
  console.log(`Task: ${taskId}`);

  // Wait for video
  const result = await waitForResult(taskId);
  console.log(`Video: ${result.output[0].url}`);
}

main().catch(console.error);

需要帮助?加入我们的 Discord联系我们