news 2026/6/15 11:55:51

用 REST API 对接 Omni Flash:网页版 AI 视频生成器的接入实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
用 REST API 对接 Omni Flash:网页版 AI 视频生成器的接入实战

前言

Omni Flash 是一款 online 的网页版 AI 视频生成器,基于 Google 视频 AI,支持 text-to-video、image-to-video,可输出 16:9 / 9:16 比例,适合广告、社媒短视频、产品演示等场景。除了在网页里直接出片,它还开放了一套简洁的 REST API,方便把视频/图片生成能力嵌进自己的服务里。

本文从技术角度走一遍完整对接流程:拿 Key、鉴权、提交任务、轮询结果,并给出可直接运行的 Python / Node.js 封装。

一、准备工作:获取 API Key

接口采用 Bearer Token 鉴权,所有请求都要带一个sk-开头的密钥。

去官网 Omni Flash 登录后,在账户页(Account / API Keys)即可生成并复制你的密钥,形如:

sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

请求头统一带上:

Authorization: Bearer sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

如果 Key 缺失或无效,服务端会直接返回 HTTP 401。

二、支持的模型

model_id只接受以下取值,选错会被拒绝:

MODEL_ID能力输出
omni-flashOmni Flash(文/图生视频)video_url
omni-proOmni Pro(文/图生视频)video_url
seedance-2Seedance 2.0(文/图生视频)video_url
gpt-image-2ChatGPT Image 2(文/图生图)image_url
nano-banana-2Nano Banana 2(文/图生图)image_url

视频类模型返回video_url,图片类模型返回image_url,下游解析时要按模型区分。

三、创建任务

提交一个生成请求,接口会立即返回task_id,后续靠它轮询。

接口

POST https://omniflash.net/api/v1/tasks/create

请求体

{"model_id":"gpt-image-2","prompt":"a serene zen garden at sunrise, ultra detailed","image_urls":[],"aspect_ratio":"16:9"}

字段说明:

  • model_id(必填):上表中的模型 ID。
  • prompt(必填):文本描述。
  • image_urls(可选):源图地址数组,做图生视频/图生图时传入。
  • aspect_ratio(可选):输出比例,如16:99:16

cURL 示例

curl-XPOST https://omniflash.net/api/v1/tasks/create\-H"Authorization: Bearer sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"\-H"Content-Type: application/json"\-d'{ "model_id": "gpt-image-2", "prompt": "a serene zen garden at sunrise", "aspect_ratio": "16:9" }'

响应

{"code":200,"msg":"提交成功,等待生成","data":{"task_id":"abcdef123456","request_id":"kie_xxxxxxxxxxxx","credits":15}}

积分在提交时即扣除,任务失败会自动退还,所以不用担心扣了钱却没出片。

四、轮询任务结果

拿到task_id后,轮询直到task_status变成 3(成功)或 4(失败)。

接口

GET https://omniflash.net/api/v1/tasks/{task_id}

cURL 示例

curlhttps://omniflash.net/api/v1/tasks/abcdef123456\-H"Authorization: Bearer sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

响应

{"code":200,"msg":"ok","data":{"task_id":"abcdef123456","task_status":3,"task_type":"image","model_id":"gpt-image-2","image_url":"https://your-cdn.com/...","video_url":null,"audio_url":null,"credits":15,"created_at":1730000000}}

task_status状态机:

  • 1排队中
  • 2生成中
  • 3成功(从video_url/image_url取结果)
  • 4失败(看msg

五、Python 封装(提交 + 轮询一把梭)

importtimeimportrequests BASE="https://omniflash.net"API_KEY="sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"HEADERS={"Authorization":f"Bearer{API_KEY}"}defcreate_task(model_id,prompt,image_urls=None,aspect_ratio="16:9"):payload={"model_id":model_id,"prompt":prompt,"image_urls":image_urlsor[],"aspect_ratio":aspect_ratio,}r=requests.post(f"{BASE}/api/v1/tasks/create",json=payload,headers=HEADERS)r.raise_for_status()data=r.json()["data"]returndata["task_id"]defwait_for_result(task_id,interval=5,timeout=600):deadline=time.time()+timeoutwhiletime.time()<deadline:r=requests.get(f"{BASE}/api/v1/tasks/{task_id}",headers=HEADERS)r.raise_for_status()data=r.json()["data"]status=data["task_status"]ifstatus==3:returndata.get("video_url")ordata.get("image_url")ifstatus==4:raiseRuntimeError(f"任务失败:{data.get('msg')}")time.sleep(interval)raiseTimeoutError("轮询超时")if__name__=="__main__":tid=create_task("omni-flash","a cat surfing on a rainbow wave")url=wait_for_result(tid)print("生成结果:",url)

六、Node.js 封装

constBASE="https://omniflash.net";constAPI_KEY="sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";constheaders={Authorization:`Bearer${API_KEY}`,"Content-Type":"application/json",};asyncfunctioncreateTask(modelId,prompt,opts={}){constres=awaitfetch(`${BASE}/api/v1/tasks/create`,{method:"POST",headers,body:JSON.stringify({model_id:modelId,prompt,image_urls:opts.imageUrls||[],aspect_ratio:opts.aspectRatio||"16:9",}),});constjson=awaitres.json();returnjson.data.task_id;}asyncfunctionwaitForResult(taskId,interval=5000,timeout=600000){constdeadline=Date.now()+timeout;while(Date.now()<deadline){constres=awaitfetch(`${BASE}/api/v1/tasks/${taskId}`,{headers});const{data}=awaitres.json();if(data.task_status===3)returndata.video_url||data.image_url;if(data.task_status===4)thrownewError(`任务失败:${data.msg}`);awaitnewPromise((r)=>setTimeout(r,interval));}thrownewError("轮询超时");}(async()=>{consttid=awaitcreateTask("omni-flash","a cat surfing on a rainbow wave");console.log("生成结果:",awaitwaitForResult(tid));})();

七、错误处理约定

  • code: 200—— 成功。
  • code: 0—— 业务失败,具体原因看msg字段。
  • HTTP 401—— Key 无效或缺失,检查Authorization头。

实际接入时建议把code !== 200统一抛异常,并对网络层做重试。

小结

整套对接非常轻量:一个 POST 提交任务、一个 GET 轮询结果,鉴权就一个 Bearer Token。因为 Omni Flash 本身是网页版 online 服务,你既可以在浏览器里手动出片,也可以用上面的封装把文/图生视频能力接进自己的后端或自动化流水线。Key 在 Omni Flash 官网登录后的账户页即可获取,复制进代码就能跑起来。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 11:45:51

3分钟搞定Linux启动盘:Deepin Boot Maker终极使用指南

3分钟搞定Linux启动盘&#xff1a;Deepin Boot Maker终极使用指南 【免费下载链接】deepin-boot-maker 项目地址: https://gitcode.com/gh_mirrors/de/deepin-boot-maker 还在为复杂的Linux系统安装而头疼吗&#xff1f;想要一个简单好用的启动盘制作工具&#xff1f;D…

作者头像 李华
网站建设 2026/6/15 11:34:50

2026青岛旅游就餐必看!老牌连锁海鲜烧烤馄饨店,本地人推荐攻略

青岛&#xff0c;这座美丽的海滨城市&#xff0c;以其独特的海洋文化和丰富的美食资源吸引着无数游客。青岛的烧烤文化更是独具特色&#xff0c;它承载着这座城市的烟火气和人们的情感记忆。然而&#xff0c;对于游客来说&#xff0c;找到一家正宗、不踩雷的青岛本地烧烤餐厅并…

作者头像 李华
网站建设 2026/6/15 11:34:50

进程属性深入了解(下篇):调度、资源与权限属性

在上篇中&#xff0c;我们了解了进程的标识、状态和内存属性。下篇我们聚焦进程的运行调度、IO 资源、权限与家族关系&#xff0c;拆解进程在系统中运行时的进阶属性。一、进程的 “运行优先级”&#xff1a;调度类属性系统中往往同时存在几十个甚至上百个进程&#xff0c;CPU …

作者头像 李华
网站建设 2026/6/15 11:32:54

LLM 微调实践:从数据准备到训练评估的全链路工程化

LLM 微调实践&#xff1a;从数据准备到训练评估的全链路工程化 一、通用模型的领域鸿沟&#xff1a;何时该微调而非 Prompt 大语言模型在通用任务上表现优异&#xff0c;但在特定领域&#xff08;医疗诊断、法律合同分析、金融风控&#xff09;中&#xff0c;通用模型的输出往…

作者头像 李华