Skip to main content
このページでは、すぐに使えるAgent Skillを提供します。すでに使っているコーディングAgentにそのまま入れて、自然言語(または明示的なコマンド)で APIYI プラットフォーム上の Nano Banana 2gemini-3.1-flash-image-preview)を呼び出し、画像生成と編集を行えます。必要なのはたった2つのファイルだけです。コピーしてすぐ使えます。
代わりに Pro スキル(gemini-3-pro-image、最高品質)を使いたい場合は、Nano Banana Pro Agent Skill をご覧ください。このページは Nano Banana 2(Flash級の速度で Pro レベルの品質、より高いコストパフォーマンス)向けです。

このスキルの機能

単一の統合スキルです。スクリプトが入力画像を渡したかどうかを自動判定し、テキストから画像生成と画像編集を切り替えます。

テキストから画像生成

プロンプトのみ → 完全に新しい画像を生成。14種類のアスペクト比と 512/1K/2K/4K の解像度に対応します。

画像編集

1枚の画像 + 指示 → ローカル編集、スタイル変更、背景置換などを行えます。

マルチ画像合成

複数画像 + 1つの指示 → 合成、比較、服装の差し替えなどができます。
Pro と比べると、Nano Banana 2 は 4つの超縦長/超横長比率(1:4 / 4:1 / 1:8 / 8:1)と、専用の512px低解像度階層を追加し、1回あたりわずか $0.055/image です(token ベースでは最安で約 $0.025/image)— 大量利用により適しています。

どのエージェントが使用できるか

Skill は本質的には単なる フォルダ です。Agent が読むための指示一式(SKILL.md)と、実際の処理を行うスクリプトで構成されています。つまり、ローカルファイルを読み取り、シェルコマンドを実行できる どのコーディング Agent でも使用できます。たとえば Codex, OpenClaw, hermes-agent, Claude Code などです。必要条件は1つだけです。Agent を実行するマシン(あなたのコンピューターまたはサーバー)に Python 3 がインストールされていて、ネットワークアクセス があることです(スクリプトが api.apiyi.com を直接呼び出します)。それだけです。特定の Agent に依存するものではありません。

3ステップでセットアップ

① フォルダを作成してファイルを貼り付ける

次の2つのファイルを含むスキルフォルダを作成します(全文は次の2セクションにあります):

② 同じフォルダにキーを入れる

api.apiyi.com コンソールで作成した APIYI API Keynano-banana-2/.env に書き込みます:
スクリプトはこの .env からキーを自動的に読み取ります — 追加の設定や環境変数は不要です
.env には秘密キーが入っています。プロジェクトのリポジトリ経由でこのスキルを共有する場合は、必ず .env.gitignore に追加し、git に commit しないでください

③ エージェントに渡す

  • スキルを自動検出するエージェント(例: Claude Code)の場合: フォルダ全体の nano-banana-2/ を、そのスキル用ディレクトリに置きます。個人用の ~/.claude/skills/、またはリポジトリ経由で共有されるプロジェクトレベルの .claude/skills/ のどちらでも構いません。
  • その他のエージェント: それぞれのスキル/プラグインの規約に従って配置してください。最も簡単なのは、「このフォルダの SKILL.md を読んで、それに従ってください」とエージェントに伝えることです
インストールが完了したら準備完了です — 例については 使い方 をご覧ください。

SKILL.md

以下の全文を使って nano-banana-2/SKILL.md を作成してください(description は「何をするか + いつ使うか」を示し、これはエージェントが自動トリガーに使います):
name は小文字の英字 + ハイフンでなければならず、claude / anthropic のような予約語を含めてはいけません。スラッシュコマンドをサポートするエージェントでは、ディレクトリ名がコマンドになります。つまり、nano-banana-2/nano-banana-2 になります。${CLAUDE_SKILL_DIR} は Claude Code が提供するスキルディレクトリ変数です。ほかのエージェントでは、スクリプトの実際のパスをそのまま使ってください。

scripts/nano_banana_2.py

Gemini-native 形式を使って nano-banana-2/scripts/nano_banana_2.py を作成してください(APIYI のテキストから画像生成 / 画像編集リファレンスページで検証済みの動作コードと同一です)。Pure Python 標準ライブラリのみ — pip install は不要です:
デフォルトのモデル名は gemini-3.1-flash-image-preview です。Google は後に -preview を含まない安定版名 gemini-3.1-flash-image を提供しました。どちらも価格は同じで、動作も同じです。切り替えるには APIYI_IMAGE_MODEL=gemini-3.1-flash-image を設定してください。

なぜ 1 文だけで画像が生成されるのか

多くの人が疑問に思います。コマンドを一度も入力していないのに、どうして「draw a cat」で画像が生成されたのでしょうか? 仕組みはこうです。起動時に、Agent は各スキルのSKILL.mdからdescription最初に読み取ります(これは「このスキルが何を行い、いつ使うか」を説明する、とても短いメタデータです)。あなたのリクエストがその状況に一致すると(例: 「画像を draw / generate / render する」「この画像を…に編集する」)、Agent は自動的にそのスキルを呼び出すと判断しSKILL.md全体を読み込み、スクリプトを実行します。コマンドを覚えている必要はありません。 つまり:
  • よく書かれたdescription = より正確な自動起動。 このスキルの説明には、すでに「画像を generate / draw / edit / composite する」といった言い回しが含まれています。
  • Agent に推測させたくなく、完全に制御したい場合は、以下の明示的な呼び出しを使ってください。

使い方

自然言語(暗黙トリガー)

インストールしたら、エージェントに話しかけるだけです:

明示的な呼び出し(より細かく制御)

エージェントに自動判断させたくない場合は、明示的な方法が 2 つあります。
  • スラッシュコマンドに対応するエージェント(例: Claude Code):
  • 任意のエージェント / スクリプトを実行するよう伝えるだけ(最も汎用的):
アスペクト比と鮮明さの制御方法: アスペクト比には --aspect を使い(14種類の選択肢があり、Pro にはない 1:4 / 4:1 / 1:8 / 8:1 の超縦長/超横長も含まれます)、解像度には --size を使います(512 / 1K / 2K / 4K512 は Nano Banana 2 専用の、コストを抑えられる低解像度階層です)。たとえば “portrait 9:16”、“4K でレンダリング”、または “超横長のバナーを作成して” と伝えるだけで、エージェントがこれらのフラグを自動で追加します。

生成された画像の保存先

  • -oベアファイル名(例: -o dog.png)の場合、画像はすべて プロジェクトルート直下の nano-banana-output/ フォルダ に自動作成されて保存されるため、プロジェクト内のその場所ですぐ見つけられます。
  • 「プロジェクトルート」は、スクリプト自身の場所から親ディレクトリへたどって見つかる .git または .claude を含む最初のディレクトリです。そのため、Agent がどのディレクトリから実行されても、画像はプロジェクト内に保存され、見つけられない一時ディレクトリに入ることはありません。
  • スクリプトは画像ごとに絶対パスを 1 つずつ完全な形で出力します。たとえば Image saved to /Users/you/project/nano-banana-output/dog.png です。
  • デフォルトでは 1 枚だけ 生成されます。-n 3 は一度に 3 枚生成し(最大 5 枚で、それ以上は 5 に丸められます)、-1-2-3 の接尾辞が自動で追加されます。
  • -oディレクトリを含むパス(例: -o images/dog.png や絶対パス)の場合は、その正確なパスに保存されます(相対パスは現在の作業ディレクトリからの相対パスです)ので、nano-banana-output/ には入りません。
  • 画像編集も同じ仕組みで動作します。出力は新しいファイルになり、元のファイルは上書きしません
Nano Banana 2 には厳格なコンテンツ安全対策があります。スクリプトが finishReason を返し、それが STOP 以外であったり、拒否テキストを返したりした場合は、内容を調整し、同じ違反するプロンプトを繰り返し再試行しないでください。

関連ドキュメント