Gemini 画像生成
概要
AIone は Gemini 系列の画像生成モデルに対応しており、2 つのエンドポイントから呼び出せます:
| エンドポイント | 用途 | できること |
|---|---|---|
POST /v1/chat/completions |
既存の OpenAI SDK でそのまま素早く接続 | 画像生成、画像から画像、ストリーミング |
POST /v1beta/models/{model}:generateContent |
解像度やアスペクト比を指定したい場合 | 上記すべて + 解像度 / アスペクト比の制御 |
要するに: 画像が出ればよいなら /v1/chat/completions、サイズを制御したいなら /v1beta ネイティブエンドポイント。
利用可能なモデル
| モデル | 特徴 |
|---|---|
gemini-3.1-flash-image |
主力モデル。速度と品質のバランスが良い |
gemini-3-pro-image |
出力が安定しており、完成品向け |
gemini-2.5-flash-image |
前世代 Flash。既定サイズのみ |
モデルの一覧は
GET /v1/modelsと Portal のモデル一覧ページをご確認ください。
一、すぐに画像を出す: /v1/chat/completions
最小リクエスト:
curl https://api.aiin1.ai/v1/chat/completions \
-H "Authorization: Bearer sk-nex-your-key-here" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-3.1-flash-image",
"messages": [
{"role": "user", "content": "かわいい猫を描いて"}
]
}'レスポンス構造
画像は message.content に Markdown 埋め込みの data URI として返ります:
{
"id": "chatcmpl-xxx",
"object": "chat.completion",
"model": "gemini-3.1-flash-image",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": ""
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 6,
"completion_tokens": 1120,
"total_tokens": 1126
}
}画像の取り出し: message.content は文字列なので、正規表現で data URI を抜き出します。
import re, base64
content = response.choices[0].message.content
m = re.search(r"data:image/\w+;base64,([A-Za-z0-9+/=]+)", content)
if m:
image_bytes = base64.b64decode(m.group(1))
open("out.png", "wb").write(image_bytes)Python SDK
from openai import OpenAI
client = OpenAI(
api_key="sk-nex-your-key-here",
base_url="https://api.aiin1.ai/v1",
)
resp = client.chat.completions.create(
model="gemini-3.1-flash-image",
messages=[{"role": "user", "content": "かわいい猫を描いて"}],
)
print(resp.choices[0].message.content[:80])画像から画像
OpenAI 標準のマルチモーダル content 配列で参照画像を渡します:
{
"model": "gemini-3.1-flash-image",
"messages": [
{
"role": "user",
"content": [
{"type": "text", "text": "この画像のりんごをオレンジに置き換えて"},
{
"type": "image_url",
"image_url": {"url": "data:image/png;base64,iVBORw0KGgoAAA..."}
}
]
}
]
}参照画像は data: URI(base64)と公開 https:// URL の両方に対応します。base64 を推奨: 一部の CDN はホットリンク制限や形式変換を行うため、直リンクでは取得できない場合があります。
ストリーミング
"stream": true に対応しています。これは疑似ストリーミングで、生成完了後に画像が 1 つの SSE イベントでまとめて届きます(トークン単位の逐次配信ではありません)。接続上にデータが流れ続けるため、中間のネットワーク機器にアイドルとして切断されにくくなるのが利点です。
curl https://api.aiin1.ai/v1/chat/completions \
-H "Authorization: Bearer sk-nex-your-key-here" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-3.1-flash-image",
"messages": [{"role": "user", "content": "かわいい猫を描いて"}],
"stream": true
}'このエンドポイントのサイズ
/v1/chat/completions はモデルの既定サイズ 約 1408×768 で出力します(画像から画像の場合は参照画像に追従し、正方形の参照画像なら 1024×1024 になります)。
解像度やアスペクト比を指定するには、以下のネイティブエンドポイントをご利用ください。
二、解像度とアスペクト比の制御: /v1beta ネイティブエンドポイント
POST https://api.aiin1.ai/v1beta/models/{model}:generateContent
モデル名は URL パスに、サイズ関連のパラメータは generationConfig.imageConfig に置きます:
curl https://api.aiin1.ai/v1beta/models/gemini-3.1-flash-image:generateContent \
-H "Authorization: Bearer sk-nex-your-key-here" \
-H "Content-Type: application/json" \
-d '{
"contents": [
{"role": "user", "parts": [{"text": "かわいい猫を描いて"}]}
],
"generationConfig": {
"responseModalities": ["IMAGE"],
"imageConfig": {
"imageSize": "4K",
"aspectRatio": "16:9"
}
}
}'imageSize — 解像度ティア
取りうる値は 512 / 1K(既定)/ 2K / 4K。16:9 の場合の実際のピクセル:
imageSize |
実ピクセル(16:9) | 画素数 |
|---|---|---|
| 省略(既定 1K) | 1376×768 | 1.06 MP |
"2K" |
2752×1536 | 4.23 MP |
"4K" |
5504×3072 | 16.9 MP |
"512" |
688×384 | 0.26 MP |
gemini-2.5-flash-image は既定サイズ(1024×1024)のみを出力し、imageSize には反応しません。
aspectRatio — アスペクト比
14 種類に対応しています。既定ティア(1K)での実ピクセル:
| 比率 | ピクセル | 比率 | ピクセル |
|---|---|---|---|
1:1 |
1024×1024 | 9:16 |
768×1376 |
3:2 |
1264×848 | 16:9 |
1376×768 |
2:3 |
848×1264 | 21:9 |
1584×672 |
4:3 |
1200×896 | 1:4 |
512×2064 |
3:4 |
896×1200 | 4:1 |
2064×512 |
5:4 |
1152×928 | 1:8 |
352×2928 |
4:5 |
928×1152 | 8:1 |
2928×352 |
imageSize と aspectRatio は自由に組み合わせられます。例えば 4K + 21:9 で超ワイドの高解像度画像になります。
モデルは選択したティアと比率のネイティブ解像度で描画します。実際のピクセルサイズは返された画像でご確認ください。
レスポンス構造
画像は candidates[0].content.parts[] の inlineData にあり、data は接頭辞なしの純粋な base64 です:
{
"candidates": [
{
"content": {
"parts": [
{
"inlineData": {
"mimeType": "image/png",
"data": "iVBORw0KGgoAAA..."
}
}
]
},
"finishReason": "STOP"
}
],
"usageMetadata": {
"promptTokenCount": 6,
"candidatesTokenCount": 1120,
"totalTokenCount": 1126,
"candidatesTokensDetails": [{"modality": "IMAGE", "tokenCount": 1120}]
}
}import base64, json, requests
resp = requests.post(
"https://api.aiin1.ai/v1beta/models/gemini-3.1-flash-image:generateContent",
headers={"Authorization": "Bearer sk-nex-your-key-here"},
json={
"contents": [{"role": "user", "parts": [{"text": "かわいい猫を描いて"}]}],
"generationConfig": {
"responseModalities": ["IMAGE"],
"imageConfig": {"imageSize": "2K", "aspectRatio": "16:9"},
},
},
timeout=600,
)
for part in resp.json()["candidates"][0]["content"]["parts"]:
if "inlineData" in part:
open("out.png", "wb").write(base64.b64decode(part["inlineData"]["data"]))
partsにはthoughtSignatureなど画像以外の要素が含まれることがあります。走査時はinlineDataの有無で判定してください。
画像から画像(ネイティブエンドポイント)
参照画像を inlineData として parts に入れ、テキストと並べます。data は data:image/png;base64, 接頭辞なしの純粋な base64 です:
{
"contents": [
{
"role": "user",
"parts": [
{"inlineData": {"mimeType": "image/png", "data": "iVBORw0KGgoAAA..."}},
{"text": "この画像のりんごをオレンジに置き換えて"}
]
}
],
"generationConfig": {
"responseModalities": ["IMAGE"],
"imageConfig": {"aspectRatio": "1:1"}
}
}inlineData を複数入れると複数画像の合成ができます。
課金について
画像出力は画像出力トークン単位で課金されます。トークン数は解像度ティアで決まり、プロンプトの長さには依存しません:
| ティア | gemini-3.1-flash-image |
gemini-3-pro-image |
|---|---|---|
| 512 | 747 | — |
| 既定 / 1K | 1,120 | 1,120 |
| 2K | 1,680 | 1,120 |
| 4K | 2,520 | 2,000 |
gemini-2.5-flash-image は 1 枚あたり 1,290 トークンです。
画像部分のトークン数は上表のとおりです。レスポンス中の usage.completion_tokens(chat エンドポイント)および usageMetadata.candidatesTokenCount(ネイティブエンドポイント)は今回の出力トークンの合計で、画像のほかに少量のテキストトークンを含む場合があり、それぞれの単価で計算されます。単価は「料金説明」をご覧ください。
リクエストパラメータ
/v1/chat/completions
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
model |
string | はい | 画像モデル ID |
messages |
array | はい | OpenAI Chat 標準のメッセージ配列。参照画像は image_url パートで渡す |
stream |
boolean | いいえ | 疑似ストリーミング。生成完了後に 1 つの SSE イベントで配信 |
temperature |
number | いいえ | 生成温度 |
/v1beta/models/{model}:generateContent
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
contents |
array | はい | 会話内容。parts に text と inlineData を置く |
generationConfig.responseModalities |
array | いいえ | ["IMAGE"] を推奨 |
generationConfig.imageConfig.imageSize |
string | いいえ | 512 / 1K / 2K / 4K |
generationConfig.imageConfig.aspectRatio |
string | いいえ | 上記 14 種のいずれか |
注意事項
- タイムアウト: 高解像度の生成は時間がかかります。クライアントの HTTP タイムアウトは 600 秒以上を推奨します。
- 画像の取り出し方はエンドポイントで異なります: chat エンドポイントでは
message.contentの Markdown data URI から、ネイティブエンドポイントではparts[].inlineData.data(接頭辞なしの純粋な base64)から取り出します。 - 参照画像の形式: chat エンドポイントは
data:接頭辞付きの完全な data URI、ネイティブエンドポイントは接頭辞なしの純粋な base64。ルールが逆なので混同しないでください。 - Anthropic 形式には非対応: Gemini 画像モデルは
/v1/messagesでは利用できません。 - モデルの権限: API Key が対象の画像モデルにアクセスできることをご確認ください。