ラベル NanoBanana の投稿を表示しています。 すべての投稿を表示
ラベル NanoBanana の投稿を表示しています。 すべての投稿を表示

2025年9月14日日曜日

NanoBananaのAPIを使って4コマ漫画を描いてもらった

NanoBananaのAPIを使って4コマ漫画を描いてもらった

概要

前回 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 は無料枠もないのでいきなり課金となるのでそれも注意してください

参考サイト

2025年9月13日土曜日

NanoBanana に4コマ漫画を描いてもらう

NanoBanana に4コマ漫画を描いてもらう

概要

前回普通に漫画を描いてもらいました
今回は4コマ漫画を描いてもらいます

環境

  • NanoBanana
    • Google AI Studio 2025/09/10 時点

コマ割り

ChatGPT に作成してもらいました

参照画像

前回のをそのまま使います

プロンプトで指示

各種画像をアップロードしプロンプトに以下を入力します

4コマ漫画を作成してください。テーマは「天気」でお願いします。コマ割りはアップロードした4panel.pngを使ってください。登場させるキャラクターはref1.pngからref7.pngを使ってください。背景はテーマに合わせていい感じに描いてください。

結果

1コマ目

キャラクターが空を見上げて「現れた!」と何かを見つけている様子。青空には白い雲が浮かんでいます。

2コマ目

大雨と雷に見舞われ、キャラクターが慌てて頭を抱えています。

3コマ目

大雨が止み、窓の外には虹がかかっています。キャラクターはブランケットにくるまって温かい飲み物を飲んでいて、ホッと一息ついています。

4コマ目

天気によってキャラクターの感情が豊かに表現された4コマ漫画ですね。

最後に

吹き出しのセリフもしっかりしてしてあげないとやはりセリフがおかしくなるようです
各コマごとにどういうシチュエーションなのか、セリフはどうするかキャラはどういう感じにするかななど細かく設定できれば精度も良くなりそうです

画像自体は問題なく描いてくれるようです

コマの採番も削除するように指示したほうがいいかもしれません

2025年9月12日金曜日

NanoBanana に漫画を描いてもらう

NanoBanana に漫画を描いてもらう

概要

前回漫画を描くために必要な準備をしました
今回は実際に漫画を描いてもらいます

環境

  • NanoBanana
    • Google AI Studio 2025/09/10 時点

漫画を描いてもらう

前回生成した参照画像とコマ割りをアップロードして描いてもらいます
プロンプトにもアップロードした画像を使ってもらうように指示します

参照画像のアップロードとプロンプト準備

プラスボタンから参照画像をすべて選択しアップロードします
画像数が多いとチャットで使えるトークン数の上限にあたってしまうのでその場合は画像を少なくするか1ファイルにまとめるなどしてトークン数を削減してください

プロンプトは「適当な漫画を描いてください。セリフ付きでお願いします。登場させる人物はアップロードした画像を参照し必ず登場させてください。コマ割りもアップロードしたファイルを参照し描いてください。」にしました

生成結果

漫画の流れと実際に描いた漫画の画像が出力されます
今回漫画は1ページでかつ話の内容や流れなどは何も与えてないので本当に適当な漫画が作成されています

ちゃんと参照画像を使ってます
セリフ部分もちゃんと描かれていますが日本語が一部うまく描けていないのでこのあたりは手動で修正すればいいかなと思います

自分が試してみた感じ何度か描画に失敗したり一部のコマが真っ白になったりするケースがありました
その場合はリトライでもいいですがやはりストーリーをしっかり与えたり各コマごとに何を描くか細かく指定すればしっかり描いてくれるのではと思います

ここからのポイント

  • まず左上から始まっているので右上から開始にしてもらう
    • これは前回作成したコマ割りの問題でもあるのでコマ割りを修正すればOKです
  • 背景などを細かく指定する
  • ストーリーを与える
    • 各コマごとに与えてもいいと思う
    • セリフなども細かく指定するといいのかも
  • 他のキャラクターを登場させる
  • 更に応用として API を使って完全自動化する
    1. ストーリーの生成
    2. 参照画像の生成 (必要であれば
    3. コマ割りの生成 (必要であれば
    4. 参照画像+コマ割りを元に漫画の作成
      • 参照画像やコマ割りは再利用できるので同じキャラであれば使い回せば OK
      • 新規のキャラクターや新規のコマ割りの場合は生成する
  • 細かい修正を手動で行うか更にプロンプトで行うか
    • プロンプトでどこまで修正できるか不明だが NanoBanana であれば元画像をそのまま残したまま一部を修正できるので頑張ればプロンプトだけでも修正できるかも
    • どうしても無理そうであれば手動で直す

最後に

NanoBanana で漫画を描いてもらう基本的な方法を紹介しました
今回は1ページでしたが漫画はストーリーがあり複数ページが必要なのでそれらを考えたうえで実際には漫画を描いてもらう必要があるかなと思います

ストーリーなども AI に考えてもらうことができるので完全に自動化して漫画を描いてもらうこともそこまで難しくはないかもしれません

4コママンガなどであればストーリーも作成しやすいのでまずは4コママンガから作成するとかはありかなと思います

2025年9月11日木曜日

NanoBanana を使って漫画を描くための参照画像を作成してみた

NanoBanana を使って漫画を描くための参照画像を作成してみた

概要

NanoBanana を使って漫画を描くためには登場させる人物の参照画像を作る必要があります
参照画像は直立や横向き、いろいろな表情の画像があると便利です
基本的には自分で描くものっぽいのですが今回は参照画像も NanoBanana で作ってみました

環境

  • NanoBanana
    • Google AI Studio 2025/09/10 時点

元画像

参照画像を作成するための元画像は以下を使います
ちなみにこの画像も AI で生成した画像です
ChatGPT などで適当に描いてもらう感じで OK です

参照画像の作成

あとは NanoBanana で作成していきます
基本は編集してほしい画像をアップロードしてチャットで指示すれば OK です

背景を白にする

まずは背景を白にします
「この画像の背景を白にしてください」と指示します

以下のような背景白の画像が簡単に生成されました

シンプルな立ち絵を生成する

先ほどの背景白の画像から今度はシンプルな立ち絵を生成してもらいます

「更にこの絵の「正面」「左向き」「右向き」「背面」の直立立ちの絵を描いてください」あたりの指示で OK です

生成してくれた画像は以下です
それぞれ別のファイルとして生成されました

なぜか左向きは作れなかったので諦めました
また右向きといいつつ正面を複数作成したりするのでうまくいかない場合はリトライすれば OK です

正面

右向き

背面

表情を変更する

元画像から表情を変更した画像をいくつか生成します
もしかすると顔部分だけを抜き出してそれの違う表情を複数作成するほうがいいのかもしれませんが今回は元画像を使って複数の表情の画像を生成します

まずは「この絵の表情を変更したいです、笑っている顔にしてください」で指示します

笑顔が生成できました
更に別の表情も作成していきます

「更に怒っている表情と悲しい表情も描いてください」

悲しい顔

怒っている顔

とりあえずこれくらいの参照画像があれば何とかなりそうです

おまけ: コマ割りも作成してもらう

ChatGPT で作成しましたが Google AI Studio の画像生成でも作成できると思います

「漫画のコマ割りを作って欲しいです。コマ数は5でお願いします。行数は3行で真ん中の行は1コマでお願いします。右上から左下に向かってコマに番号を振ってください。各コマには番号だけ振りそれ以外は白紙で大丈夫です」

なぜか左上から番号が振られていますがこの辺は自分で直すか NanoBanana に与えるのであれば機にする必要はないと思います

最後に

NanoBanana で漫画を描くための第一歩としてキャラクターの参照画像を生成してみました
漫画は当然1キャラクターというわけにはいかないので同じように他のキャラクターも参照画像を作成するといいかなと思います

表情に関しては今回は3種類ですができればもう少しあったほうがいいのかもしれません

1つのチャットないで使用できるトークン数が限られているので編集してもらう画像や生成してもらう画像は可能な限り少なくしてもらったほうがいいです
チャットを新規で立ち上げても OK です
その場合は Branch from here という機能がありそこから新規でチャットを立ち上げることができます

次回はこれらを元に漫画を描いてもらいます

参考サイト