前言
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-flash | Omni Flash(文/图生视频) | video_url |
| omni-pro | Omni Pro(文/图生视频) | video_url |
| seedance-2 | Seedance 2.0(文/图生视频) | video_url |
| gpt-image-2 | ChatGPT Image 2(文/图生图) | image_url |
| nano-banana-2 | Nano 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:9、9: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 官网登录后的账户页即可获取,复制进代码就能跑起来。