Image
Nano Banana 2.1 (Gemini Nano Banana 2.1)
יצירת תמונות ועריכתן עם Nano Banana 2.1 דרך נקודת קצה אסינכרונית אחת, עם גוף generateContent של Google: מ-1K עד 4K, רמות חשיבה, 14 תמונות ייחוס.
Nano Banana 2.1 הוא מודל התמונות gemini-nano-banana-2.1 של Google, העדכון של Nano Banana 2. שלח את גוף הבקשה generateContent של Google עם שדה model, שמור את מזהה המשימה שהוחזר, ותשאל את המשימה כדי לקבל את התמונה המוכנה. תמונות ייחוס נכנסות ל-contents ככתובות fileData.
מזהי מודל
| מזהה מודל | אופן החיוב |
|---|---|
gemini-nano-banana-2.1 | מחיר קבוע לכל תמונה שנמסרה, זהה בכל גודל |
המחיר הנוכחי מופיע בדף המודל.
דוגמה מהירה
curl https://api.seedrouter.ai/v1/images/generations \
-H "Authorization: Bearer $SEEDROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-nano-banana-2.1",
"contents": [{"parts": [{"text": "A ceramic teapot on a linen tablecloth, soft window light"}]}],
"generationConfig": {
"responseModalities": ["IMAGE"],
"imageConfig": {"aspectRatio": "16:9", "imageSize": "2K"}
}
}'נקודת קצה
POST https://api.seedrouter.ai/v1/images/generations| כותרת | ערך |
|---|---|
| Authorization | Bearer YOUR_API_KEY |
| Content-Type | application/json |
הגוף הוא בקשת generateContent של Google עם תוספת אחת: model, כי בנתיב של נקודת הקצה הזאת אין שם מודל. התגובה מכילה מזהה משימה, לא את התמונה המוכנה. שמור את מפתחות ה-API בקוד צד השרת. קריאה ישירה ל-/v1beta/models/...:generateContent אינה נתמכת; השתמש בנקודת הקצה הזאת.
פרמטרים
| שם | סוג | חובה | ברירת מחדל | הערות |
|---|---|---|---|---|
model | string | כן | — | gemini-nano-banana-2.1. |
contents | Content[] | כן | — | 1–32 תורות. לכל אחת parts ו-role אופציונלי (user או model); התור האחרון הוא user. |
contents[].parts[].text | string | — | — | חלק טקסט. נדרש לפחות חלק טקסט אחד. |
contents[].parts[].fileData | object | לא | — | {"mimeType": "...", "fileUri": "https://..."}; ייחוס של תמונה, וידאו או PDF. עד 14 בסך הכול. |
systemInstruction | object | לא | — | {"parts": [{"text": "..."}]}. |
safetySettings | object[] | לא | — | זוגות {"category", "threshold"}; ראה למטה. |
tools | object[] | לא | — | [{"googleSearch": {}}] לחיפוש באינטרנט, או {"googleSearch": {"searchTypes": {"webSearch": {}, "imageSearch": {}}}} עם אחד הסוגים או שניהם. מבסס את התמונה על תוצאות חיפוש עדכניות; המחיר לתמונה לא משתנה. |
generationConfig.responseModalities | enum[] | לא | טקסט ותמונה | ["IMAGE"] לתמונות בלבד, או ["TEXT", "IMAGE"]. |
generationConfig.imageConfig.aspectRatio | enum | לא | היחס של תמונת הקלט, אחרת 1:1 | 1:1, 1:4, 4:1, 1:8, 8:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9, 21:9. |
generationConfig.imageConfig.imageSize | enum | לא | 1K | 1K, 2K, 4K. האות K גדולה. 512 אינו זמין במודל הזה. |
generationConfig.candidateCount | integer | לא | 1 | רק 1. בקשה אחת מחזירה תמונה אחת. |
generationConfig.temperature | number | לא | ברירת המחדל של המודל | 0–2. |
generationConfig.topP | number | לא | ברירת המחדל של המודל | 0–1. |
generationConfig.topK | integer | לא | ברירת המחדל של המודל | 1 ומעלה. |
generationConfig.seed | integer | לא | — | מספר שלם של 32 ביט. |
generationConfig.maxOutputTokens | integer | לא | ברירת המחדל של המודל | 1–32,768. |
generationConfig.stopSequences | string[] | לא | — | עד 5. |
generationConfig.mediaResolution | enum | לא | ברירת המחדל של המודל | MEDIA_RESOLUTION_LOW, MEDIA_RESOLUTION_MEDIUM, MEDIA_RESOLUTION_HIGH. קובע כמה טוקנים צורכת מדיית הקלט. |
generationConfig.thinkingConfig.thinkingLevel | enum | לא | MEDIUM | MINIMAL, MEDIUM, HIGH. כמה המודל חושב לפני שהוא מצייר; רמות גבוהות יותר לוקחות יותר זמן. |
generationConfig.thinkingConfig.includeThoughts | boolean | לא | false | מחזיר את סיכומי החשיבה של המודל ב-output.thoughts. |
קטגוריות בטיחות: HARM_CATEGORY_HARASSMENT, HARM_CATEGORY_HATE_SPEECH, HARM_CATEGORY_SEXUALLY_EXPLICIT, HARM_CATEGORY_DANGEROUS_CONTENT. ספים: BLOCK_NONE, BLOCK_ONLY_HIGH, BLOCK_MEDIUM_AND_ABOVE, BLOCK_LOW_AND_ABOVE, OFF.
שדות לא מוכרים נדחים. עדיין לא זמינים: תוכן שמור במטמון ו-responseFormat; הגדר את היחס והגודל דרך imageConfig. inlineData אינו מתקבל; העבר מדיה ככתובות fileData.
גודל הפלט
imageSize | פלט ביחס 1:1 | טוקני תמונה |
|---|---|---|
1K | 1024×1024 | 1,120 |
2K | 2048×2048 | 1,680 |
4K | 4096×4096 | 2,520 |
יחסי גובה-רוחב אחרים שומרים על אותו מספר טוקנים; למשל 16:9 ב-1K הוא 1376×768, ו-21:9 ב-4K הוא 6336×2688.
מצבים
אין פרמטר מצב נפרד ואין נקודת קצה נפרדת לעריכה.
| פעולה | פרמטרים |
|---|---|
| טקסט לתמונה | חלק טקסט |
| עריכה או הרכבה | חלק טקסט + חלק fileData אחד או יותר |
| עריכה בכמה תורות | תורות user ו-model קודמות, ואחריהן תור user חדש (ראה את ההערה למטה) |
כדי להמשיך שיחה, בנה מחדש את תור ה-model מתוך output.parts של המשימה הקודמת, לפי הסדר: חלק טקסט הופך ל-{"text": ..., "thoughtSignature": ...} וחלק תמונה הופך ל-{"fileData": {"mimeType": "image/<output_format>", "fileUri": <data[image].url>}, "thoughtSignature": ...}. שמור כל thoughtSignature בדיוק כפי שהוחזר: זו כתובת ה-URL של החתימה ששמרנו עבורך (החתימה של תמונת 4K שוקלת כמה מגה-בייט), ואנחנו משחזרים אותה לפני שהבקשה מגיעה למודל. מתקבלות רק חתימות מתוצאות המשימות שלך.
עריכה עם תמונת ייחוס
curl https://api.seedrouter.ai/v1/images/generations \
-H "Authorization: Bearer $SEEDROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-nano-banana-2.1",
"contents": [{
"role": "user",
"parts": [
{"text": "Turn this photo into a watercolor painting. Keep the composition."},
{"fileData": {"mimeType": "image/jpeg", "fileUri": "https://example.com/photo.jpg"}}
]
}]
}'החלף את כתובת הדוגמה בתמונה נגישה משלך.
קלט מדיה
ה-API הזה מקבל הפניות לכתובות URL בלבד. inlineData ב-Base64, כתובות data: והעלאות multipart אינם מתקבלים. ה-Playground מעלה את הקבצים שנבחרו לאחסון לפני שהוא שולח את הכתובות שלהם.
ייחוסים חייבים להיות כתובות HTTP(S) ציבוריות, כל אחת קטנה מ-50 MB ובסך הכול פחות מ-100 MB: תמונות (image/png, image/jpeg, image/webp, image/heic, image/heif), סרטוני וידאו (video/mp4, video/mpeg, video/mov, video/avi, video/x-flv, video/mpg, video/webm, video/wmv, video/3gpp) או מסמכי PDF (application/pdf). mimeType חייב להתאים לקובץ. הכתובות נטענות במהלך העיבוד; תמונה שאינה נגישה גורמת לכישלון המשימה, ומשימה שנכשלה אינה מחויבת.
גורמי עלות
בדוק את מדור המחירים של המודל למחיר הנוכחי. gemini-nano-banana-2.1 מחייב מחיר קבוע לכל תמונה שנמסרה, בלי קשר לגודל, לרמת החשיבה או לפרומפט.
את החיובים הסופיים תראה בהיסטוריית השימוש של החשבון שלך. משימות שנכשלו אינן מחויבות.
מבנה הפלט
השליחה מחזירה הפניה למשימה:
{
"id": "task_...",
"model": "gemini-nano-banana-2.1",
"status": "processing",
"created_at": 1790310979
}תשאול המשימה
curl https://api.seedrouter.ai/v1/tasks/YOUR_TASK_ID \
-H "Authorization: Bearer $SEEDROUTER_API_KEY"תשאל כל כמה שניות עד ש-status יהיה completed או failed. פקיעת זמן ברשת במהלך התשאול אינה מעידה שהיצירה נכשלה: שמור את מזהה המשימה והמשך לבדוק אותה. אל תיצור משימה נוספת כדי לבדוק התקדמות.
דוגמת תשאול מלאה
הרץ זאת אחרי דוגמת השליחה ב-Python שלמעלה.
import time
deadline = time.monotonic() + 600
while time.monotonic() < deadline:
result = requests.get(
f"https://api.seedrouter.ai/v1/tasks/{task_id}",
headers={"Authorization": f"Bearer {os.environ['SEEDROUTER_API_KEY']}"},
timeout=30,
)
result.raise_for_status()
task = result.json()
if task["status"] == "completed":
for image in task["output"]["data"]:
print(image["url"])
break
if task["status"] == "failed":
raise RuntimeError(task["error"]["message"])
time.sleep(3)
else:
raise TimeoutError(f"Still waiting. Resume polling task {task_id}.")משימה שהסתיימה
{
"id": "task_...",
"model": "gemini-nano-banana-2.1",
"status": "completed",
"created_at": 1790310979,
"finished_at": 1790311001,
"output": {
"created": 1790310999,
"data": [{"url": "https://static.seedrouter.ai/media/tasks/task_example/0.jpg"}],
"output_format": "jpeg",
"usage": {
"input_tokens": 22,
"output_tokens": 2297,
"total_tokens": 2319
}
}
}| שדה | משמעות |
|---|---|
id | שמור את המזהה הזה לתשאולים הבאים. |
status | processing, completed או failed. |
created_at, finished_at | חותמות זמן Unix בשניות. |
output.data[].url | כתובת התמונה שנוצרה. |
output.text | טקסט שהמודל החזיר לצד התמונה, כש-responseModalities כולל TEXT. החשיבה אינה נכללת. |
output.thoughts | סיכומי החשיבה של המודל, כש-includeThoughts הוא true. תמונות ביניים שהמודל מצייר בזמן החשיבה אינן נמסרות. |
output.grounding_metadata | עם חיפוש Google: webSearchQueries, imageSearchQueries, searchEntryPoint.renderedContent (קוד ה-HTML של Search Suggestions שחובה להציג) ו-groundingChunks (מקורות), כפי ש-Google מחזירה אותם. |
output.output_format | פורמט התמונה בפועל. |
output.parts | חלקי התגובה הסופיים לפי הסדר, לעריכה בכמה תורות: {"text", "thoughtSignature"} או {"image": <index into data>, "thoughtSignature"}. thoughtSignature הוא כתובת URL; שלח אותו בחזרה ללא שינוי. |
output.usage | שימוש בטוקנים. output_tokens סופר פלט של טקסט, חשיבה ותמונה. |
error | שגיאה מובנית במשימה שנכשלה. |
סטרימינג (streamGenerateContent) אינו נתמך; התוצאות נמסרות דרך המשימה.
שגיאות
בקשות שנדחות לפני יצירת המשימה מחזירות שגיאת HTTP יחד עם אובייקט error. משימה שנכשלת לאחר שהתקבלה מחזירה בתשאול HTTP 200, עם status: "failed" ואובייקט error. תמונה שנחסמה על ידי מסנני הבטיחות של המודל נכשלת עם content_policy_violation; תגובה ללא תמונה נכשלת עם no_output.
ראה את קטלוג השגיאות המשותף לקודים, לסטטוסי HTTP ולהנחיות ניסיון חוזר.
{
"id": "task_...",
"status": "failed",
"error": {
"code": 60001,
"message": "The request was rejected by the content policy. Please revise the prompt or input images."
}
}אם השליחה עצמה חורגת מהזמן הקצוב, בדוק את היסטוריית המשימות לפני שליחה חוזרת: ייתכן שהבקשה הראשונה כבר התקבלה.
טיפים
- תאר את הנושא, הסביבה, התאורה והסגנון במשפטים מלאים.
- בעריכה, ציין מה צריך להשתנות ומה חייב להישאר כפי שהוא.
- המחיר זהה בכל גודל, אז בקש את הגודל שאתה צריך:
1Kלטיוטות,2Kאו4Kלנכסים הסופיים. - שים את המילים המדויקות שאתה רוצה שיופיעו בתוך מירכאות, ושמור אותן קצרות.
- השתמש ברמת חשיבה
MINIMALלטיוטות מהירות יותר וב-HIGHלפריסות צפופות כמו אינפוגרפיקות. - שמור את התמונות שהוחזרו באחסון שלך אם אתה צריך עותק קבוע.
