切换主题
视频 API
视频生成采用异步任务流程:先提交任务,保存返回的任务 ID,再轮询进度,最后取得成片。本页整理 OpenAI 兼容视频、Gemini / Omni 视频和 Grok 视频的常用请求方式。
使用边界
本页按指定参考教程整理,没有发送真实视频生成请求。接口、模型、分组、参数范围、价格和计费规则均以 Lunora 控制台“可用渠道”的实时显示为准。第一次使用时先选择最短时长和默认清晰度。
开始前准备
- 已在可用渠道确认目标视频模型及其所属分组。
- 已创建一把分组匹配的视频 API Key,创建方式见创建 API Key。
- 电脑已安装 curl,参考图片或视频使用可直连的 HTTPS 地址。
- 不要把真实 Key 写进脚本、截图、公开仓库或聊天记录。
本文命令统一读取 LUNORA_VIDEO_API_KEY。
macOS 或 Linux 当前终端:
bash
export LUNORA_VIDEO_API_KEY="你的_视频_API_Key"Windows PowerShell 当前窗口:
powershell
$env:LUNORA_VIDEO_API_KEY = "你的_视频_API_Key"请求流程
| 步骤 | 方法和路径 | 说明 |
|---|---|---|
| 1. 提交 OpenAI / Omni 任务 | POST /v1/videos | 提交 JSON 或 multipart/form-data,保存返回的 id 或 task_id |
| 2. 查询 OpenAI / Omni 任务 | GET /v1/videos/{task_id} | 状态通常为 queued、in_progress、processing、completed 或 failed |
| 3. 下载 OpenAI / Omni 成片 | GET /v1/videos/{task_id}/content | 任务完成后下载,也可以使用响应中的 data[0].url |
| 4. 提交 Grok 任务 | POST /v1/video/generations | 创建 Grok 文生、图生或视频编辑任务 |
| 5. 查询 Grok 任务 | GET /v1/video/generations/{task_id} | 成功时读取 data.status 和 data.result_url |
建议每 5-10 秒查询一次,客户端总超时设置为 300 秒或更长。不要毫秒级高频轮询,也不要在任务仍在处理中时重复付费提交。
OpenAI 兼容入口
通用请求字段
| 字段 | 类型 | 必需 | 说明 |
|---|---|---|---|
model | string | 是 | 控制台显示的视频模型名称 |
prompt | string | 是 | 建议写清主体、动作、镜头、场景和风格 |
aspect_ratio | string | 否 | 例如 16:9 或 9:16,范围取决于模型 |
duration | number | 否 | 视频时长,单位为秒 |
size | string | 否 | 部分模型使用尺寸,例如 1280x720 |
image / images | string / string[] | 否 | 图生视频参考图,可使用 HTTPS URL 或 data URL |
macOS、Linux 或 Git Bash 提交一个通用文生视频任务:
bash
curl -sS -X POST "https://api.uselunora.com/v1/videos" \
-H "Authorization: Bearer $LUNORA_VIDEO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "控制台显示的视频模型",
"prompt": "雨夜霓虹街道,镜头缓慢推进,电影感光影",
"aspect_ratio": "16:9",
"duration": 8
}' > video-task.jsonWindows PowerShell 使用相同字段:
powershell
$createBody = @{
model = "控制台显示的视频模型"
prompt = "雨夜霓虹街道,镜头缓慢推进,电影感光影"
aspect_ratio = "16:9"
duration = 8
} | ConvertTo-Json
$createResponse = Invoke-RestMethod `
-Uri "https://api.uselunora.com/v1/videos" `
-Method Post `
-Headers @{ Authorization = "Bearer $env:LUNORA_VIDEO_API_KEY" } `
-ContentType "application/json" `
-Body $createBody
$createResponse |
ConvertTo-Json -Depth 10 |
Set-Content video-task.json -Encoding utf8创建任务可能返回:
json
{
"id": "task_abc123",
"object": "video",
"model": "控制台显示的视频模型",
"status": "queued",
"progress": 0
}保存其中的 id,查询任务:
bash
curl -sS "https://api.uselunora.com/v1/videos/task_abc123" \
-H "Authorization: Bearer $LUNORA_VIDEO_API_KEY" \
> video-status.jsonWindows PowerShell 查询同一个任务:
powershell
$taskId = "task_abc123"
$statusResponse = Invoke-RestMethod `
-Uri "https://api.uselunora.com/v1/videos/$taskId" `
-Headers @{ Authorization = "Bearer $env:LUNORA_VIDEO_API_KEY" }
$statusResponse |
ConvertTo-Json -Depth 10 |
Set-Content video-status.json -Encoding utf8完成响应可能包含:
json
{
"id": "task_abc123",
"status": "completed",
"progress": 100,
"data": [
{"url": "/v1/videos/task_abc123/content"}
]
}下载成片:
bash
curl -sS -L "https://api.uselunora.com/v1/videos/task_abc123/content" \
-H "Authorization: Bearer $LUNORA_VIDEO_API_KEY" \
--output generated-video.mp4Windows PowerShell 下载成片:
powershell
$taskId = "task_abc123"
Invoke-WebRequest `
-Uri "https://api.uselunora.com/v1/videos/$taskId/content" `
-Headers @{ Authorization = "Bearer $env:LUNORA_VIDEO_API_KEY" } `
-OutFile generated-video.mp4Gemini / Omni 视频
Omni 系列统一使用 POST /v1/videos,按任务 ID 查询和下载。参考教程中的模型名称包括 omni-fast、omni-fast-no-water、omni-v2v 和 omni-v2v-no-water;实际可用名称以控制台为准。
omni-fast
用于文生、单图、多图参考和首尾帧视频。参考参数为固定 720p、约 10 秒,支持 16:9 和 9:16。
| 字段 | 用法 |
|---|---|
image_url | JSON 中提交一张公网图片或 data URL |
input_reference | 以 multipart 重复提交多张文件;参考教程限制最多 5 张、每张不超过 5 MB |
first_image_url / last_image_url | 单独或成对提交首帧与末帧 |
单图图生视频:
bash
curl -sS -X POST "https://api.uselunora.com/v1/videos" \
-H "Authorization: Bearer $LUNORA_VIDEO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "omni-fast",
"prompt": "保持人物一致,缓慢走动",
"aspect_ratio": "16:9",
"image_url": "https://example.com/photo.jpg"
}'多参考图:
bash
curl -sS -X POST "https://api.uselunora.com/v1/videos" \
-H "Authorization: Bearer $LUNORA_VIDEO_API_KEY" \
-F "model=omni-fast" \
-F "prompt=参考这些商品图,生成稳定的展示视频" \
-F "aspect_ratio=16:9" \
-F "input_reference=@front.png" \
-F "input_reference=@side.png"omni-fast-no-water
参数与 omni-fast 相同,模型名改为 omni-fast-no-water。任务完成前可能出现额外的 processing 阶段,不要把它当作失败。
bash
curl -sS -X POST "https://api.uselunora.com/v1/videos" \
-H "Authorization: Bearer $LUNORA_VIDEO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "omni-fast-no-water",
"prompt": "保持人物一致,镜头缓慢环绕",
"aspect_ratio": "16:9",
"image_url": "https://example.com/photo.jpg"
}'omni-v2v
用于视频转视频。JSON 请求使用 video_url,multipart 请求使用 input_video,两者选择一种。参考教程要求源视频不超过 5 MB、分辨率不超过 1920x1080。
bash
curl -sS -X POST "https://api.uselunora.com/v1/videos" \
-H "Authorization: Bearer $LUNORA_VIDEO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "omni-v2v",
"prompt": "将画面风格转换为赛博朋克风",
"aspect_ratio": "16:9",
"video_url": "https://example.com/source.mp4"
}'上传本地视频:
bash
curl -sS -X POST "https://api.uselunora.com/v1/videos" \
-H "Authorization: Bearer $LUNORA_VIDEO_API_KEY" \
-F "model=omni-v2v" \
-F "prompt=将画面风格转换为赛博朋克风" \
-F "aspect_ratio=16:9" \
-F "input_video=@source.mp4;type=video/mp4"omni-v2v-no-water
参数与 omni-v2v 相同,模型名改为 omni-v2v-no-water。额外处理可能延长任务时间,继续按 5-10 秒间隔轮询。
bash
curl -sS -X POST "https://api.uselunora.com/v1/videos" \
-H "Authorization: Bearer $LUNORA_VIDEO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "omni-v2v-no-water",
"prompt": "保留主体动作,把画面转换为电影质感",
"aspect_ratio": "16:9",
"video_url": "https://example.com/source.mp4"
}'Omni / Veo 通常有较严格的内容审查。真人正脸、版权角色和敏感题材可能被拒绝;失败任务的计费处理以控制台说明为准。
Grok 视频
Grok 使用另一套异步路径:
- 创建:
POST /v1/video/generations - 查询:
GET /v1/video/generations/{task_id} - 成功标志:
data.status为SUCCESS - 成片地址:
data.result_url
grok-video
支持文生视频、单图或多图参考视频,以及通过 video_url 编辑视频。
| 字段 | 说明 |
|---|---|
prompt | 必需,参考教程上限为 4096 字符 |
seconds / duration | 4、6、8、10、12 或 15 秒 |
aspect_ratio | 1:1、16:9、9:16、4:3、3:4、3:2、2:3 |
resolution | 720p 或 480p |
image_urls | HTTPS 或 data URL 数组,参考教程限制最多 7 张 |
video_url | 用于视频编辑的 HTTPS 直链 |
视频编辑:
bash
curl -sS -X POST "https://api.uselunora.com/v1/video/generations" \
-H "Authorization: Bearer $LUNORA_VIDEO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "grok-video",
"prompt": "Add subtle rainbow in the sky",
"aspect_ratio": "16:9",
"resolution": "720p",
"seconds": 4,
"video_url": "https://example.com/source.mp4"
}'多参考图生视频:
bash
curl -sS -X POST "https://api.uselunora.com/v1/video/generations" \
-H "Authorization: Bearer $LUNORA_VIDEO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "grok-video",
"prompt": "让产品在桌面上缓慢旋转,保持材质一致",
"aspect_ratio": "16:9",
"resolution": "720p",
"seconds": 8,
"image_urls": [
"https://example.com/product-front.png",
"https://example.com/product-side.png"
]
}'参考教程说明:多图任务超过 10 秒时可能自动按 10 秒处理。实际规则以控制台为准。
grok-video-1.5
用于单图生视频。必须且只能提交一张图片,不支持纯文生,也不支持 video_url 视频参考;画幅只使用 16:9 或 9:16。
| 字段 | 说明 |
|---|---|
model | 必需,填写 grok-video-1.5 或控制台展示名 |
prompt | 必需,参考教程上限为 4096 字符 |
seconds / duration | 必需,4、6、8、10、12 或 15 秒 |
aspect_ratio | 必需,只使用 16:9 或 9:16 |
resolution | 可选,720p 或 480p |
image_urls | 必需时只能包含一张图片 |
image | { "url": "..." },可代替单项 image_urls;不要同时提交 video_url |
bash
curl -sS -X POST "https://api.uselunora.com/v1/video/generations" \
-H "Authorization: Bearer $LUNORA_VIDEO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "grok-video-1.5",
"prompt": "Gentle camera push-in, water flowing",
"aspect_ratio": "9:16",
"duration": 4,
"resolution": "720p",
"image": {
"url": "https://example.com/product.png"
}
}'查询 Grok 任务:
bash
curl -sS "https://api.uselunora.com/v1/video/generations/task_abc123" \
-H "Authorization: Bearer $LUNORA_VIDEO_API_KEY" \
> grok-video-status.json成功响应可能为:
json
{
"code": "success",
"data": {
"fail_reason": "",
"progress": "100%",
"result_url": "https://example.com/generated-video.mp4",
"status": "SUCCESS",
"task_id": "task_abc123"
}
}任务状态与轮询
轮询程序至少需要处理这些状态:
| 状态 | 处理方式 |
|---|---|
queued / in_progress / processing | 等待后继续查询 |
completed | 读取 data[0].url 或下载 /content |
SUCCESS | Grok 任务读取 data.result_url |
failed 或包含 fail_reason | 停止轮询并记录 error.message 或 fail_reason |
务必持久化 task_id。页面刷新、脚本退出或服务器重启后,仍应能够继续查询已有任务,而不是重新创建。
可选:让 Agent 自动执行
在 Codex、Claude Code、OpenCode 或 OpenClaw 中,可以把下面的要求作为创建视频 Skill 的基础指令:
text
请创建一个 Lunora AI 视频 Skill:
1. 从环境变量 LUNORA_VIDEO_API_KEY 读取 Key,不显示或写入日志。
2. 根据需求选择控制台当前可用的视频模型。
3. OpenAI / Omni 任务使用 /v1/videos;Grok 任务使用 /v1/video/generations。
4. 保存 task_id,每 5-10 秒轮询一次,遇到完成、成功或失败状态后停止。
5. 返回最终视频 URL 或下载文件路径,并保留失败原因。
6. 不要固定用户的创意、镜头语言和提示词,只负责模型选择、参数合法性和任务闭环。常见问题
401 或 403
检查 Key 是否完整、是否已启用,以及 Key 分组是否包含目标视频模型。兑换码和聊天账号密码都不是 API Key。
404
确认使用的是 api.uselunora.com,并区分 /v1/videos 与 /v1/video/generations。不要重复添加 /v1。
任务一直处理中
视频任务通常比文本和图片更慢。保持合理轮询间隔,记录任务 ID;不要在旧任务未结束时连续创建相同任务。
参考图片或视频无法读取
使用无需登录、没有防盗链并且可从公网直接访问的 HTTPS URL;本地文件必须通过对应的 multipart 字段上传。
返回成功但没有视频
OpenAI / Omni 读取 data[0].url 或 /content,Grok 读取 data.result_url。先保存完整 JSON,再按实际字段处理。
安全与费用
- 不要在响应日志中记录完整 Key、data URL 或敏感素材地址。
- 任务失败、取消、超时和无水印处理的计费规则以控制台当前说明为准。
- 先用短时长、默认清晰度和非敏感素材验证流程,再增加时长或参考素材数量。
- 服务端集成应限制创建频率和轮询频率,避免同一任务被重复提交。