wan2.7-image
نموذج لتوليد الصور من النص لإعداد بدائل التصميم والرسوم التوضيحية. بحسب بيانات Alibaba، يركز هذا الإصدار على إنشاء الصور بسرعة أكبر.
عن النموذج
يغطي هذا الوصف قدرات النموذج. وترد أدناه المدخلات والمخرجات والخيارات المتاحة في Ailoot للطريقة المحددة.
ينشئ Wan2.7-Image الصور من طلب نصي. تعرض بطاقة Ailoot الحالية الإدخال النصي تحديدًا والنتيجة على هيئة صورة. بحسب بيانات Alibaba، يركز هذا الإصدار على الحصول على نسخ بديلة بسرعة أكبر. تشمل مواصفات المصنّع أيضًا التحرير والجمع بين الصور المرجعية والتعديلات الموضعية؛ وهي تحتاج دعمًا منفصلًا للصور المدخلة لا توفره الطريقة الحالية في البطاقة.
الأوضاع التي تصفها Alibaba
في وضع الصور المرجعية تتيح Alibaba حتى تسع صور أصلية في الطلب. تُستخدم كمرتكزات لمظهر العنصر والتكوين والتفاصيل. يستطيع النموذج جمع مواد متعددة في مشهد جديد أو تعديل الصورة الأصلية مع الحفاظ على العنصر الرئيسي. للتحرير الموضعي توجد مناطق محددة صراحةً: يمكن تحديد حتى منطقتين مستطيلتين في صورة واحدة.
بحسب مواصفات Alibaba، ينتج الوضع العادي نتيجة واحدة إلى أربع نتائج. تتيح السلسلة المتتابعة طلب حتى 12 صورة مرتبطة بقصة أو صفات مشتركة للشخصيات. هذا حد أعلى للسلسلة: يحدد النموذج بنفسه العدد المطلوب من الإطارات وقد يعيد عددًا أقل. يساعد الطلب والمواد الأصلية على الحفاظ على خط قصة مشترك.
يوجد وضع استدلال للتوليد النصي العادي دون صور مرجعية أو سلسلة متتابعة. يحلل النموذج فيه الوصف المعقد بتفصيل أكبر قبل إنشاء الصورة. لا يُستخدم هذا الوضع عند التحرير بالصور أو في السلاسل المتتابعة. تتوفر لوحة محددة من 3–10 ألوان خارج السلاسل المتتابعة.
الإدخال والنتيجة
لدى المصنّع تُدعم في الأوضاع ذات الصور الأصلية JPEG وJPG وPNG دون شفافية وBMP وWEBP. يمكن أن يتراوح طول كل جانب من 240 إلى 8000 بكسل، وحجم الملف حتى 20 ميغابايت، ونسبة الأبعاد من 1:8 إلى 8:1.
يدعم الطلب النصي الصينية والإنجليزية، ويُحدد عند 5000 حرف؛ ويُحذف الجزء الزائد. لا يتوفر لهذا الإصدار وصف سلبي أو توسيع إضافي للطلب.
صيغة الإخراج PNG، والدقة حتى مستوى 2K. يشير هذا الترميز إلى المساحة الإجمالية للبكسلات، لا إلى طول أقصى ثابت للجانب؛ ويمكن اختيار الشكل ضمن 1:8 إلى 8:1. عند التحرير بدقة محددة مسبقًا تحافظ النتيجة على نسبة أبعاد الصورة المرجعية الأخيرة. تساعد بذرة العشوائية الابتدائية نفسها على الحصول على نسخ متشابهة، لكنها لا تضمن تطابقًا كاملًا.
Ailoot · الصور POST /v1/images/generations wan2.7-image
wan2.7-imageالبداية
نموذج لتوليد الصور من النص لإعداد بدائل التصميم والرسوم التوضيحية. بحسب بيانات Alibaba، يركز هذا الإصدار على إنشاء الصور بسرعة أكبر.
- المدخلات المقبولة
- النص
- النتائج
- الصور
متاح في Ailoot · المدخلات والطرائق
Ailoot · الصور POST /v1/images/generations
- الإدخال
text- الإخراج
image- صيغة الإخراج
- ملف صورة
| الحقل | النوع | المتطلب | القيم والحدود | القيمة الافتراضية |
|---|---|---|---|---|
الحقلmodel | النوعstring | المتطلبمطلوب | القيم والحدود wan2.7-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 | المتطلبغير مدعوم | القيم والحدود الحد الأقصى للبايتات بعد فك الترميز: 20,971,520 أنواع MIME: image/png, image/jpeg الحد الأقصى للصور في كل مصفوفة: 9 الشروط: عنوان URL فعلي واحد لكل كائن images[]. عدد عناصر المصفوفة منفصل عن هذه القيمة النصية الطرفية. ينطبق عندما: خاص بـJSON images/edits فقط؛ لا يحلّل JSON images/generations مراجع images. | القيمة الافتراضية— |
الحقلimage | النوعfile | المتطلباختياري | القيم والحدود الحد الأقصى للبايتات بعد فك الترميز: 20,971,520 أنواع MIME: image/png, image/jpeg ينطبق عندما: توليد باستخدام multipart/form-data | القيمة الافتراضية— |
الحقلimage[] | النوعfile[] | المتطلباختياري | القيم والحدود الحد الأقصى للعناصر: 9 الحد الأقصى للبايتات بعد فك الترميز: 20,971,520 أنواع 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
POST /v1/images/generations- الإخراج
- 0.03 US$ لكل صورة بدقة 1K
- الإخراج
- 0.03 US$ لكل صورة بدقة 2K
تحجز Ailoot مبلغًا تقديريًا قبل الطلب. وبعد ظهور النتيجة، تُسوّي الرسوم النهائية بناءً على الاستخدام المقاس. وتستخدم تسوية البث سجل الاستخدام النهائي. كيفية عمل حجز المبلغ وتسوية الرسوم →
تفاصيل التعرفة المرجعية
لا تغيّر جداول التعرفة المرجعية على مستوى النموذج اختيار الطريقة أو عروض الأسعار أو الرسوم. وتستخدم الرسوم الفعلية تعرفات طريقة Ailoot المحددة.
wan2.7-image
الأسعار حسب الإعدادات
| الإعدادات | شروط الفوترة | الرسوم |
|---|---|---|
| الإعداداتwan2.7-image · الإعداد الافتراضي | شروط الفوترةالإعداد الافتراضي | الرسوم الإدخال · الإدخال 0.00 US$ لكل استدعاء الإخراج · الإخراج 0.06 US$ لكل استدعاء |
أمثلة للطلبات
Ailoot · الصور
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
export AILOOT_API_KEY
export AILOOT_API_KEY
: "${AILOOT_PROMPT_FILE:?Set your actual UTF-8 image brief}"
export AILOOT_PROMPT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "wan2.7-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': 'wan2.7-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": "wan2.7-image", "prompt": ""};
if(!process.env.AILOOT_PROMPT_FILE)throw new Error("Set your actual UTF-8 image brief file");
request.prompt=readFileSync(process.env.AILOOT_PROMPT_FILE,"utf8");
const result=await client.images.generate(request);
writeFileSync("sdk-result.json",JSON.stringify(result,null,2));
if(!result.data?.length) throw new Error("No completed images");
for(let index=0;index<result.data.length;index++) {
const item=result.data[index];let encoded=item.b64_json,uri=item.url||"",raw;
if(!encoded && uri.startsWith("data:image/")) {
const comma=uri.indexOf(",");if(comma<0 || !uri.slice(0,comma).includes(";base64")) throw new Error("Unsupported image data URI");
encoded=uri.slice(comma+1);
}
if(encoded) {
if(encoded.length%4!==0 || !/^[A-Za-z0-9+/]*={0,2}$/.test(encoded)) throw new Error("Invalid Base64");
raw=Buffer.from(encoded,"base64");
} else if(uri) {
const u=new URL(uri,"https://api.ailoot.ai");
if(u.protocol!=="https:" || u.username || u.password) throw new Error("Invalid returned URL");
const owned=u.origin==="https://api.ailoot.ai" && u.pathname.startsWith("/v1/media/assets/") && u.pathname.endsWith("/content");
const response=await fetch(u,{headers:owned?{Authorization:"Bearer "+key}:{},redirect:"manual"});
if(!response.ok) throw new Error("Image content download failed: "+response.status);
raw=Buffer.from(await response.arrayBuffer());
} else throw new Error("Image has neither bytes nor URL");
if(!raw.length) throw new Error("Empty image result");
const ext=raw.subarray(0,4).equals(Buffer.from([137,80,78,71]))?"png":raw[0]===255&&raw[1]===216?"jpg":raw.toString("ascii",0,4)==="RIFF"&&raw.toString("ascii",8,12)==="WEBP"?"webp":raw.toString("utf8").trimStart().startsWith("<svg")||raw.toString("utf8").trimStart().startsWith("<?xml")?"svg":"bin";
writeFileSync(`image-${index}.${ext}`,raw);
}
console.log("Every returned image saved; sdk-result.json retains complete metadata");
استلام النتائج وحفظها
Ailoot · الصور
نزّل كل صورة مُرجعة أو احفظ محتواها بصيغة Base64
GET /v1/media/tasks/{task_id}GET /v1/media/assets/{asset_id}/contentGET /v1/media/assetsGET /v1/media/assets/{asset_id}
الاحتفاظ بكل النتائج المكتملة
احفظ كل صورة مكتملة؛ نزّلها من كل URL مُرجع، أو فك ترميز محتواها بصيغة Base64.
احفظ كل عنصر بيانات. فك ترميز كل b64_json أو اجلب محتوى كل عنوان URL موقّع مُعاد. اختر امتداد اسم الملف بناءً على نوع MIME والبايتات الفعلية.
عند الحاجة إلى التحقق من الاستجابة الأصلية
إذا تطلبت نتيجة توليد صورة أو تعديلها التحقق، فاحتفظ بقيمة operation_id/X-Client-Request-ID الأصلية ومعلومات النتيجة المُعادة. استعد النتائج الموجودة والمملوكة لك عبر مكتبة الوسائط باستخدام قيم task_id أو asset_id الفعلية. لا تُعِد إرسال طلب التوليد أو التعديل، ولا تنشئ عنوان URL للاستعلام الدوري من operation_id.
حقول الاستجابة
| الحقل | النوع |
|---|---|
الحقلcreated | النوعinteger |
الحقلdata[].url | النوعstring |
الحقلdata[].b64_json | النوعbase64 string |
الحقلusage | النوعobject |
الأخطاء والخطوات التالية
| الاستجابة | الشرط | الخطوة التالية |
|---|---|---|
الاستجابة400 · invalid_request_error | الشرطحقول مطلوبة أو تمثيل مادة أو قيمة معلمة غير صحيحة | الخطوة التاليةصحّح الحقول المحددة قبل طلب إنشاء جديد. |
الاستجابةserver_error | الشرطتشير الاستجابة المُعادة إلى أن العملية أو النتيجة تتطلب التحقق | الخطوة التاليةاحتفظ بمعرّف العملية أو المهمة الأصلي المُعاد، وبترويسات الطلب وبالاستجابة؛ وواصل عمليات القراءة المدعومة لتلك العملية الأصلية. لا تُعِد إرسال طلب الإنشاء. |
الأسماء البديلة
الأسماء البديلة للنموذج
Ailoot wan2.7-image
الأسماء البديلة لمسارات الطرائق
استخدم مسارات الطرائق المعروضة أعلاه.
معرّفات النماذج ذات الصلة IDs
FAQ · wan2.7-image
- ما المدخلات والنتائج المتاحة؟
POST /v1/images/generations·wan2.7-image:text→image- ما الحقول التي يستخدمها الطلب؟
POST /v1/images/generations·wan2.7-image:model,prompt,n,response_format,stream,image,image[]- ما الحدود المطبقة؟
POST /v1/images/generations·wan2.7-image:n.minimum:1