Community画像github.com

mattmuller/gemini-reference-images

Gemini で参照画像から画像を生成するスキル。同じキャラクターを複数の画像で一貫させたり、実際の製品スクリーンショットを生成シーンに配置したり、スタイルマッチングを行う。また、画像が返されないGemini呼び出しのデバッグにも使用。

gemini-reference-images とは?

このスキルは、Gemini API を利用して参照画像から画像を生成する方法と、その際の注意点をまとめたものです。従来のテキストプロンプトに加えて、複数の参照画像を提供することで、キャラクターの一貫性維持、実際の製品画像のシーン内配置、スタイルの継承などが可能になります。対応モデルは `gemini-3.1-flash-image`、`gemini-3-pro-image`、`gemini-3.1-flash-lite-image` で、モデルごとに参照画像のカテゴリ(オブジェクト、キャラクター、スタイル)ごとに上限が設定されています。Vercel AI Gateway 経由でテキスト生成 API として呼び出し、`responseModalities: ['IMAGE']` を指定して画像を受け取ります。ウォーターマーク禁止ワードが原因でコンテンツフィルターが作動する、空レスポンスが発生するなどのトラップがあるため、`finishReason` のログ出力やリトライ処理が重要です。

対応~Claude Code~Codex CLI~Cursor✓Gemini CLI
npx skills add https://github.com/mattmuller/skills-for-agents/tree/HEAD/skills/gemini-reference-images

Installed? Explore more 画像 skills: steipete/songsee, affaan-m/frontend-design, mattpocock/improve-codebase-architecture · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

Gemini による参照画像を用いた画像生成

Gemini はプロンプトだけでなく、提供した画像から画像を生成できます。これにより、複数の画像でキャラクターを一貫させたり、実際の製品のスクリーンショットを生成シーン内にレンダリング(架空のものではなく)したりすることが可能です。

モデルごとの制限

2026年9月19日時点の Gemini API 画像生成ドキュメントから引用。モデル名と制限は変更されるため、依存する前に最新のページを再確認してください。

参照画像は合計で最大14枚まで。カテゴリごとのサブ制限は共通プールではなく、それぞれ独立した割り当てです。

モデルobjectscharactersstyle
gemini-3.1-flash-image1043
gemini-3-pro-image65-
gemini-3.1-flash-lite-image14--

製品スクリーンショットとキャラクターのポートレートは、したがって予算を奪い合いません。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 をログに記録し、空の結果はリトライする。
  • 公開前に、出力内の小さなテキストが文字化けしていないか確認する。

関連スキル