Google: Nano Banana 2 (Gemini 3.1 Flash Image)
Nano Banana 2(Gemini 3.1 Flash Image)可在對話中生成及編輯圖像。它支援文字與視覺來源、0.5K–4K 輸出、參考圖像構圖及搜尋 grounding,適用產品場景、資訊圖表及迭代視覺工作。
- Ailoot · 圖片
POST /v1/images/generationsgemini-3.1-flash-image - Ailoot Ultra · OpenAI Chat
POST /v1/chat/completionsgoogle/gemini-3.1-flash-image - Ailoot Ultra · 圖片
POST /v1/images/generationsgoogle/gemini-3.1-flash-image - Ailoot Ultra · Anthropic Messages
POST /v1/messagesgoogle/gemini-3.1-flash-image
關於模型
此說明介紹模型的能力。Ailoot 可用的輸入、輸出與選項,依所選方法列於下方。
Nano Banana 2 是 Google 用於原生圖像生成及對話式編輯的 Gemini 3.1 Flash Image 模型,設計重點為有效率的視覺創作及反覆修訂。文件記載的 API 設定接收文字、圖像、影片及 PDF,回傳圖像與文字。它與 Gemini Nano Banana 2.1 是不同的具名版本,並非所有後續 Nano Banana 更新的通用名稱。
輸出尺寸包含 0.5K、1K、2K、4K,預設為 1K。較小的 0.5K 選項是此設定特有,適合初始構圖;較大級距則為選定輸出形狀提供更多像素。文件中的比例涵蓋正方形、直式及橫式,包括 1:1、2:3、3:2、3:4、4:3、4:5、5:4、9:16、16:9、21:9,另有 1:4、4:1、1:8、8:1。例如正方形輸出從 0.5K 的 512 × 512 到 4K 的 4096 × 4096。完善細節前,應先依預期放置位置選擇形狀。
Google 將長寬比遵循、視覺一致性及多語文字呈現改善列為此版本更新。海報、菜單或資訊圖表應使用確切文字,定義哪個標籤屬於哪個物件。對於小字或長段文字,模型資訊卡指出可讀性仍有限制,尤其在 1K。請保持說明文字精簡,明確指定相對字級;密集內文應將圖像視為視覺版面參考,仔細檢查實際字樣。
單一流程最多可結合 14 張參考圖像。圖像指南描述最多十個物件的忠實呈現,以及最多四個角色的相似度。請標示參考並指定各自提供的內容。產品場景可由一張圖確立物件、一張圖確立環境,另一張圖確立光線。角色序列應將先前輸出帶入下一個提示,並說明在視角或姿勢改變後仍必須保留的特徵。
Web Search 及 Image Search grounding 可藉由最新資訊與檢索的視覺參考輔助生成。Image Search 新增的是視覺脈絡,而非僅搜尋結果的書面描述。製造商在文件記載的各 thinking 設定下都支援搜尋功能。圖像搜尋流程排除將真實人物圖像用作搜尋取得的參考,並隨 grounding 結果回傳署名中繼資料;在應用程式使用結果時應保留這些資料。
Gemini 3.1 Flash Image 文件記載的 thinking 控制為 minimal 與 high,預設為 minimal。這與 Nano Banana 2.1 的三級、medium 預設設定不同。Thinking 支援較複雜構圖及指令處理。模型以 Gemini 3 Flash 為基礎,但這個關係不會讓它成為一般程式碼執行或函式呼叫模型:這些能力在此圖像版本的表中標示為不支援。
對話式編輯支援修改提供的圖像,或完善較早的生成結果。具體需求可寫成:「保留瓶身形狀、標籤文字與鏡頭角度。將背景換成淺色石材表面,並加入更柔和的陰影。」描述保留元素時應與修改元素同樣仔細。模型資訊卡指出,角色一致性、左右定位及塗鴉式編輯仍可能不完美,因此繼續視覺序列前應比較這些特定細節。
API 模型表列出 131,072 輸入 token 及 32,768 輸出 token。它支援圖像生成、搜尋 grounding、thinking 及批次處理;不支援音訊生成、快取、結構化輸出、檔案搜尋、Live API 及 URL context。圖像流程不接受音訊輸入。此 API 設定中的影片或 PDF 可為靜態圖像任務提供資訊;輸出仍為圖像及文字。生成圖像包含 SynthID,且不一定精確遵循所需圖像數量。
實用資訊圖表應提供定稿標籤、目標讀者、閱讀順序、參考素材及目標比例。要求單一清楚的視覺解說,再用下一回合修正文字或間距,同時保留既定構圖。產品樣稿應指定幾何形狀、表面、光線及定義產品的視覺細節。實用成果是圖像及相關文字,可在受控序列中檢查、選擇及完善。
實用任務
實用任務
英文技術範例
Create a simple bicycle-care infographic
Create one portrait infographic teaching three bicycle checks before a short ride: tires, brakes and chain. Use three large illustrated steps in that order, a warm ivory background and dark green accents. Include only these headings: 'TIRES', 'BRAKES', 'CHAIN'. Leave generous space around each heading and keep the illustrations clearly separated.預期結果
One portrait image with three ordered illustrated steps and the three exact, readable headings.檢查結果
Inspect the rendered image for heading spelling, order and clear separation of the three checks.Ailoot · 圖片 POST /v1/images/generations gemini-3.1-flash-image
gemini-3.1-flash-image入門
Nano Banana 2(Gemini 3.1 Flash Image)可在對話中生成及編輯圖像。它支援文字與視覺來源、0.5K–4K 輸出、參考圖像構圖及搜尋 grounding,適用產品場景、資訊圖表及迭代視覺工作。
- 接受的輸入
- 文字
- 結果
- 圖片 · 文字
Ailoot 可用 · 輸入與方法
Ailoot · 圖片 POST /v1/images/generations
- 輸入
text- 輸出
image,text- 上下文
- 131,072 tokens
- 輸出上限
- 32,768 tokens
- 輸出格式
- 圖片檔案
| 欄位 | 類型 | 要求 | 值與限制 | 預設值 |
|---|---|---|---|---|
欄位model | 類型string | 要求必填 | 值與限制 gemini-3.1-flash-image | 預設值— |
欄位prompt | 類型string | 要求必填 | 值與限制 長度下限: 1 | 預設值— |
欄位n | 類型integer | 要求選填 | 值與限制 最小值: 1 | 預設值1 |
欄位response_format | 類型string | 要求選填 | 值與限制 url, b64_json | 預設值— |
欄位stream | 類型boolean | 要求選填 | 值與限制 | 預設值false |
欄位size | 類型string | 要求選填 | 值與限制 依模型而定 | 預設值— |
欄位quality | 類型string | 要求選填 | 值與限制 依模型而定 | 預設值— |
欄位background | 類型string | 要求選填 | 值與限制 依模型而定 | 預設值— |
欄位output_format | 類型string | 要求選填 | 值與限制 依模型而定 | 預設值— |
欄位output_compression | 類型integer | 要求選填 | 值與限制 依模型而定 | 預設值— |
欄位moderation | 類型string | 要求選填 | 值與限制 依模型而定 | 預設值— |
欄位input_fidelity | 類型string | 要求選填 | 值與限制 依模型而定 | 預設值— |
欄位style | 類型string | 要求選填 | 值與限制 依模型而定 | 預設值— |
欄位partial_images | 類型integer | 要求選填 | 值與限制 依模型而定 | 預設值— |
輸入素材組合
文字生成圖片 · 必填: prompt
方法參數與生命週期
| 參數 | 規格 |
|---|---|
參數material_types | 規格text |
參數required | 規格model, prompt |
參數optional_controls | 規格null |
參數content_type | 規格application/json |
生命週期: synchronous_result_then_owned_library
GET /v1/media/tasks/{task_id} · 實際回傳的 task_id 或媒體庫紀錄
GET /v1/media/assets/{asset_id}/content
GET /v1/media/assets
GET /v1/media/assets/{asset_id}
方法結構與 ID 均為精確值;供應商能力與准入狀態分開。
方案
Ailoot 方法費率
POST /v1/images/generations- 文字輸入
- US$0.0005 / 1K
- 文字輸出
- US$0.003 / 1K
- 輸出,圖片
- US$0.06 / 1K tokens
- 輸入
- US$0.0005 / 1K 圖片 Token
- 輸出
- ≈US$0.0448 每張 0.5K 圖片
- 輸出
- US$0.0672 每張 1K 圖片
- 輸出
- ≈US$0.101 每張 2K 圖片
- 輸出
- ≈US$0.151 每張 4K 圖片
Ailoot 會在請求前預留估算金額。取得結果後,依實測用量結算最終費用。串流結算採用最終用量紀錄。預留金額與結算的運作方式 →
參考費率詳情
模型層級的參考費率表不會變更方法選擇、報價或費用。實際計費採用所選 Ailoot 方法的費率。
模型參考費率表
各設定的價格
| 設定 | 費率表 | 費用 |
|---|---|---|
| 設定Ultra | 費率表基本費率 | 費用 輸入 · 輸入 Token $0.0010000 / 1K Token 輸出 · 輸出 Token $0.006000 / 1K Token 輸出 · 圖片輸出 $0.12000 / 1K Token 輸出 · 網頁搜尋 $0.028 每次網頁搜尋 |
請求範例
Ailoot · 圖片
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
export AILOOT_API_KEY
export AILOOT_API_KEY
: "${AILOOT_PROMPT_FILE:?Set your actual UTF-8 image brief}"
export AILOOT_PROMPT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "gemini-3.1-flash-image", "prompt": ""}')
f=Path(os.environ["AILOOT_PROMPT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 brief")
p['prompt']=f.read_text(encoding="utf-8")
if not p['prompt'].strip():raise SystemExit("Brief must contain text")
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/images/generations \
-H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
--data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json, os, subprocess
from pathlib import Path
from urllib.parse import urlsplit, urljoin
def save_images(items):
if not items: raise SystemExit("No completed images; retain the full response")
for index, item in enumerate(items):
encoded=item.get("b64_json")
uri=item.get("url", "")
if not encoded and uri.startswith("data:image/"):
header, separator, encoded=uri.partition(",")
if not separator or ";base64" not in header: raise SystemExit("Unsupported image data URI")
if encoded:
raw=base64.b64decode(encoded,validate=True)
elif uri:
uri=urljoin("https://api.ailoot.ai",uri)
parsed=urlsplit(uri)
if parsed.scheme!="https" or not parsed.netloc or parsed.username or parsed.password:
raise SystemExit("Invalid returned image URL")
owned=parsed.netloc=="api.ailoot.ai" and parsed.path.startswith("/v1/media/assets/") and parsed.path.endswith("/content")
args=["curl","--fail-with-body","--silent","--show-error",uri]
if owned: args += ["-H","Authorization: Bearer "+os.environ["AILOOT_API_KEY"]]
temporary=Path(f"image-{index}.bin")
subprocess.run(args+["-o",str(temporary)],check=True)
raw=temporary.read_bytes()
temporary.unlink()
else: raise SystemExit("Image has neither bytes nor URL")
if not raw: raise SystemExit("Empty image result")
ext="png" if raw.startswith(b"\x89PNG") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else "svg" if raw.lstrip().startswith((b"<svg",b"<?xml")) else "bin"
Path(f"image-{index}.{ext}").write_bytes(raw)
print("Every returned image saved; complete response metadata retained")
save_images(json.loads(Path("result.json").read_text())["data"])
PY_RESULT
from openai import OpenAI
import base64, json, os, subprocess
from pathlib import Path
from urllib.parse import urlsplit, urljoin
def save_images(items):
if not items: raise SystemExit("No completed images; retain the full response")
for index, item in enumerate(items):
encoded=item.get("b64_json")
uri=item.get("url", "")
if not encoded and uri.startswith("data:image/"):
header, separator, encoded=uri.partition(",")
if not separator or ";base64" not in header: raise SystemExit("Unsupported image data URI")
if encoded:
raw=base64.b64decode(encoded,validate=True)
elif uri:
uri=urljoin("https://api.ailoot.ai",uri)
parsed=urlsplit(uri)
if parsed.scheme!="https" or not parsed.netloc or parsed.username or parsed.password:
raise SystemExit("Invalid returned image URL")
owned=parsed.netloc=="api.ailoot.ai" and parsed.path.startswith("/v1/media/assets/") and parsed.path.endswith("/content")
args=["curl","--fail-with-body","--silent","--show-error",uri]
if owned: args += ["-H","Authorization: Bearer "+os.environ["AILOOT_API_KEY"]]
temporary=Path(f"image-{index}.bin")
subprocess.run(args+["-o",str(temporary)],check=True)
raw=temporary.read_bytes()
temporary.unlink()
else: raise SystemExit("Image has neither bytes nor URL")
if not raw: raise SystemExit("Empty image result")
ext="png" if raw.startswith(b"\x89PNG") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else "svg" if raw.lstrip().startswith((b"<svg",b"<?xml")) else "bin"
Path(f"image-{index}.{ext}").write_bytes(raw)
print("Every returned image saved; complete response metadata retained")
f=Path(os.environ["AILOOT_PROMPT_FILE"])
if not f.is_file():raise SystemExit("Set your actual UTF-8 image brief file")
request={'model': 'gemini-3.1-flash-image', 'prompt': ''}
request["prompt"]=f.read_text(encoding="utf-8")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
result=client.images.generate(**request)
Path("sdk-result.txt").write_text(str(result),encoding="utf-8")
save_images([{"b64_json":getattr(item,"b64_json",None),"url":getattr(item,"url",None)} for item in result.data])
import OpenAI from "openai";
import { readFileSync, writeFileSync } from "node:fs";
const key=process.env.AILOOT_API_KEY;
if(!key) throw new Error("Set your actual Ailoot API key");
const client=new OpenAI({baseURL:"https://api.ailoot.ai/v1",apiKey:key,maxRetries:0});
const request={"model": "gemini-3.1-flash-image", "prompt": ""};
if(!process.env.AILOOT_PROMPT_FILE)throw new Error("Set your actual UTF-8 image brief file");
request.prompt=readFileSync(process.env.AILOOT_PROMPT_FILE,"utf8");
const result=await client.images.generate(request);
writeFileSync("sdk-result.json",JSON.stringify(result,null,2));
if(!result.data?.length) throw new Error("No completed images");
for(let index=0;index<result.data.length;index++) {
const item=result.data[index];let encoded=item.b64_json,uri=item.url||"",raw;
if(!encoded && uri.startsWith("data:image/")) {
const comma=uri.indexOf(",");if(comma<0 || !uri.slice(0,comma).includes(";base64")) throw new Error("Unsupported image data URI");
encoded=uri.slice(comma+1);
}
if(encoded) {
if(encoded.length%4!==0 || !/^[A-Za-z0-9+/]*={0,2}$/.test(encoded)) throw new Error("Invalid Base64");
raw=Buffer.from(encoded,"base64");
} else if(uri) {
const u=new URL(uri,"https://api.ailoot.ai");
if(u.protocol!=="https:" || u.username || u.password) throw new Error("Invalid returned URL");
const owned=u.origin==="https://api.ailoot.ai" && u.pathname.startsWith("/v1/media/assets/") && u.pathname.endsWith("/content");
const response=await fetch(u,{headers:owned?{Authorization:"Bearer "+key}:{},redirect:"manual"});
if(!response.ok) throw new Error("Image content download failed: "+response.status);
raw=Buffer.from(await response.arrayBuffer());
} else throw new Error("Image has neither bytes nor URL");
if(!raw.length) throw new Error("Empty image result");
const ext=raw.subarray(0,4).equals(Buffer.from([137,80,78,71]))?"png":raw[0]===255&&raw[1]===216?"jpg":raw.toString("ascii",0,4)==="RIFF"&&raw.toString("ascii",8,12)==="WEBP"?"webp":raw.toString("utf8").trimStart().startsWith("<svg")||raw.toString("utf8").trimStart().startsWith("<?xml")?"svg":"bin";
writeFileSync(`image-${index}.${ext}`,raw);
}
console.log("Every returned image saved; sdk-result.json retains complete metadata");
接收並儲存結果
Ailoot · 圖片
下載每張傳回的圖片,或儲存其 Base64 內容
GET /v1/media/tasks/{task_id}GET /v1/media/assets/{asset_id}/contentGET /v1/media/assetsGET /v1/media/assets/{asset_id}
保留所有已完成的結果
請儲存每張已完成的圖片;從每個傳回的 URL 取得圖片,或解碼其 Base64 內容。
儲存所有資料項目。解碼每個 b64_json,或透過每個回傳的已簽署 URL 取得內容。依實際 MIME 類型/位元組內容選擇副檔名。
需要檢查原始回應時
若圖片生成或編輯結果需要檢查,請保留原始 operation_id/X-Client-Request-ID 與回傳的結果資訊。使用實際的 task_id 或 asset_id 值,透過媒體庫取回自己擁有的既有結果。請勿重新提交生成/編輯請求,也請勿以 operation_id 組成輪詢 URL。
回應欄位
| 欄位 | 類型 |
|---|---|
欄位created | 類型integer |
欄位data[].url | 類型string |
欄位data[].b64_json | 類型base64 string |
欄位usage | 類型object |
錯誤與後續步驟
| 回應 | 條件 | 下一步 |
|---|---|---|
回應400 · invalid_request_error | 條件必要欄位、素材表示方式或參數值無效 | 下一步提出新的建立請求前,先修正指定欄位。 |
回應server_error | 條件回傳的回應表示該作業或結果需要檢查 | 下一步保留原始回傳的作業/任務 ID、請求標頭與回應;繼續以支援的方式讀取該原始作業。請勿重新提交建立請求。 |
別名
模型別名
Ailoot gemini-3.1-flash-image
Ailoot Ultra google/gemini-3.1-flash-image
方法路徑別名
/v1/images
相關呼叫用 ID
Ailoot Ultra · OpenAI Chat POST /v1/chat/completions google/gemini-3.1-flash-image
google/gemini-3.1-flash-image入門
Nano Banana 2(Gemini 3.1 Flash Image)可在對話中生成及編輯圖像。它支援文字與視覺來源、0.5K–4K 輸出、參考圖像構圖及搜尋 grounding,適用產品場景、資訊圖表及迭代視覺工作。
- 接受的輸入
- 文字
- 結果
- 文字
Ailoot 可用 · 輸入與方法
Ailoot Ultra · OpenAI Chat POST /v1/chat/completions
- 輸入
text- 輸出
text- 輸出格式
- json 或 SSE
| 欄位 | 類型 | 要求 | 值與限制 | 預設值 |
|---|---|---|---|---|
欄位model | 類型string | 要求必填 | 值與限制 google/gemini-3.1-flash-image | 預設值— |
欄位messages | 類型message[] | 要求必填 | 值與限制 項目數下限: 1 | 預設值— |
欄位messages[].role | 類型string | 要求必填 | 值與限制 範例:system, user, assistant, tool, function 條件: 這些角色由 原始碼中的相容型別明確表示;確切角色集合仍依模型而定。 依模型而定 | 預設值— |
欄位messages[].content | 類型string|content_part[]|null | 要求選填 | 值與限制 | 預設值— |
欄位messages[].tool_calls | 類型tool_call[] | 要求選填 | 值與限制 | 預設值— |
欄位messages[].tool_call_id | 類型string | 要求選填 | 值與限制 適用條件: role=tool;使用實際回傳的 ID | 預設值— |
欄位messages[].name | 類型string | 要求選填 | 值與限制 | 預設值— |
欄位messages[].reasoning_content | 類型string | 要求選填 | 值與限制 適用條件: 此模型使用推理內容時,將實際回傳的推理內容帶回後續請求 | 預設值— |
欄位messages[].reasoning_details | 類型object|array | 要求選填 | 值與限制 依模型而定 | 預設值— |
欄位max_tokens | 類型integer | 要求選填 | 值與限制 最小值: 1 依模型而定 | 預設值— |
欄位max_completion_tokens | 類型integer | 要求選填 | 值與限制 最小值: 1 依模型而定 | 預設值— |
欄位stream | 類型boolean | 要求選填 | 值與限制 | 預設值false |
欄位stream_options.include_usage | 類型boolean | 要求選填 | 值與限制 依模型而定 | 預設值— |
欄位temperature | 類型number | 要求選填 | 值與限制 依模型而定 | 預設值— |
欄位top_p | 類型number | 要求選填 | 值與限制 依模型而定 | 預設值— |
欄位stop | 類型string|string[] | 要求選填 | 值與限制 依模型而定 | 預設值— |
欄位tools | 類型function_tool[] | 要求選填 | 值與限制 依模型而定 | 預設值— |
欄位tools[].type | 類型string | 要求選填 | 值與限制 function 依模型而定 | 預設值— |
欄位tools[].function.name | 類型string | 要求必填 | 值與限制 適用條件: 已提供函式工具 | 預設值— |
欄位tools[].function.description | 類型string | 要求選填 | 值與限制 | 預設值— |
欄位tools[].function.parameters | 類型JSON_schema | 要求選填 | 值與限制 | 預設值— |
欄位tool_choice | 類型string|object | 要求選填 | 值與限制 依模型而定 | 預設值— |
欄位parallel_tool_calls | 類型boolean | 要求選填 | 值與限制 依模型而定 | 預設值— |
欄位response_format | 類型object | 要求選填 | 值與限制 依模型而定 | 預設值— |
欄位reasoning_effort | 類型string | 要求選填 | 值與限制 依模型而定 | 預設值— |
欄位reasoning | 類型object | 要求選填 | 值與限制 依模型而定 | 預設值— |
欄位service_tier | 類型string | 要求選填 | 值與限制 依模型而定 | 預設值— |
欄位instructions | 類型string | 要求選填 | 值與限制 相容性欄位 | 預設值— |
欄位functions | 類型function[] | 要求選填 | 值與限制 依模型而定 | 預設值— |
欄位function_call | 類型string|object | 要求選填 | 值與限制 依模型而定 | 預設值— |
欄位prompt_cache_options | 類型object | 要求選填 | 值與限制 依模型而定 | 預設值— |
欄位modalities | 類型string[] | 要求選填 | 值與限制 text | 預設值— |
欄位provider | 類型object | 要求選填 | 值與限制 條件: 此 Ultra 文字路由拒絕 provider.options | 預設值— |
欄位cache_control.ttl | 類型string | 要求選填 | 值與限制 條件: 實際提示詞快取位置拒絕 1h | 預設值— |
輸入素材組合
文字 · UTF8 文字
messages[].content
方法參數與生命週期
| 參數 | 規格 |
|---|---|
參數content_type | 規格application/json |
參數required | 規格model, messages |
參數material_types | 規格text |
參數messages | 規格具有 role/content 結構的訊息陣列 |
參數file_material | 規格實際 UTF-8 文件以原文文字插入;不推定檔案 ID |
參數optional_controls | 規格stream, temperature, top_p, stop, max_tokens, max_completion_tokens, reasoning, response_format, tools, tool_choice |
參數control_scope | 規格依模型而定;使用者函式工具與託管工具不同 |
參數output_modalities | 規格text |
參數hosted_operations | 規格false |
參數multimodal_input_binding | 規格null |
生命週期: synchronous_or_streamed
將確切模型 ID 與 messages 一併送出。
上下文長度不是輸出上限。
文字檔案可提供原文文字;圖片/音訊/檔案物件輸入需要精確綁定。
方案
費率資訊不會增加請求選項。支援的參數列於所選方法中。
- 快速模式
- 標準費率 選取快速模式時
- flex 模式
- 標準費率 選取 flex 模式時
- 最高推理強度
- 標準費率 最高推理強度採用 default 調整值時
- 推理強度 · high
- 標準費率 推理強度設為 high 時
- 推理強度 · minimal
- 標準費率 推理強度設為 minimal 時
- 顯式快取計價
- 未啟用 請求顯式快取時
Ailoot 費率
各設定的價格
請逐一核對各項費用與所列條件。每組互為替代選項的設定只套用一種費率。
| 設定 | 費率表 | 上下文 Token 數大於 | 上下文 Token 數小於或等於 | 費用 |
|---|---|---|---|---|
| 設定詞元基本費率 | 費率表基本費率 | 上下文 Token 數大於— | 上下文 Token 數小於或等於無上限 | 費用 輸入 · 輸入 Token $0.001 / 1K Token 輸出 · 輸出 Token $0.006 / 1K Token 輸入 · 讀取快取 — / 1K Token 輸入 · 寫入快取 — / 1K Token 輸入 · 寫入快取,1 小時 — / 1K Token 輸出 · 圖片輸出詞元 $0.12 / 1K 圖片 Token |
| 設定請求長度級距 1 | 費率表— | 上下文 Token 數大於0 | 上下文 Token 數小於或等於無上限 | 費用 輸入 · 輸入 Token $0.001 / 1K Token 輸出 · 輸出 Token $0.006 / 1K Token 輸入 · 讀取快取 — / 1K Token 輸入 · 寫入快取 — / 1K Token 輸入 · 寫入快取,1 小時 — / 1K Token |
參考費率詳情
模型層級的參考費率表不會變更方法選擇、報價或費用。實際計費採用所選 Ailoot 方法的費率。
Google: Nano Banana 2 (Gemini 3.1 Flash Image)
各設定的價格
| 設定 | 計費條件 | 費用 |
|---|---|---|
| 設定Google: Nano Banana 2 (Gemini 3.1 Flash Image) · 預設設定 | 計費條件預設設定 | 費用 輸入 · 輸入 Token US$0.001 / 1K Token 輸出 · 輸出 Token US$0.006 / 1K Token 輸出 · 輸出圖片 US$0.12 / 1K Token 輸出 · 網頁搜尋 US$0.028 每次搜尋 |
Ailoot 會在請求前預留估算金額。取得結果後,依實測用量結算最終費用。串流結算採用最終用量紀錄。預留金額與結算的運作方式 →
請求範例
Ailoot Ultra · OpenAI Chat
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "google/gemini-3.1-flash-image", "messages": [{"role": "user", "content": "Explain the difference between an observation and a hypothesis in three sentences."}]}')
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
-H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
--data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
r=json.loads(Path("result.json").read_text())
for x in r.get("choices",[]):
if x.get("message",{}).get("content"): print(x["message"]["content"])
PY_RESULT
from openai import OpenAI
import os
if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
result=client.chat.completions.create(model='google/gemini-3.1-flash-image',messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}])
import base64, json
from pathlib import Path
def save_result(data, stem="result"):
# Keep every field, including usage, IDs, reasoning and tool requests.
Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
print(json.dumps(data, ensure_ascii=False, indent=2))
def save_blob(encoded, suffix, label):
raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
file = Path(stem + "-" + label + "." + ext)
file.write_bytes(raw)
print("Saved", file)
for index, block in enumerate(data.get("content") or []):
print("Content", index, json.dumps(block, ensure_ascii=False))
for choice in data.get("choices") or []:
print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
for index, item in enumerate(data.get("output") or []):
print("Output", index, json.dumps(item, ensure_ascii=False))
if item.get("type") == "image_generation_call" and item.get("result"):
save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
for ci, candidate in enumerate(data.get("candidates") or []):
for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
blob = part.get("inlineData") or part.get("inline_data")
if blob and blob.get("data"):
mime = blob.get("mimeType") or blob.get("mime_type")
suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))
save_result(result.to_dict(mode="json"))
from openai import OpenAI
import os
from pathlib import Path
if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
import base64, json
from pathlib import Path
def save_result(data, stem="result"):
# Keep every field, including usage, IDs, reasoning and tool requests.
Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
print(json.dumps(data, ensure_ascii=False, indent=2))
def save_blob(encoded, suffix, label):
raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
file = Path(stem + "-" + label + "." + ext)
file.write_bytes(raw)
print("Saved", file)
for index, block in enumerate(data.get("content") or []):
print("Content", index, json.dumps(block, ensure_ascii=False))
for choice in data.get("choices") or []:
print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
for index, item in enumerate(data.get("output") or []):
print("Output", index, json.dumps(item, ensure_ascii=False))
if item.get("type") == "image_generation_call" and item.get("result"):
save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
for ci, candidate in enumerate(data.get("candidates") or []):
for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
blob = part.get("inlineData") or part.get("inline_data")
if blob and blob.get("data"):
mime = blob.get("mimeType") or blob.get("mime_type")
suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))
with client.chat.completions.stream(model='google/gemini-3.1-flash-image',messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}]) as stream:
with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
for event in stream:
payload=event.to_dict(mode="json")
log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
print(json.dumps(payload,ensure_ascii=False))
final=stream.get_final_completion()
save_result(final.to_dict(mode="json"),"stream-result")
接收並儲存結果
Ailoot Ultra · OpenAI Chat
json 或 SSE
保留所有已完成的結果
請保留所有完整傳回的回應、檔案與內容區塊。
保留每個候選項及其內容/工具呼叫/推理。SSE 中依候選項/工具索引組合增量,保留最終完成原因與用量。
需要檢查原始回應時
保留請求/回應 ID 與標頭。未提供通用的文字工作擷取 URL。
回應欄位
| 欄位 | 類型 |
|---|---|
欄位choices[].index | 類型integer |
欄位choices[].message.content | 類型string|null |
欄位choices[].message.tool_calls | 類型tool_call[] |
欄位choices[].message.reasoning_content | 類型string |
欄位choices[].message.reasoning_details | 類型object|array |
欄位choices[].finish_reason | 類型string|null |
欄位usage | 類型object |
錯誤與後續步驟
| 回應 | 條件 | 下一步 |
|---|---|---|
回應400 · invalid_request_error | 條件必要欄位、素材表示方式或參數值無效 | 下一步提出新的建立請求前,先修正指定欄位。 |
別名
模型別名
Ailoot gemini-3.1-flash-image
Ailoot Ultra google/gemini-3.1-flash-image
方法路徑別名
/v1/images
相關呼叫用 ID
Ailoot Ultra · 圖片 POST /v1/images/generations google/gemini-3.1-flash-image
google/gemini-3.1-flash-image入門
Nano Banana 2(Gemini 3.1 Flash Image)可在對話中生成及編輯圖像。它支援文字與視覺來源、0.5K–4K 輸出、參考圖像構圖及搜尋 grounding,適用產品場景、資訊圖表及迭代視覺工作。
- 接受的輸入
- 文字 · 圖片
- 結果
- 圖片
Ailoot 可用 · 輸入與方法
Ailoot Ultra · 圖片 POST /v1/images/generations
- 輸入
text,image- 輸出
image
| 欄位 | 類型 | 要求 | 值與限制 | 預設值 |
|---|---|---|---|---|
欄位model | 類型string | 要求必填 | 值與限制 google/gemini-3.1-flash-image | 預設值— |
欄位prompt | 類型string | 要求必填 | 值與限制 長度下限: 1 | 預設值— |
欄位resolution | 類型string | 要求選填 | 值與限制 512, 1K, 2K, 4K | 預設值— |
欄位aspect_ratio | 類型string | 要求選填 | 值與限制 1:1, 1:4, 1:8, 2:3, 3:2, 3:4, 4:1, 4:3, 4:5, 5:4, 8:1, 9:16, 16:9, 21:9 | 預設值— |
欄位n | 類型integer | 要求選填 | 值與限制 最小值: 1 最大值: 1 | 預設值— |
欄位input_references | 類型array | 要求選填 | 值與限制 項目數下限: 0 項目數上限: 14 | 預設值— |
欄位provider | 類型object | 要求選填 | 值與限制 | 預設值— |
方法參數與生命週期
| 參數 | 規格 |
|---|---|
參數content_type | 規格application/json |
參數required | 規格model, prompt |
參數material_types | 規格text, image |
生命週期: synchronous_result_then_owned_library
GET /v1/media/tasks/{task_id} · 實際回傳的 task_id 或媒體庫紀錄
GET /v1/media/assets/{asset_id}/content
GET /v1/media/assets
GET /v1/media/assets/{asset_id}
方案
最終費用的計算方式
顯示的費率用於在生成前估算費用。最終費用依原始生成作業記錄的成本計算。實測的輸出時間長度與預估數量並非最終計費數量。
費率資訊不會增加請求選項。支援的參數列於所選方法中。
- 快速模式
- 未指定 選取快速模式時
- flex 模式
- 未指定 選取 flex 模式時
- 最高推理強度
- 未指定 最高推理強度採用 default 調整值時
供比較的預估費率
各設定的價格
請逐一核對各項費用與所列條件。每組互為替代選項的設定只套用一種費率。
| 設定 | 費率表 | 預估數量 | 費用 |
|---|---|---|---|
| 設定基礎 token 費率 | 費率表基本費率 | 預估數量— | 費用 輸入 · 輸入 Token · 僅供比較的估算 — / 1K Token 輸出 · 輸出 Token · 僅供比較的估算 — / 1K Token 輸入 · 讀取快取 · 僅供比較的估算 — / 1K Token 輸入 · 寫入快取 · 僅供比較的估算 — / 1K Token 輸入 · 寫入快取,1 小時 · 僅供比較的估算 — / 1K Token |
| 設定預估生成費用 | 費率表— | 預估數量單次生成估算值 | 費用 輸出 · 預估生成費用 · 僅供比較的估算 $0.49152 生成前估算 此估算並非額外費用,也不是本次生成完成後的固定費率。 |
Ailoot 會在請求前預留估算金額。取得結果後,依實測用量結算最終費用。串流結算採用最終用量紀錄。預留金額與結算的運作方式 →
請求範例
Ailoot Ultra · 圖片
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
export AILOOT_API_KEY
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p={'model': 'google/gemini-3.1-flash-image', 'prompt': 'a red panda astronaut floating in space, studio lighting'}
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/images/generations \
-H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
--data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json, os, subprocess
from pathlib import Path
from urllib.parse import urlsplit, urljoin
def save_images(items):
if not items: raise SystemExit("No completed images; retain the full response")
for index, item in enumerate(items):
encoded=item.get("b64_json")
uri=item.get("url", "")
if not encoded and uri.startswith("data:image/"):
header, separator, encoded=uri.partition(",")
if not separator or ";base64" not in header: raise SystemExit("Unsupported image data URI")
if encoded:
raw=base64.b64decode(encoded,validate=True)
elif uri:
uri=urljoin("https://api.ailoot.ai",uri)
parsed=urlsplit(uri)
if parsed.scheme!="https" or not parsed.netloc or parsed.username or parsed.password:
raise SystemExit("Invalid returned image URL")
owned=parsed.netloc=="api.ailoot.ai" and parsed.path.startswith("/v1/media/assets/") and parsed.path.endswith("/content")
args=["curl","--fail-with-body","--silent","--show-error",uri]
if owned: args += ["-H","Authorization: Bearer "+os.environ["AILOOT_API_KEY"]]
temporary=Path(f"image-{index}.bin")
subprocess.run(args+["-o",str(temporary)],check=True)
raw=temporary.read_bytes()
temporary.unlink()
else: raise SystemExit("Image has neither bytes nor URL")
if not raw: raise SystemExit("Empty image result")
ext="png" if raw.startswith(b"\x89PNG") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else "svg" if raw.lstrip().startswith((b"<svg",b"<?xml")) else "bin"
Path(f"image-{index}.{ext}").write_bytes(raw)
print("Every returned image saved; complete response metadata retained")
save_images(json.loads(Path("result.json").read_text())["data"])
PY_RESULT
接收並儲存結果
Ailoot Ultra · 圖片
下載每張傳回的圖片,或儲存其 Base64 內容
GET /v1/media/tasks/{task_id}GET /v1/media/assets/{asset_id}/contentGET /v1/media/assetsGET /v1/media/assets/{asset_id}
其他內容讀取方式
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/media/assets \
-H "Authorization: Bearer $AILOOT_API_KEY" -o owned-assets.json
# Preserve every returned asset and follow its exact signed content URL. Do not construct a signed token.
保留所有已完成的結果
請儲存每張已完成的圖片;從每個傳回的 URL 取得圖片,或解碼其 Base64 內容。
保留完整回應與標頭、所有實際輸出、原始回傳的識別碼,以及所有用量欄位。恢復原始作業時,請勿再次提交建立請求。
需要檢查原始回應時
保留回傳的 X-Client-Request-ID,以供核對。僅讀取實際回傳的 task_id/asset_id 值或自己擁有的媒體庫;請勿以作業 ID 組成任務 URL,也請勿重新提交建立請求。
回應欄位
| 欄位 | 類型 |
|---|---|
欄位created | 類型 |
欄位data[].url | 類型 |
欄位data[].b64_json | 類型 |
欄位usage | 類型 |
別名
模型別名
Ailoot gemini-3.1-flash-image
Ailoot Ultra google/gemini-3.1-flash-image
方法路徑別名
/v1/images
相關呼叫用 ID
Ailoot Ultra · Anthropic Messages POST /v1/messages google/gemini-3.1-flash-image
google/gemini-3.1-flash-image入門
Nano Banana 2(Gemini 3.1 Flash Image)可在對話中生成及編輯圖像。它支援文字與視覺來源、0.5K–4K 輸出、參考圖像構圖及搜尋 grounding,適用產品場景、資訊圖表及迭代視覺工作。
- 接受的輸入
- 文字
- 結果
- json · sse
Ailoot 可用 · 輸入與方法
Ailoot Ultra · Anthropic Messages POST /v1/messages
- 輸入
text- 輸出
json,sse- 輸出格式
- JSON 或 SSE
| 欄位 | 類型 | 要求 | 值與限制 | 預設值 |
|---|---|---|---|---|
欄位model | 類型string | 要求必填 | 值與限制 google/gemini-3.1-flash-image | 預設值— |
欄位messages | 類型message[] | 要求必填 | 值與限制 | 預設值— |
欄位messages[].role | 類型string | 要求必填 | 值與限制 user, assistant | 預設值— |
欄位messages[].content | 類型string | 要求必填 | 值與限制 | 預設值— |
欄位max_tokens | 類型integer | 要求必填 | 值與限制 | 預設值— |
欄位stream | 類型boolean | 要求選填 | 值與限制 | 預設值false |
輸入素材組合
文字 · UTF-8 文字
messages[].content 字串
方法參數與生命週期
| 參數 | 規格 |
|---|---|
參數content_type | 規格application/json |
參數required | 規格model, messages, max_tokens |
參數optional_controls | 規格stream |
參數material_types | 規格text |
參數text_file_material | 規格讀取實際 UTF-8 文件,將文字放入指定的 input 或訊息內容字串。 |
生命週期: synchronous_or_streamed
方案
費率資訊不會增加請求選項。支援的參數列於所選方法中。
- 快速模式
- 標準費率 選取快速模式時
- flex 模式
- 標準費率 選取 flex 模式時
- 最高推理強度
- 標準費率 最高推理強度採用 default 調整值時
- 推理強度 · high
- 標準費率 推理強度設為 high 時
- 推理強度 · minimal
- 標準費率 推理強度設為 minimal 時
- 顯式快取計價
- 未啟用 請求顯式快取時
Ailoot 費率
各設定的價格
請逐一核對各項費用與所列條件。每組互為替代選項的設定只套用一種費率。
| 設定 | 費率表 | 上下文 Token 數大於 | 上下文 Token 數小於或等於 | 費用 |
|---|---|---|---|---|
| 設定詞元基本費率 | 費率表基本費率 | 上下文 Token 數大於— | 上下文 Token 數小於或等於無上限 | 費用 輸入 · 輸入 Token $0.001 / 1K Token 輸出 · 輸出 Token $0.006 / 1K Token 輸入 · 讀取快取 — / 1K Token 輸入 · 寫入快取 — / 1K Token 輸入 · 寫入快取,1 小時 — / 1K Token 輸出 · 圖片輸出詞元 $0.12 / 1K 圖片 Token |
| 設定請求長度級距 1 | 費率表— | 上下文 Token 數大於0 | 上下文 Token 數小於或等於無上限 | 費用 輸入 · 輸入 Token $0.001 / 1K Token 輸出 · 輸出 Token $0.006 / 1K Token 輸入 · 讀取快取 — / 1K Token 輸入 · 寫入快取 — / 1K Token 輸入 · 寫入快取,1 小時 — / 1K Token |
Ailoot 會在請求前預留估算金額。取得結果後,依實測用量結算最終費用。串流結算採用最終用量紀錄。預留金額與結算的運作方式 →
請求範例
Ailoot Ultra · Anthropic Messages
{
"model": "google/gemini-3.1-flash-image",
"max_tokens": 128,
"messages": [
{
"role": "user",
"content": "Summarize the incident report."
}
],
"stream": false
}set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 document}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json, os
from pathlib import Path
source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
raise SystemExit('Choose a document containing text')
payload = {'model': 'google/gemini-3.1-flash-image', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
Path('request.json').write_text(json.dumps(payload, ensure_ascii=False), encoding='utf-8')
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
-H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
--data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))
PY_RESULT
import json, os
from pathlib import Path
source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
raise SystemExit('Choose a document containing text')
payload = {'model': 'google/gemini-3.1-flash-image', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
from urllib.request import Request, urlopen
from urllib.error import HTTPError
api_key = os.environ['AILOOT_API_KEY']
if not api_key.strip():
raise SystemExit('Set AILOOT_API_KEY before making a request')
headers = {'x-api-key': 'PLACEHOLDER_KEY', 'anthropic-version': '2023-06-01', 'Content-Type': 'application/json'}
headers['x-api-key'] = api_key
request = Request('https://api.ailoot.ai/v1/messages', data=json.dumps(payload, ensure_ascii=False).encode('utf-8'), headers=headers, method='POST')
try:
with urlopen(request, timeout=120) as response:
raw = response.read()
Path('response-headers.txt').write_text(str(response.headers), encoding='utf-8')
except HTTPError as error:
Path('result.json').write_bytes(error.read())
Path('response-headers.txt').write_text(str(error.headers), encoding='utf-8')
raise
Path('result.json').write_bytes(raw)
import json
from pathlib import Path
result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))
接收並儲存結果
Ailoot Ultra · Anthropic Messages
JSON 或 SSE
保留所有已完成的結果
請保留所有完整傳回的回應、檔案與內容區塊。
保留所有內容區塊、思考簽章與實際工具使用 ID。組合所有 SSE 區塊增量;第一個文字區塊不是完整輸出。
需要檢查原始回應時
保留請求/回應 ID 與標頭。未提供通用的文字工作擷取 URL。
回應欄位
| 欄位 | 類型 |
|---|---|
欄位id | 類型string |
欄位model | 類型string |
欄位content[] | 類型text|thinking|tool_use|other content block |
欄位stop_reason | 類型string|null |
欄位usage | 類型object |
錯誤與後續步驟
| 回應 | 條件 | 下一步 |
|---|---|---|
回應400 · invalid_request_error | 條件必要欄位、素材表示方式或參數值無效 | 下一步提出新的建立請求前,先修正指定欄位。 |
別名
模型別名
Ailoot gemini-3.1-flash-image
Ailoot Ultra google/gemini-3.1-flash-image
方法路徑別名
/v1/images
相關呼叫用 ID
FAQ · Google: Nano Banana 2 (Gemini 3.1 Flash Image)
- 可以使用哪些輸入與結果?
POST /v1/images/generations·gemini-3.1-flash-image:text→image,textPOST /v1/chat/completions·google/gemini-3.1-flash-image:text→textPOST /v1/images/generations·google/gemini-3.1-flash-image:text,image→imagePOST /v1/messages·google/gemini-3.1-flash-image:text→json,sse- 請求使用哪些欄位?
POST /v1/images/generations·gemini-3.1-flash-image:model,prompt,n,response_format,streamPOST /v1/chat/completions·google/gemini-3.1-flash-image:model,messages,stream,modalities,providerPOST /v1/images/generations·google/gemini-3.1-flash-image:model,prompt,resolution,aspect_ratio,n,input_references,providerPOST /v1/messages·google/gemini-3.1-flash-image:model,messages,max_tokens,stream- 適用哪些限制?
POST /v1/images/generations·gemini-3.1-flash-image:ctx:131072;max_out:32768;n.minimum:1POST /v1/chat/completions·google/gemini-3.1-flash-image:messages.min_items:1POST /v1/images/generations·google/gemini-3.1-flash-image:n.minimum:1;n.maximum:1