Google: Nano Banana Pro (Gemini 3 Pro Image)
Nano Banana Pro (Gemini 3 Pro Image) הוא מודל התמונות של Google המבוסס על חשיבה לעיצוב מורכב, להדמיות מוצר ולהמחשות חזותיות עובדתיות. הוא מקבל טקסט ותמונות ייחוס ויוצר תמונות עם טקסט, עם פלט 1K–4K ושליטה יצירתית מפורטת.
- Ailoot · תמונות
POST /v1/images/generationsgemini-3-pro-image - Ailoot · תמונות
POST /v1/images/generationsgemini-3-pro-image-preview - Ailoot · תמונות
POST /v1/images/generationsnano-banana-pro - Ailoot Ultra · OpenAI Chat
POST /v1/chat/completionsgoogle/gemini-3-pro-image - Ailoot Ultra · תמונות
POST /v1/images/generationsgoogle/gemini-3-pro-image - Ailoot Ultra · Anthropic Messages
POST /v1/messagesgoogle/gemini-3-pro-image
על המודל
התיאור הזה מציג את יכולות המודל. הקלט, הפלט והאפשרויות הזמינים ב-Ailoot מפורטים בהמשך לפי השיטה שנבחרה.
Nano Banana Pro הוא מודל Gemini 3 Pro Image של Google ליצירת תמונות ולעריכה המונעות באמצעות חשיבה. היצרן מציב עיצוב גרפי מורכב, הדמיות מוצר בנאמנות גבוהה והמחשה חזותית של נתונים עובדתיים במרכז השימוש המיועד שלו. הוא מקבל טקסט ותמונות ומפיק תמונה וטקסט. מהדורת תמונות Pro בעלת השם המוגדר הזו מבוססת על Gemini 3 Pro, ושומרת על פרופיל קלט ויכולות משלה למשימות תמונה.
המודל תומך בתמונות 1K, 2K ו־4K. הצורות המתועדות כוללות 1:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9 ו־21:9. תמונת 4K ריבועית היא בגודל 4096 × 4096; תמונת 4K ביחס 16:9 היא בגודל 5504 × 3072. יש לבחור רזולוציה ויחס ממדים לתוצר הדרוש, בין שמדובר בכרזה אנכית, בסצנת מוצר או בגרפיקת הסבר רחבה. אפשרות 0.5K והיחסים הקיצוניים הנוספים של Gemini 3.1 Flash Image אינם חלק מטבלת Pro הזו.
הצגת הטקסט תומכת באותיות ברורות בכרזות, בתרשימים ובנכסים מעוצבים אחרים. באינפוגרפיקה מורכבת, יש לספק את העובדות הבסיסיות, הניסוח המדויק, רצף הקריאה והקשר בין תוויות לרכיבים חזותיים. יש להפריד בין המידע שרוצים להעביר לבין הסגנון האמנותי הרצוי. Google ממליצה להכין קודם את הטקסט ואז ליצור את התמונה המכילה אותו. הדבר שימושי במיוחד כשקומפוזיציה משלבת כותרת, תרשים וכמה כיתובים קצרים.
קלט מרובה תמונות תומך בעד 14 תמונות ייחוס. טבלת התכונות של Google מתארת עד שש תמונות ייחוס לאובייקטים לשם נאמנות, עד חמש תמונות ייחוס לדמויות לשם עקביות ועד שלוש תמונות ייחוס לסגנון. התפקידים האלה מסייעים להכין יצירה חזותית משולבת: תצלום מוצר מגדיר את המראה, תמונה נפרדת מבססת את הסביבה ותמונת סגנון מנחה את אופן העיבוד. יש לומר למודל אילו פרטים הם מקור סמכות ואילו תמונות ייחוס מספקות השראה, ולא לבקש ממנו לשלב ללא הבחנה כל מאפיין גלוי.
עיגון ב־Google Search יכול לספק מידע מהעולם האמיתי להמחשה עובדתית או לסצנה המושפעת מתנאים עדכניים. תהליך תמונות Pro מתעד עיגון ברשת; הרחבת Image Search מתועדת במיוחד עבור Nano Banana 2.1 ו־Gemini 3.1 Flash Image. בגרפיקת נתונים, יש לספק את הערכים שרוצים להציג או לבקש מידע מעוגן בתהליך היצרן, ואז להגדיר במפורש את הקשר, התוויות והפריסה. יצירה הנעזרת בחיפוש עדיין מפיקה תמונה שצריך לבדוק, ואינה תחליף לבדיקת העובדות המוצגות.
החשיבה תומכת בהרכבת פרומפט מורכב לפני הרינדור הסופי. מדריך התמונות מתאר תמונות ביניים המשמשות לבדיקת קומפוזיציה והיגיון, הנפרדות מהתוצר הסופי. אין להעביר למהדורת Pro הזו את טבלת הבקרה minimal/high של Nano Banana 2 או את טבלת ברירת המחדל medium של Nano Banana 2.1. בעיצוב תובעני, יש לתת בריף מלא עם ההיררכיה החזותית, קשרי האובייקטים הנדרשים והרכיבים שחייבים להישמר בעריכות מאוחרות יותר.
כרטיס המודל מתאר מגבלות מהותיות שנותרו: טקסט קטן מאוד וקטעים ארוכים עלולים להופיע באיכות נמוכה, מראה דמות יכול להשתנות בין תמונת ייחוס לתוצאה, ועריכות עם מסכה או שרבוט עשויות לציית להוראה באופן חלקי בלבד או להשאיר סימנים. הוא עלול גם לבלבל בין שמאל לימין או להעתיק רכיב מקור לקומפוזיציה החדשה. בתיקון מוצר, יש להגדיר במפורש את הגאומטריה והתוויות שיש לשמר ולבדוק את האזור הערוך; בתרשים, יש להשוות את כיוון החצים ואת המיקומים היחסיים של האובייקטים.
טבלת API הנוכחית מציינת מגבלת קלט של 65,536 טוקנים ומגבלת פלט של 32,768 טוקנים. יצירת תמונות, חשיבה, עיגון בחיפוש ועיבוד באצווה נתמכים; יצירת אודיו, קריאה לפונקציות, הרצת קוד, שמירה במטמון, פלט מובנה, חיפוש בקבצים, הקשר מכתובות URL ו־Live API אינם נתמכים. משימת התמונות אינה מקבלת קלט אודיו או וידאו בפרופיל הזה. תמונות שנוצרות כוללות SynthID, ומספר תמונות הפלט המבוקש אינו מתקיים תמיד במדויק.
בריף מוצר מעשי יכול לשלב תמונת מוצר, תמונת ייחוס לתאורה וכותרת מדויקת: ״שמור על פרופורציות המוצר ועל האותיות, הצג אותו על משטח אבן בהיר תחת תאורת צד רכה והשאר את השליש העליון פנוי לכותרת שסופקה.״ בתרשים עובדתי, יש לזהות כל ישות וחיבור ולספק את התוויות המאושרות. יש ללטש את התוצאה בשיחה באמצעות ציון שינוי אחד והמאפיינים שיש לשמר, תוך שמירה משותפת של התמונה שנבחרה והטקסט המסביר אותה כתוצר העיצוב.
משימה מעשית
משימה מעשית
דוגמה טכנית באנגלית
Visualize a supplied packaging cycle
Create one landscape explanatory graphic showing this packaging return cycle: customer returns an empty jar, store inspects it, accepted jars are washed, clean jars are refilled. Use four large illustrated stages connected clockwise. Add only these exact labels: 'RETURN', 'INSPECT', 'WASH', 'REFILL'. Make the arrow direction and stage order unmistakable.התוצאה הצפויה
One landscape image with four labeled stages and arrows matching the supplied cycle.בדיקת התוצאה
Inspect that arrows connect RETURN to INSPECT to WASH to REFILL in that order, with exact labels.Ailoot · תמונות POST /v1/images/generations gemini-3-pro-image
gemini-3-pro-imagegemini-3-pro-imagegemini-3-pro-image-previewnano-banana-pro
התחלה
Nano Banana Pro (Gemini 3 Pro Image) הוא מודל התמונות של Google המבוסס על חשיבה לעיצוב מורכב, להדמיות מוצר ולהמחשות חזותיות עובדתיות. הוא מקבל טקסט ותמונות ייחוס ויוצר תמונות עם טקסט, עם פלט 1K–4K ושליטה יצירתית מפורטת.
- סוגי קלט נתמכים
- טקסט
- תוצאות
- תמונות
זמין ב-Ailoot · קלט ושיטות
Ailoot · תמונות POST /v1/images/generations
- סוגי קלט
text- סוגי פלט
image- הקשר
- 65,536 tokens
- פלט מרבי
- 32,768 tokens
- פורמט פלט
- קובץ תמונה
| שדה | סוג | דרישה | ערכים ומגבלות | ברירת מחדל |
|---|---|---|---|---|
שדהmodel | סוגstring | דרישהחובה | ערכים ומגבלות gemini-3-pro-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}
מבני המתודות והמזהים מדויקים; יכולת הספק נפרדת מקבלת הבקשה לביצוע.
תעריפים
תעריפי שיטות Ailoot
POST /v1/images/generations- קלט
- 0.002 $ / 1K טוקני תמונה
- פלט
- 0.134 $ לכל תמונה ברזולוציית 1K
- פלט
- 0.134 $ לכל תמונה ברזולוציית 2K
- פלט
- 0.24 $ לכל תמונה ברזולוציית 4K
לפני הבקשה Ailoot משריינת סכום משוער. לאחר קבלת התוצאה היא מסדירה את החיוב הסופי לפי השימוש המדוד. הסדרת חיוב בהזרמה משתמשת ברשומת השימוש הסופית. איך פועלים שריון הסכום והסדרת החיוב →
פרטי תעריף הייחוס
טבלאות הייחוס ברמת המודל אינן משנות את בחירת השיטה, הצעות המחיר או החיובים. החיובים בפועל משתמשים בתעריפי שיטת Ailoot שנבחרה.
טבלאות ייחוס של המודל
מחירים לפי תצורה
| תצורה | טבלת תעריפים | חיוב |
|---|---|---|
| תצורהUltra | טבלת תעריפיםתעריף בסיס | חיוב קלט · טוקני קלט $0.004000 / 1K טוקנים פלט · טוקני פלט $0.024000 / 1K טוקנים קלט · תמונה $0.004000 / 1K טוקנים פלט · פלט תמונה $0.24000 / 1K טוקנים קלט · שמע $0.004000 / 1K טוקנים קלט · מטמון שמע בקלט $0.0004000 / 1K טוקנים פלט · חיפוש ברשת $0.028 לכל חיפוש באינטרנט פלט · חשיבה פנימית $0.024000 / 1K טוקנים קלט · קריאה מהמטמון $0.0004000 / 1K טוקנים קלט · כתיבה למטמון $0.000750000 / 1K טוקנים |
דוגמאות לבקשות
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-pro-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-pro-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-pro-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 בפועל. אל תשלחו שוב את בקשת היצירה/העריכה ואל תבנו URL לתשאול סטטוס מתוך operation_id.
שדות התגובה
| שדה | סוג |
|---|---|
שדהcreated | סוגinteger |
שדהdata[].url | סוגstring |
שדהdata[].b64_json | סוגbase64 string |
שדהusage | סוגobject |
שגיאות והשלבים הבאים
| תגובה | תנאי | השלב הבא |
|---|---|---|
תגובה400 · invalid_request_error | תנאישדות נדרשים, ייצוג חומר או ערך פרמטר שאינם תקינים | השלב הבאתקנו את השדות שצוינו לפני בקשת יצירה חדשה. |
תגובהserver_error | תנאיהתשובה שהוחזרה מציינת שהפעולה או התוצאה דורשת בדיקה | השלב הבאשמרו את מזהה הפעולה/המשימה המקורי שהוחזר, את כותרות הבקשה ואת התשובה; המשיכו לבצע פעולות קריאה נתמכות של אותה פעולה מקורית. אל תשלחו שוב את בקשת היצירה. |
כינויים
כינויים למודל
Ailoot gemini-3-pro-image, gemini-3-pro-image-preview, nano-banana-pro
Ailoot Ultra google/gemini-3-pro-image
כינויים לנתיבי שיטות
/v1/images
מזהי מודלים קשורים IDs
google/gemini-3-pro-image, gemini-3-pro-image-preview, nano-banana-pro, gemini-3-pro-image
Ailoot · תמונות POST /v1/images/generations gemini-3-pro-image-preview
gemini-3-pro-image-previewgemini-3-pro-imagegemini-3-pro-image-previewnano-banana-pro
התחלה
Nano Banana Pro (Gemini 3 Pro Image) הוא מודל התמונות של Google המבוסס על חשיבה לעיצוב מורכב, להדמיות מוצר ולהמחשות חזותיות עובדתיות. הוא מקבל טקסט ותמונות ייחוס ויוצר תמונות עם טקסט, עם פלט 1K–4K ושליטה יצירתית מפורטת.
- סוגי קלט נתמכים
- טקסט
- תוצאות
- תמונות
זמין ב-Ailoot · קלט ושיטות
Ailoot · תמונות POST /v1/images/generations
- סוגי קלט
text- סוגי פלט
image- הקשר
- 65,536 tokens
- פלט מרבי
- 32,768 tokens
- פורמט פלט
- קובץ תמונה
| שדה | סוג | דרישה | ערכים ומגבלות | ברירת מחדל |
|---|---|---|---|---|
שדהmodel | סוגstring | דרישהחובה | ערכים ומגבלות gemini-3-pro-image-preview | ברירת מחדל— |
שדה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}
מבני המתודות והמזהים מדויקים; יכולת הספק נפרדת מקבלת הבקשה לביצוע.
תעריפים
תעריפי שיטות Ailoot
POST /v1/images/generations- קלט
- 0.002 $ / 1K טוקני תמונה
- פלט
- 0.134 $ לכל תמונה ברזולוציית 1K
- פלט
- 0.134 $ לכל תמונה ברזולוציית 2K
- פלט
- 0.24 $ לכל תמונה ברזולוציית 4K
לפני הבקשה Ailoot משריינת סכום משוער. לאחר קבלת התוצאה היא מסדירה את החיוב הסופי לפי השימוש המדוד. הסדרת חיוב בהזרמה משתמשת ברשומת השימוש הסופית. איך פועלים שריון הסכום והסדרת החיוב →
פרטי תעריף הייחוס
טבלאות הייחוס ברמת המודל אינן משנות את בחירת השיטה, הצעות המחיר או החיובים. החיובים בפועל משתמשים בתעריפי שיטת Ailoot שנבחרה.
טבלאות ייחוס של המודל
מחירים לפי תצורה
| תצורה | טבלת תעריפים | חיוב |
|---|---|---|
| תצורהUltra | טבלת תעריפיםתעריף בסיס | חיוב קלט · טוקני קלט $0.004000 / 1K טוקנים פלט · טוקני פלט $0.024000 / 1K טוקנים קלט · תמונה $0.004000 / 1K טוקנים פלט · פלט תמונה $0.24000 / 1K טוקנים קלט · שמע $0.004000 / 1K טוקנים קלט · מטמון שמע בקלט $0.0004000 / 1K טוקנים פלט · חיפוש ברשת $0.028 לכל חיפוש באינטרנט פלט · חשיבה פנימית $0.024000 / 1K טוקנים קלט · קריאה מהמטמון $0.0004000 / 1K טוקנים קלט · כתיבה למטמון $0.000750000 / 1K טוקנים |
דוגמאות לבקשות
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-pro-image-preview", "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-pro-image-preview', '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-pro-image-preview", "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 בפועל. אל תשלחו שוב את בקשת היצירה/העריכה ואל תבנו URL לתשאול סטטוס מתוך operation_id.
שדות התגובה
| שדה | סוג |
|---|---|
שדהcreated | סוגinteger |
שדהdata[].url | סוגstring |
שדהdata[].b64_json | סוגbase64 string |
שדהusage | סוגobject |
שגיאות והשלבים הבאים
| תגובה | תנאי | השלב הבא |
|---|---|---|
תגובה400 · invalid_request_error | תנאישדות נדרשים, ייצוג חומר או ערך פרמטר שאינם תקינים | השלב הבאתקנו את השדות שצוינו לפני בקשת יצירה חדשה. |
תגובהserver_error | תנאיהתשובה שהוחזרה מציינת שהפעולה או התוצאה דורשת בדיקה | השלב הבאשמרו את מזהה הפעולה/המשימה המקורי שהוחזר, את כותרות הבקשה ואת התשובה; המשיכו לבצע פעולות קריאה נתמכות של אותה פעולה מקורית. אל תשלחו שוב את בקשת היצירה. |
כינויים
כינויים למודל
Ailoot gemini-3-pro-image, gemini-3-pro-image-preview, nano-banana-pro
Ailoot Ultra google/gemini-3-pro-image
כינויים לנתיבי שיטות
/v1/images
מזהי מודלים קשורים IDs
google/gemini-3-pro-image, gemini-3-pro-image-preview, nano-banana-pro, gemini-3-pro-image
Ailoot · תמונות POST /v1/images/generations nano-banana-pro
nano-banana-progemini-3-pro-imagegemini-3-pro-image-previewnano-banana-pro
התחלה
Nano Banana Pro (Gemini 3 Pro Image) הוא מודל התמונות של Google המבוסס על חשיבה לעיצוב מורכב, להדמיות מוצר ולהמחשות חזותיות עובדתיות. הוא מקבל טקסט ותמונות ייחוס ויוצר תמונות עם טקסט, עם פלט 1K–4K ושליטה יצירתית מפורטת.
- סוגי קלט נתמכים
- טקסט
- תוצאות
- תמונות
זמין ב-Ailoot · קלט ושיטות
Ailoot · תמונות POST /v1/images/generations
- סוגי קלט
text- סוגי פלט
image- הקשר
- 65,536 tokens
- פלט מרבי
- 32,768 tokens
- פורמט פלט
- קובץ תמונה
| שדה | סוג | דרישה | ערכים ומגבלות | ברירת מחדל |
|---|---|---|---|---|
שדהmodel | סוגstring | דרישהחובה | ערכים ומגבלות nano-banana-pro | ברירת מחדל— |
שדה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}
מבני המתודות והמזהים מדויקים; יכולת הספק נפרדת מקבלת הבקשה לביצוע.
תעריפים
תעריפי שיטות Ailoot
POST /v1/images/generations- קלט
- 0.002 $ / 1K טוקני תמונה
- פלט
- 0.134 $ לכל תמונה ברזולוציית 1K
- פלט
- 0.134 $ לכל תמונה ברזולוציית 2K
- פלט
- 0.24 $ לכל תמונה ברזולוציית 4K
לפני הבקשה Ailoot משריינת סכום משוער. לאחר קבלת התוצאה היא מסדירה את החיוב הסופי לפי השימוש המדוד. הסדרת חיוב בהזרמה משתמשת ברשומת השימוש הסופית. איך פועלים שריון הסכום והסדרת החיוב →
פרטי תעריף הייחוס
טבלאות הייחוס ברמת המודל אינן משנות את בחירת השיטה, הצעות המחיר או החיובים. החיובים בפועל משתמשים בתעריפי שיטת Ailoot שנבחרה.
טבלאות ייחוס של המודל
מחירים לפי תצורה
| תצורה | טבלת תעריפים | חיוב |
|---|---|---|
| תצורהUltra | טבלת תעריפיםתעריף בסיס | חיוב קלט · טוקני קלט $0.004000 / 1K טוקנים פלט · טוקני פלט $0.024000 / 1K טוקנים קלט · תמונה $0.004000 / 1K טוקנים פלט · פלט תמונה $0.24000 / 1K טוקנים קלט · שמע $0.004000 / 1K טוקנים קלט · מטמון שמע בקלט $0.0004000 / 1K טוקנים פלט · חיפוש ברשת $0.028 לכל חיפוש באינטרנט פלט · חשיבה פנימית $0.024000 / 1K טוקנים קלט · קריאה מהמטמון $0.0004000 / 1K טוקנים קלט · כתיבה למטמון $0.000750000 / 1K טוקנים |
דוגמאות לבקשות
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": "nano-banana-pro", "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': 'nano-banana-pro', '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": "nano-banana-pro", "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 בפועל. אל תשלחו שוב את בקשת היצירה/העריכה ואל תבנו URL לתשאול סטטוס מתוך operation_id.
שדות התגובה
| שדה | סוג |
|---|---|
שדהcreated | סוגinteger |
שדהdata[].url | סוגstring |
שדהdata[].b64_json | סוגbase64 string |
שדהusage | סוגobject |
שגיאות והשלבים הבאים
| תגובה | תנאי | השלב הבא |
|---|---|---|
תגובה400 · invalid_request_error | תנאישדות נדרשים, ייצוג חומר או ערך פרמטר שאינם תקינים | השלב הבאתקנו את השדות שצוינו לפני בקשת יצירה חדשה. |
תגובהserver_error | תנאיהתשובה שהוחזרה מציינת שהפעולה או התוצאה דורשת בדיקה | השלב הבאשמרו את מזהה הפעולה/המשימה המקורי שהוחזר, את כותרות הבקשה ואת התשובה; המשיכו לבצע פעולות קריאה נתמכות של אותה פעולה מקורית. אל תשלחו שוב את בקשת היצירה. |
כינויים
כינויים למודל
Ailoot gemini-3-pro-image, gemini-3-pro-image-preview, nano-banana-pro
Ailoot Ultra google/gemini-3-pro-image
כינויים לנתיבי שיטות
/v1/images
מזהי מודלים קשורים IDs
google/gemini-3-pro-image, gemini-3-pro-image-preview, nano-banana-pro, gemini-3-pro-image
Ailoot Ultra · OpenAI Chat POST /v1/chat/completions google/gemini-3-pro-image
google/gemini-3-pro-imageהתחלה
Nano Banana Pro (Gemini 3 Pro Image) הוא מודל התמונות של Google המבוסס על חשיבה לעיצוב מורכב, להדמיות מוצר ולהמחשות חזותיות עובדתיות. הוא מקבל טקסט ותמונות ייחוס ויוצר תמונות עם טקסט, עם פלט 1K–4K ושליטה יצירתית מפורטת.
- סוגי קלט נתמכים
- טקסט
- תוצאות
- טקסט
זמין ב-Ailoot · קלט ושיטות
Ailoot Ultra · OpenAI Chat POST /v1/chat/completions
- סוגי קלט
text- סוגי פלט
text- פורמט פלט
- json או SSE
| שדה | סוג | דרישה | ערכים ומגבלות | ברירת מחדל |
|---|---|---|---|---|
שדהmodel | סוגstring | דרישהחובה | ערכים ומגבלות google/gemini-3-pro-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; השתמשו במזהה שהוחזר בפועל | ברירת מחדל— |
שדה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 | דרישהרשות | ערכים ומגבלות תנאים: provider.options נדחה במסלול הטקסט הזה של Ultra | ברירת מחדל— |
שדה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 בפועל מוכנס כטקסט מילולי; לא מוסק מזהה קובץ |
פרמטר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
שלחו את מזהה המודל המדויק עם messages.
אורך ההקשר אינו תקרת פלט.
קובץ טקסט יכול לספק טקסט מילולי; קלטי תמונה/אודיו/אובייקט קובץ דורשים קישור מדויק.
תעריפים
מידע תעריפים אינו מוסיף אפשרויות לבקשה. הפרמטרים הנתמכים מפורטים בשיטה שנבחרה.
- מצב מהיר
- תעריף רגיל כאשר נבחר מצב מהיר
- מצב Flex
- תעריף רגיל כאשר נבחר מצב flex
- מאמץ חשיבה מרבי
- תעריף רגיל כאשר מאמץ החשיבה המרבי משתמש בהתאמת ברירת המחדל (default)
- תמחור מטמון מפורש
- לא מופעל כאשר מתבקש מטמון מפורש
תעריפי Ailoot
מחירים לפי תצורה
התאימו כל חיוב לתנאים המוצגים. השתמשו בתעריף אחד לכל קבוצה של תצורות חלופיות.
| תצורה | טבלת תעריפים | טוקנים בהקשר, יותר מ- | טוקנים בהקשר, עד וכולל | חיוב |
|---|---|---|---|---|
| תצורהתעריפי הבסיס לטוקנים | טבלת תעריפיםתעריף בסיס | טוקנים בהקשר, יותר מ-— | טוקנים בהקשר, עד וכוללללא גבול עליון | חיוב קלט · טוקני קלט $0.004 / 1K טוקנים פלט · טוקני פלט $0.024 / 1K טוקנים קלט · קריאה מהמטמון $0.0004 / 1K טוקנים קלט · כתיבה למטמון $0.00075 / 1K טוקנים קלט · כתיבה למטמון, 1 שעה — / 1K טוקנים פלט · טוקני תמונה בפלט $0.24 / 1K טוקני תמונה |
| תצורהרמת אורך בקשה 1 | טבלת תעריפים— | טוקנים בהקשר, יותר מ-0 | טוקנים בהקשר, עד וכוללללא גבול עליון | חיוב קלט · טוקני קלט $0.004 / 1K טוקנים פלט · טוקני פלט $0.024 / 1K טוקנים קלט · קריאה מהמטמון $0.0004 / 1K טוקנים קלט · כתיבה למטמון $0.00075 / 1K טוקנים קלט · כתיבה למטמון, 1 שעה — / 1K טוקנים |
פרטי תעריף הייחוס
טבלאות הייחוס ברמת המודל אינן משנות את בחירת השיטה, הצעות המחיר או החיובים. החיובים בפועל משתמשים בתעריפי שיטת Ailoot שנבחרה.
Google: Nano Banana Pro (Gemini 3 Pro Image)
מחירים לפי תצורה
| תצורה | תנאי חיוב | חיוב |
|---|---|---|
| תצורהGoogle: Nano Banana Pro (Gemini 3 Pro Image) · תצורת ברירת המחדל | תנאי חיובתצורת ברירת מחדל | חיוב קלט · טוקני קלט 0.004 $ / 1K טוקנים פלט · טוקני פלט 0.024 $ / 1K טוקנים קלט · תמונת קלט 0.004 $ / 1K טוקנים פלט · תמונת פלט 0.24 $ / 1K טוקנים קלט · קלט שמע 0.004 $ / 1K טוקנים קלט · קריאה ממטמון שמע 0.0004 $ / 1K טוקנים פלט · חיפוש ברשת 0.028 $ לכל חיפוש פלט · טוקני חשיבה 0.024 $ / 1K טוקנים קלט · קריאה מהמטמון 0.0004 $ / 1K טוקנים קלט · כתיבה למטמון · 5 דקות 0.00075 $ / 1K טוקנים |
לפני הבקשה 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-pro-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-pro-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-pro-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 הרכיבו עדכונים לפי אינדקס הבחירה/הכלי ושמרו את סיבת הסיום הסופית ואת השימוש.
כשצריך לבדוק את התגובה המקורית
שמרו מזהי בקשות/תגובות וכותרות. לא מסופק 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-pro-image, gemini-3-pro-image-preview, nano-banana-pro
Ailoot Ultra google/gemini-3-pro-image
כינויים לנתיבי שיטות
/v1/images
מזהי מודלים קשורים IDs
google/gemini-3-pro-image, gemini-3-pro-image-preview, nano-banana-pro, gemini-3-pro-image
Ailoot Ultra · תמונות POST /v1/images/generations google/gemini-3-pro-image
google/gemini-3-pro-imageהתחלה
Nano Banana Pro (Gemini 3 Pro Image) הוא מודל התמונות של Google המבוסס על חשיבה לעיצוב מורכב, להדמיות מוצר ולהמחשות חזותיות עובדתיות. הוא מקבל טקסט ותמונות ייחוס ויוצר תמונות עם טקסט, עם פלט 1K–4K ושליטה יצירתית מפורטת.
- סוגי קלט נתמכים
- טקסט · תמונות
- תוצאות
- תמונות
זמין ב-Ailoot · קלט ושיטות
Ailoot Ultra · תמונות POST /v1/images/generations
- סוגי קלט
text,image- סוגי פלט
image
| שדה | סוג | דרישה | ערכים ומגבלות | ברירת מחדל |
|---|---|---|---|---|
שדהmodel | סוגstring | דרישהחובה | ערכים ומגבלות google/gemini-3-pro-image | ברירת מחדל— |
שדהprompt | סוגstring | דרישהחובה | ערכים ומגבלות אורך מזערי: 1 | ברירת מחדל— |
שדהresolution | סוגstring | דרישהרשות | ערכים ומגבלות 1K, 2K, 4K | ברירת מחדל— |
שדהaspect_ratio | סוגstring | דרישהרשות | ערכים ומגבלות 1:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 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)
תעריפים משוערים להשוואה
מחירים לפי תצורה
התאימו כל חיוב לתנאים המוצגים. השתמשו בתעריף אחד לכל קבוצה של תצורות חלופיות.
| תצורה | טבלת תעריפים | כמות חזויה | חיוב |
|---|---|---|---|
| תצורהתעריפי בסיס לטוקנים | טבלת תעריפיםתעריף בסיס | כמות חזויה— | חיוב קלט · טוקני קלט · אומדן להשוואה בלבד — / 1K טוקנים פלט · טוקני פלט · אומדן להשוואה בלבד — / 1K טוקנים קלט · קריאה מהמטמון · אומדן להשוואה בלבד — / 1K טוקנים קלט · כתיבה למטמון · אומדן להשוואה בלבד — / 1K טוקנים קלט · כתיבה למטמון, 1 שעה · אומדן להשוואה בלבד — / 1K טוקנים |
| תצורהעלות יצירה משוערת | טבלת תעריפים— | כמות חזויהאומדן ליצירה אחת | חיוב פלט · עלות יצירה משוערת · אומדן להשוואה בלבד $0.98304 אומדן לפני היצירה אומדן זה אינו חיוב נוסף או תעריף קבוע עבור היצירה שהושלמה. |
לפני הבקשה 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-pro-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 שהוחזרו בפועל או את ספריית המדיה שבבעלותכם; לעולם אל תבנו URL של משימה ממזהה הפעולה ואל תשלחו שוב בקשת יצירה.
שדות התגובה
| שדה | סוג |
|---|---|
שדהcreated | סוג |
שדהdata[].url | סוג |
שדהdata[].b64_json | סוג |
שדהusage | סוג |
כינויים
כינויים למודל
Ailoot gemini-3-pro-image, gemini-3-pro-image-preview, nano-banana-pro
Ailoot Ultra google/gemini-3-pro-image
כינויים לנתיבי שיטות
/v1/images
מזהי מודלים קשורים IDs
google/gemini-3-pro-image, gemini-3-pro-image-preview, nano-banana-pro, gemini-3-pro-image
Ailoot Ultra · Anthropic Messages POST /v1/messages google/gemini-3-pro-image
google/gemini-3-pro-imageהתחלה
Nano Banana Pro (Gemini 3 Pro Image) הוא מודל התמונות של Google המבוסס על חשיבה לעיצוב מורכב, להדמיות מוצר ולהמחשות חזותיות עובדתיות. הוא מקבל טקסט ותמונות ייחוס ויוצר תמונות עם טקסט, עם פלט 1K–4K ושליטה יצירתית מפורטת.
- סוגי קלט נתמכים
- טקסט
- תוצאות
- json · sse
זמין ב-Ailoot · קלט ושיטות
Ailoot Ultra · Anthropic Messages POST /v1/messages
- סוגי קלט
text- סוגי פלט
json,sse- פורמט פלט
- JSON או SSE
| שדה | סוג | דרישה | ערכים ומגבלות | ברירת מחדל |
|---|---|---|---|---|
שדהmodel | סוגstring | דרישהחובה | ערכים ומגבלות google/gemini-3-pro-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 בפועל והכניסו את הטקסט שלו לקלט שצוין או למחרוזת תוכן ההודעה. |
מחזור חיים: synchronous_or_streamed
תעריפים
מידע תעריפים אינו מוסיף אפשרויות לבקשה. הפרמטרים הנתמכים מפורטים בשיטה שנבחרה.
- מצב מהיר
- תעריף רגיל כאשר נבחר מצב מהיר
- מצב Flex
- תעריף רגיל כאשר נבחר מצב flex
- מאמץ חשיבה מרבי
- תעריף רגיל כאשר מאמץ החשיבה המרבי משתמש בהתאמת ברירת המחדל (default)
- תמחור מטמון מפורש
- לא מופעל כאשר מתבקש מטמון מפורש
תעריפי Ailoot
מחירים לפי תצורה
התאימו כל חיוב לתנאים המוצגים. השתמשו בתעריף אחד לכל קבוצה של תצורות חלופיות.
| תצורה | טבלת תעריפים | טוקנים בהקשר, יותר מ- | טוקנים בהקשר, עד וכולל | חיוב |
|---|---|---|---|---|
| תצורהתעריפי הבסיס לטוקנים | טבלת תעריפיםתעריף בסיס | טוקנים בהקשר, יותר מ-— | טוקנים בהקשר, עד וכוללללא גבול עליון | חיוב קלט · טוקני קלט $0.004 / 1K טוקנים פלט · טוקני פלט $0.024 / 1K טוקנים קלט · קריאה מהמטמון $0.0004 / 1K טוקנים קלט · כתיבה למטמון $0.00075 / 1K טוקנים קלט · כתיבה למטמון, 1 שעה — / 1K טוקנים פלט · טוקני תמונה בפלט $0.24 / 1K טוקני תמונה |
| תצורהרמת אורך בקשה 1 | טבלת תעריפים— | טוקנים בהקשר, יותר מ-0 | טוקנים בהקשר, עד וכוללללא גבול עליון | חיוב קלט · טוקני קלט $0.004 / 1K טוקנים פלט · טוקני פלט $0.024 / 1K טוקנים קלט · קריאה מהמטמון $0.0004 / 1K טוקנים קלט · כתיבה למטמון $0.00075 / 1K טוקנים קלט · כתיבה למטמון, 1 שעה — / 1K טוקנים |
לפני הבקשה Ailoot משריינת סכום משוער. לאחר קבלת התוצאה היא מסדירה את החיוב הסופי לפי השימוש המדוד. הסדרת חיוב בהזרמה משתמשת ברשומת השימוש הסופית. איך פועלים שריון הסכום והסדרת החיוב →
דוגמאות לבקשות
Ailoot Ultra · Anthropic Messages
{
"model": "google/gemini-3-pro-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-pro-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-pro-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
שמירת כל התוצאות שהושלמו
שמרו כל תגובה מלאה, קובץ ומקטע תוכן שהוחזרו.
שמרו את כל בלוקי התוכן, חתימות החשיבה ומזהי השימוש בכלים בפועל. הרכיבו את כל עדכוני הבלוקים של SSE; בלוק הטקסט הראשון אינו הפלט המלא.
כשצריך לבדוק את התגובה המקורית
שמרו מזהי בקשות/תגובות וכותרות. לא מסופק 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-pro-image, gemini-3-pro-image-preview, nano-banana-pro
Ailoot Ultra google/gemini-3-pro-image
כינויים לנתיבי שיטות
/v1/images
מזהי מודלים קשורים IDs
google/gemini-3-pro-image, gemini-3-pro-image-preview, nano-banana-pro, gemini-3-pro-image
FAQ · Google: Nano Banana Pro (Gemini 3 Pro Image)
- אילו קלטים ותוצאות זמינים?
POST /v1/images/generations·gemini-3-pro-image:text→imagePOST /v1/images/generations·gemini-3-pro-image-preview:text→imagePOST /v1/images/generations·nano-banana-pro:text→imagePOST /v1/chat/completions·google/gemini-3-pro-image:text→textPOST /v1/images/generations·google/gemini-3-pro-image:text,image→imagePOST /v1/messages·google/gemini-3-pro-image:text→json,sse- באילו שדות הבקשה משתמשת?
POST /v1/images/generations·gemini-3-pro-image:model,prompt,n,response_format,streamPOST /v1/images/generations·gemini-3-pro-image-preview:model,prompt,n,response_format,streamPOST /v1/images/generations·nano-banana-pro:model,prompt,n,response_format,streamPOST /v1/chat/completions·google/gemini-3-pro-image:model,messages,stream,modalities,providerPOST /v1/images/generations·google/gemini-3-pro-image:model,prompt,resolution,aspect_ratio,n,input_references,providerPOST /v1/messages·google/gemini-3-pro-image:model,messages,max_tokens,stream- אילו מגבלות חלות?
POST /v1/images/generations·gemini-3-pro-image:ctx:65536;max_out:32768;n.minimum:1POST /v1/images/generations·gemini-3-pro-image-preview:ctx:65536;max_out:32768;n.minimum:1POST /v1/images/generations·nano-banana-pro:ctx:65536;max_out:32768;n.minimum:1POST /v1/chat/completions·google/gemini-3-pro-image:messages.min_items:1POST /v1/images/generations·google/gemini-3-pro-image:n.minimum:1;n.maximum:1