Skip to content

video.opencodex.uk 视频与图片模型接口调用文档

本文档说明如何调用 https://video.opencodex.uk 上的 NewAPI 实例生成视频和图片。

video.opencodex.uk 是视频与图片 API 站点,不提供通用 Codex /install/ 入口。Codex 用户请从 安装入口总览 选择自己使用的 API 站点。

入口选择

场景Base URL路由
普通调用https://video.opencodex.uk共享负载均衡入口
高并发或希望直连新加坡源站https://videosgp.opencodex.ukCloudflare 橙云直接指向 sgp001,不经过共享 LB 的另外两台边缘 VPS

两个入口连接同一个 NewAPI 3006 实例,API key、模型、任务、额度和请求路径完全一致。高并发业务可直接把 Base URL 改为 https://videosgp.opencodex.uk;供应商并发限制和 3006 自身容量不会因为切换域名而增加,遇到 429 或临时 5xx 仍需退避重试。完整直连示例见 videosgp.opencodex.uk 专用文档

视频生成必须使用异步任务接口。当前兼容三个提交入口:

text
POST https://video.opencodex.uk/v1/video/generations
GET  https://video.opencodex.uk/v1/video/generations/{task_id}

POST https://video.opencodex.uk/v1/videos
GET  https://video.opencodex.uk/v1/videos/{task_id}

POST https://video.opencodex.uk/v1/videos/generations
GET  https://video.opencodex.uk/v1/videos/{task_id}

/v1/video/generations 是历史 JSON 任务接口;/v1/videos 是 NewAPI/Sora 兼容接口;/v1/videos/generations 是 Grok JSON 兼容提交入口。三者创建的任务都使用 GET /v1/videos/{task_id} 或对应历史查询入口轮询。视频生成通常需要几分钟。同步 chat/completions 长连接可能被 Cloudflare 或 Nginx 在约 120 秒左右切断,工具站不要用同步接口等待视频完成。图片模型同时支持 Chat Completions、Images Generations 和 Images Edits 形式。

基础信息

项目
Base URLhttps://video.opencodex.uk
视频提交/v1/video/generations
视频查询/v1/video/generations/{task_id}
OpenAI/Sora 兼容视频提交/v1/videos
OpenAI/Sora 兼容视频查询/v1/videos/{task_id}
Grok JSON 兼容视频提交/v1/videos/generations
Chat Completions/v1/chat/completions
Images Generations/v1/images/generations
Images Edits/v1/images/edits
模型列表/v1/models
鉴权方式Authorization: Bearer sk-你的API_KEY
内容类型文生视频 application/json;图生视频推荐 multipart/form-data
视频提交超时30 到 90 秒
视频轮询间隔10 到 20 秒
图片推荐超时60 到 180 秒

请使用已开通视频和图片模型权限的 API key。部分 key 可能能通过鉴权,但调用模型时返回 model_not_found。不要把 API key 写进前端代码、公开仓库、日志或报错截图。

视频模型支持文生视频、图生视频、Chat 接口和 /v1/videos 异步任务接口。固定时长模型直接按模型名展示,例如 sora-2-4s 为 4 秒视频模型,seedance-1.5-pro-5sseedance-1.0-fast-5s 为 5 秒视频模型。

Seedance 2.0 标准版 seedance-2.0 和轻量版 seedance-2.0-mini 仍是 4–15 秒可变时长模型。原无后缀 Fast 名称 seedance-2.0-fast 已下线,Fast 改为三个固定时长名称:seedance-2.0-fast-5sseedance-2.0-fast-10sseedance-2.0-fast-15s。三款 Fast 均为 Seedance 2.0 Fast、HD 720p,支持 16:99:161:1,以及文生视频、单图和多图参考。

图片和对话模型按本站当前可用模型展示。部分模型提供兼容名称,例如 image-2 可按 gpt-image-2 能力调用,gemini-3.1-flash-image-preview 可按 nano-banana-2 能力调用,gemini-3-pro-image-preview 可按 nano-banana-pro-vt 能力调用。

快速测试

先确认 key 能看到模型:

bash
curl -sS https://video.opencodex.uk/v1/models \
  -H "Authorization: Bearer sk-你的API_KEY"

最小视频生成请求分两步。第一步提交任务,接口会秒级返回 task_id

bash
curl -sS --max-time 90 https://video.opencodex.uk/v1/video/generations \
  -H "Authorization: Bearer sk-你的API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "sora-2-4s",
    "prompt": "生成一个4秒视频:海边日落,镜头缓慢推进,真实摄影风格,16:9",
    "duration": 4
  }'

典型提交返回:

json
{
  "task_id": "task_xxx",
  "status": "processing"
}

第二步轮询任务状态,完成后读取返回中的 url

bash
curl -sS https://video.opencodex.uk/v1/video/generations/task_xxx \
  -H "Authorization: Bearer sk-你的API_KEY"

Seedance 2.0 Mini 的 15 秒 720p 文生视频示例:

bash
curl -sS --max-time 120 https://video.opencodex.uk/v1/videos \
  -H "Authorization: Bearer sk-你的API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2.0-mini",
    "prompt": "一只穿黄色雨衣的柯基在屋顶迷你厨房主持料理秀,把巨型荷包蛋抛向空中,电影感运镜,无字幕",
    "duration": 15,
    "resolution": "720p",
    "aspect_ratio": "16:9",
    "audio": true
  }'

创建成功后读取响应中的 idtask_id,轮询 GET /v1/videos/{task_id};完成后可使用 GET /v1/videos/{task_id}/content 下载成片。

最便宜的 Seedance 2.0 Fast 5 秒 720p 示例:

bash
curl -sS --max-time 120 https://video.opencodex.uk/v1/videos/generations \
  -H "Authorization: Bearer sk-你的API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2.0-fast-5s",
    "prompt": "一只戴厨师帽的迷你机器人在月球路边摊翻炒会发光的星星面条,突然有一颗面条星球从锅里升起,电影感运镜,无字幕",
    "duration": 5,
    "resolution": "720p",
    "aspect_ratio": "16:9"
  }'

该模型固定 5 秒,默认组价格为 2/条。也可把提交路径改为 /v1/videos,请求 JSON 保持不变。

最小图片生成请求:

bash
curl -sS --max-time 180 https://video.opencodex.uk/v1/images/generations \
  -H "Authorization: Bearer sk-你的API_KEY" \
  -H "Idempotency-Key: image-order-20260724-0001" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-image-2",
    "prompt": "海报级商业产品图,一瓶香水放在黑色镜面台面上,柔和高光,16:9",
    "n": 1,
    "size": "1024x1024"
  }'

图片结果持久化、历史与下载

Images Generations 和 Images Edits 成功后,本站会把供应商临时 URL 下载到专用私有对象存储,或把 b64_json 解码后保存同一份图片。当前使用私有 Cloudflare R2 Bucket opencodex-video-generated-assetsr2.dev 和公开自定义域名均未开放,默认保留 30 天。

成功响应包含稳定的 img_... 任务 ID:

json
{
  "created": 1784894400,
  "task_id": "img_xxx",
  "data": [
    {
      "task_id": "img_xxx",
      "url": "https://video.opencodex.uk/v1/images/tasks/img_xxx/content"
    }
  ]
}

多图请求中,每个 data[] 项都有自己的任务 ID,顶层 task_id 指向第一张图。用户可以使用自己的 API Key 查询图片历史、任务信息和内容:

bash
curl -sS 'https://video.opencodex.uk/v1/images/tasks?page=1&page_size=20' \
  -H "Authorization: Bearer sk-你的API_KEY"

curl -sS https://video.opencodex.uk/v1/images/tasks/img_xxx \
  -H "Authorization: Bearer sk-你的API_KEY"

curl -L https://video.opencodex.uk/v1/images/tasks/img_xxx/content \
  -H "Authorization: Bearer sk-你的API_KEY" \
  -o result.png

GET /v1/images/tasks/{task_id}/content 会先校验任务属于当前用户,再跳转到约 5 分钟有效的签名 URL。R2 始终保持私有;其他用户访问同一任务 ID 返回 404,已过期内容返回 410

当前内容响应使用 Content-Disposition: inline,浏览器会直接预览,用户仍可保存图片;目前不是强制下载的 attachment 响应。浏览器、curl、Go 和 Python requests 已验证可用;Python 裸 urllib 的默认 User-Agent 可能触发 Cloudflare 1010,遇到此问题请改用 requests 或设置正常的 User-Agent。

图片请求幂等与重试

正式业务调用必须为每个逻辑图片请求生成一个稳定的 Idempotency-Key,重试时复用同一个 key 和完全相同的请求体。也可使用 X-Request-IdX-Oneapi-Request-Id

  • 同 key、同请求:返回已保存结果,响应头包含 X-Idempotent-Replay: true,不会再次生成或扣费。
  • 同 key、不同请求体:返回 409 idempotency_key_conflict
  • 原请求仍处理中或结果未知:返回 409,不会换渠道重复生成。
  • 原请求失败:返回原失败状态,不会自动再次生成。
  • 已保存结果过期:返回 410,不会自动再次生成。

需要重新生成时,应在确认业务意图后使用新的幂等 key。不要在超时或未知结果后立即换 key 重试,否则无法阻止供应商侧重复生成。

已接入模型

截至 2026-07-20,认证 /v1/models 返回 43 个模型。公开模型广场展示模型名、价格和能力描述。

视频模型

模型接口模型说明
seedance-2.0/v1/videosSeedance 2.0 标准版,4.8/条。文生/图生/多模态/首尾帧,480p / HD 720p,4–15 秒。
seedance-2.0-fast-5s/v1/videos/v1/videos/generations实际模型为 Seedance 2.0 Fast,2/条。固定 5 秒,HD 720p;支持 16:9 / 9:16 / 1:1,支持文生视频及单图/多图参考,更快出片。
seedance-2.0-fast-10s/v1/videos/v1/videos/generations实际模型为 Seedance 2.0 Fast,4/条。固定 10 秒,HD 720p;支持 16:9 / 9:16 / 1:1,支持文生视频及单图/多图参考,更快出片。
seedance-2.0-fast-15s/v1/videos/v1/videos/generations实际模型为 Seedance 2.0 Fast,6/条。固定 15 秒,HD 720p;支持 16:9 / 9:16 / 1:1,支持文生视频及单图/多图参考,更快出片。
seedance-2.0-mini/v1/videosSeedance 2.0 Mini,2.3/条。轻量版,文生/图生/多模态/首尾帧,480p / HD 720p,4–15 秒。
sora-2/v1/video/generationsSora 2 4 秒视频模型,支持文生视频、图生视频、Chat 接口和 /v1/videos 异步任务接口。
sora-2-4s/v1/video/generationsSora 2 4 秒视频模型,支持文生视频、图生视频、Chat 接口和 /v1/videos 异步任务接口。
sora-2-8s/v1/video/generationsSora 2 8 秒视频模型,支持文生视频、图生视频、Chat 接口和 Sora 异步接口。
sora-2-12s/v1/video/generationsSora 2 12 秒视频模型,支持文生视频、图生视频、Chat 接口和 Sora 异步接口。
seedance-1.5-pro/v1/video/generationsSeedance 1.5 Pro 5 秒视频模型,支持文生视频、图生视频和 /v1/videos 异步任务接口。
seedance-1.5-pro-5s/v1/video/generationsSeedance 1.5 Pro 5 秒视频模型,支持文生视频、图生视频和 /v1/videos 异步任务接口。
seedance-1.5-pro-10s/v1/video/generationsSeedance 1.5 Pro 10 秒视频模型,适合更完整的镜头变化和分段运镜。
seedance-1.5-pro-12s/v1/video/generationsSeedance 1.5 Pro 12 秒视频模型,适合长一点的运镜和复杂场景表达。
seedance-1.0-fast/v1/video/generationsSeedance 1.0 Fast 5 秒视频模型,支持文生视频、图生视频和 /v1/videos 异步任务接口。
seedance-1.0-fast-5s/v1/video/generationsSeedance 1.0 Fast 5 秒视频模型,支持文生视频、图生视频和 /v1/videos 异步任务接口。
seedance-1.0-fast-10s/v1/video/generationsSeedance 1.0 Fast 10 秒视频模型,支持 Chat 接口和 v1/videos 异步接口。
seedance-1.0-mini/v1/video/generationsSeedance 1.0 Mini 公开模型名,支持 Chat 接口和 v1/videos 异步接口。
seedance-1.0-mini-10s/v1/video/generationsSeedance 1.0 Mini 10 秒视频模型,支持 Chat 接口和 v1/videos 异步接口。
seedance-1.0-pro/v1/video/generationsSeedance 1.0 Pro 公开模型名,支持 Chat 接口和 v1/videos 异步接口。
seedance-1.0-pro-10s/v1/video/generationsSeedance 1.0 Pro 10 秒视频模型,支持 Chat 接口和 v1/videos 异步接口。
jimeng-agent/v1/chat/completions即梦 agent 模型,支持图文任务、图片生成和上下文创意任务。

2026-07-20 Seedance 2.0 Fast 固定时长验证

  • 原无后缀模型 seedance-2.0-fast 已下线,固定时长模型为 seedance-2.0-fast-5sseedance-2.0-fast-10sseedance-2.0-fast-15s,默认组价格分别为 2/条4/条6/条
  • 三款模型均为 Seedance 2.0 Fast,固定 HD 720p,支持 16:99:161:1,支持文生视频及公网 HTTPS 单图/多图参考。
  • 真实付费验证通过公网 POST /v1/videos/generations 仅调用一次 5 秒型号;任务创建、GET /v1/videos/{task_id} 轮询和 /content 下载均成功。
  • 实际媒体为 5.085s1280×720、24fps、HEVC,并包含 44.1kHz AAC 双声道非静音音轨。
  • 5 秒任务按固定价 2/条 计费,没有再按时长二次乘价。固定时长与模型后缀不一致时会在提交阶段返回 400
  • .20.1 发布后的 30 分钟观察通过 26/26,随后停止旧 .19.1 回滚容器;新后端继续通过直接、普通公网及 sgp003/jp002 强制边缘的 200/401 健康门禁。

2026-07-13 Seedance 2.0 上线验证

  • 三款模型已出现在认证 /v1/models 和公开模型广场;2026-07-15 起固定价格分别为 4.83.22.3 每条。
  • 真实付费验证仅调用 seedance-2.0-mini,请求为 15 秒、720p、16:9、原生音频。
  • 任务通过公网 /v1/videos 完成,实际媒体为 15.104s1280×720、H.264、24fps,并包含 AAC 双声道音轨。
  • Mini 当前固定计费为 2.3/条,15 秒任务不会再按时长二次乘价。
  • 本轮只验证了文生视频。图生、多模态和首尾帧字段已按接口透传,正式业务使用前建议先做小样。

2026-06-10 同步验证

以下结果使用同一个已授权测试 key 通过公网 https://video.opencodex.uk 验证,输出已脱敏:

项目结果说明
认证 /v1/models返回 28 个模型已包含 seedance-1.0-fastseedance-1.0-miniseedance-1.0-prosora-2gpt-image-2image-2
/api/pricing 模型广场已同步不可用的 dance2-fast-*seedance-1.0-5sseedance-1.0-10sveo-3.1-8s 已移除。
TASK_PRICE_PATCH已更新固定价视频模型列表已去掉下线模型,并加入新增 Seedance/Sora 模型,避免异步视频按秒二次乘价。

同日历史实测中,seedance-1.5-pro-5ssora-2-4s 文生视频任务可完成并返回视频 URL;POST /v1/videos 使用 multipart/form-data 字段 image=@input.png、模型 sora-2-4s 可成功创建图生视频任务并完成。

2026-06-12 模型合并与描述更新

2026-06-12 将高规格图片模型统一为 gpt-image-2-pro。公开 /api/pricing 展示模型名、价格和能力描述。

项目结果说明
认证 /v1/models返回 44 个模型已包含 gpt-image-2-pronano-banana-fastgemini-3.1-prosora-2-4s
/api/pricing 模型广场已同步展示模型名、价格和能力描述。
视频与图片模型已同步保留视频、Seedream、即梦和当前图片模型。

计费按美元口径设置到默认组。NewAPI 3006 当前 GroupRatio{"default":1,"0.8":0.8};内部 ModelPrice/ModelRatio 同按美元口径存储。已下线模型不再展示。

当前固定价图片模型中,gpt-image-2 和兼容名称 image-2$0.06/次gpt-image-2-pro$0.1/次

2026-06-10 兼容模型复测

以下 3 个模型使用公网 POST /v1/videosmultipart/form-data、字段 image=@start.png 进行图生视频复测,3 条任务均完成并返回视频 URL。

模型此前是否测过本轮图生视频结果图片/首尾帧能力记录
sora-2-4s已测过文生视频成功;已测过 image=@input.png 图生视频成功。completed,有视频 URL。单张图片首帧/参考图可用,字段使用 image
seedance-1.5-pro-5s已测过文生视频成功。completed,有视频 URL。单张图片首帧/参考图可用,字段使用 image
seedance-1.0-fast-5s已通过 OpenNana smoke 生成成功。completed,有视频 URL。单张图片首帧/参考图可用,字段使用 image

结论:这 3 个模型都支持 image 单图输入,可作为首帧/参考图使用。不要把尾帧或首尾双图能力标成稳定支持;当前未验证 last_imageend_frame 或双图字段的稳定效果。

图片模型

模型接口模型说明
gpt-image-2-proChat / Generations / Edits当前渠道 GPT Image 2 高规格绘图模型,支持文生图、图生图、1K、2K、4K。
gpt-image-2Chat / Generations / Edits当前渠道 GPT Image 2 绘画模型,支持文生图、图生图、1K。
image-2Chat / Generations / Edits兼容 gpt-image-2 能力。
nano-banana-fastChat / Generations / Edits当前渠道特价版 nano-banana,基于 gemini-2.5-flash-image,支持文生图、图生图。
nano-bananaChat / Generations / Edits当前渠道官方直连 nano-banana,基于 gemini-2.5-flash-image,支持文生图、图生图和 OpenAI 兼容接口。
nano-banana-2Chat / Generations / Edits当前渠道 gemini-3.1-flash-image-preview 图像模型,支持 1K、2K、4K。
nano-banana-2-clChat / Generations / Edits当前渠道 nano-banana 2 稳定渠道,支持 1K、2K。
nano-banana-2-4k-clChat / Generations / Edits当前渠道 nano-banana 2 4K 渠道,支持 4K。
nano-banana-proChat / Generations / Edits当前渠道高质量图像模型,支持 1K、2K、4K。
nano-banana-pro-vtChat / Generations / Edits当前渠道gemini-3-pro-image-preview VT 渠道,支持 1K、2K、4K。
nano-banana-pro-clChat / Generations / Edits当前渠道Pro 备用稳定渠道,支持 1K、2K、4K。
nano-banana-pro-vipChat / Generations / Edits当前渠道Pro 高成本稳定渠道,支持 1K、2K。
nano-banana-pro-4k-vipChat / Generations / Edits当前渠道Pro 4K 高成本稳定渠道。
gemini-3.1-flash-image-previewChat / Generations / Edits兼容 nano-banana-2 能力。
gemini-3-pro-image-previewChat / Generations / Edits兼容 nano-banana-pro-vt 能力。
seedream-4.6Chat / Generations / EditsSeedream 系列绘图修图模型,适合海报级商用生图和 P 图,默认高分辨率,支持自定义比例。
seedream-4.7Chat / Generations / EditsSeedream 系列绘图修图模型,适合海报级商用生图和 P 图,默认高分辨率,支持自定义比例。
seedream-5.0Chat / Generations / EditsSeedream 5.0 旗舰绘图修图模型,适合海报级商用生图、P 图和连续编辑,支持自定义比例。
jimeng-4.0Chat / Generations / Edits即梦 4.0 中文绘图修图模型,适合海报级商用生图、P 图和连续编辑。
jimeng-4.1Chat / Generations / Edits即梦 4.1 中文绘图修图模型,适合海报级商用生图、P 图和连续编辑。
jimeng-4.5Chat / Generations / Edits即梦 4.5 中文绘图修图模型,适合海报级商用生图、P 图和连续编辑。

对话模型

模型接口模型说明
gemini-3.1-proChat当前渠道Gemini 3.1 Pro,对话、识图、推理。
gemini-3.1-flash-liteChat当前渠道Gemini 3.1 Flash Lite,对话、识图、推理。
gemini-3.5-flashChat当前渠道Gemini 3.5 Flash,对话、识图、推理。
gemini-3-flashChat当前渠道Gemini 3 Flash,对话、识图。
gemini-3-proChat当前渠道Gemini 3 Pro,对话、识图、推理。
gemini-2.5-flashChat当前渠道Gemini 2.5 Flash,对话、识图。
gemini-2.5-proChat当前渠道Gemini 2.5 Pro,对话、识图、推理。

视频调用示例

视频统一使用异步任务接口。提交阶段只负责创建任务,查询阶段轮询 statusprogress 和最终视频 URL。

提交任务

bash
curl -sS --max-time 90 https://video.opencodex.uk/v1/video/generations \
  -H "Authorization: Bearer sk-你的API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "sora-2-4s",
    "prompt": "生成一个4秒视频:一杯咖啡放在木桌上,窗外阳光照进来,蒸汽缓慢升起,真实摄影风格,16:9",
    "duration": 4
  }'

查询任务

bash
curl -sS https://video.opencodex.uk/v1/video/generations/task_xxx \
  -H "Authorization: Bearer sk-你的API_KEY"

完成后的响应通常是 NewAPI 任务包装结构,视频地址在以下字段之一:

  • data.result_url
  • data.data.url
  • data.data.video_url
  • 兼容响应里的顶层 urlvideo_url

调用方不要只读取顶层 url,应按上面的顺序兼容解析。

可替换的模型和推荐时长:

模型duration提示词时长
seedance-2.04–15duration 一致
seedance-2.0-fast-5s5固定 5 秒;省略 duration 时自动使用 5
seedance-2.0-fast-10s10固定 10 秒;省略 duration 时自动使用 10
seedance-2.0-fast-15s15固定 15 秒;省略 duration 时自动使用 15
seedance-2.0-mini4–15duration 一致
sora-244秒
sora-2-4s44秒
sora-2-8s88秒
sora-2-12s1212秒
seedance-1.5-pro55秒
seedance-1.5-pro-5s55秒
seedance-1.5-pro-10s1010秒
seedance-1.5-pro-12s1212秒
seedance-1.0-fast55秒
seedance-1.0-fast-5s55秒
seedance-1.0-fast-10s1010秒
seedance-1.0-mini55秒
seedance-1.0-mini-10s1010秒
seedance-1.0-pro55秒
seedance-1.0-pro-10s1010秒

jimeng-agent 当前走 Chat 接口,更适合轻量图文/视频 agent 任务;工具站的视频生成主流程建议优先使用上表固定时长视频模型。

Python 异步调用示例

python
import os
import time
import requests

API_KEY = os.environ["VIDEO_OPEN_CODEX_API_KEY"]
BASE_URL = "https://video.opencodex.uk"

headers = {
    "Authorization": f"Bearer {API_KEY}",
    "Content-Type": "application/json",
}

payload = {
    "model": "sora-2-4s",
    "prompt": "生成一个4秒视频:海边日落,镜头缓慢推进,真实摄影风格,16:9",
    "duration": 4,
}

resp = requests.post(
    f"{BASE_URL}/v1/video/generations",
    headers=headers,
    json=payload,
    timeout=90,
)
resp.raise_for_status()
data = resp.json()
task_id = data["task_id"]

def get_status(task):
    payload = task.get("data") if isinstance(task.get("data"), dict) else task
    return str(payload.get("status", "")).lower()

def get_video_url(task):
    payload = task.get("data") if isinstance(task.get("data"), dict) else task
    nested = payload.get("data") if isinstance(payload.get("data"), dict) else {}
    return (
        payload.get("result_url")
        or payload.get("url")
        or payload.get("video_url")
        or nested.get("url")
        or nested.get("video_url")
    )

while True:
    task_resp = requests.get(
        f"{BASE_URL}/v1/video/generations/{task_id}",
        headers={"Authorization": f"Bearer {API_KEY}"},
        timeout=30,
    )
    task_resp.raise_for_status()
    task = task_resp.json()
    status = get_status(task)

    print(status, task.get("progress") or task.get("data", {}).get("progress"))

    if status in ("success", "succeeded", "completed"):
        print(get_video_url(task))
        break
    if status in ("failure", "failed", "error", "cancelled", "canceled"):
        raise RuntimeError(task)

    time.sleep(20)

Node.js 异步调用示例

javascript
const apiKey = process.env.VIDEO_OPEN_CODEX_API_KEY;
const baseUrl = "https://video.opencodex.uk";

const createResp = await fetch(`${baseUrl}/v1/video/generations`, {
  method: "POST",
  headers: {
    Authorization: `Bearer ${apiKey}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    model: "sora-2-4s",
    prompt: "生成一个4秒视频:海边日落,镜头缓慢推进,真实摄影风格,16:9",
    duration: 4,
  }),
  signal: AbortSignal.timeout(90000),
});

if (!createResp.ok) {
  throw new Error(`${createResp.status} ${await createResp.text()}`);
}

const created = await createResp.json();
const taskId = created.task_id;

function getTaskPayload(task) {
  return task?.data && typeof task.data === "object" ? task.data : task;
}

function getVideoUrl(task) {
  const payload = getTaskPayload(task);
  const nested = payload?.data && typeof payload.data === "object" ? payload.data : {};
  return payload?.result_url || payload?.url || payload?.video_url || nested.url || nested.video_url;
}

while (true) {
  const taskResp = await fetch(`${baseUrl}/v1/video/generations/${taskId}`, {
    headers: { Authorization: `Bearer ${apiKey}` },
    signal: AbortSignal.timeout(30000),
  });

  if (!taskResp.ok) {
    throw new Error(`${taskResp.status} ${await taskResp.text()}`);
  }

  const task = await taskResp.json();
  const payload = getTaskPayload(task);
  const status = String(payload.status || "").toLowerCase();
  console.log(status, payload.progress);

  if (["success", "succeeded", "completed"].includes(status)) {
    console.log(getVideoUrl(task));
    break;
  }
  if (["failure", "failed", "error", "cancelled", "canceled"].includes(status)) {
    throw new Error(JSON.stringify(task));
  }

  await new Promise((resolve) => setTimeout(resolve, 20000));
}

图片参考生成视频

Seedance 2.0 Fast 固定时长模型使用 JSON 图片 URL。单图写成 image.url

bash
curl -sS --max-time 120 https://video.opencodex.uk/v1/videos/generations \
  -H "Authorization: Bearer sk-你的API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2.0-fast-5s",
    "prompt": "保持参考图中的角色、服装和构图,镜头缓慢推进,动作自然,无字幕",
    "duration": 5,
    "resolution": "720p",
    "aspect_ratio": "16:9",
    "image": {"url": "https://cdn.example.com/reference.jpg"}
  }'

多图参考使用 images[].url,数组顺序就是参考顺序:

json
{
  "model": "seedance-2.0-fast-10s",
  "prompt": "参考人物、服装和场景,生成自然连贯的镜头",
  "duration": 10,
  "resolution": "720p",
  "aspect_ratio": "9:16",
  "images": [
    {"url": "https://cdn.example.com/person.jpg"},
    {"url": "https://cdn.example.com/clothes.jpg"},
    {"url": "https://cdn.example.com/scene.jpg"}
  ]
}

Fast 参考图必须是服务端可访问的公网 HTTPS URL;不接受本地文件直接上传。旧的字符串写法 "image":"https://...""images":["https://..."] 仍兼容。

图片输入建议使用 OpenAI/Sora 兼容入口 POST /v1/videos,并使用 multipart/form-data 上传图片。2026-06-10 已实测 sora-2-4sseedance-1.5-pro-5sseedance-1.0-fast-5s 使用 image=@start.png 可以完成图生视频任务。

bash
curl -sS --max-time 120 https://video.opencodex.uk/v1/videos \
  -H "Authorization: Bearer sk-你的API_KEY" \
  -F "model=sora-2-4s" \
  -F "prompt=基于这张图片生成一个4秒视频:让主体轻微运动,保持原图风格,无文字,16:9" \
  -F "duration=4" \
  -F "size=1280x720" \
  -F "image=@/path/to/input.png"

也可以传入服务端可访问的图片 URL:

bash
curl -sS --max-time 120 https://video.opencodex.uk/v1/videos \
  -H "Authorization: Bearer sk-你的API_KEY" \
  -F "model=sora-2-4s" \
  -F "prompt=基于这张图片生成一个4秒视频:镜头轻微推进,保持原图风格,无文字,16:9" \
  -F "duration=4" \
  -F "size=1280x720" \
  -F "image=https://example.com/reference.jpg"

注意:

  • 图片 URL 必须能被服务端访问。
  • 图片文件字段按 Sora 兼容格式使用 image;本地源码同时保留 input_referenceimagesimage 字段的 JSON 兼容处理,但公网实测通过的是 /v1/videos multipart image
  • image 可作为单张首帧/参考图输入。尾帧或首尾双图字段暂不标注为稳定能力;如需接入 UI,应先单独验证具体字段名和实际生成效果。
  • 如果模型暂不支持图生视频,接口可能返回 400model_not_foundunsupported503 或普通文本错误。
  • 建议先用 sora-2-4s 做小样测试,再切换到更长时长或更贵模型。

视频参数

/v1/videos 按 Sora 兼容格式提交异步视频任务。当前建议使用以下参数:

参数类型说明
modelstring必填。使用本站模型名,如 seedance-2.0-fast-5ssora-2-4sseedance-1.5-pro-5s
promptstring必填。视频提示词。
aspect_ratiostringFast 固定时长模型支持 16:99:161:1;标准版/Mini 另支持 21:93:44:3
resolutionstringFast 固定时长模型固定 720p;标准版/Mini 支持 480p720p。均不支持 1080p / 4K。
audiobooleanSeedance 2.0 可选。是否生成原生音频,默认 true
imagefile、string 或 {url}可选。Fast 使用公网 HTTPS image.url;其他兼容模型可使用图片文件或 URL。
imagesstring[] 或 {url}[]Fast 多图参考数组;推荐 { "url": "https://..." },字符串数组继续兼容。
image_urlstringSeedance 2.0 主参考图;支持 HTTPS 直链或 data:image/...;base64,...
reference_image_urlsstring[]Seedance 2.0 多模态额外参考图;与 image_url 合计最多 4 张。
reference_videosstring[]Seedance 2.0 参考视频 HTTPS 数组;最多 3 条,总时长不超过 15 秒。
reference_audiosstring[]Seedance 2.0 参考音频 HTTPS 数组;最多 1 条且不超过 15 秒。
first_image_url / last_image_urlstringSeedance 2.0 首尾帧,必须成对使用;与多模态参考素材互斥。
input_referencestring可选。JSON 兼容字段,本地会识别为图片输入;公网已稳定实测的是 multipart image
durationnumber可选。视频秒数;固定时长模型建议与模型名一致。
secondsstring可选。兼容部分写法;与 duration 二选一即可。
sizestring可选。推荐 1280x720720x1280
width / heightnumber可选。Sora 兼容字段,按具体模型能力决定是否生效。
fpsnumber可选。按具体模型能力决定是否生效。
seednumber可选。按具体模型能力决定是否生效。
nnumber可选。按具体模型能力决定是否生效。
response_formatstring可选。按具体模型能力决定是否生效。
metadataobject/string可选。任务元数据。

图片模型调用示例

图片模型支持三种常用入口:

text
POST /v1/chat/completions
POST /v1/images/generations
POST /v1/images/edits

图片生成

bash
curl -sS --max-time 180 https://video.opencodex.uk/v1/images/generations \
  -H "Authorization: Bearer sk-你的API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-image-2",
    "prompt": "海报级商业产品图:一瓶香水放在黑色镜面台面上,背景有柔和金色光斑,文字留白区域清晰,16:9",
    "n": 1,
    "size": "1024x1024"
  }'

Chat 方式生成图片

bash
curl -sS --max-time 180 https://video.opencodex.uk/v1/chat/completions \
  -H "Authorization: Bearer sk-你的API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedream-5.0",
    "messages": [
      {
        "role": "user",
        "content": "生成一张海报级商用图片:红色跑车停在夜晚城市街头,霓虹灯反射在车身上,电影感,16:9"
      }
    ]
  }'

图片编辑

/v1/images/edits 使用 multipart/form-data,字段名按 OpenAI 兼容格式传入:

bash
curl -sS --max-time 180 https://video.opencodex.uk/v1/images/edits \
  -H "Authorization: Bearer sk-你的API_KEY" \
  -F "model=gpt-image-2" \
  -F "image=@/path/to/input.png" \
  -F "prompt=把图片中的产品背景改成高级黑金商业海报风格,保留主体轮廓和文字清晰度"

图片模型提示词建议包含:

  • 用途:海报、产品图、头像、插画、修图、P 图
  • 主体:产品、人物、场景、文字内容
  • 风格:商业摄影、电影感、极简、国潮、赛博朋克、写实插画
  • 画幅或尺寸:1:116:99:162K4K
  • 编辑约束:保留主体、替换背景、增强文字清晰度、不要改变人物五官

提示词建议

视频模型对提示词里的结构化信息比较敏感,建议包含:

  • 时长:5秒8秒10秒12秒15秒
  • 主体:人物、产品、动物、场景
  • 动作:走动、旋转、推近、环绕、慢动作
  • 风格:真实摄影、电影感、商业广告、纪录片、动漫
  • 画幅:16:99:161:1
  • 镜头:特写、远景、低机位、跟拍、航拍、缓慢推近

示例:

text
生成一个8秒视频:一名登山者站在雪山山脊上,风吹动外套,镜头从背后缓慢推近,真实摄影风格,清晨冷色调,16:9

返回结果解析

提交任务的典型返回结构:

json
{
  "task_id": "task_xxx",
  "status": "processing"
}

查询任务时,未完成通常返回:

json
{
  "task_id": "task_xxx",
  "status": "processing",
  "progress": 35
}

完成后通常会在 data.result_urldata.data.urldata.data.video_url 字段里返回视频地址:

json
{
  "code": "success",
  "data": {
    "task_id": "task_xxx",
    "status": "SUCCESS",
    "progress": "100%",
    "result_url": "https://example.com/video.mp4",
    "data": {
      "url": "https://example.com/video.mp4",
      "video_url": "https://example.com/video.mp4"
    }
  }
}

调用方应以 status 为准:processing 继续轮询,succeededcompleted 读取视频 URL,failederrorcancelled 进入失败处理。

常见错误

HTTP 状态可能原因处理方式
401API key 错误或没带 Authorization检查 Bearer sk-...
403key 无权限或额度不足检查账号额度和 key 是否可用
404路径错误视频使用 /v1/video/generations
408 / 超时提交或轮询请求超时提交超时设为 30 到 90 秒,轮询请求设为 30 秒
429请求过快或限流降低并发,稍后重试
500 / 502 / 503生成失败、生成资源池暂不可用或模型暂不可用换模型或稍后重试;如果返回“号池额度已耗尽正在切换号池,请重试”,通常是生成资源池临时不可用
model_not_found模型名不可用或当前 key 不支持该模型使用本文档中的模型名,并确认 key 可用

并发和超时建议

  • 提交任务请求建议超时:30s90s
  • 轮询任务请求建议超时:30s,轮询间隔 10s20s
  • 不要用同步长连接等待视频完成,Cloudflare 或 Nginx 可能在约 120 秒左右切断连接。
  • 客户端不要短时间大量并发提交视频任务。
  • 如果业务需要排队,建议在调用方自己做队列,一次只放少量并发请求。

异步视频接口

工具站视频生成必须使用以下异步接口:

text
POST /v1/video/generations
GET  /v1/video/generations/{task_id}

提交接口返回任务 ID,查询接口返回状态、进度和最终 URL。工具站推荐流程是:提交任务、把 task_id 入库、后台定时轮询、完成后通知用户或更新页面。

正式业务接入前,建议先用一个小样任务验证响应字段和轮询流程。

OpenAI SDK 兼容写法

OpenAI SDK 的 Chat Completions 写法可用于部分图片模型或 jimeng-agent,但不推荐用于视频生成主流程。视频生成请直接按本文档示例调用 /v1/video/generations 并轮询任务状态。