wan2.7-image
Model penjanaan imej daripada teks untuk menyediakan variasi reka bentuk dan ilustrasi. Menurut Alibaba, versi ini menumpukan penghasilan imej yang lebih pantas.
Tentang model
Huraian ini merangkumi keupayaan model. Input, output dan pilihan yang tersedia di Ailoot disenaraikan di bawah untuk kaedah yang dipilih.
Wan2.7-Image menghasilkan imej daripada arahan teks. Kad Ailoot semasa menyediakan khususnya input teks dan hasil berbentuk imej. Menurut Alibaba, versi ini menumpukan penghasilan variasi yang lebih pantas. Spesifikasi pengeluar turut menyediakan penyuntingan, penggabungan rujukan dan perubahan setempat; operasi ini memerlukan sokongan input imej yang berasingan dan tidak disediakan oleh kaedah semasa pada kad ini.
Mod yang diterangkan oleh Alibaba
Bagi mod rujukan, Alibaba menyediakan sehingga sembilan imej asal dalam satu arahan. Imej ini menjadi panduan rupa objek, komposisi dan butiran. Model boleh menggabungkan beberapa bahan menjadi adegan baharu atau mengubah imej asal sambil mengekalkan objek utama. Untuk penyuntingan khusus, kawasan yang ditandakan secara jelas disediakan: sehingga dua kawasan segi empat tepat boleh ditentukan pada satu imej.
Dalam spesifikasi Alibaba, mod biasa menghasilkan satu hingga empat hasil. Siri berurutan membolehkan sehingga 12 imej diminta, dengan hubungan melalui cerita atau ciri watak yang sama. Bagi siri, ini ialah had atas: model menentukan sendiri bilangan bingkai yang diperlukan dan boleh mengembalikan bilangan yang lebih kecil. Arahan dan bahan asal membantu mengekalkan jalan cerita bersama.
Mod penaakulan disediakan untuk penjanaan biasa daripada teks tanpa rujukan dan tanpa siri berurutan. Dalam mod ini, model menganalisis penerangan rumit dengan lebih terperinci sebelum menghasilkan imej. Mod ini tidak digunakan semasa penyuntingan berdasarkan imej atau dalam siri berurutan. Palet yang ditetapkan dengan 3–10 warna tersedia di luar siri berurutan.
Input dan hasil
Dalam mod yang menggunakan imej asal, sistem pengeluar menyokong JPEG, JPG, PNG tanpa ketelusan, BMP dan WEBP. Setiap sisi boleh mengandungi dari 240 hingga 8000 piksel, saiz fail sehingga 20 MB dan nisbah aspek dari 1:8 hingga 8:1.
Arahan teks menyokong bahasa Cina dan Inggeris serta dihadkan kepada 5000 aksara; bahagian berlebihan dipotong. Penerangan negatif dan peluasan arahan tambahan tidak disediakan bagi versi ini.
Format output ialah PNG, dengan resolusi sehingga tahap 2K. Label ini merujuk kepada jumlah keluasan piksel, bukannya panjang sisi maksimum yang tetap; bentuk boleh dipilih dalam julat dari 1:8 hingga 8:1. Semasa penyuntingan dengan resolusi pratetap, hasil mengekalkan nisbah aspek rujukan terakhir. Nilai benih rawak awal yang sama membantu mendapatkan variasi yang serupa, tetapi tidak menjamin padanan sepenuhnya.
Ailoot · Imej POST /v1/images/generations wan2.7-image
wan2.7-imagePengenalan
Model penjanaan imej daripada teks untuk menyediakan variasi reka bentuk dan ilustrasi. Menurut Alibaba, versi ini menumpukan penghasilan imej yang lebih pantas.
- Input yang diterima
- Teks
- Hasil
- Imej
Tersedia di Ailoot · input & kaedah
Ailoot · Imej POST /v1/images/generations
- Input
text- Output
image- Format output
- Fail imej
| Medan | Jenis | Keperluan | Nilai & had | Lalai |
|---|---|---|---|---|
Medanmodel | Jenisstring | KeperluanDiperlukan | Nilai & had wan2.7-image | Lalai— |
Medanprompt | Jenisstring | KeperluanDiperlukan | Nilai & had Panjang minimum: 1 | Lalai— |
Medann | Jenisinteger | KeperluanPilihan | Nilai & had Minimum: 1 | Lalai1 |
Medanresponse_format | Jenisstring | KeperluanPilihan | Nilai & had url, b64_json | Lalai— |
Medanstream | Jenisboolean | KeperluanPilihan | Nilai & had | Lalaifalse |
Medansize | Jenisstring | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
Medanpartial_images | Jenisinteger | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
Medanimages[].image_url | Jenisstring | KeperluanTidak disokong | Nilai & had Bait ternyahkod maksimum: 20,971,520 Jenis MIME: image/png, image/jpeg Imej maksimum setiap tatasusunan: 9 Syarat: Satu URL sebenar bagi setiap objek images[]. Bilangan item tatasusunan berbeza daripada nod daun rentetan ini. Terpakai apabila: Hanya JSON images/edits; JSON images/generations tidak menghuraikan rujukan images. | Lalai— |
Medanimage | Jenisfile | KeperluanPilihan | Nilai & had Bait ternyahkod maksimum: 20,971,520 Jenis MIME: image/png, image/jpeg Terpakai apabila: penjanaan multipart/form-data | Lalai— |
Medanimage[] | Jenisfile[] | KeperluanPilihan | Nilai & had Item maksimum: 9 Bait ternyahkod maksimum: 20,971,520 Jenis MIME: image/png, image/jpeg Terpakai apabila: penjanaan multipart/form-data | Lalai— |
Gabungan bahan input
Teks kepada imej · Diperlukan: prompt
reference_images_generation · Diperlukan: prompt
Parameter kaedah dan kitar hayat
| Parameter | Kontrak |
|---|---|
Parametermaterial_types | Kontraktext |
Parameterrequired | Kontrakmodel, prompt |
Parameteroptional_controls | Kontraknull |
Parametercontent_type | Kontrakapplication/json |
Kitar hayat: synchronous_result_then_owned_library
GET /v1/media/tasks/{task_id} · task_id sebenar yang dikembalikan atau rekod pustaka media
GET /v1/media/assets/{asset_id}/content
GET /v1/media/assets
GET /v1/media/assets/{asset_id}
Struktur kaedah dan ID adalah tepat; keupayaan pembekal berasingan daripada penerimaan permintaan.
Pelan harga
Kadar kaedah Ailoot
POST /v1/images/generations- Output
- USD 0.03 bagi setiap imej 1K
- Output
- USD 0.03 bagi setiap imej 2K
Ailoot merizabkan anggaran amaun sebelum permintaan. Selepas hasil diterima, caj akhir diselesaikan berdasarkan penggunaan terukur. Penyelesaian caj penstriman menggunakan rekod penggunaan akhir. Cara rizab dan penyelesaian caj berfungsi →
Butiran tarif rujukan
Jadual rujukan peringkat model tidak mengubah pemilihan kaedah, sebut harga atau caj. Caj aktif menggunakan kadar kaedah Ailoot yang dipilih.
wan2.7-image
Harga mengikut konfigurasi
| Konfigurasi | Syarat pengebilan | Caj |
|---|---|---|
| Konfigurasiwan2.7-image · Konfigurasi lalai | Syarat pengebilanKonfigurasi lalai | Caj Input · Input USD 0.00 bagi setiap panggilan Output · Output USD 0.06 bagi setiap panggilan |
Contoh permintaan
Ailoot · Imej
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");
Terima dan simpan hasil
Ailoot · Imej
Muat turun setiap imej yang dikembalikan atau simpan kandungan Base64-nya
GET /v1/media/tasks/{task_id}GET /v1/media/assets/{asset_id}/contentGET /v1/media/assetsGET /v1/media/assets/{asset_id}
Simpan semua hasil yang selesai
Simpan setiap imej yang selesai; dapatkan setiap URL yang dikembalikan atau nyahkod kandungan Base64-nya.
Simpan setiap item data. Nyahkod setiap b64_json atau dapatkan setiap URL bertandatangan yang dikembalikan. Pilih sambungan nama fail berdasarkan MIME/bait sebenar.
Jika respons asal perlu disemak
Jika hasil penjanaan atau penyuntingan imej memerlukan semakan, simpan operation_id/X-Client-Request-ID asal serta maklumat hasil yang dikembalikan. Pulihkan hasil sedia ada milik anda melalui pustaka media menggunakan nilai task_id atau asset_id sebenar. Jangan hantar semula permintaan penjanaan/penyuntingan atau bina URL tinjauan status daripada operation_id.
Medan respons
| Medan | Jenis |
|---|---|
Medancreated | Jenisinteger |
Medandata[].url | Jenisstring |
Medandata[].b64_json | Jenisbase64 string |
Medanusage | Jenisobject |
Ralat dan langkah seterusnya
| Respons | Syarat | Langkah seterusnya |
|---|---|---|
Respons400 · invalid_request_error | SyaratMedan wajib, perwakilan bahan atau nilai parameter tidak sah | Langkah seterusnyaBetulkan medan yang ditunjukkan sebelum permintaan penciptaan baharu. |
Responsserver_error | SyaratRespons yang dikembalikan menyatakan bahawa operasi atau hasil memerlukan semakan | Langkah seterusnyaSimpan ID operasi/tugas asal yang dikembalikan, pengepala permintaan dan respons; teruskan pembacaan yang disokong bagi operasi asal tersebut. Jangan hantar semula permintaan penciptaan. |
Alias
Alias model
Ailoot wan2.7-image
Alias laluan kaedah
Gunakan laluan kaedah yang dipaparkan di atas.
ID pemanggil berkaitan
FAQ · wan2.7-image
- Apakah input dan hasil yang tersedia?
POST /v1/images/generations·wan2.7-image:text→image- Apakah medan yang digunakan oleh permintaan?
POST /v1/images/generations·wan2.7-image:model,prompt,n,response_format,stream,image,image[]- Apakah had yang terpakai?
POST /v1/images/generations·wan2.7-image:n.minimum:1