Gemini画像が3枚とも同じになる問題をプロンプトだけで解決

プログラミング

はじめに:複数候補生成の落とし穴

ブログのアイキャッチやセクション画像を効率的に準備するため、複数の画像生成サービスを検討してきました。その結果、コストパフォーマンスと生成品質のバランスを理由に Gemini 2.5 Flash Image を採用することにしました。一定枚数の無料枠が用意されている点も、運用上の利点です。

ところが実際の運用で予想外の課題に直面しました。同一のプロンプトで複数枚を一度に生成しようとすると、視覚的に見分けがつかない画像が返される という問題です。これでは、ユーザーに候補から選ばせる UI を設計することが難しくなります。当記事では、この問題を プロンプト側の工夫だけで解決する方法 をお伝えします。

問題が起きる場面

プロンプト例:「cloud computing service, expensive cost」
返された 3 枚:
  1 枚目 → 雲とドル記号のイラスト
  2 枚目 → 雲とドル記号(色がやや異なる程度)
  3 枚目 → 雲とドル記号(角度がやや異なる程度)

選択肢として機能させるには、各候補が 一目瞭然に異なる 必要があります。色や角度の微妙な差では、ユーザーの選択行為が意味をなしません。

先に結論を示します

本記事で紹介する対策のポイント:

  • 根本原因:Gemini 2.5 Flash Image の API に seed パラメータが公開されていない状態(確認時点:2026 年 4 月)
  • 対応方法:各生成パターンごとに、構図・タッチ・色調の異なるテキストをプロンプト末尾に付加する
  • 結果:視覚的に明確に区別できる 3 枚が安定して得られる
  • 実装規模:JavaScript でわずか 10 行程度

原因の詳細:乱数シード制御が非公開

画像生成モデルが同じ出力を繰り返す根拠は、乱数シードの固定にあります。seed を変えれば異なる画像が得られるはずなのですが、Gemini 2.5 Flash Image の現行 API リファレンスでは seed パラメータが未公開 の状況です。

Google Gemini API 公式ドキュメントで利用可能なパラメータを確認しても、画像の多様性に対する直接的な制御手段は限定的です。言い替えれば、API の初期設定では、同じプロンプトを繰り返すと同じ画像が帰ってくることが標準動作 となっているわけです。

UI フロー上の課題

想定していた運用パターン:

  1. 記事ごとに「アイキャッチ 1 枚」と「セクション挿絵 3~5 枚」を用意
  2. 各スロットで 3 通りの候補を同時生成
  3. ウェブ UI で「候補から 1 枚を選択」して掲載

このフローが成立するには、候補画像 3 枚が視覚的に十分に異なっている ことが前提になります。差異が微妙では、選択肢としての役割を果たしません。


解決策:プロンプトに「見た目の指示」を挿入する

異なる視覚特性を持つ画像を引き出すには、プロンプト自体を変化させる必要があります。各 index に応じて「構図」「表現技法」「色の扱い」を暗示するテキストをプロンプト末尾に追加するのが有効です。

const VARIATION_HINTS = [
  "wide establishing shot, minimalist composition, flat illustration style",
  "close-up detail view, isometric perspective, vibrant color palette",
  "abstract conceptual illustration, alternate angle, muted tones",
];

function buildVariedQuery(baseQuery: string, index: number): string {
  const hint = VARIATION_HINTS[index % VARIATION_HINTS.length];
  return hint ? `${baseQuery}, ${hint}` : baseQuery;
}

// 実装例
for (let i = 0; i < 3; i++) {
  const prompt = buildVariedQuery("cloud computing service", i);
  const image = await gemini.getImage({ query: prompt, ... });
  candidates.push(image);
}

この調整により、3 枚の特性はこのように分かれます:

  • 1 枚目:俯瞰的で落ち着いた表現
  • 2 枚目:近接的でダイナミックな視点
  • 3 枚目:象徴的・概念的なアプローチ

見比べると、差異が明白になります。


ヒント設計の考え方:3 つの独立軸を組み合わせる

並べた時に「これらは別物だ」と即座に認識できるようにするには、互いに影響しない要素を軸として選ぶ必要があります。採用した 3 つの軸は次のようになります:

1 枚目 2 枚目 3 枚目
視点・構図 wide establishing close-up detail abstract conceptual
表現技法 flat illustration isometric abstract
色の使い方 minimalist vibrant muted

選定の根拠:

  • 視点・構図:引きの画・寄りの画・抽象表現は、構図レベルで最も識別効果が高い軸です
  • 表現技法:フラット / アイソメトリック / アブストラクトは、モデルが安定して反応し、スタイルの一貫性が保たれます
  • 色の使い方:ミニマル配色・鮮やかな配色・抑えた配色は、見た目の印象を大きく左右し、選別判断が容易です

試行の過程では「sunny vs rainy vs night」といった光の設定も検討しましたが、テーマによっては親和性が低くなり、結果にノイズが入る傾向が出ました。※ 汎用的かつテーマに沿う軸を選ぶことが、安定した効果につながります。

実用枚数:3~4 枚が現実的

VARIATION_HINTS の数を増やせば、より多くの候補を作成できます。ただし実際に複数パターンを試した限りでは、5 枚以上になると「内容との関連性」が後退し「構図のバリエーション」が前景に出て、選択判断が却って複雑になる傾向が見られました。実運用では 3~4 枚 が適切と考えられます。


補足:より詳細な制御 – 人物出現を抑制する

基本:構図ヒントだけでも効果あり

ここまでの手法で、候補間の視覚的な違いはかなり実現できます。

オプション:人物を含めない指示

Gemini 2.5 Flash Image は、「computing cost」や「API design」といった抽象的なテーマに対しても、人物を登場させやすい傾向 が観察されています。2026 年 4 月時点での複数試行(合計 150 枚程度)に基づくと、人物除外の指示なしでは人物が混在する確率が約 60% に及んでいました。

技術系の記事では、人物がアイキャッチに映り込むと「人に関する内容」という誤った予想を与えやすくなります。無人の画像の方が、読者は本文に集中しやすくなります。

プロンプト末尾に否定指示を組み込むことで、この傾向を大幅に軽減できます:

const NO_HUMAN_SUFFIX =
  "no people, no person, no human, no face, no hands, no body, object-only scene";

function buildVariedQuery(baseQuery: string, index: number): string {
  const hint = VARIATION_HINTS[index % VARIATION_HINTS.length];
  return hint
    ? `${baseQuery}, ${hint}, ${NO_HUMAN_SUFFIX}`
    : `${baseQuery}, ${NO_HUMAN_SUFFIX}`;
}

同じ程度の試行回数で、この指示を加えた後の人物混在率は約 10% にまで低下しました。※ 完全排除には至らない点に留意が必要です。base query に「developer」「team」といった 人物を強く示唆する語句 が入っている場合、プロンプト全体では肯定的な指示が優先されるためです。

より確実な対策は、上流(キーワード候補の段階)でも人物を避ける 仕組みを作ることです:

## 画像生成用キーワード生成 - 重要指針
- 人物・顔・手足を含めない
- NG 例:people, person, man, woman, face, hand, body など
- OK 例:object, workspace, diagram, device, scene, landscape など

上流と下流の両段階で人物を制限することで、不要な人物出現をより効果的に削減できます。


応用:他の画像生成サービスへの転用

本手法は Gemini 2.5 Flash Image に限りません。seed 制御が困難な他のサービスにも応用できます:

サービス seed の状況 ヒント方式の適用性
DALL-E 3 指定可能性が限定的 有効(プロンプト変更により多様性が引き出せる)
Imagen 指定可能(Imagen 4 以降) 補助的有効(seed 制御と併用すると より安定)
Midjourney --s --c で制御可能 補助的(既に多様性制御が容易)

根底にある考え方は単純です。「API に同じリクエストを繰り返す」より「少しずつ異なるリクエストを送る方が、多様な結果が引き出やすい」ということです。seed が制御できる環境ではそれを活用し、制御できない環境ではプロンプト工夫で対応する。この原則は、あらゆる画像生成に応用できます。


実装時の確認事項

以下を押さえると、運用がスムーズになります:

  • 構図ヒント を 3~4 パターン用意し、index ごとに割り当てる
  • 独立した 3 軸(視点 / 表現技法 / 色彩)を組み合わせる
  • 人物対策 を上流(キーワード生成)と下流(プロンプト末尾)で実施する
  • 試行データ を取りながら、テーマごとのヒント効果を評価する
  • フロー検証 をしたら、ドキュメント化して共有する

わずか 10 行の実装で「候補から選ぶ」という UX が実現できます。同じ課題に取り組まれていましたら、ぜひお試しください。


補足:このテクニックは、ブログ記事の画像生成を効率化する過程で発見されました。FLUX や Stable Diffusion 3.5 をローカル実行で検討した後、最終的に Gemini 2.5 Flash Image に絞られた背景があります。それらのサービスとの詳細比較は、今後別記事で予定しています。

コメント