Veo 3 和 Sora 将文生视频提升到了文本生图十八个月前所达到的同一质量标准。问题在于:供应商通过候补名单、地区限制和无法与其他 AI 技术栈配合的专门计费流程限制访问。
在 Kunavo 上,目前在线的文生视频模型是Google Veo 3,通过一个 OpenAI 兼容端点提供——无需候补名单,使用 OpenAI 兼容身份验证,按视频计费,结果通过永久 URL 提供。Sora(sora-2)已列入路线图:由于端点与模型无关,之后切换到它只需修改一个单词,即 model。本指南将在约五分钟内帮你完成第一次 Veo 3 调用。完整信息请参阅 Sora API 指南。
设置
- 在 kunavo.com/app/signup 注册。充值金额从 $10 起,按量付费——足够把本指南中的每个示例都运行好几遍,而且余额永不过期。
- 在 /app/keys 创建密钥。密钥以
sk-kn-开头。 - 导出它:
export KUNAVO_API_KEY=sk-kn-...。
使用 Veo 3 进行文生视频
Veo 3 目前是市场上最适合电影感镜头的文生视频模型——它理解摄影机语言(dolly、push-in、rack focus),能在镜头切换间保持稳定的光照,并正确处理 24fps 运动。生成需要 30 秒到几分钟;HTTP 响应是同步的——请将客户端超时时间设置得较长。
import requests, os, time
KEY = os.environ["KUNAVO_API_KEY"]
resp = requests.post(
"https://api.kunavo.com/v1/video/generations",
headers={"Authorization": f"Bearer {KEY}"},
json={
"model": "veo-3",
"prompt": "A drone shot pulling back from a quiet mountain lake at dawn, mist rising off the water. Cinematic, 24fps, soft golden light.",
"aspect_ratio": "16:9",
"resolution": "1080p",
},
timeout=600, # generations take 30s to several minutes
)
resp.raise_for_status()
data = resp.json()
print(data["data"][0]["url"])duration(秒)用于在按秒计费的模型(Seedance 系列模型和 Wan 2.7)上设置片段时长。Veo 模型会忽略它;每个 Veo 片段都是 8 秒,按视频计费。
响应采用 OpenAI 风格:{ data: [{ url: '...' }] }。URL 是永久的,由 files.kunavo.com 提供——如果需要长期托管,请将其下载一次并保存到自己的存储中。
图像生成视频
使用图像进行锚定通常是获得生产级结果的关键。Veo 3 支持两种图像模式:
image_mode: "frame"——单张图像作为第一帧;两张图像作为第一帧和最后一帧。image_url的默认模式。image_mode: "reference"——最多 3 个风格参考图,用于保持角色/服装一致性,而不会强制指定帧。
# image-to-video: pass an image_url to anchor the first frame.
resp = requests.post(
"https://api.kunavo.com/v1/video/generations",
headers={"Authorization": f"Bearer {KEY}"},
json={
"model": "veo-3",
"prompt": "She smiles, then walks out of frame to the left",
"image_url": "https://files.kunavo.com/<your-upload>.jpg",
"image_mode": "frame", # one image => first frame
"aspect_ratio": "9:16", # vertical, mobile-native
},
timeout=600,
)
print(resp.json()["data"][0]["url"])如果你还没有锚定图像的公开 URL,可以将字节发送到 /v1/files,Kunavo 会将文件托管在 files.kunavo.com 下:
# If you don't have a public URL, upload bytes; Kunavo hosts the file.
with open("anchor.jpg", "rb") as f:
up = requests.post(
"https://api.kunavo.com/v1/files",
headers={"Authorization": f"Bearer {KEY}"},
files={"file": f},
)
image_url = up.json()["url"] # permanent files.kunavo.com URLSora 和其他模型
相同的端点结构适用于目录中的所有视频模型——传入相应的模型 slug:
veo-3——电影感、1080p,支持图生视频。当前已上线。seedance-2、seedance-2-5——字节跳动模型,角色运动表现非常出色。
OpenAI Sora(sora-2)已列入路线图,目前尚不能在 Kunavo 上调用。由于 /v1/video/generations 与模型无关,它上线当天,上述调用唯一需要修改的是 model 字段;在此之前,Veo 3 是同一端点上的当前可用替代模型。
查看 /models 获取当前模型列表以及每个模型的价格。
使用 Node / TypeScript
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.KUNAVO_API_KEY,
baseURL: "https://api.kunavo.com/v1",
});
// /v1/video/generations isn't in OpenAI's SDK shape, but the same auth
// header works — call it with fetch:
const resp = await fetch(
"https://api.kunavo.com/v1/video/generations",
{
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${process.env.KUNAVO_API_KEY}`,
},
body: JSON.stringify({
model: "veo-3",
prompt: "A red origami crane unfolding into a paper plane and flying away through a window",
resolution: "1080p",
}),
},
);
const { data } = await resp.json();
console.log(data[0].url);定价模式
视频模型按视频或按输出秒数计费,而不是按 token 计费:Veo 模型按视频计费,且每个片段的时长都是 8 秒;Seedance 模型和 Wan 2.7 按秒计费。Kunavo 在 /pricing 上公布每个模型的费率。一个 8 秒 Veo 3 1080p 片段的费用为 $0.42。失败的生成(4xx / 5xx)绝不会收费。
生产检查清单
- 设置 10 分钟的 HTTP 超时。网关会向上游轮询最多 540 秒;如果模型在此之后仍在处理,则返回 504。重试是一个新任务,每个成功完成的任务都会计费。对于非常长的作业,请改为提交到
/v1/videos并轮询它返回的任务:带上Idempotency-Key请求头后,用同一个幂等键再次提交会返回这个任务,而不会再启动一个新任务。 - 持久化保存结果 URL。即使 files.kunavo.com 的 URL 是永久的,你的产品也应在自己控制的存储中保留一份副本。
- 使用退避处理 429。视频模型受 GPU 资源限制,短暂争用是正常现象。如果存在 retry-after 标头,系统会遵守它。
- 条件允许时按提示词哈希缓存。同一个提示词发送两次,会生成两个片段并计费两次:网关不会复用之前的结果,也不会向模型发送 seed。
问题请发送至:contact@kunavo.com。网关背后的团队会阅读每封邮件,并在 24 小时内回复。