Gemini画像生成で同じ絵になる問題を構図ヒントで解決する

プログラミング

Gemini 画像生成で同じ絵になる問題を構図ヒントで解決する

Gemini 2.5 Flash Imageは、その無料枠の広さ(1日最大500枚)と生成品質の高さから、ブログのアイキャッチや記事内の挿絵作成に最適な画像生成モデルの一つです。筆者の主観的な印象ではありますが、約50スロット(150枚)の運用実績を通して、高度な画像生成API(例えばImagen 4など)と比べても遜色のない、高品質な画像を多く得られると感じています。商用利用に関する詳細は、Gemini API 公式料金ページ(2026年4月時点確認)でご確認いただけます。導入も非常に簡単で、Google AI Studioから無料で始められ、APIキーの取得も数分で完了します。

しかし、実際の運用を進める中で、ある課題に直面しました。それは、同じプロンプトで3枚の画像を連続生成すると、ほとんど同じ構図の絵が返ってくるという特性です。

例えば、以下のプロンプトで画像を生成してみましょう。

"cloud computing service, expensive cost"

このクエリで3枚生成すると、多くの場合、以下のような結果になります。

  • 1枚目: 青い雲のアイコンと上昇する折れ線グラフ
  • 2枚目: 青い雲のアイコンと上昇する折れ線グラフ(色味がわずかに異なる)
  • 3枚目: 青い雲のアイコンと上昇する折れ線グラフ(角度がわずかに異なる)

ユーザーに画像候補を「選択させる」UIを実装する際、構図がほぼ同一の3枚が並んでしまうと、選択肢としての意味が薄れてしまいます。細部のわずかな違いでは、ユーザー体験を損ねてしまう可能性があるのです。

先に結論

  • Gemini 2.5 Flash Imageの生成APIでは、seedパラメータが外部に公開されていません。(2026年4月時点、@google/generative-ai v0.x.x 環境で確認)
  • temperature パラメータは存在しますが、画像生成における出力の多様性を制御する効果は限定的です。
  • そこで、プロンプトの末尾に視点・画風・色調に関する「構図ヒント」を追記することで、視覚的に異なる複数の画像を安定して生成できるようになります。
  • この手法は、seedを外部から制御できない他の画像生成API(Imagenなど)でも応用可能です。

実現したかったこと

ブログ記事における画像運用のルールは以下の通りです。

  • アイキャッチ画像: 1枚
  • 記事内セクション画像: 3〜5枚

各スロットで3枚の候補画像を生成し、UI上で人間が最適なものを選ぶ設計を目指していました。しかし、候補画像が視覚的に明確に異なることが必須条件です。構図が同じ3枚では、選択UIを用意する意義が失われてしまいます。

// 画像選択UIのイメージを生成するためのプロンプト例
"A grid-based image selection interface showing multiple diverse image candidates for a blog post. Each image in the grid is distinct in composition and style, offering genuine choices to the user. The interface is clean and modern, with a clear 'Select' button for each candidate. The overall aesthetic is digital and user-friendly."

複数の画像候補がグリッド状に表示される選択インターフェース
複数の異なる画像がグリッド状に並んでいる選択インターフェース

解決策: 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(keywords.query, i);
  const image = await gemini.getImage({ query: prompt });
  candidates.push(image);
}

このアプローチにより、1枚目は「引きの視点でミニマルな表現」、2枚目は「寄りのアイソメトリック視点」、3枚目は「抽象的で別角度からの描写」といった具合に、視覚的な差異が明確な3枚の画像が揃うようになります。

ヒントの軸設計: なぜこの3軸か

// 複数軸で異なるデザインバリエーションを比較するグリッドレイアウトのイメージを生成するためのプロンプト例
"A conceptual grid layout illustrating different design variations across multiple axes. Each cell in the grid represents a unique combination of 'perspective', 'art style', and 'color tone'. The overall image should convey the idea of systematic variation and comparison, with a clean, illustrative style."

複数軸で異なるデザインバリエーションを比較するグリッドレイアウト
複数の軸で異なるバリエーションを比較するデザイングリッド

目標は「候補を並べたときに一見して違いが分かる」ことです。この目的を達成するため、互いに独立性の高い3つの軸を設定しました。

1枚目(軸A) 2枚目(軸B) 3枚目(軸C)
視点 wide establishing shot close-up detail view abstract conceptual
画風 flat illustration style isometric perspective abstract illustration
色調 minimalist composition vibrant color palette muted tones

各軸を選定した背景は以下の通りです。

  1. 視点の軸: 引き・寄り・抽象といった視点のレベル変動は、構図上の差異を最も大きく生み出します。Gemini画像生成モデルがこの軸に敏感に反応する傾向が観察されています。
  2. 画風の軸: flat / isometric / abstract のようなスタイルキーワードの違いは、モデルが強く認識し、一貫性のある出力を生成しやすい特性があります。
  3. 色調の軸: minimalist / vibrant / muted といった配色指定は、見た目の印象を大きく変化させるため、並べた際に識別しやすくなります。

試行錯誤の過程では、「sunny vs. rainy vs. night」といった光の軸も検討しましたが、テーマ(例: cloud cost)との相性が悪い場合があり、結果的にノイズとなることがありました。運用においては、汎用性の高い軸を選ぶことが重要です。

さらに多くの候補が必要な場合はVARIATION_HINTSを拡張することも可能ですが、5を超えると「記事との関連性」が薄れ、「構図の違い」ばかりが前面に出てしまい、かえって選択が難しくなります。実用的な目安としては、3〜4候補が最適でしょう。

発展: 人物混入を抑制する配慮

Gemini 2.5 Flash Imageは、「computing cost」や「API design」といった抽象的なキーワードであっても、しばしば人物を含んだ画像を生成する傾向があります。約50スロット(150枚)の実運用を通して、オフィスでPCを操作するビジネスパーソンのような絵が比較的高頻度で出現することが確認されました。

ブログのアイキャッチに人物が含まれると、「この記事は人に関するテーマだ」と読者が誤解しやすくなります。技術記事においては、無人の風景画やオブジェクト中心の画像の方が、読者の認識がぶれずに済みます。

プロンプトの末尾に否定指示を追加することで、人物の混入を効果的に軽減できます。

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}`;
}

このサフィックス導入の効果について、約50スロット(150枚)の主観評価ではありますが、導入前は1スロット(3枚)あたり2〜3枚に人物が混在していたのに対し、導入後は1枚未満(つまりほとんど出なくなった)という実感があります。ただし、これは統計的な厳密さを備えた評価ではありません。

ただし、この方法でも人物の完全排除は保証されません。例えば、base queryが「developer」や「team meeting」のように人物を強く示唆する場合、サフィックスの否定指示よりもbase queryの肯定指示が優先されることがあります。

より上流の対策として、LLMでキーワードを生成する段階から人物を避けるよう指示することで、さらに効果を高めることができます。

## ルール(重要)
- 人物・顔・人体の部位は含めないこと(people, person, man, woman, face, hand 等は NG)
- 代わりに object / scenery / diagram / device / workspace など無人の題材を選ぶ
// 整理されたミニマルなワークスペースのデスク環境のイメージを生成するためのプロンプト例
"A minimalist and organized workspace desk environment, devoid of any human presence. The scene features modern devices, a clean desk, and subtle decorative objects, emphasizing a calm and productive atmosphere. The lighting is soft and natural, highlighting the textures of the materials."

整理されたミニマルなワークスペースのデスク環境
ミニマルで整理された作業環境にデバイスやオブジェクトが無人で配置されたシーン

上流と下流の両段階で抑制策を講じることで、人物が混ざる頻度は顕著に低下します。

応用: 他の画像生成APIでも同じ原理

この構図ヒント手法は、Gemini 2.5 Flash Imageに特化した解決策ではありません。

  • DALL-E 3: 同様のプロンプト追記パターンが有効に機能します。
  • Imagen 4 / Fast: seedパラメータの外部制御が可能ですが、プロンプトヒントを用いることで十分な多様性を得られます。
  • Midjourney: --s--cなどのパラメータで多様性を制御できるため、サフィックスの重要度は相対的に下がります。しかし、併用することでさらに表現の幅を広げられます。

根底にある原理は、「同一プロンプトの複数実行よりも、プロンプトに差を付けた実行の方が、多様な出力が得られる」というシンプルな法則です。seedを操作できるAPIではseed制御が最も直接的な方法ですが、seedが公開されていないAPIにおいては、プロンプトの工夫によって出力に差分を生み出すことが、実用的な戦略となります。

具体的な効果検証

// 複数の異なるスタイルやアプローチが並んでいる様子を表現するプロンプト例
"A visual comparison grid showcasing different stylistic and compositional approaches to a single concept. Each panel demonstrates a distinct interpretation, highlighting variations in perspective, art style, and color palette. The overall impression is one of diverse creative solutions."

複数の異なるスタイルやアプローチが並んでいる様子
複数のサーバーから構成されるデータセンターの様子

同じクエリ「cloud computing service, expensive cost」を3つのパターンで試した結果を比較してみましょう。

パターン1: プロンプト固定(同じプロンプトを3回実行)

  • 1枚目: 青い雲アイコン + 上昇グラフ
  • 2枚目: 青い雲アイコン + 上昇グラフ(配色が薄い)
  • 3枚目: 青い雲アイコン + 上昇グラフ(構図がほぼ同一)

パターン2: 構図ヒントを付加(各候補に異なるヒント)

  • 1枚目(wide + minimalist): データセンターの全景を、引きの角度からミニマルな表現で描写
  • 2枚目(close-up + isometric): サーバーラックを寄りのアイソメトリック視点で詳細に描写
  • 3枚目(abstract + muted): コスト上昇を幾何学的な抽象形で表現

これらを並べた際の「選択体験」は根本的に異なります。ヒント付加版であれば、3枚の中から「これを使いたい」と直感的に判断できる1枚が必ず見つかるようになるでしょう。

ヒント調整の実践例

運用を重ねる中で、ヒントの微調整が必要となるケースが2つありました。

ケース1: base queryが具体的すぎる場合

Astro.js logo with Cloudflare logo」のように、base query自体が強く構図を規定している場合、サフィックスの効きが弱まることがあります。この場合は、base queryをより抽象的な表現に戻してからサフィックスを付加すると、差異が出やすくなります。

ケース2: ロゴやUIスクリーンショットが必須の場合

ブランドロゴや特定のUIインターフェースが必要な記事では、そもそも「候補から選ぶ」というアプローチ自体が合致しないことがあります。このようなケースでは、構図ヒントよりも「解像度・詳細度・スタイル」を変えるサフィックスの方が実用的になるため、記事のカテゴリーに応じてヒント戦略を切り替える工夫が必要です。

まとめ

// 異なるスタイルと色調を持つデザインバリエーションのイメージを生成するためのプロンプト例
"A collection of abstract design variations, each showcasing distinct styles and color tones. The images are arranged to highlight their differences in visual impact and mood, representing a range of creative interpretations. The overall aesthetic is modern and illustrative."

異なるスタイルと色調を持つデザインバリエーション
異なるスタイルと色調を持つ複数の抽象的な表現

同じプロンプトで生成した画像が似通ってしまうのは、入力が同一であるためです。Gemini 2.5 Flash Imageではseedを外部から制御できないため、プロンプトの末尾に構図ヒントを追記することで、意図的に差分を生み出すことが有効な解決策となります。

  • 視点・画風・色調といった独立した3つの軸を組み合わせることで、視覚的に異なる3枚の画像を安定して出力できます。
  • 人物の混入を減らしたい場合は、プロンプトにno people, no person, ...といった否定サフィックスを追加し、さらに上流のLLMにも人物除外ルールを指示することで、効果を最大化できます。
  • サフィックスの効きが弱いと感じる場合は、base queryの抽象度を見直すことから始めてみましょう。

この手法は、実装としてはわずか10行程度のコード変更で実現できますが、「複数候補から選べるようになる」というユーザー体験の劇的な改善に繋がります。Gemini 2.5 Flash Imageを用いた画像生成を検討されている方は、ぜひこのアプローチをお試しください。


次なるアクション

本稿でご紹介したAI活用のノウハウは、連載シリーズ「Gemini API 実戦ガイド」の一部としてお届けしています。今後も、動画サムネイルの自動生成や複数言語対応など、関連する応用例を執筆予定ですのでご期待ください。

今回紹介したコード例や実装テンプレートについては、content-factory プロジェクトでの公開を検討しております。リポジトリのStarやWatchで、最新の更新情報をいち早くご確認いただけます。

技術トレンドやAIツールの実践的な活用法は、筆者のX(旧Twitter)アカウント(@ysasaki_ai)でも定期的に発信しています。ぜひフォローして、最新情報をキャッチアップしてください。

コメント