mcpField
I
image-generation

image-generation

github.com/arnavpuriクリエイティブ・メディア17143 回インストール5 週間前に更新
リポジトリ

image-generation について

image-generationは、GoogleのGemini 3.1 Flash Image Previewモデルで画像を生成・編集するスキルです。プロンプト作成、参照画像の利用、段階的な調整、サイズ別の書き出しを扱います。

主な機能

  1. 01テキストプロンプトからの画像生成
  2. 02参照画像を使った画像編集
  3. 03マルチターンチャットでの調整
  4. 04画像アセットのバッチ生成
  5. 05マスター画像のプリセット・任意サイズへの書き出し
  6. 06文字、構図、アーティファクトの出力確認

活用シーン

  1. 01文章の依頼内容からグラフィックを作成
  2. 02商品写真をデザイン画像に仕上げる
  3. 03チャットでビジュアル案を反復調整
  4. 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% の控えめな幾何学模様の三角形を加えます。 すっきりとした、モダンで高級感のある印象にします。枠線やクリップアートは使いません。

主な原則
  1. キーワードではなく、シーンを描写します — 「ドラマチックなサイドライトが当たる反射面の上に浮かぶスニーカー」は、「スニーカー、クール、モダン」より効果的です
  2. 色を具体的に指定します — デザインコンテキストの 16 進カラーコードを必ず含めます
  3. 空間的なレイアウトを描写します — 「見出しは上部 3 分の 1、製品は中央、CTA は右下」
  4. スタイルを指定します — 「フラットベクター」「3D レンダリング」「水彩画」「フォトリアル」「ミニマリストなスイスデザイン」
  5. タイポグラフィの指示を含めます — フォントのスタイル、サイズの関係、色、位置
  6. 除外するものを明記します — 「ストックフォトの透かし、ベベル効果、クリップアートは使わない」
スタイル別のプロンプトパターン
スタイルプロンプトへの追加内容
ミニマリスト「余白を広く取り、アクセントカラーは 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:51080x1350フィードで最も広い表示領域を確保できます。グリッドのプレビューでは中央が 3:4 に切り抜かれます
Instagram フィード(正方形)1:11080x1080テキストは端から約 100px 離してください
Instagram / TikTok ストーリー、リール9:161080x1920テキストは上部約 250px と下部約 340px を避けてください(UI が重なります)
X / Twitter 投稿16:91600x900小さなプレビューでもテキストが読めるようにしてください
LinkedIn 投稿1:1 または 4:51200x1200 / 1080x1350リンクプレビューは約 1.91:1(1200x627)です。16:9 で生成してから --resize を使用してください
Facebook / Open Graph リンク画像16:9 → 切り抜き1200x63016:9 で生成し、--resize 1200x630 を指定してください
Pinterest ピン2:31000x1500縦長で、スクロール中に目を引くデザインです
YouTube サムネイル16:91280x720コントラストを高くし、168x94px でも読めるようにしてください。右下(タイムスタンプ)を避けてください
Web バナー(リーダーボード)8:1728x90テキストは最小限にし、強い 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 → インフォグラフィックの生成

各スキルでは、この基盤となる生成ワークフローに、分野固有のプロンプトパターンを追加します。

コメント