النماذج

qwen-image-3.0-pro

Markdown · JSON

qwen-image-3.0-pro

نموذج لتوليد الصور من النص يركز على التخطيطات المعقدة والكتابات والتفاصيل الواقعية. يناسب الملصقات ولوحات القصة وقوائم الطعام والمواد ذات التكوين الكثيف.

عن النموذج

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

Qwen-Image-3.0-Pro هو نموذج من Alibaba لإنشاء الصور وتحريرها عندما تكون التكوينات والكتابات والتفاصيل الدقيقة مهمة. تشمل مجالاته التخطيطات الكثيفة، وصورة داخل صورة، وتنسيق الصحف، ولوحات القصة، وقوائم الطعام، وأوراق العمل التعليمية. تعرض بطاقة Ailoot الحالية وضع توليد الصورة من طلب نصي. توفر Alibaba أيضًا التحرير والعمل بصور مرجعية؛ وتتطلب هذه العمليات دعمًا منفصلًا للصور المدخلة، ولا توفرها الطريقة الحالية في البطاقة.

النص والتفاصيل داخل الصورة

يبرز المصنّع الطلبات الطويلة حتى 4,5 ألف توكن، والكتابات في 12 لغة، والعمل بخطوط متعددة. هذه إمكانية موصوفة لمعالجة الطلب، وليست الحجم المنشور لنافذة السياق الرسمية. تشمل الخصائص المعلنة نقل الكتابات الصغيرة بحجم 10 بكسلات، وخامات الجلد والشعر، والتغيرات الدقيقة في تعبير الوجه. تفيد هذه التفاصيل عند إعداد مواد تُفحص الصورة فيها عن قرب.

صُمم Qwen-Image-3.0-Pro أيضًا للتصورات البصرية لصفحات الويب والألعاب وشاشات البث المباشر. يمكن في نتيجة كهذه جمع الرسم وبنية الشاشة والكتابات المصممة. ينشئ النموذج صورة للتخطيط؛ ويتطلب التطبيق الوظيفي تنفيذًا منفصلًا.

التحرير في مواصفات Alibaba

تحدد Alibaba لوضع التحرير صورة واحدة إلى ثلاث صور. يتيح المصنّع في هذه الطريقة ربط عنصر برقم الصورة المرجعية ووصف الجمع بين المواد. تتوفر إضافة العناصر وحذفها ونقلها، وتغيير الفعل والأسلوب والتفاصيل والنص. يساعد الوصف السلبي على تحديد العناصر غير المرغوبة.

تُقبل مواد الإدخال لوضع التحرير لدى المصنّع بصيغ JPG وJPEG وPNG وBMP وTIFF وWEBP وGIF. في GIF المتحرك يُستخدم الإطار الأول. حجم كل ملف حتى 10 ميغابايت؛ وينصح المصنّع بصور يتراوح طول جوانبها من 384 إلى 3072 بكسل. هذه توصيات للإدخال، وليست أبعاد النتيجة النهائية.

تنص مواصفات المصنّع على صورة ناتجة واحدة إلى ست صور بصيغة PNG لكل طلب. يتراوح عدد بكسلات النتيجة من 262 144 إلى 4 194 304 بكسل، بما يقابل صورًا مربعة من 512 × 512 إلى 2048 × 2048. تُقبل نسب أبعاد من 1:8 إلى 8:1، لذا يتحدد طول الجانب في التكوينات الممتدة أيضًا بحسب شكل الإطار المختار. تتوفر معالجة إضافية للطلب قبل التوليد.

Ailoot · الصور POST /v1/images/generations qwen-image-3.0-pro

qwen-image-3.0-pro

Alibaba /qwen-image-3.0-pro
معرّف النموذج ID
  • qwen-image-3.0-pro
  • qwen-image
  • qwen-image-latest

البداية

نموذج لتوليد الصور من النص يركز على التخطيطات المعقدة والكتابات والتفاصيل الواقعية. يناسب الملصقات ولوحات القصة وقوائم الطعام والمواد ذات التكوين الكثيف.

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

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

Ailoot · الصور POST /v1/images/generations
الإدخال
text
الإخراج
image
صيغة الإخراج
ملف صورة
الحقلالنوعالمتطلبالقيم والحدودالقيمة الافتراضية
الحقلmodelالنوعstringالمتطلبمطلوبالقيم والحدود
qwen-image-3.0-pro
القيمة الافتراضية—
الحقلpromptالنوعstringالمتطلبمطلوبالقيم والحدود
الحد الأدنى للطول: ⁦1⁩
القيمة الافتراضية—
الحقلnالنوعintegerالمتطلباختياريالقيم والحدود
الحد الأدنى: ⁦1⁩
القيمة الافتراضية⁦1⁩
الحقلresponse_formatالنوعstringالمتطلباختياريالقيم والحدود
url, b64_json
القيمة الافتراضية—
الحقلstreamالنوعbooleanالمتطلباختياريالقيم والحدودالقيمة الافتراضيةfalse
الحقلsizeالنوعstringالمتطلباختياريالقيم والحدود
يعتمد على النموذج
القيمة الافتراضية—
الحقلpartial_imagesالنوعintegerالمتطلباختياريالقيم والحدود
يعتمد على النموذج
القيمة الافتراضية—
الحقلimages[].image_urlالنوعstringالمتطلبغير مدعومالقيم والحدود
الحد الأقصى للبايتات بعد فك الترميز: ⁦10,485,760⁩
أنواع MIME: image/png, image/jpeg
الحد الأقصى للصور في كل مصفوفة: ⁦3⁩
الشروط: عنوان URL فعلي واحد لكل كائن images[]. عدد عناصر المصفوفة منفصل عن هذه القيمة النصية الطرفية.
ينطبق عندما: خاص بـJSON images/edits فقط؛ لا يحلّل JSON images/generations مراجع images.
القيمة الافتراضية—
الحقلimageالنوعfileالمتطلباختياريالقيم والحدود
الحد الأقصى للبايتات بعد فك الترميز: ⁦10,485,760⁩
أنواع MIME: image/png, image/jpeg
ينطبق عندما: توليد باستخدام multipart/form-data
القيمة الافتراضية—
الحقلimage[]النوعfile[]المتطلباختياريالقيم والحدود
الحد الأقصى للعناصر: ⁦3⁩
الحد الأقصى للبايتات بعد فك الترميز: ⁦10,485,760⁩
أنواع MIME: image/png, image/jpeg
ينطبق عندما: توليد باستخدام multipart/form-data
القيمة الافتراضية—
تركيبات مواد الإدخال

تحويل النص إلى صورة · مطلوب: prompt

reference_images_generation · مطلوب: 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.003 US$⁩ لكل صورة مُدخلة
الإخراج
⁦‏0.04 US$⁩ لكل صورة بدقة 1K
الإخراج
⁦‏0.075 US$⁩ لكل صورة بدقة 2K

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

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

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": "qwen-image-3.0-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': 'qwen-image-3.0-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": "qwen-image-3.0-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}/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 qwen-image-3.0-pro, qwen-image, qwen-image-latest

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

استخدم مسارات الطرائق المعروضة أعلاه.

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

qwen-image-3.0-pro, qwen-image, qwen-image-latest

Ailoot · الصور POST /v1/images/generations qwen-image

qwen-image

Alibaba /qwen-image
معرّف النموذج ID
  • qwen-image-3.0-pro
  • qwen-image
  • qwen-image-latest

البداية

نموذج لتوليد الصور من النص يركز على التخطيطات المعقدة والكتابات والتفاصيل الواقعية. يناسب الملصقات ولوحات القصة وقوائم الطعام والمواد ذات التكوين الكثيف.

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

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

Ailoot · الصور POST /v1/images/generations
الإدخال
text
الإخراج
image
صيغة الإخراج
ملف صورة
الحقلالنوعالمتطلبالقيم والحدودالقيمة الافتراضية
الحقلmodelالنوعstringالمتطلبمطلوبالقيم والحدود
qwen-image
القيمة الافتراضية—
الحقلpromptالنوعstringالمتطلبمطلوبالقيم والحدود
الحد الأدنى للطول: ⁦1⁩
القيمة الافتراضية—
الحقلnالنوعintegerالمتطلباختياريالقيم والحدود
الحد الأدنى: ⁦1⁩
القيمة الافتراضية⁦1⁩
الحقلresponse_formatالنوعstringالمتطلباختياريالقيم والحدود
url, b64_json
القيمة الافتراضية—
الحقلstreamالنوعbooleanالمتطلباختياريالقيم والحدودالقيمة الافتراضيةfalse
الحقلsizeالنوعstringالمتطلباختياريالقيم والحدود
يعتمد على النموذج
القيمة الافتراضية—
الحقلpartial_imagesالنوعintegerالمتطلباختياريالقيم والحدود
يعتمد على النموذج
القيمة الافتراضية—
الحقلimages[].image_urlالنوعstringالمتطلبغير مدعومالقيم والحدود
الحد الأقصى للبايتات بعد فك الترميز: ⁦10,485,760⁩
أنواع MIME: image/png, image/jpeg
الحد الأقصى للصور في كل مصفوفة: ⁦3⁩
الشروط: عنوان URL فعلي واحد لكل كائن images[]. عدد عناصر المصفوفة منفصل عن هذه القيمة النصية الطرفية.
ينطبق عندما: خاص بـJSON images/edits فقط؛ لا يحلّل JSON images/generations مراجع images.
القيمة الافتراضية—
الحقلimageالنوعfileالمتطلباختياريالقيم والحدود
الحد الأقصى للبايتات بعد فك الترميز: ⁦10,485,760⁩
أنواع MIME: image/png, image/jpeg
ينطبق عندما: توليد باستخدام multipart/form-data
القيمة الافتراضية—
الحقلimage[]النوعfile[]المتطلباختياريالقيم والحدود
الحد الأقصى للعناصر: ⁦3⁩
الحد الأقصى للبايتات بعد فك الترميز: ⁦10,485,760⁩
أنواع MIME: image/png, image/jpeg
ينطبق عندما: توليد باستخدام multipart/form-data
القيمة الافتراضية—
تركيبات مواد الإدخال

تحويل النص إلى صورة · مطلوب: prompt

reference_images_generation · مطلوب: 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.003 US$⁩ لكل صورة مُدخلة
الإخراج
⁦‏0.04 US$⁩ لكل صورة بدقة 1K
الإخراج
⁦‏0.075 US$⁩ لكل صورة بدقة 2K

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

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

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": "qwen-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': 'qwen-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": "qwen-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 qwen-image-3.0-pro, qwen-image, qwen-image-latest

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

استخدم مسارات الطرائق المعروضة أعلاه.

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

qwen-image-3.0-pro, qwen-image, qwen-image-latest

Ailoot · الصور POST /v1/images/generations qwen-image-latest

qwen-image-latest

Alibaba /qwen-image-latest
معرّف النموذج ID
  • qwen-image-3.0-pro
  • qwen-image
  • qwen-image-latest

البداية

نموذج لتوليد الصور من النص يركز على التخطيطات المعقدة والكتابات والتفاصيل الواقعية. يناسب الملصقات ولوحات القصة وقوائم الطعام والمواد ذات التكوين الكثيف.

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

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

Ailoot · الصور POST /v1/images/generations
الإدخال
text
الإخراج
image
صيغة الإخراج
ملف صورة
الحقلالنوعالمتطلبالقيم والحدودالقيمة الافتراضية
الحقلmodelالنوعstringالمتطلبمطلوبالقيم والحدود
qwen-image-latest
القيمة الافتراضية—
الحقلpromptالنوعstringالمتطلبمطلوبالقيم والحدود
الحد الأدنى للطول: ⁦1⁩
القيمة الافتراضية—
الحقلnالنوعintegerالمتطلباختياريالقيم والحدود
الحد الأدنى: ⁦1⁩
القيمة الافتراضية⁦1⁩
الحقلresponse_formatالنوعstringالمتطلباختياريالقيم والحدود
url, b64_json
القيمة الافتراضية—
الحقلstreamالنوعbooleanالمتطلباختياريالقيم والحدودالقيمة الافتراضيةfalse
الحقلsizeالنوعstringالمتطلباختياريالقيم والحدود
يعتمد على النموذج
القيمة الافتراضية—
الحقلpartial_imagesالنوعintegerالمتطلباختياريالقيم والحدود
يعتمد على النموذج
القيمة الافتراضية—
الحقلimages[].image_urlالنوعstringالمتطلبغير مدعومالقيم والحدود
الحد الأقصى للبايتات بعد فك الترميز: ⁦10,485,760⁩
أنواع MIME: image/png, image/jpeg
الحد الأقصى للصور في كل مصفوفة: ⁦3⁩
الشروط: عنوان URL فعلي واحد لكل كائن images[]. عدد عناصر المصفوفة منفصل عن هذه القيمة النصية الطرفية.
ينطبق عندما: خاص بـJSON images/edits فقط؛ لا يحلّل JSON images/generations مراجع images.
القيمة الافتراضية—
الحقلimageالنوعfileالمتطلباختياريالقيم والحدود
الحد الأقصى للبايتات بعد فك الترميز: ⁦10,485,760⁩
أنواع MIME: image/png, image/jpeg
ينطبق عندما: توليد باستخدام multipart/form-data
القيمة الافتراضية—
الحقلimage[]النوعfile[]المتطلباختياريالقيم والحدود
الحد الأقصى للعناصر: ⁦3⁩
الحد الأقصى للبايتات بعد فك الترميز: ⁦10,485,760⁩
أنواع MIME: image/png, image/jpeg
ينطبق عندما: توليد باستخدام multipart/form-data
القيمة الافتراضية—
تركيبات مواد الإدخال

تحويل النص إلى صورة · مطلوب: prompt

reference_images_generation · مطلوب: 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.003 US$⁩ لكل صورة مُدخلة
الإخراج
⁦‏0.04 US$⁩ لكل صورة بدقة 1K
الإخراج
⁦‏0.075 US$⁩ لكل صورة بدقة 2K

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

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

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": "qwen-image-latest", "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': 'qwen-image-latest', '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": "qwen-image-latest", "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 qwen-image-3.0-pro, qwen-image, qwen-image-latest

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

استخدم مسارات الطرائق المعروضة أعلاه.

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

qwen-image-3.0-pro, qwen-image, qwen-image-latest

FAQ · qwen-image-3.0-pro
ما المدخلات والنتائج المتاحة؟

POST /v1/images/generations · qwen-image-3.0-pro: text → image

POST /v1/images/generations · qwen-image: text → image

POST /v1/images/generations · qwen-image-latest: text → image

ما الحقول التي يستخدمها الطلب؟

POST /v1/images/generations · qwen-image-3.0-pro: model, prompt, n, response_format, stream, image, image[]

POST /v1/images/generations · qwen-image: model, prompt, n, response_format, stream, image, image[]

POST /v1/images/generations · qwen-image-latest: model, prompt, n, response_format, stream, image, image[]

ما الحدود المطبقة؟

POST /v1/images/generations · qwen-image-3.0-pro: n.minimum: 1

POST /v1/images/generations · qwen-image: n.minimum: 1

POST /v1/images/generations · qwen-image-latest: n.minimum: 1

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

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

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

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

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

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

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

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

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

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

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

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