Appearance
异步视频与 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.0 | 4-15 秒,720P(火山引擎 Seedance 2.0) | 支持图片、视频、音频参考素材 |
seedance-2.0-fast | 4-15 秒,720P(Seedance 2.0 Fast) | 支持图片、视频、音频参考素材 |
seedance-2.0-mini | 4-15 秒,720P(Seedance 2.0 Mini) | 支持图片、视频、音频参考素材 |
seedance-2.5 | 4-30 秒,720P(Seedance 2.5) | 支持图片、视频、音频参考素材 |
MiniMax-H3 | 4-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-flash | 4/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"
}'| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
model | string | 是 | seedance-2.0、seedance-2.0-fast、seedance-2.0-mini 或 seedance-2.5 |
prompt | string | 是 | 视频描述 |
duration | integer | 否 | seedance-2.0 / 2.0-fast / 2.0-mini 支持 4-15,seedance-2.5 支持 4-30;默认 4 |
resolution | string | 否 | 仅 720p;填其他值会返回 invalid_resolution |
aspect_ratio | string | 否 | 16:9、9:16、1:1、21:9、4:3、3:4,默认 16:9 |
seed | integer | 否 | 随机种子,原样传给生成服务 |
generate_audio | boolean | 否 | 是否生成音频,由模型能力决定 |
watermark | boolean | 否 | 水印设置,由模型能力决定 |
参考素材:支持图片(参考图 / 首帧 / 尾帧)、参考视频、参考音频,通过公网 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"
]
}'| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
model | string | 是 | MiniMax-H3 |
prompt | string | 是 | 视频描述 |
duration | integer | 否 | 4-15,默认 4 |
resolution | string | 否 | 768P 或 2K,默认 768P |
aspect_ratio | string | 否 | 例如 16:9、9:16;默认自适应 |
reference_image_urls | string[] | 否 | 最多 9 张 |
reference_videos | string[] | 否 | 最多 3 条,总时长不超过 15 秒 |
reference_video_durations | number[] | 条件必填 | 有参考视频时必填,单位秒,顺序必须与 reference_videos 一致 |
reference_audios | string[] | 否 | 最多 3 条,免费 |
VEO 3.1
使用 veo-3.1-lite、veo-3.1-fast 或 veo-3.1-quality,时长、横竖屏和生成模式由请求参数自动匹配,模型名无需添加后缀。
| 模型 | 文生视频 | 首帧 / 首尾帧 | 多参考图 | 视频续写 |
|---|---|---|---|---|
veo-3.1-lite | 4、6、8 秒 | 4、6 秒,1–2 张图 | 8 秒,1–3 张图 | 8 秒 |
veo-3.1-fast | 4、6、8 秒 | 4、6 秒,1–2 张图 | 8 秒,1–3 张图 | 8 秒 |
veo-3.1-quality | 4、6、8 秒 | 4、6 秒,1–2 张图 | 不支持 | 8 秒 |
当前仅支持 720p。aspect_ratio: "16:9" 为横屏,"9:16" 为竖屏;未填写时默认横屏。模型可用性与价格以模型广场和令牌所属分组为准。
请求参数
提交到 POST /v1/videos,使用你的 LunAPI 令牌鉴权。
| 参数 | 说明 |
|---|---|
model | 上表中的基础模型名,必填 |
prompt | 视频描述,必填 |
seconds | 时长,也支持 duration;须符合当前模式支持的时长 |
aspect_ratio | 16: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 | 请求体或素材过大 |