1. はじめに
ChatGPT Proのサブスクに加入した当初は、絵本の挿絵づくりなどを手伝ってもらっていましたが、最近は雑談程度の使い方しかしていませんでした。
そこで、久しぶりに活用してみようと、LINEスタンプの作成を手伝ってもらうことにしました。
まずは普通に、ChatGPTにプロンプトを送信して、DALL·E 3で画像を生成。これは一般的な使い方です。
しかし、毎回ちまちまと手動で行うのが面倒になってきたので、OpenAIのAPIを使って自動化することを考え始めました。
ところが、プロンプトの調整で行き詰まってしまい、なかなかうまく進みません。
そんな話を友人にしたところ、**一貫性が保たれる画像生成モデル「nano banana」**が公開されたと教えてもらい、GoogleのGemini APIと組み合わせて自動化を試してみることにしました。
2. 手動での画像生成からLINEスタンプ申請まで
ChatGPTとDALL·E 3を手動で使っていたときのフローを紹介
プロンプトを考える
↓
ChatGPT経由でDALL·Eに送信
↓
結果画像の確認
↓
微調整(繰り返し)
↓
背景透過
↓
LINEスタンプメーカーで読み込んで作成(繰り返し)
↓
申請
↓
タグ付け
微調整を繰り返すうちに、だんだんとクオリティが上がってきたこともあり、最初はとても楽しく取り組んでいました。
しかし次第に効率も意識するようになり、「LINEスタンプメーカー」では画像の切り出しができることを活かして、以下の表をもとに4パターンを一度に作成してもらう方法に切り替えました。
出力結果は期待通り!
3. OpenAI APIによる自動化の試み(失敗のケース)
手動作業を繰り返していた頃、別の案件を通じてOpenAIのAPIが個人でも利用できることを知りました。
APIの利用には少額の料金が発生しますが、その手続きについてはここでは割愛します。
今回は、OpenAIのchat-completion APIとimage-generation APIを組み合わせて、画像生成の自動化を検討してみました。
API呼び出しスクリプト
import os
from dotenv import load_dotenv
load_dotenv() # .env ファイルを読み込む
openai.api_key = os.getenv("OPENAI_API_KEY")
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
json_data = {
"model": "dall-e-3",
"prompt": "A 2x2 grid digital illustration featuring a fluffy, orange and white Ragamuffin cat named Meru. Each panel shows a different expression: おはよう, ありがとう, ごめん, 無言, with soft anime style and pastel backgrounds. Thought bubbles in dotted style. Each panel should be 240x240.",
"n": 1,
"size": "1024x1024"
}
response = requests.post(
"https://api.openai.com/v1/images/generations",
headers=headers,
json=json_data
)
result = response.json()
image_url = result["data"][0]["url"]
print("Image URL:", image_url)
手動のプロンプトの内容を英語で伝えても綺麗に4パターンは出力されませんでした。
制御不能。。。
4. nano bananaとの出会い
友人からのアドバイスで、**公開されたばかりの「nano banana(gemini-2.5-flash-image-preview)」**を知りました。
これは、**クリエイターの皆さんが苦労している「画像の一貫性」**を解決できる可能性があるとのことで、とても興味を惹かれました。
そこで、Geminiとの組み合わせを試してみることにしました。
5. Gemini APIを使った自動化(成功のケース)
APIを使用するために少し料金がかかります。手続きについては割愛します。
サンプルソースが公開されていたのでそれに元画像の読み込みなど少々手を加えました。
gemini-2.5-flash-image-preview
サンプルソース
from google import genai
from google.genai import types
from PIL import Image
from io import BytesIO
import os
from dotenv import load_dotenv
load_dotenv() # .env ファイルを読み込む
genai.api_key = os.getenv("GEMINI_API_KEY")
client = genai.Client()
prompt = (
"Create a picture of a nano banana dish in a fancy restaurant with a Gemini theme"
)
response = client.models.generate_content(
model="gemini-2.5-flash-image-preview",
contents=[prompt],
)
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")
Dall•E3と同じプロンプトでサンプル画像なし
1回目でこの仕上がり! 3.の作業は1日も費やしたのに。。。(API使用料$4)
プロンプトに4x4の画像を生成するように書いてみた。こちらはサンプル画像を添付しました。
prompt= ("""
Please create an anime-style fluffy orange and white Ragamuffin cat illustration in a 4x4 grid.
Each panel should depict a different pose or expression matching the theme \“{voice}\”.
Design it so it can be easily cropped into 240x240 pixel squares within a 1024x1024 pixel image.
Please make the background transparent. Do not use any UI elements or labels.
""")
1回で申請できるスタンプ完成
※ちなみにOpenAPI、GeminiAPI共に1回の画像生成で6円かかります。かなりお得♪
送ったサンプル画像
ChatGPT経由Dall•E3作(一番右はモデルになったラガマフィンの「メル」です。)
6. 結論
OpenAIのみ → 一貫性に欠ける 頑張って欲しい
Gemini + nano banana → 一貫性あり・自動化しやすい しばらくこっちを利用します。
Geminiの出力画像には透かしが入ると書かれていましたが、見た目ではわからないのです。
画像を取得後、背景の透過処理(透過になってても背景として保存されてしまうため)と16分割してファイルの保存処理を自動化しています。
LINEスタンプメーカーでデコって完成したスタンプ
7. まとめ
残念ながら、**nano bananaはDALL·E 3よりも良い結果が得られた一方で、**画像生成においてはまだ不自然な点がありました。
たとえば、足が5本あるような違和感のある画像が生成されることもあり、今後の改善に期待したいところです。
あと、日本語を表示するのも苦手なようです。LINEスタンプメーカーでデコりましょう。
あともう一つ、DALL•E3は日本語は結構行けるのですが、「こんばんは」を出力するのが苦手です。「こんばはは」「こんばはち」と出力されます。
「こんばんわ」は正確に出力されます。「わ」「は」が理解できないようです。