Veo 3とSoraは、テキストから動画を生成する品質を、18か月前のテキストから画像生成と同じ水準まで引き上げています。ただし、プロバイダーはウェイトリスト、地域制限、そして他のAIスタックと連携しにくい個別の請求フローによってアクセスを制限しています。
Kunavoで現在利用できるテキストから動画を生成するモデルはGoogle Veo 3です。1つのOpenAI互換エンドポイントを通じて提供され、ウェイトリスト不要、OpenAI互換認証、動画単位での課金、永続URLからの結果提供に対応しています。Sora(sora-2)はロードマップに含まれています。エンドポイントはモデル非依存のため、後から切り替える際はmodelの値を1語変更するだけです。このガイドでは、約5分で最初のVeo 3呼び出しを実行できます。全体像についてはSora APIガイドをご覧ください。
セットアップ
- kunavo.com/app/signupで登録してください。$10からチャージでき、従量課金で利用できます。このガイドのサンプルをすべて数回ずつ実行するのに十分な額で、残高に有効期限はありません。
- /app/keysでキーを作成します。キーは
sk-kn-で始まります。 - エクスポートします:
export KUNAVO_API_KEY=sk-kn-...。
Veo 3によるテキスト・動画生成
Veo 3は現在、シネマティックなショット向けとして市場で最高のテキスト・動画モデルです。カメラ用語(ドリー、プッシュイン、ラックフォーカス)を理解し、カット間でも安定したライティングを生成し、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は2つの画像モードに対応しています:
image_mode: "frame"— 画像1枚の場合は最初のフレーム、画像2枚の場合は最初と最後のフレームになります。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とその他のモデル
同じエンドポイント形式がカタログ内のすべての動画モデルで機能します。該当するモデルスラッグを渡してください:
veo-3— シネマティック、1080p、画像から動画への変換に対応。現在利用可能です。seedance-2、seedance-2-5— ByteDance製で、キャラクターの動きに非常に強いモデルです。
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);料金モデル
動画モデルはトークン単位ではなく、動画単位または出力秒数単位で課金されます。Veoモデルは動画単位で、クリップはどれも8秒です。SeedanceモデルとWan 2.7は秒単位です。Kunavoは各モデルについて、/pricingで料金を公開しています。Veo 3で1080p・8秒のクリップなら、$0.42です。失敗した生成(4xx / 5xx)には一切課金されません。
本番環境チェックリスト
- HTTPタイムアウトを10分に設定します。ゲートウェイは最大540秒間上流サービスをポーリングし、それを超えてモデルが処理中の場合は504を返します。非常に長いジョブでは再試行してください。生成はプロンプト単位でべき等です。
- 結果URLを永続化します。files.kunavo.comのURLは永続的ですが、製品側でも管理下のストレージに独自のコピーを保存してください。
- 429にはバックオフを伴って対応します。動画モデルはGPUリソースに制約されるため、一時的な競合は正常です。retry-afterヘッダーが存在する場合は、その指定に従います。
- 妥当な場合はプロンプトハッシュでキャッシュします。同じプロンプトを二度送信すると、クリップが二本生成され、二度課金されます。ゲートウェイは以前の結果を再利用せず、モデルにシードも送信しません。
お問い合わせ:contact@kunavo.com。ゲートウェイのチームはすべてのメールを確認し、24時間以内に返信します。