النماذج

Google: Nano Banana 2 (Gemini 3.1 Flash Image)

Markdown · JSON

Google: Nano Banana 2 (Gemini 3.1 Flash Image)

يولّد Nano Banana 2 (Gemini 3.1 Flash Image) الصور ويحررها ضمن محادثة. يدعم المصادر النصية والمرئية، ومخرجات بدقة 0.5K–4K، والتكوين باستخدام الصور المرجعية، وإسناد التوليد إلى البحث لمشاهد المنتجات والإنفوغراف والعمل البصري التكراري.

عن النموذج

يغطي هذا الوصف قدرات النموذج. وترد أدناه المدخلات والمخرجات والخيارات المتاحة في Ailoot للطريقة المحددة.

Nano Banana 2 هو نموذج Gemini 3.1 Flash Image من Google لتوليد الصور مباشرة وتحريرها عبر المحادثة. يركز تصميمه على كفاءة الإنشاء البصري والتعديلات المتكررة. يقبل إصدار 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. مثلًا، تتراوح المخرجات المربعة من 512 × 512 عند 0.5K إلى 4096 × 4096 عند 4K. اختر الشكل بحسب موضع الاستخدام المقصود قبل تحسين التفاصيل الصغيرة.

تحدد Google تحسين الالتزام بنسبة الأبعاد والاتساق البصري وعرض النص متعدد اللغات ضمن تحديثات هذا الإصدار. استخدم صياغة دقيقة لملصق أو قائمة طعام أو إنفوغراف، وحدّد التسمية التي تخص كل عنصر. وفي النصوص الصغيرة أو المقاطع الطويلة، تذكر بطاقة النموذج بقاء قيود على المقروئية، خصوصًا عند 1K. اجعل التعليقات موجزة وحدّد حجمها النسبي صراحة؛ وللنصوص المطولة الكثيفة، تعامل مع الصورة بوصفها مرجعًا للتخطيط البصري وافحص الكتابة الفعلية بعناية.

يمكن الجمع بين ما يصل إلى 14 صورة مرجعية في مسار عمل. يصف دليل الصور الوفاء بما يصل إلى عشرة عناصر والحفاظ على الشبه لما يصل إلى أربع شخصيات. ضع تسميات للمراجع وحدّد ما يقدمه كل منها. ففي مشهد منتج، يمكن لصورة تحديد العنصر، ولأخرى تحديد البيئة، ولثالثة تحديد الإضاءة. وفي تسلسل لشخصية، انقل المخرجات السابقة إلى المطالبة التالية واذكر السمات التي يجب أن تستمر رغم تغير زاوية النظر أو الوضعية.

يمكن لإسناد التوليد إلى Web Search وImage Search أن يزوده بمعلومات راهنة ومراجع مرئية مسترجعة. يضيف Image Search سياقًا مرئيًا بدلًا من مجرد وصف مكتوب لنتيجة البحث. تدعم الشركة المنتجة ميزة البحث عبر إعدادات التفكير الموثقة. ويستبعد مسار البحث في الصور لديها صور الأشخاص من العالم الحقيقي بوصفها مراجع مستمدة من البحث، ويعيد بيانات وصفية لنَسب المصادر مع النتائج المستندة إليها؛ احتفظ بهذه البيانات الوصفية عند استخدام النتيجة في تطبيق.

عناصر التحكم الموثقة في التفكير لـGemini 3.1 Flash Image هي minimal وhigh، مع اعتماد minimal افتراضيًا. يختلف ذلك عن إصدار Nano Banana 2.1 ذي المستويات الثلاثة والمستوى medium الافتراضي. يدعم التفكير التكوينات الأكثر تعقيدًا ومعالجة التعليمات. يستند النموذج إلى Gemini 3 Flash، لكن هذه العلاقة لا تحوله إلى نموذج عام لتنفيذ الشيفرة أو استدعاء الدوال: تُعلَّم هذه القدرات بأنها غير مدعومة في جدول إصدار الصور هذا.

يدعم التحرير الحواري تغيير صورة مقدمة أو تحسين توليد سابق. يمكن لموجز ملموس أن يقول: «حافظ على شكل الزجاجة ونص الملصق وزاوية الكاميرا. استبدل الخلفية بسطح حجري فاتح وأضف ظلالًا أنعم». صف العناصر المحفوظة بعناية مماثلة للعناصر المتغيرة. تشير بطاقة النموذج إلى أن اتساق الشخصية وتحديد اليسار واليمين والتعديلات القائمة على الرسومات الأولية قد تظل غير مثالية، لذا قارن هذه التفاصيل تحديدًا قبل متابعة تسلسل بصري.

يعطي جدول نموذج API عدد 131,072 رمز إدخال و32,768 رمز إخراج. يدعم توليد الصور وإسناد التوليد إلى البحث والتفكير والمعالجة الدفعية، بينما لا يدعم توليد الصوت والتخزين المؤقت والمخرجات المنظَّمة والبحث في الملفات وLive API وسياق URL. ولا يقبل مسار الصور إدخالًا صوتيًا. يمكن للفيديو أو PDF أن يزود مهمة صورة ثابتة بالمعلومات في إصدار API هذا؛ وتبقى المخرجات صورًا ونصًا. تتضمن الصور المولدة 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

Google /gemini-3.1-flash-image

البداية

يولّد Nano Banana 2 (Gemini 3.1 Flash Image) الصور ويحررها ضمن محادثة. يدعم المصادر النصية والمرئية، ومخرجات بدقة 0.5K–4K، والتكوين باستخدام الصور المرجعية، وإسناد التوليد إلى البحث لمشاهد المنتجات والإنفوغراف والعمل البصري التكراري.

المدخلات المقبولة
النص
النتائج
الصور · النص

متاح في 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}

بُنى الطرق ومعرّفاتها دقيقة؛ قدرة المورد منفصلة عن السماح بالطلب.

الباقات

تعرفات طرائق Ailoot

Ailoot الصورPOST /v1/images/generations
إدخال النص
⁦‏0.0005 US$⁩ / 1K
إخراج النص
⁦‏0.003 US$⁩ / 1K
الإخراج، صورة
⁦‏0.06 US$⁩ / 1K tokens
الإدخال
⁦‏0.0005 US$⁩ / 1K من رموز الصور
الإخراج
⁦≈‏0.0448 US$⁩ لكل صورة بدقة 0.5K
الإخراج
⁦‏0.0672 US$⁩ لكل صورة بدقة 1K
الإخراج
⁦≈‏0.101 US$⁩ لكل صورة بدقة 2K
الإخراج
⁦≈‏0.151 US$⁩ لكل صورة بدقة 4K

تحجز Ailoot مبلغًا تقديريًا قبل الطلب. وبعد ظهور النتيجة، تُسوّي الرسوم النهائية بناءً على الاستخدام المقاس. وتستخدم تسوية البث سجل الاستخدام النهائي. كيفية عمل حجز المبلغ وتسوية الرسوم →

تفاصيل التعرفة المرجعية

لا تغيّر جداول التعرفة المرجعية على مستوى النموذج اختيار الطريقة أو عروض الأسعار أو الرسوم. وتستخدم الرسوم الفعلية تعرفات طريقة Ailoot المحددة.

جداول التعرفة المرجعية للنموذج

الأسعار حسب الإعدادات

الإعداداتجدول التعرفةالرسوم
الإعداداتUltraجدول التعرفةالتعرفة الأساسيةالرسوم
الإدخال · رموز الإدخال $0.0010000 / 1K من الرموز
الإخراج · رموز الإخراج $0.006000 / 1K من الرموز
الإخراج · إخراج الصور $0.12000 / 1K من الرموز
الإخراج · بحث في الويب $0.028 لكل عملية بحث على الويب

أمثلة للطلبات

Ailoot · الصور

curlPython SDKNode.js SDK
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}/content
  • GET /v1/media/assets
  • GET /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.1-flash-image
Ailoot Ultra google/gemini-3.1-flash-image

الأسماء البديلة لمسارات الطرائق

/v1/images

معرّفات النماذج ذات الصلة IDs

google/gemini-3.1-flash-image, gemini-3.1-flash-image

Ailoot Ultra · محادثة OpenAI POST /v1/chat/completions google/gemini-3.1-flash-image

google/gemini-3.1-flash-image

Google /google/gemini-3.1-flash-image

البداية

يولّد Nano Banana 2 (Gemini 3.1 Flash Image) الصور ويحررها ضمن محادثة. يدعم المصادر النصية والمرئية، ومخرجات بدقة 0.5K–4K، والتكوين باستخدام الصور المرجعية، وإسناد التوليد إلى البحث لمشاهد المنتجات والإنفوغراف والعمل البصري التكراري.

المدخلات المقبولة
النص
النتائج
النص

متاح في Ailoot · المدخلات والطرائق

Ailoot Ultra · محادثة OpenAI 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؛ استخدم المعرّف الفعلي المُرجع
القيمة الافتراضية—
الحقل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
أقصى جهد للاستدلال
التعرفة القياسية عندما يُطبَّق الضبط الافتراضي default مع أقصى جهد للاستدلال
جهد الاستدلال · مرتفع
التعرفة القياسية عندما يكون جهد الاستدلال مرتفعًا
جهد الاستدلال · أدنى
التعرفة القياسية عندما يكون جهد الاستدلال في أدنى مستوياته
تسعير التخزين المؤقت الصريح
غير مفعّل عند طلب التخزين المؤقت الصريح

تعرفات Ailoot

الأسعار حسب الإعدادات

طابق كل رسم مع الشروط المعروضة. طبّق تعرفة واحدة لكل مجموعة من الإعدادات البديلة.

الإعداداتجدول التعرفةرموز السياق، أكثر منرموز السياق، حتى القيمة شاملةًالرسوم
الإعداداتالتعرفات الأساسية للرموزجدول التعرفةالتعرفة الأساسيةرموز السياق، أكثر من—رموز السياق، حتى القيمة شاملةًلا يوجد حد أقصىالرسوم
الإدخال · رموز الإدخال $0.001 / 1K من الرموز
الإخراج · رموز الإخراج $0.006 / 1K من الرموز
الإدخال · قراءة ذاكرة التخزين المؤقت — / 1K من الرموز
الإدخال · الكتابة إلى ذاكرة التخزين المؤقت — / 1K من الرموز
الإدخال · الكتابة إلى ذاكرة التخزين المؤقت، 1 ساعة — / 1K من الرموز
الإخراج · رموز إخراج الصور $0.12 / 1K من رموز الصور
الإعداداتالشريحة 1 لطول الطلبجدول التعرفة—رموز السياق، أكثر من⁦0⁩رموز السياق، حتى القيمة شاملةًلا يوجد حد أقصىالرسوم
الإدخال · رموز الإدخال $0.001 / 1K من الرموز
الإخراج · رموز الإخراج $0.006 / 1K من الرموز
الإدخال · قراءة ذاكرة التخزين المؤقت — / 1K من الرموز
الإدخال · الكتابة إلى ذاكرة التخزين المؤقت — / 1K من الرموز
الإدخال · الكتابة إلى ذاكرة التخزين المؤقت، 1 ساعة — / 1K من الرموز

تفاصيل التعرفة المرجعية

لا تغيّر جداول التعرفة المرجعية على مستوى النموذج اختيار الطريقة أو عروض الأسعار أو الرسوم. وتستخدم الرسوم الفعلية تعرفات طريقة Ailoot المحددة.

Google: Nano Banana 2 (Gemini 3.1 Flash Image)

الأسعار حسب الإعدادات

الإعداداتشروط الفوترةالرسوم
الإعداداتGoogle: Nano Banana 2 (Gemini 3.1 Flash Image) · الإعداد الافتراضيشروط الفوترةالإعداد الافتراضيالرسوم
الإدخال · رموز الإدخال ⁦‏0.001 US$⁩ / 1K من الرموز
الإخراج · رموز الإخراج ⁦‏0.006 US$⁩ / 1K من الرموز
الإخراج · صورة المخرجات ⁦‏0.12 US$⁩ / 1K من الرموز
الإخراج · البحث في الويب ⁦‏0.028 US$⁩ لكل عملية بحث

تحجز Ailoot مبلغًا تقديريًا قبل الطلب. وبعد ظهور النتيجة، تُسوّي الرسوم النهائية بناءً على الاستخدام المقاس. وتستخدم تسوية البث سجل الاستخدام النهائي. كيفية عمل حجز المبلغ وتسوية الرسوم →

أمثلة للطلبات

Ailoot Ultra · محادثة OpenAI

curlPython SDKالبث باستخدام Python
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

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.1-flash-image
Ailoot Ultra google/gemini-3.1-flash-image

الأسماء البديلة لمسارات الطرائق

/v1/images

معرّفات النماذج ذات الصلة IDs

google/gemini-3.1-flash-image, gemini-3.1-flash-image

Ailoot Ultra · الصور POST /v1/images/generations google/gemini-3.1-flash-image

google/gemini-3.1-flash-image

Google /google/gemini-3.1-flash-image

البداية

يولّد Nano Banana 2 (Gemini 3.1 Flash Image) الصور ويحررها ضمن محادثة. يدعم المصادر النصية والمرئية، ومخرجات بدقة 0.5K–4K، والتكوين باستخدام الصور المرجعية، وإسناد التوليد إلى البحث لمشاهد المنتجات والإنفوغراف والعمل البصري التكراري.

المدخلات المقبولة
النص · الصور
النتائج
الصور

متاح في 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
أقصى جهد للاستدلال
غير محدد عندما يُطبَّق الضبط الافتراضي default مع أقصى جهد للاستدلال

تعرفات تقديرية للمقارنة

الأسعار حسب الإعدادات

طابق كل رسم مع الشروط المعروضة. طبّق تعرفة واحدة لكل مجموعة من الإعدادات البديلة.

الإعداداتجدول التعرفةالكمية المتوقعةالرسوم
الإعداداتالتعرفات الأساسية للرموزجدول التعرفةالتعرفة الأساسيةالكمية المتوقعة—الرسوم
الإدخال · رموز الإدخال · تقدير للمقارنة فقط — / 1K من الرموز
الإخراج · رموز الإخراج · تقدير للمقارنة فقط — / 1K من الرموز
الإدخال · قراءة ذاكرة التخزين المؤقت · تقدير للمقارنة فقط — / 1K من الرموز
الإدخال · الكتابة إلى ذاكرة التخزين المؤقت · تقدير للمقارنة فقط — / 1K من الرموز
الإدخال · الكتابة إلى ذاكرة التخزين المؤقت، 1 ساعة · تقدير للمقارنة فقط — / 1K من الرموز
الإعداداتتكلفة التوليد التقديريةجدول التعرفة—الكمية المتوقعةتقدير لتوليد واحدالرسوم
الإخراج · تكلفة التوليد التقديرية · تقدير للمقارنة فقط $0.49152 تقدير قبل الإنشاء

هذا التقدير ليس رسومًا إضافية ولا تعرفة ثابتة لعملية التوليد المكتملة.

تحجز Ailoot مبلغًا تقديريًا قبل الطلب. وبعد ظهور النتيجة، تُسوّي الرسوم النهائية بناءً على الاستخدام المقاس. وتستخدم تسوية البث سجل الاستخدام النهائي. كيفية عمل حجز المبلغ وتسوية الرسوم →

أمثلة للطلبات

Ailoot Ultra · الصور

curl
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}/content
  • GET /v1/media/assets
  • GET /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.1-flash-image
Ailoot Ultra google/gemini-3.1-flash-image

الأسماء البديلة لمسارات الطرائق

/v1/images

معرّفات النماذج ذات الصلة IDs

google/gemini-3.1-flash-image, gemini-3.1-flash-image

Ailoot Ultra · رسائل Anthropic POST /v1/messages google/gemini-3.1-flash-image

google/gemini-3.1-flash-image

Google /google/gemini-3.1-flash-image

البداية

يولّد Nano Banana 2 (Gemini 3.1 Flash Image) الصور ويحررها ضمن محادثة. يدعم المصادر النصية والمرئية، ومخرجات بدقة 0.5K–4K، والتكوين باستخدام الصور المرجعية، وإسناد التوليد إلى البحث لمشاهد المنتجات والإنفوغراف والعمل البصري التكراري.

المدخلات المقبولة
النص
النتائج
json · sse

متاح في Ailoot · المدخلات والطرائق

Ailoot Ultra · رسائل Anthropic 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 الفعلي وضع نصه في الإدخال المحدد أو السلسلة النصية لمحتوى الرسالة.

دورة الحياة: synchronous_or_streamed

الباقات

مراجع التسعير لا تضيف خيارات للطلب. المعلمات المدعومة مذكورة للطريقة المحددة.

الوضع السريع
التعرفة القياسية عند اختيار الوضع السريع
الوضع المرن
التعرفة القياسية عند اختيار وضع flex
أقصى جهد للاستدلال
التعرفة القياسية عندما يُطبَّق الضبط الافتراضي default مع أقصى جهد للاستدلال
جهد الاستدلال · مرتفع
التعرفة القياسية عندما يكون جهد الاستدلال مرتفعًا
جهد الاستدلال · أدنى
التعرفة القياسية عندما يكون جهد الاستدلال في أدنى مستوياته
تسعير التخزين المؤقت الصريح
غير مفعّل عند طلب التخزين المؤقت الصريح

تعرفات Ailoot

الأسعار حسب الإعدادات

طابق كل رسم مع الشروط المعروضة. طبّق تعرفة واحدة لكل مجموعة من الإعدادات البديلة.

الإعداداتجدول التعرفةرموز السياق، أكثر منرموز السياق، حتى القيمة شاملةًالرسوم
الإعداداتالتعرفات الأساسية للرموزجدول التعرفةالتعرفة الأساسيةرموز السياق، أكثر من—رموز السياق، حتى القيمة شاملةًلا يوجد حد أقصىالرسوم
الإدخال · رموز الإدخال $0.001 / 1K من الرموز
الإخراج · رموز الإخراج $0.006 / 1K من الرموز
الإدخال · قراءة ذاكرة التخزين المؤقت — / 1K من الرموز
الإدخال · الكتابة إلى ذاكرة التخزين المؤقت — / 1K من الرموز
الإدخال · الكتابة إلى ذاكرة التخزين المؤقت، 1 ساعة — / 1K من الرموز
الإخراج · رموز إخراج الصور $0.12 / 1K من رموز الصور
الإعداداتالشريحة 1 لطول الطلبجدول التعرفة—رموز السياق، أكثر من⁦0⁩رموز السياق، حتى القيمة شاملةًلا يوجد حد أقصىالرسوم
الإدخال · رموز الإدخال $0.001 / 1K من الرموز
الإخراج · رموز الإخراج $0.006 / 1K من الرموز
الإدخال · قراءة ذاكرة التخزين المؤقت — / 1K من الرموز
الإدخال · الكتابة إلى ذاكرة التخزين المؤقت — / 1K من الرموز
الإدخال · الكتابة إلى ذاكرة التخزين المؤقت، 1 ساعة — / 1K من الرموز

تحجز Ailoot مبلغًا تقديريًا قبل الطلب. وبعد ظهور النتيجة، تُسوّي الرسوم النهائية بناءً على الاستخدام المقاس. وتستخدم تسوية البث سجل الاستخدام النهائي. كيفية عمل حجز المبلغ وتسوية الرسوم →

أمثلة للطلبات

Ailoot Ultra · رسائل Anthropic

جسم طلب JSON مكتمل بالحد الأدنىcurl · استخدم مستندك بترميز UTF-8Python · احفظ النتيجة كاملة
{
  "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

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.1-flash-image
Ailoot Ultra google/gemini-3.1-flash-image

الأسماء البديلة لمسارات الطرائق

/v1/images

معرّفات النماذج ذات الصلة IDs

google/gemini-3.1-flash-image, gemini-3.1-flash-image

FAQ · Google: Nano Banana 2 (Gemini 3.1 Flash Image)
ما المدخلات والنتائج المتاحة؟

POST /v1/images/generations · gemini-3.1-flash-image: text → image, text

POST /v1/chat/completions · google/gemini-3.1-flash-image: text → text

POST /v1/images/generations · google/gemini-3.1-flash-image: text, image → image

POST /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, stream

POST /v1/chat/completions · google/gemini-3.1-flash-image: model, messages, stream, modalities, provider

POST /v1/images/generations · google/gemini-3.1-flash-image: model, prompt, resolution, aspect_ratio, n, input_references, provider

POST /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: 1

POST /v1/chat/completions · google/gemini-3.1-flash-image: messages.min_items: 1

POST /v1/images/generations · google/gemini-3.1-flash-image: n.minimum: 1; n.maximum: 1

المزيد من التفاصيل

اربط Ailoot بخدمة Claude Code أوOpenCode أوHermes أوتطبيقك.

الشركة ومحفظة مشاريعها

الشركة ومحفظة مشاريعها: ملايين العملاء؛ مبيعات بالمليارات شهريًا.

اشتر الرموز بخصم.

خصم اشتراك للعمل المنتظم. الرموز الترويجية حتى 50% على شراء الرموز.

الاشتراك
اختر خطة بخصم لطلباتك المنتظمة.
رمز خصم حتى 50%
أدخل الرمز عند الشراء. يعاد حساب السعر وفق العرض الساري.
المصروفات في السجل
يحفظ النموذج والرموز والمبلغ لكل طلب.

اختر اشتراكا · اعرض أسعار النماذج

اربط API بالمنتج الذي تبيعه.

SaaS والتطبيقات والبوتات وفق العرض واتفاقية ترخيص Ailoot. لإعادة البيع، اطلب ترخيص موزع.

تطبيق تجاري
أضف توليد النص والصور والفيديو والصوت إلى ميزات خدمتك المدفوعة.
ترخيص إعادة البيع
أرسل وصف المشروع وطريقة توفير الوصول. اطلب شروط استخدام وإعادة بيع مكتوبة.
المستندات على الموقع
العرض واتفاقية الترخيص وسياسة معالجة البيانات متاحة قبل الربط.

اطلب ترخيص إعادة بيع · العرض واتفاقية الترخيص