🎃

Nano Bananaの画像生成機能を試してみた

に公開

こんにちは、門司です。

先日GoogleからNano Bananaが公開されました。LM Arenaで話題になってから「どこのモデルかな?早くリリースされないかな?」とワクワクしていました。そしてリリース元はGoogleさんでした。

今回はNano BananaのAPIの使い方とプロンプトの学習のために、公式ドキュメントを見ながら気になった部分を試してみようと思います。

公式ドキュメント

https://ai.google.dev/gemini-api/docs/image-generation?hl=ja

公式ドキュメントは以下のような構成で書かれていました。

  • 画像生成(テキスト画像変換)
  • 画像編集(テキストと画像による画像変換)
  • その他の画像生成モード
  • プロンプトのガイドと戦略
    • 画像を生成するためのプロンプト
    • 画像を編集するためのプロンプト
    • ベスト プラクティス
  • 制限事項
  • Imagen を使用する場面

利用可能な機能

以下のような機能が可能のようです。

  • Text-to-Image - テキストから画像生成
  • 画像+テキストから画像 - 既存画像の編集
  • Multi-Image to Image - 複数画像の合成
  • 反復的な調整 - 会話形式での段階的調整
  • 高忠実度のテキストレンダリング - 画像内へのテキスト描画

セットアップ

画像生成のコードはサンプルコードのPythonを使って実行しています。

必要なライブラリのインストール

pip install google-genai  # google.genaiを使うため
pip install Pillow       # PILを使うため

基本的な画像生成

from google import genai
from google.genai import types
from PIL import Image
from io import BytesIO

client = genai.Client(
    api_key="ここにAPIキー",
)
# APIキーを直接渡すか環境変数から取得
# 環境変数GEMINI_API_KEYに設定すると引数で渡さなくても良い

prompt = (
    "Create a picture of a nano banana dish in a fancy restaurant with a Gemini theme"
)
# 「Geminiをテーマにした高級レストランのナノバナナ料理の写真を作成します」

response = client.models.generate_content(
    model="gemini-2.5-flash-image-preview",
    contents=[prompt],
)
# client.models.generate_contentで実行
# contentsは配列で複数のやり取りを格納

for part in response.candidates[0].content.parts:
    if part.text is not None:
        print(part.text)
    elif part.inline_data is not None:
        image = Image.open(BytesIO(part.inline_data.data))
        image.save("generated_image.png")
# candidatesは候補という意味らしい
# contentのpartsをループしながらテキストがあればprint
# inline_dataがあればBytesIOでメモリ上に置いてPILで画像にして保存

テキストと画像が一緒に返ってくるのは面白い特徴ですね。

注意 日本語で送るとテキストしか返ってこない場合があったので、そういう時は英語で送るのが良さそうです。

プロンプトを変えて試してみました。

日本の和食をテーマにしたナノ柿写真を作成します。
Create a picture of a nano persimmon dish with a Japanese washoku theme.

結果はnanoっぽさはあまり出てきませんでした。

画像編集機能

次は画像編集です。

prompt = (
    "Create a picture of my cat eating a nano-banana in a "
    "fancy restaurant under the Gemini constellation",
)
# 「ふたご座の下の高級レストランでナノバナナを食べている猫の絵を描いてください」

# 画像を読み込み
image = Image.open("/path/to/cat_image.png")

response = client.models.generate_content(
    model="gemini-2.5-flash-image-preview",
    contents=[prompt, image],
)
# 文字と画像をそのまま渡せる。base64への変換は不要

for part in response.candidates[0].content.parts:
    if part.text is not None:
        print(part.text)
    elif part.inline_data is not None:
        image = Image.open(BytesIO(part.inline_data.data))
        image.save("generated_image.png")

試してみたプロンプト

北斗七星の下の和風レストランでナノ柿を食べている狐の絵を描いてください。
Create a picture of a fox eating a nano persimmon in a Japanese-style restaurant under the Big Dipper constellation.

狐だけがリアルで以外は生成AIと分かる画像になってしまいました。

テキストと画像の混合出力

このモデルの面白いところがテキストと画像を一緒に出力出来るところです。

参考例にあった「パエリアのレシピをイラスト付きで生成してください。」と実行すると、以下のような出力が得られました。

出力結果
もちろんです!美味しいパエリアのレシピをイラスト付きでご紹介しますね。

### 本格パエリアのレシピ
材料を準備して、美味しいパエリアを作りましょう!

**材料(2人分)**
- 米(洗わない):1合
- 鶏もも肉:1/2枚(150g)
- エビ:6尾
- イカ:1/2杯
- 玉ねぎ:1/4個
- パプリカ(赤・黄):各1/4個
- ミニトマト:4個
- にんにく:1かけ
- サフラン:5〜10本(水50mlに浸しておく)
- 白ワイン:50ml
- オリーブオイル:大さじ2
- 塩、こしょう:少々
- レモン:1/4個

**A(スープ)**
- 水:200ml
- コンソメ(顆粒):小さじ1
- 塩:小さじ1/2

画像とテキストのアウトプットが欲しい時に便利ですね(あんまり用途思いつかなかった)。HTMLのimageのaltを一緒に作るみたいな?

マルチターン画像編集

過去の生成結果などのやり取りも含めて次の回答を行ってくれるのですが、過去に微妙な履歴が含まれていると次の回答も望まない結果になる可能性があるので、AI Studioなどでやる時は微妙な生成は削除したりコンテキストの整理が必要そうですね。

プロンプトのガイドと戦略

公式ドキュメントによると

キーワードを列挙するだけでなく、シーンを説明します。このモデルの強みは、言語を深く理解していることです。物語や説明文の段落は、ほとんどの場合、関連性のない単語のリストよりも、より優れた一貫性のある画像を生成します。

Midjourneyなどでは数単語の羅列で対応していましたが、このモデルは言語を理解しているので、どういうシーンかを物語や説明文で書くと良いとのことです。

画像内の正確なテキスト

画像内にテキストを入れ込む機能です。YouTubeの動画でもテキスト機能にかなり力を入れたと言及されていました。

公式プロンプト

「The Daily Grind」という名前のコーヒーショップのために、モダンでミニマルなロゴを作成してください。
テキストはクリーンで太めのサンセリフ体フォントを使用すること。
デザインには、シンプルでスタイライズされたコーヒー豆のアイコンをテキストにシームレスに組み込むこと。
配色は黒と白とする。

オリジナル

「東京美味しいお肉食べたいマン」という名前のお肉屋さんの為に、
グラフィックでカラフルなロゴを作成してください。
テキストは風船を使って明朝体で配置すること。
デザインはお肉を全面に押し出して配色は350色で
Please create a colorful, graphic-style logo for a butcher shop named “Tokyo Delicious Meat Eater Man.”
The text should be arranged in Mincho typeface using balloons.
The design should emphasize meat as the main focus, and the color palette should use 350 colors.

結果はかなりカオスになりました。

商品のモックアップと広告写真

公式プロンプト

マットブラックのミニマルなセラミック製コーヒーマグを、スタジオ照明で撮影した高解像度のプロダクト写真。
磨かれたコンクリートの表面に置かれ、ライティングはソフトボックスによる三点照明で、
柔らかく拡散したハイライトを作り、強い影をなくしている。
カメラアングルはやや上からの45度で、クリーンなラインを強調。
コーヒーから立ち上る蒸気にシャープなフォーカスを合わせた超リアルな表現。
正方形の画像。

オリジナル

ミッドナイトブルーのおしゃれなマウスを、スタジオ照明で撮影した高解像度のプロダクト写真。
PC画面の前に置かれ、PC画面の光と照明の光で輝いている。
カメラアングルはマウスを正面から10cmのところから撮影しており、同じ目線。
マウスの反応速度を表すようにマウスの右側面はぶれている。横長の画像。
A high-resolution product photograph of a stylish midnight blue mouse, shot under studio lighting.
It is placed in front of a PC screen, illuminated by both the screen’s glow and the studio lights.
The camera angle is at eye level, taken from 10 cm directly in front of the mouse.
To represent its responsiveness, the right side of the mouse appears motion-blurred.
Wide-format image.

正面ではありませんでしたが、普通に良い感じの画像が出てきました。

ミニマルでネガティブスペースを活かしたデザイン

公式プロンプト

ミニマルな構図で、繊細な赤いモミジの葉をフレーム右下に配置。
背景は広く空白のあるオフホワイトのキャンバスで、テキストを配置できる十分なネガティブスペースを確保。
左上から柔らかく拡散した光が当たっている。
正方形の画像。

オリジナル

ミニマルな構図で、手書きのサインを壁の右下に配置。
背景は広く少し古くなった壁で、サインが配置できる十分なネガティブスペースを確保。
左上から古かった壁が右下にいくと綺麗になっている。正方形の画像。

町の壁を想像しながら書きましたが、指示に具体的に書いていなかったので想定とは少し違いました。もっと具体的に書かないといけませんね。

画像編集のプロンプト例

要素の追加と削除

公式プロンプト

添付した私の猫の画像に、小さな編み物のウィザードハット(魔法使いの帽子)を頭に追加してください。
帽子は自然にフィットしているように見え、写真の柔らかいライティングにも馴染むようにしてください。

「添付した私の猫の画像に」という表現で、モデルは添付画像を認識できるようです。

インペイント(部分的な変更)

公式プロンプト

提供されたリビングルームの画像で、青いソファだけをヴィンテージのブラウンレザーの
チェスターフィールドソファに変更してください。
ソファの上のクッションや照明を含め、それ以外の部屋の要素はすべて変更しないでください。

送った画像について言及し、変更箇所を指示、変えてほしくない部分もきちんと指示を出すのが良さそうです。

複数画像の合成

公式プロンプト

プロフェッショナルなEC向けファッション写真を作成してください。
最初の画像にある青い花柄ドレスを、2枚目の画像の女性に着せてください。
女性がそのドレスを着ているリアルな全身写真を生成し、屋外環境に合わせてライティングと影を調整してください。

「最初の画像」「2枚目の画像」という表現を使って指示をしても問題なさそう。

言語サポート

公式ドキュメントによると

最高のパフォーマンスを実現するには、EN、es-MX、ja-JP、zh-CN、hi-IN のいずれかの言語を使用してください。

日本語でもパフォーマンスは出るようです。

まとめ

Nano Bananaは、従来の画像生成モデルと比べて言語理解能力が高く、会話形式での画像編集が可能な点が特徴的です。

X上でもNano Bananaに関する投稿が多く流れており、画像生成AIの分野でゲームチェンジャーになる可能性があると話題になっています。実際に試してみた感想としても、従来の生成AIと異なり一貫したアウトプットが出てきて感動しています。

プロジェクトでの利用予定は今のところ無いですが、私生活では無限に使えそうなので活用していきたいと思います!!

Discussion