image-generation について
image-generationは、GoogleのGemini 3.1 Flash Image Previewモデルで画像を生成・編集するスキルです。プロンプト作成、参照画像の利用、段階的な調整、サイズ別の書き出しを扱います。
主な機能
- 01テキストプロンプトからの画像生成
- 02参照画像を使った画像編集
- 03マルチターンチャットでの調整
- 04画像アセットのバッチ生成
- 05マスター画像のプリセット・任意サイズへの書き出し
- 06文字、構図、アーティファクトの出力確認
活用シーン
- 01文章の依頼内容からグラフィックを作成
- 02商品写真をデザイン画像に仕上げる
- 03チャットでビジュアル案を反復調整
- 04SNSや広告の複数形式向けに画像を準備
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ arnavpuri/ designskills --skill image-generationインストール後、Claude Code で/image-generationを入力して読み込まれたか確認します。
同梱ファイルscripts/export-sizes.pyscripts/gemini-generate.py
詳細
Gemini 3.1 Flash による画像生成
Google の Gemini 3.1 Flash Image Preview モデルを使って画像を生成・編集するための基礎スキルです。すべてのグラフィックデザインスキルが、生成パイプラインでこのスキルを参照します。
前提条件
pip install google-genai Pillow
export GEMINI_API_KEY="your-api-key"
ステップ 0:ブランドコンテキストを読み込む
.agents/design-context.md が存在する場合は読み込み、16 進カラー、スタイルのアーキタイプ、タイポグラフィの説明をプロンプトに取り込みます。存在しない場合は、design-context のデフォルトを使い、出力がまだブランドに合わせられていないことをユーザーに伝えます。ユーザーがロゴや製品写真を持っている場合は、説明するのではなく --image の参照画像として渡します。モデルは説明よりも参照画像をはるかに忠実に再現します。
ステップ 1:生成モードを選ぶ
| モード | 使用する場面 | 入力 |
|---|---|---|
| テキストから画像 | ゼロから作成する場合 — ポスター、グラフィック、イラスト | テキストプロンプトのみ |
| 画像編集 | 製品写真、モックアップ、スタイル変換、要素の追加 | 画像 + テキストプロンプト |
| 複数ターン | 反復的な調整、バリエーションの検討 | チャットセッション |
| バッチ | 大量のアセット生成(ソーシャルメディア用セット、広告のバリエーション) | Batch API 経由の複数プロンプト |
ステップ 2:プロンプトを作成する
プロンプトの構成
すべてのプロンプトは、次の階層に従ってください。
[FORMAT] + [SUBJECT] + [STYLE] + [COMPOSITION] + [COLOR] + [TYPOGRAPHY] + [MOOD] + [NEGATIVE]
例 — 製品のソーシャルメディア投稿:
高級ヘッドフォンの発売を告知する、正方形のソーシャルメディア用グラフィックを作成します。 ヘッドフォンを中央に配置し、濃紺(#0d1b2a)からエレクトリックブルー(#00b4d8)への斜めのグラデーション背景にします。 太字の白いサンセリフ体で「HEAR EVERYTHING」と上部 3 分の 1 に大きく表示します。 その下に、小さなコーラル色(#ff6b6b)のサブテキスト「Available March 20」を配置します。 背景に、不透明度 10% の控えめな幾何学模様の三角形を加えます。 すっきりとした、モダンで高級感のある印象にします。枠線やクリップアートは使いません。
主な原則
- キーワードではなく、シーンを描写します — 「ドラマチックなサイドライトが当たる反射面の上に浮かぶスニーカー」は、「スニーカー、クール、モダン」より効果的です
- 色を具体的に指定します — デザインコンテキストの 16 進カラーコードを必ず含めます
- 空間的なレイアウトを描写します — 「見出しは上部 3 分の 1、製品は中央、CTA は右下」
- スタイルを指定します — 「フラットベクター」「3D レンダリング」「水彩画」「フォトリアル」「ミニマリストなスイスデザイン」
- タイポグラフィの指示を含めます — フォントのスタイル、サイズの関係、色、位置
- 除外するものを明記します — 「ストックフォトの透かし、ベベル効果、クリップアートは使わない」
スタイル別のプロンプトパターン
| スタイル | プロンプトへの追加内容 |
|---|---|
| ミニマリスト | 「余白を広く取り、アクセントカラーは 1 色、すっきりしたサンセリフ体、装飾要素なし」 |
| 大胆/鮮やか | 「彩度の高い色、大きく印象的なタイポグラフィ、幾何学図形、高いコントラスト」 |
| 高級感 | 「暗い背景、ゴールドまたはシャンパンカラーのアクセント、セリフ体、控えめなテクスチャ、エレガント」 |
| 遊び心のあるスタイル | 「明るい色使い、丸みのある形、手描き風、カジュアルな手書きフォント」 |
| 企業向け | 「整然としたグリッド、プロフェッショナル、青系の色調、明確な階層、バランスの取れた構図」 |
| レトロ | 「網点、彩度を抑えたヴィンテージカラー、セリフ体の見出し、フィルムグレインのテクスチャ」 |
| ブルータリスト | 「未加工の印象、白黒の高いコントラスト、型破りなレイアウト、特大の文字」 |
ステップ 3:生成する
テキストから画像
from google import genai
from google.genai import types
client = genai.Client()
response = client.models.generate_content(
model="gemini-3.1-flash-image-preview",
contents="[your structured prompt]",
config=types.GenerateContentConfig(
response_modalities=["TEXT", "IMAGE"],
image_config=types.ImageConfig(aspect_ratio="1:1", image_size="2K"),
),
)
# A response can contain text parts and image parts in any order —
# never assume parts[0] is the image.
def save_first_image(response, path):
for part in response.parts or []:
if part.inline_data is not None:
part.as_image().save(path)
return True
print("No image returned:", response.text) # usually a refusal or clarifying question
return False
save_first_image(response, "output.png")
画像編集(製品画像 → グラフィック)
基本的なワークフロー:ユーザーから製品写真を受け取り、その写真を使った完成度の高いグラフィックを生成します。
from PIL import Image
product = Image.open("product.png")
response = client.models.generate_content(
model="gemini-3.1-flash-image-preview",
contents=[
product,
"Transform this product photo into a premium social media graphic. "
"Place the product on a gradient background (#1a1a2e to #16213e). "
"Add bold white headline 'JUST DROPPED' above. "
"Add price '$299' in coral (#e94560) below. "
"Modern, clean, high-end feel. Square format."
],
config=types.GenerateContentConfig(
response_modalities=["TEXT", "IMAGE"],
),
)
複数ターンでの調整
chat = client.chats.create(
model="gemini-3.1-flash-image-preview",
config=types.GenerateContentConfig(response_modalities=["TEXT", "IMAGE"]),
)
# Generate
r1 = chat.send_message([product_image, "Create a launch graphic for this product..."])
save_first_image(r1, "v1.png")
# Refine colors — change ONE thing per turn and say what to keep
r2 = chat.send_message("Keep the layout and text exactly as is. Make the background warmer, shift to sunset tones")
save_first_image(r2, "v2.png")
# Refine text
r3 = chat.send_message("Keep everything else. Make the headline larger and add a subtle drop shadow")
save_first_image(r3, "v3.png")
CLI ツール
このスキルのスクリプトは scripts/ に格納されています。以下の <image-generation> は、このスキルのディレクトリを指します(スキル読み込み時に表示されるベースディレクトリ。リポジトリのクローンでは skills/image-generation)。出力先がユーザーのプロジェクトになるよう、ユーザーのプロジェクトから実行してください。
# Text-to-image
python <image-generation>/scripts/gemini-generate.py --prompt "..." --output graphic.png
# Product image + prompt
python <image-generation>/scripts/gemini-generate.py --image product.png --prompt "..." --output graphic.png
# Multiple reference images (product + logo + style reference), up to 14
python <image-generation>/scripts/gemini-generate.py --image product.png --image logo.png --prompt "..." --output graphic.png
# Aspect ratio and resolution
python <image-generation>/scripts/gemini-generate.py --prompt "..." --aspect-ratio 4:5 --size 2K --output feed.png
# Exact pixel size: generate at the nearest supported ratio, then center-crop + resize
python <image-generation>/scripts/gemini-generate.py --prompt "..." --aspect-ratio 8:1 --resize 728x90 --output leaderboard.png
# Long prompts: keep them in a file
python <image-generation>/scripts/gemini-generate.py --prompt-file prompt.txt --aspect-ratio 16:9 --output hero.png
# Multi-turn (--then is repeatable; outputs default to v1_2.png, v1_3.png ...)
python <image-generation>/scripts/gemini-generate.py --prompt "Create a poster..." --output v1.png \
--then "Change to dark mode" --then "Make the date larger"
画像が返されない場合(拒否、安全性によるブロック、またはモデルがテキストのみで回答した場合)、スクリプトはゼロ以外の終了コードで終了し、モデルのテキストを出力します。内容を確認し、プロンプトを調整して再試行してください。
1つのマスター画像から複数のサイズを書き出す
# Social set, ad set, or named presets; --focus keeps the subject in frame (x,y as 0-1)
python <image-generation>/scripts/export-sizes.py master.png --group social --out exports/
python <image-generation>/scripts/export-sizes.py master.png --presets og,youtube-thumbnail --focus 0.5,0.4 --out exports/
python <image-generation>/scripts/export-sizes.py master.png --size 300x250 --size 728x90 --out ads/
python <image-generation>/scripts/export-sizes.py --list # all presets and groups
切り抜き後にマスター画像の半分未満しか残らない場合や、拡大が必要な場合に警告が表示されます。8:1 や 1:4 などの極端な比率は、代わりに該当する --aspect-ratio を指定して個別に生成してください。重要な部分が切り取られていないことを確認するため、書き出した画像をいくつか開いてください。
ステップ 4:アスペクト比
対応している比率:1:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9, 21:9, 1:4, 4:1, 1:8, 8:1。それ以外(例:300x250、1200x628)は、最も近い比率で生成してから --resize で切り抜く必要があります。
| 用途 | 比率 | 最終サイズ | 備考 |
|---|---|---|---|
| Instagram フィード(縦長) | 4:5 | 1080x1350 | フィードで最も広い表示領域を確保できます。グリッドのプレビューでは中央が 3:4 に切り抜かれます |
| Instagram フィード(正方形) | 1:1 | 1080x1080 | テキストは端から約 100px 離してください |
| Instagram / TikTok ストーリー、リール | 9:16 | 1080x1920 | テキストは上部約 250px と下部約 340px を避けてください(UI が重なります) |
| X / Twitter 投稿 | 16:9 | 1600x900 | 小さなプレビューでもテキストが読めるようにしてください |
| LinkedIn 投稿 | 1:1 または 4:5 | 1200x1200 / 1080x1350 | リンクプレビューは約 1.91:1(1200x627)です。16:9 で生成してから --resize を使用してください |
| Facebook / Open Graph リンク画像 | 16:9 → 切り抜き | 1200x630 | 16:9 で生成し、--resize 1200x630 を指定してください |
| Pinterest ピン | 2:3 | 1000x1500 | 縦長で、スクロール中に目を引くデザインです |
| YouTube サムネイル | 16:9 | 1280x720 | コントラストを高くし、168x94px でも読めるようにしてください。右下(タイムスタンプ)を避けてください |
| Web バナー(リーダーボード) | 8:1 | 728x90 | テキストは最小限にし、強い CTA を配置してください |
| ミディアムレクタングル広告 | 5:4 → 切り抜き | 300x250 | --resize 300x250 |
| ポスター / チラシ | 2:3 または 3:4 | 印刷サイズ | 塗り足しと DPI については poster-design を参照してください。印刷には 4K が適しています |
ステップ 5:出力を確認する
実際に表示を確認していない画像は、決して納品しないでください。生成されたファイルをすべて開き(例:PNG で Read ツールを使用)、実寸と実際に表示されるサイズ(サムネイルやフィードカードなど)の両方で確認してください。
テキストを正しく仕上げる
最もよくある失敗はテキストです。エラーを減らすには、次の点に注意してください。
- プロンプトでは、正確な文言を二重引用符で囲みます:
見出し "HEAR EVERYTHING" - 描画するテキストは短くします。見出し、サブライン、CTA などにとどめてください。長い文章(段落、法的表記、変更される価格など)は画像に含めず、HTML/CSS のオーバーレイに移します。
- 珍しい単語やブランド名はスペルを明記し、「記載どおりに正確に綴る」と指示します。
- 単語のスペルが間違っていた場合は、その単語だけを引用して、次のターンで修正します:
"EVERYTHNG" を "EVERYTHING" に変更してください。それ以外は何も変更しないでください。 - テキストの修正に 2 回失敗したら、テキストなしで画像を生成し、コードのオーバーレイでテキストを追加します(
graphic-designを参照)。
生成画像を納品する前に、次の項目を確認してください。
- テキストが読みやすく、スペルが正しい(Gemini はテキストを描画できますが、必ず確認してください)
- 色がブランドの文脈に合っている(プロンプトで 16 進コードを指定)
- 構図に明確な視覚的階層がある(焦点は 1 つ)
- テキストと背景のコントラストが十分である
- 不要なアーティファクトや歪みがない
- アスペクト比が用途とするプラットフォームに合っている
- 商品画像を使用している場合、歪みなく自然に組み込まれている
- 全体の美しさが指定されたスタイルに合っている
確認項目に問題があれば、複数ターンで調整し、具体的な問題を修正してください。1 ターンにつき変更は 1 つとし、維持すべき点も伝えます。確認した項目と妥協点(例:「モデルがスペルを間違え続けたため、テキストをオーバーレイとして追加しました」)をユーザーに報告してください。
また、Gemini の出力には、AI 生成コンテンツとして識別できる不可視の SynthID ウォーターマークが付与されることも伝えてください。
参考:モデルの機能
| 機能 | Gemini 3.1 Flash |
|---|---|
| 最大入力画像数 | 14(オブジェクト 10 個 + キャラクター 4 人) |
| 出力解像度 | 512、1K、2K、4K |
| アスペクト比 | 1:1、2:3、3:2、3:4、4:3、4:5、5:4、9:16、16:9、21:9、1:4、4:1、1:8、8:1 |
| テキスト描画 | 対応(プロンプトで明示的に指定) |
| 思考モード | デフォルトでオン。複雑な構図の改善に役立ちます |
| Batch API | 大量生成に対応 |
| ウォーターマーク | SynthID が自動的に付与されます |
他のスキルとの連携
このスキルは、すべてのグラフィックデザインスキルから参照されます。
graphic-design→ 主要な生成パイプラインsocial-media-graphic→ プラットフォーム固有の生成poster-design→ ポスター/チラシの生成thumbnail-design→ サムネイルの生成ad-creative-design→ 広告バリエーションの生成product-mockup→ 商品画像の生成banner-design→ バナーの生成infographic→ インフォグラフィックの生成
各スキルでは、この基盤となる生成ワークフローに、分野固有のプロンプトパターンを追加します。