mcpField
A
ai-image-generator

ai-image-generator

github.com/jezwebクリエイティブ・メディア1.1k1.4k 回インストール3 週間前に更新
リポジトリ

ai-image-generator について

Google GeminiとOpenAIのAPIを使った画像生成をClaude Codeで行うためのスキルです。シーン画像、文字入り画像、透過素材、反復編集に向けたモデル選択とプロンプト作成を案内します。

主な機能

  1. 01画像の要件に応じたモデル選択
  2. 025要素のプロンプト作成法
  3. 03文字入り画像とバリエーション生成
  4. 04参照画像を使った合成
  5. 05Geminiでの複数ターン編集
  6. 06生成画像の確認と最適化

活用シーン

  1. 01読める文字を含むポスターやインフォグラフィックの作成
  2. 02商品画像をライフスタイルシーンに合成
  3. 031つの案から複数のビジュアルスタイルを検討
  4. 04透過背景のアイコンやロゴを生成

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/jezweb/claude-skills --skill ai-image-generator

インストール後、Claude Code で/ai-image-generatorを入力して読み込まれたか確認します。

同梱ファイルreferences/prompting-guide.md

詳細

AI 画像生成

AI API(Google Gemini と OpenAI GPT)を使って画像を生成します。このスキルでは、Claude Code から直接プロ品質の画像を生成するためのプロンプトパターンと API の仕組みを学びます。

マネージドサービスの代替案:API キーを管理したくない場合は、ImageBot がアルバムテンプレートとブランドキットに対応したマネージド画像生成サービスを提供しています。

モデルの選択

用途に合ったモデルを選びます。

ニーズモデル理由
フォトリアルなシーン/ストックフォトGemini 3.1 Flash Image奥行き、複雑さ、環境の文脈を最も適切に表現
クライアント向けの完成版シーン(より高精細)Gemini 3 Pro Imageより高精細で、スタイルの一貫性も向上
画像内のテキスト(ポスター、コピー入りの OG 画像、インフォグラフィック)GPT Image 2複数の文字体系を含め、テキストを実用的な品質で描画
10 種類のバリエーションによるスタイル探索GPT Image 2ネイティブのバッチ生成に対応。1 つのプロンプトから、構図と配色を共有する 10 種類のバリエーションを生成
複数の参照画像を使った合成(商品+ライフスタイル)GPT Image 2参照画像間のライティング、スケール、遠近感を処理
透明なアイコン/ロゴGPT Image 1.5ネイティブ RGBA アルファに対応 — GPT Image 2 は透明にできません
素早い下書き/反復作業Gemini 2.5 Flash Image無料枠(約 500 件/日)

目安:読み取れるテキストを含む画像には、GPT Image 2 を使用します(透明度が必要な場合は GPT 1.5)。それ以外は Gemini を使用します。

モデル ID
モデルAPI IDプロバイダー
Gemini 3.1 Flash Imagegemini-3.1-flash-image-previewGoogle AI
Gemini 3 Pro Imagegemini-3-pro-image-previewGoogle AI
Gemini 2.5 Flash Imagegemini-2.5-flash-imageGoogle AI
GPT Image 2(デフォルト)gpt-image-2OpenAI
GPT Image 2(ChatGPT と同等の出力)chatgpt-image-latestOpenAI
GPT Image 1.5(透明度専用)gpt-image-1.5OpenAI

使用前にモデル ID を確認してください — 頻繁に変更されます。

curl -s "https://generativelanguage.googleapis.com/v1beta/models?key=$GEMINI_API_KEY" | python3 -c "import sys,json; [print(m['name']) for m in json.load(sys.stdin)['models'] if 'image' in m['name'].lower()]"

GPT Image 2 の詳細

2026-04-22 にリリースされました。利用する場面を変える 3 つの機能があります。

1. テキストを実用的な品質で描画

ポスター、見出し入りの OG 画像、ラベル付きのインフォグラフィック、UI モックアップ、料金カードに適しています。日本語、韓国語、ヒンディー語、ベンガル語などの非ラテン文字を含め、テキストを安定して描画します。Gemini から切り替える主な理由です。Gemini は読み取れるテキストをまったく描画できません。

2. 複数バリエーションのバッチ生成

1 回の呼び出しで、1 つのプロンプトから最大 10 枚の画像を生成できます。バリエーションは構図と配色を共有しつつ、細部が異なります。スタイルを決める前の探索、クライアント向けの A/B 案、すばやいアイデア出しに適しています。

3. 複数の参照画像を使った合成

商品写真、ライフスタイルシーン、ロゴなどの参照画像をプロンプトと一緒に渡します。モデルは適切なライティング、スケール、遠近感で商品をシーンに配置します。複数回の編集なしで「商品を実際の場面に配置する」ワークフローを実現できます。

モード
  • Instant(デフォルト、すべてのプラン)— 計画段階を挟まずに生成します。高速で、ほとんどのケースで十分な品質です。
  • Thinking(Plus/Pro/Business プラン)— 描画前にレイアウトを計画します。要素数が重要な場合(「アイコンを横一列に 3 つ」、「機能の箇条書きを 5 つ」)や、テキストを特定の領域に配置する必要がある場合に使います。複雑な構図での再生成を減らせます。
アスペクト比

超横長の 3:1 から超縦長の 1:3 までに加え、1:1、3:2、2:3、16:9、9:16 に対応します。他のモデルより幅広い範囲をカバーしており、ウェブサイトのバナー(超横長のヒーロー画像)やモバイルのストーリー形式(超縦長)に便利です。

解像度

長辺が最大 2K の標準解像度に対応します。4K はベータ版です。

生成時間

複雑なプロンプトでは最大 2 分かかります。非同期の UX を実装し、応答を待つ間に処理をブロックしないでください。進行状況を表示するか、処理を別途開始してポーリングしてください。

制約
  • 透明な背景には対応していません。 PNG の透明度が必要な場合は gpt-image-1.5 を使用してください。
  • エンドポイントの実行前に API Org Verification が必要な場合があります。初回の呼び出しで認証エラーが発生した場合は、OpenAI アカウントの設定で有効にしてください。
料金(1024×1024画像あたり)
品質料金
低$0.006
中$0.053
高$0.211

トークン料金:入力テキストは$5/M、出力テキストは$10/M、入力画像は$8/M、出力画像は$30/Mです。

5つの要素からなるプロンプトフレームワーク

一貫した結果を得るため、次の順序でプロンプトを作成します。

1. 画像の種類

ジャンルを指定します。「フォトリアリスティックな写真」「アイソメトリックなイラスト」「フラットなベクターアイコン」

2. 主題

具体的な詳細とともに、誰または何を描くのかを指定します。「30代前半の、親しみやすく温かみのあるオーストラリア人女性。自然な笑顔」

3. 環境

場所と空間的な関係を指定します。「背後の木製棚にテラコッタ色の装飾品がある、明るくモダンな家の中」

4. 技術仕様

カメラと照明を指定します。「85mm f/2.0で撮影。自然な窓からの光。頭から肩までをフレームに収める」

5. 制約

除外するものを指定します。「フォトリアリスティック。テキスト、透かし、ロゴなし」

例(良い例と悪い例)
BAD — keyword soup:
"professional woman, spa, warm lighting, high quality, 4K"

GOOD — narrative direction:
"A professional skin treatment scene in a warm clinical setting.
A practitioner wearing blue medical gloves uses a microneedling pen
on the client's forehead. The client lies on a white treatment bed,
eyes closed, relaxed. Warm golden-hour light from a window to the
left. Terracotta-toned wall visible in the background. Shot at
85mm f/2.0, shallow depth of field. No text, no watermarks."

ワークフロー

1. 画像の必要性を判断する
用途アスペクト比モデル
ヒーローバナー(テキストなし)16:9 または 21:9Gemini
見出しコピー入りのヒーローバナー16:9 または 3:1 の超ワイドGPT Image 2
サービスカード4:3 または 3:4Gemini
プロフィール/アバター1:1Gemini
アイコン/バッジ(透明)1:1GPT Image 1.5
OG/ソーシャル共有(テキストなし)1.91:1Gemini
コピー入りのOG/ソーシャル共有1.91:1GPT Image 2
ポスター/インフォグラフィック/料金カード/文字要素の多い画像全般さまざまGPT Image 2
スタイルの検討(1つのコンセプトから10種類のバリエーションを作成)任意GPT Image 2(バッチ)
Instagram投稿1:1 または 4:5Gemini
モバイル向けヒーロー画像9:16Gemini
2. プロンプトを作成する

5つの要素からなるフレームワークを使用します。写真撮影のパラメーターについて詳しくは、references/prompting-guide.mdを参照してください。

3. API経由で生成する
Gemini(Python — シェルのエスケープを正しく処理)
python3 << 'PYEOF'
import json, base64, urllib.request, os, sys

GEMINI_API_KEY = os.environ.get("GEMINI_API_KEY")
if not GEMINI_API_KEY:
    print("Set GEMINI_API_KEY environment variable"); sys.exit(1)

model = "gemini-3.1-flash-image-preview"
url = f"https://generativelanguage.googleapis.com/v1beta/models/{model}:generateContent?key={GEMINI_API_KEY}"

prompt = """A professional photograph of a modern co-working space in
Newcastle, Australia. Natural light floods through floor-to-ceiling
windows. Three people collaborate at a standing desk — one pointing
at a laptop screen. Exposed brick wall, potted fiddle-leaf fig,
coffee cups on the desk. Shot at 35mm f/4.0, environmental portrait
style. No text, no watermarks, no logos."""

payload = json.dumps({
    "contents": [{"parts": [{"text": prompt}]}],
    "generationConfig": {
        "responseModalities": ["TEXT", "IMAGE"],
        "temperature": 0.8
    }
}).encode()

req = urllib.request.Request(url, data=payload, headers={
    "Content-Type": "application/json",
    "User-Agent": "ImageGen/1.0"
})

resp = urllib.request.urlopen(req, timeout=120)
result = json.loads(resp.read())

# Extract image from response
for part in result["candidates"][0]["content"]["parts"]:
    if "inlineData" in part:
        img_data = base64.b64decode(part["inlineData"]["data"])
        output_path = "hero-image.png"
        with open(output_path, "wb") as f:
            f.write(img_data)
        print(f"Saved: {output_path} ({len(img_data):,} bytes)")
        break
PYEOF
GPT Image 1.5 — 透明なアイコン

透明なPNGの場合は、特にgpt-image-1.5を使用します。GPT Image 2では透明にできません。

python3 << 'PYEOF'
import json, base64, urllib.request, os, sys

OPENAI_API_KEY = os.environ.get("OPENAI_API_KEY")
if not OPENAI_API_KEY:
    print("Set OPENAI_API_KEY environment variable"); sys.exit(1)

url = "https://api.openai.com/v1/images/generations"

payload = json.dumps({
    "model": "gpt-image-1.5",
    "prompt": "A minimal, clean plumbing wrench icon. Flat design, single consistent stroke weight, modern style. On a transparent background.",
    "n": 1,
    "size": "1024x1024",
    "background": "transparent",
    "output_format": "png"
}).encode()

req = urllib.request.Request(url, data=payload, headers={
    "Content-Type": "application/json",
    "Authorization": f"Bearer {OPENAI_API_KEY}"
})

resp = urllib.request.urlopen(req, timeout=120)
result = json.loads(resp.read())

img_data = base64.b64decode(result["data"][0]["b64_json"])
with open("icon-wrench.png", "wb") as f:
    f.write(img_data)
print(f"Saved: icon-wrench.png ({len(img_data):,} bytes)")
PYEOF
GPT Image 2 — テキスト量の多い画像またはバッチでのバリエーション

テキストを読みやすく表示する必要がある場合、または1回の呼び出しで10種類のバリエーションを作成する場合は、gpt-image-2を使用します。透明には対応していません — 透明な背景が必要な場合は、上記の1.5を使用してください。

python3 << 'PYEOF'
import json, base64, urllib.request, os, sys, pathlib

OPENAI_API_KEY = os.environ.get("OPENAI_API_KEY")
if not OPENAI_API_KEY:
    print("Set OPENAI_API_KEY environment variable"); sys.exit(1)

url = "https://api.openai.com/v1/images/generations"

# 10-variation batch of a pricing card with rendered text
payload = json.dumps({
    "model": "gpt-image-2",
    "prompt": (
        "A modern pricing card for a web hosting plan. "
        "Headline 'Starter' in bold sans-serif. "
        "Price '$29/month' directly below in large type. "
        "Three feature lines: 'Unlimited bandwidth', 'SSD storage', 'Free SSL'. "
        "Clean flat design, soft drop shadow, deep blue accent colour. "
        "White card on light grey background."
    ),
    "n": 10,
    "size": "1024x1024",
    "quality": "medium",
    "output_format": "png"
}).encode()

req = urllib.request.Request(url, data=payload, headers={
    "Content-Type": "application/json",
    "Authorization": f"Bearer {OPENAI_API_KEY}"
})

# Timeout: up to 2 min for complex prompts
resp = urllib.request.urlopen(req, timeout=180)
result = json.loads(resp.read())

pathlib.Path("variations").mkdir(exist_ok=True)
for i, item in enumerate(result["data"], 1):
    img_data = base64.b64decode(item["b64_json"])
    path = f"variations/pricing-card-{i:02d}.png"
    with open(path, "wb") as f:
        f.write(img_data)
    print(f"Saved: {path} ({len(img_data):,} bytes)")

print(f"\nGenerated {len(result['data'])} variants. Pick the best; delete the rest.")
PYEOF

バッチワークフロー:10種類を生成 → 並べて確認 → 1〜2種類を選択 → 必要に応じて、採用した方向性に合わせてプロンプトを絞り込み、再生成します。1回で生成してから反復するよりも高速です。

4. 保存して最適化する

生成した画像を.jez/artifacts/またはユーザー指定のパスに保存します。

後処理(任意):

# Convert to WebP for web use
python3 -c "
from PIL import Image
img = Image.open('hero-image.png')
img.save('hero-image.webp', 'WEBP', quality=85)
print(f'WebP: {img.size[0]}x{img.size[1]}')
"

# Trim whitespace from transparent icons
python3 -c "
from PIL import Image
img = Image.open('icon.png')
trimmed = img.crop(img.getbbox())
trimmed.save('icon-trimmed.png')
"
5. 品質を確認する(任意)

生成した画像をビジョンモデルに送り、品質を確認します。

# Send to Gemini Flash for critique
critique_prompt = """Review this image for:
1. AI artifacts (extra fingers, floating objects, text errors)
2. Technical accuracy (wrong equipment, unsafe positioning)
3. Composition issues (awkward cropping, cluttered background)
4. Style consistency with a professional stock photo

List any issues found, or say 'PASS' if the image is production-ready."""

問題が見つかった場合は、元のプロンプトに除外指示として追加し、再生成します。

複数ターンでの編集

Geminiでは、会話のターンをまたいで生成済みの画像を編集できます。重要な要件は、モデルの応答から思考署名を保持することです。

# Turn 1: Generate base image
contents = [{"role": "user", "parts": [{"text": "Scene prompt..."}]}]

# The response includes thoughtSignature on parts — preserve them ALL

# Turn 2: Edit the image
contents = [
    {"role": "user", "parts": [{"text": "Original prompt"}]},
    {"role": "model", "parts": response_parts_with_signatures},  # Keep intact
    {"role": "user", "parts": [{"text": "Edit: change the wall colour to blue. Keep everything else exactly the same."}]}
]

編集プロンプトのパターン:変更する内容だけでなく、変更せずに維持する内容を必ず指定します。指定されていない要素は、モデルが自由に変更できるものとして扱います。

GOOD: "Edit this image: keep the people, desk, and window unchanged.
Only change: wall colour from terracotta to ocean blue."

BAD: "Now make the wall blue."
(Model may change everything else too)

APIキーの設定

プロバイダーキーの取得先環境変数
Google Geminiaistudio.google.comGEMINI_API_KEY
OpenAIplatform.openai.comOPENAI_API_KEY
export GEMINI_API_KEY="your-key-here"
export OPENAI_API_KEY="your-key-here"

よくある間違い

間違い修正方法
Gemini のプロンプトに curl を使うPython を使います。アポストロフィがあるとシェルのエスケープがうまく機能しません
「美しく、プロフェッショナルで、高品質」「85mm f/1.8、ゴールデンアワーの光」のように具体的な仕様を指定します
除外するものを指定しない常に「テキスト、透かし、ロゴなし」で終えます
Gemini に透過 PNG をリクエストするGemini は透過に対応していません。background: "transparent" を指定して GPT Image 1.5 を使います
GPT Image 2 に透過 PNG をリクエストするGPT Image 2 は透過に対応していません。この場合に限り gpt-image-1.5 に切り替えます
画像内のテキストに GPT Image 1.5 を使うGPT Image 1.5 のテキスト描画は安定しません。読み取れるテキストには gpt-image-2 を使います
GPT Image 2 へのリクエストをタイムアウトさせる複雑なプロンプトでは生成に最大 2 分かかることがあります。タイムアウトを 180 秒に設定し、非同期 UX を構築します
オーストラリアの企業にアメリカのデフォルト設定を使う「Australian」と、現地の建築や植生を明示的に指定します
モデル ID に汎用的なデータを使う現在のモデル ID を確認します。頻繁に変わります

コメント