Gemini Omni 1.1 Flash は、テキストモデルで使用する generateContent エンドポイントではなく、Google の Interactions API を通じて、モデル ID gemini-omni-1.1-flash で呼び出します。これが人々がつまずく最初の点です。Gemini のテキストスニペットをコピーしてモデル名を交換すると、404エラーが発生します。
このガイドでは、空のターミナルからテスト済みの動画生成リクエストまでを説明します。キーの取得、curl と Python での最初の呼び出し、既存のパラメーター(そして驚くほど存在しないパラメーターリスト)、大規模な応答の処理、そしてすべてを繰り返しのテストとして保存する方法を学びます。
このモデルは2026年8月27日にGAされました。出荷された内容については、Gemini Omni 1.1 Flash の新機能をご覧ください。
開始する前に必要なもの
- AI Studio にサインインするための Google アカウント。
- Google AI Studio からの Gemini API キー。
- 課金が有効になっていること。Omni には、テキストモデルの無料レーンとは異なり、無料枠はありません。最初のリクエストから課金されます。
- HTTP リクエストを送信する方法:curl、Python SDK、または API クライアント。
キーをソースに貼り付けるのではなく、環境変数として保存してください。
export GEMINI_API_KEY="your_key_here"
公式 SDK はこの変数を自動的に読み取るため、秘密情報がリポジトリに含まれるのを防ぐことができます。
最初の動画生成呼び出し
エンドポイントは /v1beta/interactions への POST です。curl での例を次に示します。
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions?key=$GEMINI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-omni-1.1-flash",
"input": "A marble rolling fast on a chain reaction style track, continuous smooth shot."
}'
モデルと入力の2つのフィールドのみです。これが最小限のリクエスト全体です。応答には、output_video.data に base64 でエンコードされた生成された動画が含まれます。
Python では、pip install google-genai で SDK をインストールし、次のコードを実行します。
import base64
from google import genai
client = genai.Client() # reads GEMINI_API_KEY from the environment
interaction = client.interactions.create(
model="gemini-omni-1.1-flash",
input="A marble rolling fast on a chain reaction style track, continuous smooth shot.",
)
with open("marble.mp4", "wb") as f:
f.write(base64.b64decode(interaction.output_video.data))
JavaScript も @google/genai を使用して同じ形式です。
import { GoogleGenAI } from '@google/genai';
import * as fs from 'fs';
const ai = new GoogleGenAI({});
const interaction = await ai.interactions.create({
model: 'gemini-omni-1.1-flash',
input: 'A marble rolling fast on a chain reaction style track, continuous smooth shot.',
});
if (interaction.output_video?.data) {
fs.writeFileSync('marble.mp4', Buffer.from(interaction.output_video.data, 'base64'));
}
生成には時間がかかります。遅延は、継続時間、解像度、現在の API 負荷によって変動するため、何かが壊れていると判断する前に十分なクライアントタイムアウトを設定してください。
解像度とアスペクト比の制御
出力形式に関するすべては response_format に設定されます。
interaction = client.interactions.create(
model="gemini-omni-1.1-flash",
input="A drone shot of a mountain landscape at sunrise.",
response_format={
"type": "video",
"aspect_ratio": "16:9",
"resolution": "1080p",
},
)
許容される値は以下の通りです。
| フィールド | 値 | デフォルト |
|---|---|---|
type |
video |
video |
aspect_ratio |
16:9, 9:16 |
16:9 |
resolution |
360p, 720p, 1080p, 4k |
720p |
delivery |
インライン base64, uri |
インライン |
360p で下書きを作成してください。これは 720p よりも最大 60% 速く生成され、コストは3分の1であるため、15回の試行的なプロンプトの費用は以前の5回分になります。残すものはより高い解像度で再レンダリングしてください。1080p と 4k は生成されたフレームのアップスケールであり、ネイティブなレンダリングではありません。料金の内訳には、各ティアで実際に1秒あたりどれくらいの費用がかかるかが示されています。
存在しないパラメーター
このリストは上記のリストよりも重要です。なぜなら、これを知らないと午後を無駄にすることになるからです。
- システム命令なし
temperatureなしtop_pなし- 停止シーケンスなし
- ネガティブプロンプトフィールドなし
ショットから何かを除外する必要がある場合は、除外をプロンプト自体に記述してください。ドキュメントの例ではまさにそのようにしています:「動きのガイドとしてのみ描画を使用し、最終的なビデオには描画を表示しないでください。」
画像入力、キーフレーム、および参照
メディアを含める場合は、文字列の代わりにリストを渡します。画像から動画へ:
interaction = client.interactions.create(
model="gemini-omni-1.1-flash",
input=[
{"type": "image", "data": base64_image, "mime_type": "image/jpeg"},
{"type": "text", "text": "turn this into realistic footage, using the drawing only as a guide for movement, do not show the drawing in the final video"},
],
)
2つの画像が最初と最後のフレームとなり、モデルがそれらの間の動きを生成します。
interaction = client.interactions.create(
model="gemini-omni-1.1-flash",
input=[
{"type": "image", "data": first_frame_b64, "mime_type": "image/jpeg"},
{"type": "image", "data": last_frame_b64, "mime_type": "image/jpeg"},
{"type": "text", "text": "A smooth cinematic transition from a lush green forest at sunrise to a snowy forest under a starry night sky."},
],
)
動画参照もFiles APIを介して同様に機能し、各クリップは3秒、最大3クリップに制限されています。これらのクリップの音声は無視され、モデルは動きと外観のためにそれらを読み取ります。
マルチターン編集
これが Omni を単純なテキストから動画へのエンドポイントと区別する点です。一度生成した後、以前のインタラクション ID を渡すことで会話形式で編集できます。
res1 = client.interactions.create(
model="gemini-omni-1.1-flash",
input="A woman playing violin outdoors.",
)
res2 = client.interactions.create(
model="gemini-omni-1.1-flash",
previous_interaction_id=res1.id,
input="Make the violin invisible.",
)
再アップロードも、シーンの再記述も不要です。このメカニズムはシーン拡張も駆動し、これは40秒の拡張ガイドで説明されています。
4MB を超える動画の処理
4MB を超えるものはインラインの base64 ではなく URI として返され、ファイルをダウンロードする前に処理が完了している必要があります。これが、ほとんどの人が 1080p でぶつかるバグです。ハンドラが output_video.data を読み取り、何も見つからず、サイレントな失敗を報告します。
明示的に URI 配信を要求し、ポーリングします。
import time
from google import genai
client = genai.Client()
interaction = client.interactions.create(
model="gemini-omni-1.1-flash",
input="A beautiful sunset.",
response_format={"type": "video", "delivery": "uri"},
)
video_output = interaction.output_video
file_name = video_output.uri.split("/")[-1]
while True:
f_info = client.files.get(name=f"files/{file_name}")
if f_info.state.name == "ACTIVE":
break
if f_info.state.name == "FAILED":
raise RuntimeError("Generation failed.")
time.sleep(5)
video_bytes = client.files.download(file=video_output.uri)
with open("output.mp4", "wb") as f:
f.write(video_bytes)
最初から両方の形式を受け入れるように応答ハンドラを作成してください。解像度によってどちらの形式が返されるかが変わります。
Apidog でリクエストをテストする
呼び出しが機能したら、問題は変わります。これで、クリティカルパスに高価で遅く、非決定的なエンドポイントが存在し、その動作が変化したときにそれを知る必要があります。シェル履歴の場当たり的な curl コマンドではそれはわかりません。
Apidog で一度設定してください。
- プロジェクトと環境を作成します。
GEMINI_API_KEYとMODEL_IDを環境変数に設定し、キーが保存されたリクエストに書き込まれないようにします。 - リクエストを追加します。
https://generativelanguage.googleapis.com/v1beta/interactionsへの POST リクエストを送信し、modelとinputを含む JSON ボディを使用します。変数は{{MODEL_ID}}で参照します。 - タイムアウトを増やします。 動画生成はテキスト補完よりもはるかに時間がかかり、デフォルトのクライアントタイムアウトでは途中で切断されてしまいます。
- アサーションを追加します。 ステータスコードを確認し、
output_videoが存在することを確認し、予想される解像度での応答形式を確認します。これは、インラインと URI の切り替えを検出するアサーションです。 - 各タスクタイプごとに複製します。 テキストから動画へ、画像から動画へ、そして拡張機能について、それぞれ1つずつ保存されたリクエストを作成します。Google が Omni 1.2 をリリースしたとき、3つのリクエストを実行するだけで、何が変更されたかを数分で知ることができます。
Apidog は動画を生成するものでも、AI フレームワークでもありません。それは、リクエストを構築し、送信し、設定した標準に対して応答を保持する場所です。支出を増やす前にそのハーネスを導入したい場合は、Apidog をダウンロードしてください。
一般的なエラーと修正
エンドポイントで 404 エラー。 /v1beta/models/gemini-omni-1.1-flash:generateContent を呼び出しています。Omni は /v1beta/interactions を使用し、モデルはボディに指定します。
output_video.data が空。 動画が 4MB を超えたため、応答が URI として返されました。output_video.uri を読み取り、Files API を介してダウンロードしてください。
モデルが見つかりません。 設定で gemini-omni-flash-preview を確認してください。このエンドポイントは 2026年9月30日に廃止されます。
アップロード済み動画の編集に失敗。 アップロード済み動画の編集は EEA、スイス、英国では利用できません。モデル生成された動画はこれらの地域でも機能します。
拡張リクエストが拒否されました。 入力動画は最大 10 秒までで、拡張は末尾に追加するだけであり、アップロードを拡張する際に会話を追加することはできません。
FAQ
Gemini Omni はどのエンドポイントを使用しますか? POST https://generativelanguage.googleapis.com/v1beta/interactions で、リクエストボディに gemini-omni-1.1-flash を指定します。
Gemini Omni API に無料枠はありますか? いいえ。すべての生成に課金されます。無料の AI Studio レーンがあるのはテキストモデルです。
temperature やネガティブプロンプトを設定できますか? いいえ。システム命令、temperature、top_p、停止シーケンス、ネガティブプロンプトはすべてサポートされていません。除外はプロンプトテキストに記述してください。
縦型動画を生成するにはどうすればよいですか? response_format で aspect_ratio を 9:16 に設定します。
生成された動画には透かしが入っていますか? はい。すべての出力には、視聴者には見えず、プログラムで検出可能な SynthID が含まれています。
Veo API との比較はどうですか? エンドポイント、料金体系、強みが異なります。Omni 1.1 Flash vs Veo 3.1 でトレードオフについて説明しており、Veo 3.1 API ガイドにはその統合の詳細が記載されています。
統合全体は、2つの必須フィールドと、両方の配信形式に対応する応答ハンドラで構成されています。まず 360p の呼び出しを機能させ、アサーションとともに保存し、配管が信頼できるようになったら解像度を上げてみてください。公式 Omni ドキュメントで、進化するパラメーターリストを確認してください。
