Gemini による参照画像を用いた画像生成
Gemini はプロンプトだけでなく、提供した画像から画像を生成できます。これにより、複数の画像でキャラクターを一貫させたり、実際の製品のスクリーンショットを生成シーン内にレンダリング(架空のものではなく)したりすることが可能です。
モデルごとの制限
2026年9月19日時点の Gemini API 画像生成ドキュメントから引用。モデル名と制限は変更されるため、依存する前に最新のページを再確認してください。
参照画像は合計で最大14枚まで。カテゴリごとのサブ制限は共通プールではなく、それぞれ独立した割り当てです。
| モデル | objects | characters | style |
|---|---|---|---|
gemini-3.1-flash-image | 10 | 4 | 3 |
gemini-3-pro-image | 6 | 5 | - |
gemini-3.1-flash-lite-image | 14 | - | - |
製品スクリーンショットとキャラクターのポートレートは、したがって予算を奪い合いません。1枚の画像に複数のスクリーンと複数の人物を含めることができます。
カテゴリは推測されるものであり、宣言されるものではありません。 AI SDK やゲートウェイを通じては、区別のない file パーツを送信します。「これはキャラクターです」というフィールドはありません。14を実際の上限として扱い、十分に余裕を持ってください。カテゴリ制限はモデルが何をできるかを示すものであり、あなたがアサートできるものではありません。実際には、2つのスクリーンと2人の人物で十分です。
呼び出し方
Vercel AI Gateway 経由では、画像モデルは言語モデルとして動作します。つまり、テキスト API に対して画像を files に含めて応答します。専用の画像 API は拒否する可能性があるため、自社のプロバイダルートがどのように公開しているかを確認してください。
const result = await generateText({
model,
prompt: [{ role: 'user', content: [
...references.map((r) => ({ type: 'file', mediaType: r.mediaType, data: r.bytes })),
{ type: 'text', text: prompt }, // 画像を先に、次に指示
]}],
providerOptions: { google: {
responseModalities: ['IMAGE'],
imageConfig: { aspectRatio: '4:5', imageSize: '2K' },
}},
});
const file = result.files.find((f) => f.mediaType.startsWith('image/'));
アスペクト比: 1:1 3:2 2:3 3:4 4:3 4:5 5:4 9:16 16:9 21:9。サイズ: 512px 1K 2K 4K。
トラップ
1. 参照画像が添付されている場合、「no watermarks」と記述しないでください。 Gemini はそれを「与えられた画像からウォーターマークを除去せよ」というリクエストと解釈し、呼び出し全体を拒否するようです。2026年9月に測定、プロンプト末尾2回、2枚の参照画像を添付:
| プロンプト末尾 | 結果 |
|---|---|
| "Never an illustration, a 3D render..." | image, image |
| "People, faces, hands... are all welcome." | image, image |
| "No other company's logo." | image, image |
| "No watermarks." | content-filter, content-filter |
ウォーターマークに関する表現だけがトリガーとなりました。他の画像ツールからコピーしたネガティブプロンプト(多くは watermark, over-saturated, stock-image で終わる)は、静かにすべての呼び出しを破壊する可能性があります。
2. 拒否はモデルの不安定性のように見えます。 返ってくるのは finishReason: 'content-filter'、ファイルゼロ、空文字列です。エラーメッセージが result.text を出力するだけの場合、何も表示されず API が信頼できないと結論づけるでしょう。常に finishReason をログに記録してください。
3. 空のレスポンスは、例外をスローする前にリトライしてください。 モデルはごく普通の理由で何も返さないことがあります。試行回数を使い切った後にのみ例外をスローし、finishReason をエラーに含めてください。
4. 提供されたスクリーンに何が表示されているかを説明しないでください。 スクリーンショットはすでにそこにあります。その内容を言葉で説明すると画像と競合し、ハイブリッドな結果を生み出します。それを配置するシーン(テーブル、光、手など)だけを説明してください。
5. モデルは再描画します。ペーストはしません。 参照スクリーン上の小さなテキストは、微妙に文字化けして返ってくることがあり、もっともらしいが誤った名前やラベルが含まれます。これはサムネイルサイズでは問題ありませんが、読者が拡大して見るものには適しません。出力を確認し、忠実度を前提としないでください。
6. 参照画像を使用しても、出力の合成感は軽減されません。 実際のスクリーンショットと実際のポートレートから構築された画像でも、依然として AI 生成です。生成画像の使用に適用されるラベル付けや開示ルールに従ってください。参照画像が免除されると決めつけず、自分に適用されるルールを確認してください。
参照画像パイプラインのチェックリスト
- 参照パーツはテキストパーツの前に配置する。
- 参照画像は14枚未満。理想的には4枚以下。
- プロンプトは、提供されたスクリーンの内容ではなく、シーンを説明する。
- プロンプトにウォーターマークに関する表現を含めない。
finishReasonをログに記録し、空の結果はリトライする。- 公開前に、出力内の小さなテキストが文字化けしていないか確認する。