Skip to content

异步视频与 Flow 图片生成 ​

LunAPI 使用异步任务接口生成视频。部分 Flow 图片模型也通过同一接口提交,创建任务后需要轮询结果。

本文示例使用 https://code.ciyuanapi.xyz。code1、code2、code3 节点使用相同协议。

功能方法与路径
查询可用模型GET /v1/models
创建任务POST /v1/videos
查询任务GET /v1/videos/{task_id}
下载结果GET /v1/videos/{task_id}/content

所有请求都需要LunAPI Key:

http
Authorization: Bearer $API_KEY

模型与规格 ​

公开模型名规格参考素材
seedance-2.04-15 秒,720P(火山引擎 Seedance 2.0)支持图片、视频、音频参考素材
seedance-2.0-fast4-15 秒,720P(Seedance 2.0 Fast)支持图片、视频、音频参考素材
seedance-2.0-mini4-15 秒,720P(Seedance 2.0 Mini)支持图片、视频、音频参考素材
seedance-2.54-30 秒,720P(Seedance 2.5)支持图片、视频、音频参考素材
MiniMax-H34-15 秒;768P / 2K 输出图片最多 9 张,前 5 张免费,第 6-9 张加收参考图费;参考视频最多 3 条、合计不超过 15 秒;参考音频最多 3 条免费
veo-3.1-lite / veo-3.1-fast文生 4/6/8 秒;首尾帧 4/6 秒;参考图及续写 8 秒;720p首尾帧 1–2 张图;参考图 1–3 张;横竖屏由参数指定
veo-3.1-quality文生 4/6/8 秒;首尾帧 4/6 秒;续写 8 秒;720p支持首尾帧,不支持多参考图模式
omni-1.1-flash4/6/8/10 秒,720p最多 3 张参考图;不支持精确尾帧、视频编辑与续写
nano-banana-pro-flow按次生成图片支持最多 8 张参考图,返回图片
nano-banana-2-flow按次生成图片支持最多 8 张参考图,返回图片

价格按请求参数与模型实际用量计算,以控制台展示为准。分组倍率、订阅或活动折扣会按账户实际规则应用。

Seedance(火山引擎官方) ​

Seedance 2.0 / 2.0 Fast / 2.0 Mini / 2.5 由火山引擎官方任务接口提供,仅支持 720p 输出。费用按任务实际 Token 消耗结算:创建时预扣,任务成功后按上游实际用量二次结算,多退少补。

文生视频 ​

bash
curl https://code.ciyuanapi.xyz/v1/videos \
  -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: seedance-001" \
  -d '{
    "model": "seedance-2.0",
    "prompt": "cinematic product commercial, smooth camera movement",
    "duration": 6,
    "resolution": "720p",
    "aspect_ratio": "16:9"
  }'
字段类型必填说明
modelstring是seedance-2.0、seedance-2.0-fast、seedance-2.0-mini 或 seedance-2.5
promptstring是视频描述
durationinteger否seedance-2.0 / 2.0-fast / 2.0-mini 支持 4-15,seedance-2.5 支持 4-30;默认 4
resolutionstring否仅 720p;填其他值会返回 invalid_resolution
aspect_ratiostring否16:9、9:16、1:1、21:9、4:3、3:4,默认 16:9
seedinteger否随机种子,原样传给生成服务
generate_audioboolean否是否生成音频,由模型能力决定
watermarkboolean否水印设置,由模型能力决定

参考素材:支持图片(参考图 / 首帧 / 尾帧)、参考视频、参考音频,通过公网 URL 传入;使用首尾帧时图片总数最多 2 张且不能同时传参考视频。计费按是否携带参考视频分为"文生视频"与"含视频输入"两档。

携带参考素材 ​

bash
curl https://code.ciyuanapi.xyz/v1/videos \
  -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: seedance-ref-001" \
  -d '{
    "model": "seedance-2.0-fast",
    "prompt": "Use the references to create a cinematic scene",
    "duration": 8,
    "resolution": "720p",
    "aspect_ratio": "9:16",
    "content": [
      {"type": "image_url", "image_url": {"url": "https://cdn.example.com/character.jpg"}, "role": "reference_image"},
      {"type": "video_url", "video_url": {"url": "https://cdn.example.com/camera.mp4"}, "role": "reference_video"},
      {"type": "audio_url", "audio_url": {"url": "https://cdn.example.com/music.mp3"}, "role": "reference_audio"}
    ]
  }'

首尾帧示例:

bash
curl https://code.ciyuanapi.xyz/v1/videos \
  -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: seedance-fl-001" \
  -d '{
    "model": "seedance-2.0",
    "prompt": "从清晨平滑过渡到夜晚",
    "duration": 8,
    "resolution": "720p",
    "content": [
      {"type": "image_url", "image_url": {"url": "https://cdn.example.com/first.jpg"}, "role": "first_frame"},
      {"type": "image_url", "image_url": {"url": "https://cdn.example.com/last.jpg"}, "role": "last_frame"}
    ]
  }'

素材条目字段:type 为 image_url / video_url / audio_url,image_url / video_url / audio_url 内为 {"url": "公网地址"},role 取值 reference_image / first_frame / last_frame / reference_video / reference_audio。

MiniMax H3 ​

MiniMax H3 支持 4-15 秒、768P/2K 输出以及图片、视频、音频参考素材。resolution 决定输出视频和参考视频的规格档位。

文生视频 ​

bash
curl https://code.ciyuanapi.xyz/v1/videos \
  -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: h3-text-001" \
  -d '{
    "model": "MiniMax-H3",
    "prompt": "雨夜城市街道,电影感镜头缓慢向前推进",
    "duration": 8,
    "resolution": "768P",
    "aspect_ratio": "16:9"
  }'

多素材生成 ​

参考视频必须同时提供对应的实际时长,数组顺序一一对应:

bash
curl https://code.ciyuanapi.xyz/v1/videos \
  -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: h3-reference-001" \
  -d '{
    "model": "MiniMax-H3",
    "prompt": "参考图片中的角色,采用参考视频的运镜并配合参考音频节奏",
    "duration": 10,
    "resolution": "2K",
    "aspect_ratio": "16:9",
    "reference_image_urls": [
      "https://cdn.example.com/character-1.jpg",
      "https://cdn.example.com/character-2.jpg"
    ],
    "reference_videos": [
      "https://cdn.example.com/camera.mp4"
    ],
    "reference_video_durations": [5.5],
    "reference_audios": [
      "https://cdn.example.com/music.mp3"
    ]
  }'
字段类型必填说明
modelstring是MiniMax-H3
promptstring是视频描述
durationinteger否4-15,默认 4
resolutionstring否768P 或 2K,默认 768P
aspect_ratiostring否例如 16:9、9:16;默认自适应
reference_image_urlsstring[]否最多 9 张
reference_videosstring[]否最多 3 条,总时长不超过 15 秒
reference_video_durationsnumber[]条件必填有参考视频时必填,单位秒,顺序必须与 reference_videos 一致
reference_audiosstring[]否最多 3 条,免费

VEO 3.1 ​

使用 veo-3.1-lite、veo-3.1-fast 或 veo-3.1-quality,时长、横竖屏和生成模式由请求参数自动匹配,模型名无需添加后缀。

模型文生视频首帧 / 首尾帧多参考图视频续写
veo-3.1-lite4、6、8 秒4、6 秒,1–2 张图8 秒,1–3 张图8 秒
veo-3.1-fast4、6、8 秒4、6 秒,1–2 张图8 秒,1–3 张图8 秒
veo-3.1-quality4、6、8 秒4、6 秒,1–2 张图不支持8 秒

当前仅支持 720p。aspect_ratio: "16:9" 为横屏,"9:16" 为竖屏;未填写时默认横屏。模型可用性与价格以模型广场和令牌所属分组为准。

请求参数 ​

提交到 POST /v1/videos,使用你的 LunAPI 令牌鉴权。

参数说明
model上表中的基础模型名,必填
prompt视频描述,必填
seconds时长,也支持 duration;须符合当前模式支持的时长
aspect_ratio16:9 横屏或 9:16 竖屏
resolution仅支持 720p
size可选,横屏 1280x720、竖屏 720x1280;须与比例一致
input_reference / first_frame首帧图片地址,自动选择首帧模式
last_frame尾帧图片地址,须与首帧一起提供
reference_images参考图片地址数组,自动选择多参考图模式
content兼容图片数组,image_url 的 role 可为 first_frame、last_frame、reference_image
source_task_id已完成的来源视频任务 ID,自动选择续写模式

图片支持可公开下载的 PNG、JPEG、WebP URL 或 Base64 data URL,单张最多 20 MiB。首尾帧和多参考图两种输入不可混用。每个任务生成一段视频。当前不接受 generate_audio、watermark、seed、negative_prompt 参数。

文生视频 ​

bash
curl https://code.ciyuanapi.xyz/v1/videos \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "veo-3.1-fast",
    "prompt": "夜晚街边店铺,人物走入暖色灯光下的画面,固定镜头",
    "seconds": 8,
    "aspect_ratio": "9:16",
    "resolution": "720p"
  }'

首帧与首尾帧 ​

以下 JSON 同样提交到 POST /v1/videos。只需首帧时,省略 last_frame;图片地址请替换为真实素材。

json
{
  "model": "veo-3.1-fast",
  "prompt": "从首帧自然过渡到尾帧,保持人物与场景一致",
  "seconds": 4,
  "aspect_ratio": "9:16",
  "first_frame": "https://example.com/first.png",
  "last_frame": "https://example.com/last.png"
}

也可通过 multipart 上传,首尾帧字段仍为 input_reference / first_frame 和 last_frame:

bash
curl https://code.ciyuanapi.xyz/v1/videos \
  -H "Authorization: Bearer $API_KEY" \
  -F 'model=veo-3.1-fast' \
  -F 'prompt=让人物自然转身,保持服装和背景一致' \
  -F 'seconds=4' \
  -F 'aspect_ratio=9:16' \
  -F 'input_reference=@first.png;type=image/png' \
  -F 'last_frame=@last.png;type=image/png'

多参考图 ​

使用 reference_images 自动选择参考图模式,仅 Lite / Fast 支持,固定 8 秒、最多 3 张图片。

json
{
  "model": "veo-3.1-lite",
  "prompt": "融合参考图片中的人物、包包与场景,制作自然的产品展示视频",
  "seconds": 8,
  "aspect_ratio": "16:9",
  "reference_images": [
    "https://example.com/person.png",
    "https://example.com/product.png",
    "https://example.com/scene.png"
  ]
}

视频续写 ​

填写属于当前用户、支持续写的已完成视频任务 ID,返回新的 8 秒片段,不会自动与源视频拼接。续写时不附带图片,来源任务的生成渠道需要仍然可用。

json
{
  "model": "veo-3.1-fast",
  "prompt": "延续前一段画面,人物继续向前走,保持镜头和环境一致",
  "source_task_id": "task_xxxxxxxxx",
  "seconds": 8,
  "aspect_ratio": "16:9"
}

Omni 1.1 Flash ​

模型名为 omni-1.1-flash,支持 4、6、8、10 秒,仅 720p,横竖屏仍由 aspect_ratio 指定。支持文生视频或最多 3 张参考图片,不支持精确尾帧约束、视频编辑与续写。

json
{
  "model": "omni-1.1-flash",
  "prompt": "阳光下的海边,一只小狗沿着沙滩奔跑",
  "seconds": 6,
  "aspect_ratio": "9:16",
  "reference_images": ["https://example.com/dog.png"]
}

不使用参考图时省略 reference_images 即可。Veo 与 Omni 都通过下方的查询任务与下载接口获取结果。

Responses 接口 ​

这四个视频模型也支持 POST /v1/responses,将视频参数放在 metadata 中:

json
{
  "model": "omni-1.1-flash",
  "input": "阳光下的海边,一只小狗沿着沙滩奔跑",
  "background": true,
  "metadata": {"seconds": 6, "aspect_ratio": "9:16", "resolution": "720p"}
}

后台请求使用返回的 Response ID 查询 GET /v1/responses/{response_id};也支持 stream: true 或等待同步完成。

Nano Banana Flow 图片 ​

nano-banana-pro-flow 和 nano-banana-2-flow 通过异步任务接口生成图片,每次任务生成一张图片。它们不是视频模型,计费不随 duration 增加。

bash
curl https://code.ciyuanapi.xyz/v1/videos \
  -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: banana-flow-001" \
  -d '{
    "model": "nano-banana-pro-flow",
    "prompt": "将参考图改成干净的产品摄影风格",
    "resolution": "2k",
    "aspect_ratio": "1:1",
    "images": [
      "https://cdn.example.com/reference.jpg"
    ]
  }'

公开模型名只使用 nano-banana-pro-flow 和 nano-banana-2-flow。每次最多 8 张参考图,完成任务的结果是图片。

查询任务 ​

创建成功返回公开任务 ID:

json
{
  "id": "task_0123456789abcdef",
  "object": "video",
  "status": "queued",
  "progress": 0,
  "model": "veo-3.1-fast"
}

建议每 3–5 秒查询一次:

bash
curl https://code.ciyuanapi.xyz/v1/videos/task_0123456789abcdef \
  -H "Authorization: Bearer $API_KEY"
状态处理方式
queued继续轮询
in_progress继续轮询
completed使用 metadata.url 获取结果
failed停止轮询并读取 error.message
ambiguous停止轮询并联系平台核对

完成响应示例:

json
{
  "id": "task_0123456789abcdef",
  "object": "video",
  "model": "veo-3.1-fast",
  "status": "completed",
  "progress": 100,
  "metadata": {
    "url": "https://code.ciyuanapi.xyz/v1/videos/task_0123456789abcdef/content"
  }
}

下载结果仍需鉴权:

bash
curl https://code.ciyuanapi.xyz/v1/videos/task_0123456789abcdef/content \
  -H "Authorization: Bearer $API_KEY" \
  -o result.bin

任务只能由所属用户查询和下载。请直接使用返回的完整 metadata.url。

JavaScript 轮询示例 ​

js
const baseURL = "https://code.ciyuanapi.xyz"
const apiKey = process.env.CIYUAN_API_KEY

const submitResponse = await fetch(`${baseURL}/v1/videos`, {
  method: "POST",
  headers: {
    Authorization: `Bearer ${apiKey}`,
    "Content-Type": "application/json",
    "Idempotency-Key": crypto.randomUUID(),
  },
  body: JSON.stringify({
    model: "veo-3.1-fast",
    prompt: "海面上的灯塔,云层快速流动",
    duration: 8,
    aspect_ratio: "16:9",
  }),
})

if (!submitResponse.ok) throw new Error(await submitResponse.text())
const task = await submitResponse.json()

while (true) {
  await new Promise((resolve) => setTimeout(resolve, 5000))
  const response = await fetch(`${baseURL}/v1/videos/${task.id}`, {
    headers: { Authorization: `Bearer ${apiKey}` },
  })
  if (!response.ok) throw new Error(await response.text())
  const result = await response.json()

  if (result.status === "completed") {
    console.log("结果地址", result.metadata.url)
    break
  }
  if (["failed", "ambiguous"].includes(result.status)) {
    throw new Error(result.error?.message || `任务结束:${result.status}`)
  }
}

幂等、重试与结算 ​

  • 每个新任务使用唯一的 Idempotency-Key,最长 255 个字符。
  • 相同用户、令牌、幂等键和完全相同的请求会返回原任务,不会重复创建或重复预扣。
  • 同一幂等键对应不同请求时返回 HTTP 409 和 idempotency_conflict。
  • 网络错误或 HTTP 429、502、503 时,只用相同幂等键和完全相同的请求做有限重试。
  • HTTP 400、401、403、451 以及内容审核失败不应原样重试,应先调整参数或素材。
  • 创建任务时预扣余额;明确失败会自动退款。
  • ambiguous 不会自动结算或退款,需要人工核对上游结果。

常见错误 ​

HTTP/错误码说明
invalid_model模型不存在或未对当前令牌开放
invalid_duration模型时长不符合固定值或范围
invalid_request参考素材数量、视频数量、分辨率或其他参数不符合要求
insufficient_user_quota账户余额不足
idempotency_conflict / HTTP 409幂等键已用于另一份请求
PROMPT_BLOCKED / HTTP 451内容审核拒绝,需修改提示词或参考素材
HTTP 413请求体或素材过大