mcpField
N
nano-banana-pro

nano-banana-pro

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

nano-banana-pro について

指定の CLI スクリプトから Google's Gemini 3 Pro を使って画像を生成・編集するスキルです。プロンプト、解像度、縦横比、透過処理の選択を案内します。

主な機能

  1. 01Gemini による画像生成と編集
  2. 02透過 PNG の抽出
  3. 03解像度と縦横比の指定
  4. 04文字入り画像の作成
  5. 05CLI スクリプトでの実行

活用シーン

  1. 01イラスト、アイコン、ゲーム素材の作成
  2. 02指示に基づく既存画像の編集
  3. 03透過ステッカーや切り抜き素材の作成

インストール

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

$npx skills add https://github.com/enzed/skills --skill nano-banana-pro

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

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
prompts.md
scripts/
generate.py
transparency.py

詳細

Nano Banana Pro の画像生成と編集

Google の Gemini 3 Pro モデルを使用して、透過を高度にサポートした画像を生成・編集します。

前提条件

  1. 依存関係:

    pip install google-genai Pillow numpy python-dotenv
    
  2. API キー:スクリプトは .env から自動的に読み込みます。スクリプトで「No API key found」エラーが発生した場合にのみ、ユーザーに確認してください。

CLI の使用方法(必須)

必ず CLI スクリプトを使用してください。Python コードを書いたり、.py ファイルを作成したりしないでください。

scripts/generate.py を直接実行します:

# Basic generation
python scripts/generate.py "a cute banana sticker" -o banana.png

# With transparency (for game assets, stickers, icons)
python scripts/generate.py "pixel art sword" -o sword.png --transparent

# Custom size and aspect ratio
python scripts/generate.py "game logo" -o logo.png --size 4K --ratio 16:9

オプション:

  • -o, --output - 出力ファイル名(デフォルト:output.png)
  • --transparent - 差分マッティングを使用して本物のアルファチャンネルを抽出します
  • --size - 1K、2K、4K(デフォルト:2K)
  • --ratio - アスペクト比:1:1、16:9、9:16 など(デフォルト:1:1)
  • --model - モデルの上書き指定(デフォルト:gemini-3-pro-image-preview)

注意: スクリプトは API キーを .env から自動的に読み込みます。API キーを手動で確認したり、ユーザーに尋ねたりしないでください。そのままスクリプトを実行すれば、キーが見つからない場合は案内付きのエラーが表示されます。

意図の判定

ユーザーのリクエストを分析し、次の表に従って意図を判定します:

意図判定語句アクション
生成"create", "generate", "make", "draw", "design"テキストから画像を生成
編集"edit", "change", "modify", "update", "fix"画像から画像を生成
透過"transparent", "remove background", "alpha", "cutout", "PNG with transparency"差分マッティングを使用
テキストのオーバーレイ"add text", "write on", "label", "caption"正確なテキスト表示のため Gemini 3 Pro を使用

解像度の選択

用途に応じて解像度を選択します:

解像度最適な用途ピクセル出力
1Kクイックプレビュー、サムネイル、ウェブアイコン約1024px
2Kソーシャルメディア、標準的なウェブ画像約2048px
4K印刷、プロ向け素材、スプライトシート約4096px

目安:

  • スプライトシート、ゲーム素材、印刷物 → 4K
  • ソーシャルメディア、ブログ画像、プレゼンテーション → 2K
  • クイックテスト、サムネイル、プロトタイプ → 1K

判断に迷う場合はユーザーに確認するか、デフォルトの 2K を使用します。

アスペクト比

利用可能な比率:1:1、2:3、3:2、3:4、4:3、4:5、5:4、9:16、16:9、21:9

選択ガイド:

  • 正方形のコンテンツ(アイコン、アバター、ソーシャル投稿)→ 1:1
  • 縦長(モバイル、縦型動画)→ 9:16 または 3:4
  • 横長(デスクトップ、プレゼンテーション)→ 16:9 または 3:2
  • シネマティック/ウルトラワイド → 21:9

基本的な実装

基本的な生成
from google import genai
from google.genai import types
from PIL import Image
import io

client = genai.Client()

response = client.models.generate_content(
    model="gemini-3-pro-image-preview",
    contents="Your descriptive prompt here",
    config=types.GenerateContentConfig(
        response_modalities=['IMAGE'],
        image_config=types.ImageConfig(
            aspect_ratio="1:1",  # or other ratio
            image_size="2K"     # 1K, 2K, or 4K
        ),
    ),
)

# Extract image from response
for part in response.parts:
    if part.inline_data is not None:
        image = Image.open(io.BytesIO(part.inline_data.data))
        image.save("output.png")
        break
画像編集
# Load existing image
input_image = Image.open("input.png")

response = client.models.generate_content(
    model="gemini-3-pro-image-preview",
    contents=[
        input_image,
        "Edit instruction: Change the background to sunset colors"
    ],
    config=types.GenerateContentConfig(
        response_modalities=['TEXT', 'IMAGE'],
        image_config=types.ImageConfig(
            aspect_ratio="1:1",
            image_size="2K"
        ),
    ),
)
複数ターンの編集

思考シグネチャを使用して、編集間でコンテキストを保持します:

# First edit
response1 = client.models.generate_content(
    model="gemini-3-pro-image-preview",
    contents=[image, "Add a red hat"],
    config=config,
)

# Continue editing (include previous response)
response2 = client.models.generate_content(
    model="gemini-3-pro-image-preview",
    contents=[
        image,
        "Add a red hat",
        response1,  # Include for context preservation
        "Now make the hat blue instead"
    ],
    config=config,
)

透過の抽出

ユーザーが透過画像を必要とする場合は、差分マッティングを使用します。scripts/transparency.py を参照してください。

使用するケース:

  • ユーザーが明示的に透過を求めている
  • ゲームのスプライト、アイコン、ロゴ
  • 合成に使用する素材
  • 切り抜き画像やステッカー

手順:

  1. 純白の背景(#FFFFFF)で画像を生成します
  2. 同じ画像を純黒の背景(#000000)に編集します
  3. ピクセル差分からアルファ値を計算します
  4. 元の色を復元します

重要なポイント: 不透明なピクセルはどちらの背景でも同じに見えます(距離 ≈ 0)。透過ピクセルには背景色が現れます(距離は最大)。

from scripts.transparency import extract_alpha_difference_matting

# After generating white and black background versions
final_image = extract_alpha_difference_matting(img_on_white, img_on_black)
final_image.save("output.png")  # RGBA with true transparency

プロンプトエンジニアリング

基本原則

「キーワードを並べるだけでなく、シーンを描写してください。」

つながりのない単語のリストよりも、物語のような段落のほうが優れた結果を生みます。

効果的なプロンプトの構成
[Style/Medium] of [Subject] in [Context/Setting], [Lighting], [Additional details]

例:

# Photorealistic
A professional studio photograph of a brass steampunk pocket watch,
shot with a 50mm lens, soft diffused lighting from the left,
shallow depth of field with bokeh background, 4K HDR quality.

# Illustration
A detailed digital illustration of a medieval blacksmith's forge,
isometric perspective, warm orange glow from the furnace,
dieselpunk aesthetic with exposed pipes and riveted metal plates.

# Product mockup
A product photography shot of a ceramic coffee mug on a marble surface,
natural window lighting, minimalist Scandinavian style, clean white background.
画像内のテキスト

テキストを含む画像には、Imagen ではなく Gemini 3 Pro を使用します:

  • 各要素のテキストは25文字以内にします
  • 異なるテキストフレーズは最大2~3個にします
  • フォントのスタイルを大まかに指定します(太字、エレガント、手書き風)
  • サイズを指定します(小、中、大)
品質を高める修飾語

出力品質を高めるには、次の語句を追加します:

  • 写真: 4K、HDR、スタジオ撮影、プロフェッショナルなライティング
  • アート: 細部まで描き込まれた、プロによる、高品質なイラスト
  • 一般: 高忠実度、鮮明なディテール、洗練された仕上がり

エラー処理

from google.genai import errors

def generate_with_retry(client, *, model, contents, config, max_attempts=5):
    for attempt in range(1, max_attempts + 1):
        try:
            return client.models.generate_content(
                model=model, contents=contents, config=config
            )
        except errors.APIError as e:
            code = getattr(e, "code", None) or getattr(e, "status", None)
            if code not in (429, 500, 502, 503, 504) or attempt >= max_attempts:
                raise
            delay = min(30, 2 ** (attempt - 1))
            time.sleep(delay)

モデルの選択

モデル用途
gemini-3-pro-image-preview複雑な編集、テキストのレンダリング、複数ターンのやり取り、透過処理のワークフロー
gemini-2.5-flash-image高速な生成、大量生成、単純なタスク
imagen-4.0-generate-001写実的な画像の生成、編集が不要な場合

ほとんどのタスクでは、デフォルトで gemini-3-pro-image-preview を使用してください。

ファイルの参照先

  • scripts/generate.py - 画像生成用 CLI(コードを書く代わりにこちらを使用してください)
  • scripts/transparency.py - 差分マッティングの実装
  • references/prompts.md - カテゴリ別の拡張プロンプト例

コメント