概要
前回 NanoBanana に4コマ漫画を描いてもらいました
今回は API を使って描いてもらいました
なお Google AI Studio からは無料で使えますが API は有料なのでご注意ください
料金はだいたい1回で6円くらいです
環境
- NanoBanana
- Google AI Studio 2025/09/10 時点
- Python 3.12.11
- google-genai 1.36.0
サンプルコード
参照画像を配置するディレクトリなどは適宜変更してください
複数画像のアップロードに対応していますがその分料金もかかります
import argparse
from io import BytesIO
from google.genai.client import Client
from google.genai.types import GenerateContentResponse
from PIL import Image
class NanoBananaClient:
API_KEY = "xxx"
MODEL = "gemini-2.5-flash-image-preview"
response: GenerateContentResponse
client: Client
def __init__(self) -> None:
self.client = Client(api_key=self.API_KEY)
def run(self, prompt: str):
# チャットを作成
chat = self.client.chats.create(model=self.MODEL)
# プロンプトと複数画像を渡す
self.response = chat.send_message([prompt] + self.__open_images())
# 結果を保存する
self.__save()
def __open_images(self) -> list:
# 複数の画像を開く
image_files = ["4panel.png", "reforg.jpeg"]
# ref1.pngからref7.pngまでのファイルをimage_filesリストに追加
for num in range(1, 8):
image_files.append(f"ref{num}.png")
images = [Image.open(f"nanobanana/{path}") for path in image_files]
return images
def __save(self):
# 結果の保存
if self.response.candidates is None:
raise RuntimeError("No candidates returned")
if self.response.candidates[0].content is None:
raise RuntimeError("No content returned")
parts = self.response.candidates[0].content.parts
if parts is not None:
for i, part in enumerate(parts):
if part.text is not None:
# テキスト情報は標準出力
print(part.text)
elif part.inline_data is not None and part.inline_data.data is not None:
# イメージはローカルに保存
image = Image.open(BytesIO(part.inline_data.data))
image.save(f"generated_image_{i}.png")
class NanoBananaPrompt:
thema: str
def __init__(self, thema: str = "AIと人間の共存") -> None:
self.thema = thema
def create(self) -> str:
prompt = f"""
4コマ漫画を描いてください。4コマ漫画のテーマは「{self.thema}」です。
4コマの配置は4panel.pngを参考にしてください。
各コマに登場させる人物はref1.pngからref7.pngまでの画像とreforg.jpegを参考にしてください。
各コマには吹き出しを使って日本語のセリフを入れてください。
各コマの背景はテーマに沿ったものにしてください。
"""
return prompt
def main():
parser = argparse.ArgumentParser(description="4コマ漫画生成スクリプト")
parser.add_argument("thema", type=str, help="4コマ漫画のテーマ")
args = parser.parse_args()
nbp = NanoBananaPrompt(args.thema)
prompt = nbp.create()
print(prompt)
nbc = NanoBananaClient()
nbc.run(prompt)
if __name__ == "__main__":
main()
生成された画像は以下です
最後に
NanoBanana の API を使って画像を生成してみました
大量生成したい場合にはやはり API になるかなと思います
再度注意ですが Google AI Studio では無料ですが Gemini API (NanoBanana) は有料です
また NanoBanana は無料枠もないのでいきなり課金となるのでそれも注意してください

0 件のコメント:
コメントを投稿