wan2.7-image
Model pembuat gambar dari teks untuk menyiapkan variasi desain dan ilustrasi. Menurut Alibaba, versi ini ditujukan untuk menghasilkan gambar dengan lebih cepat.
Tentang model
Deskripsi ini mencakup kemampuan model. Masukan, keluaran, dan opsi yang tersedia di Ailoot tercantum di bawah untuk metode yang dipilih.
Wan2.7-Image membuat gambar dari instruksi teks. Kartu Ailoot saat ini secara khusus mencantumkan masukan teks dan hasil berupa gambar. Menurut Alibaba, versi ini ditujukan untuk memperoleh variasi dengan lebih cepat. Spesifikasi produsen juga menyediakan penyuntingan, penggabungan referensi, dan perubahan lokal; kemampuan tersebut memerlukan dukungan gambar masukan tersendiri yang tidak tersedia pada metode dalam kartu saat ini.
Mode yang dijelaskan Alibaba
Untuk mode dengan referensi, Alibaba menyediakan hingga sembilan gambar sumber dalam satu tugas. Gambar tersebut menjadi acuan bagi penampilan objek, komposisi, dan detail. Model dapat memadukan beberapa materi menjadi adegan baru atau mengubah gambar sumber sambil mempertahankan objek utama. Penyuntingan setempat menggunakan area yang ditandai secara eksplisit: satu gambar dapat memiliki hingga dua area persegi panjang.
Dalam spesifikasi Alibaba, mode biasa menghasilkan satu hingga empat hasil. Seri berurutan memungkinkan permintaan hingga 12 gambar yang terhubung melalui cerita atau ciri karakter yang sama. Untuk seri, ini adalah batas atas: model menentukan sendiri jumlah bingkai yang diperlukan dan dapat mengembalikan lebih sedikit. Instruksi dan materi sumber membantu mempertahankan alur cerita bersama.
Mode penalaran tersedia untuk pembuatan gambar biasa dari teks tanpa referensi atau seri berurutan. Dalam mode ini, model menganalisis deskripsi kompleks secara lebih terperinci sebelum membuat gambar. Mode ini tidak digunakan untuk penyuntingan berbasis gambar dan seri berurutan. Palet yang ditentukan dengan 3–10 warna tersedia di luar seri berurutan.
Masukan dan hasil
Dalam mode dengan gambar sumber pada layanan produsen, format yang didukung adalah JPEG, JPG, PNG tanpa transparansi, BMP, dan WEBP. Setiap sisi dapat berukuran dari 240 hingga 8000 piksel, ukuran berkas hingga 20 MB, dan rasio aspek dari 1:8 hingga 8:1.
Instruksi teks mendukung bahasa Tionghoa dan Inggris dengan batas 5000 karakter; bagian yang melebihi batas dibuang. Versi ini tidak menyediakan deskripsi negatif atau perluasan instruksi tambahan.
Format keluaran adalah PNG, dengan resolusi hingga tingkat 2K. Penamaan tersebut merujuk pada luas piksel keseluruhan, bukan panjang sisi maksimum yang tetap; bentuk dapat dipilih dalam rentang 1:8 hingga 8:1. Saat menyunting dengan resolusi yang telah ditentukan, hasil mempertahankan rasio aspek referensi terakhir. Nilai awal keacakan yang sama membantu menghasilkan variasi yang mirip, tetapi tidak menjamin kesamaan sepenuhnya.
Ailoot · Gambar POST /v1/images/generations wan2.7-image
wan2.7-imageMulai
Model pembuat gambar dari teks untuk menyiapkan variasi desain dan ilustrasi. Menurut Alibaba, versi ini ditujukan untuk menghasilkan gambar dengan lebih cepat.
- Masukan yang diterima
- Teks
- Hasil
- Gambar
Tersedia di Ailoot · masukan & metode
Ailoot · Gambar POST /v1/images/generations
- Masukan
text- Keluaran
image- Format keluaran
- Berkas gambar
| Kolom | Jenis | Persyaratan | Nilai & batasan | Bawaan |
|---|---|---|---|---|
Kolommodel | Jenisstring | PersyaratanWajib | Nilai & batasan wan2.7-image | Bawaan— |
Kolomprompt | Jenisstring | PersyaratanWajib | Nilai & batasan Panjang minimum: 1 | Bawaan— |
Kolomn | Jenisinteger | PersyaratanOpsional | Nilai & batasan Minimum: 1 | Bawaan1 |
Kolomresponse_format | Jenisstring | PersyaratanOpsional | Nilai & batasan url, b64_json | Bawaan— |
Kolomstream | Jenisboolean | PersyaratanOpsional | Nilai & batasan | Bawaanfalse |
Kolomsize | Jenisstring | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
Kolompartial_images | Jenisinteger | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
Kolomimages[].image_url | Jenisstring | PersyaratanTidak didukung | Nilai & batasan Byte terdekode maksimum: 20.971.520 Jenis MIME: image/png, image/jpeg Gambar maksimum per larik: 9 Kondisi: Satu URL aktual per objek images[]. Jumlah item array berbeda dari nilai string ini. Berlaku jika: Hanya JSON images/edits; JSON images/generations tidak mengurai referensi images. | Bawaan— |
Kolomimage | Jenisfile | PersyaratanOpsional | Nilai & batasan Byte terdekode maksimum: 20.971.520 Jenis MIME: image/png, image/jpeg Berlaku jika: pembuatan dengan multipart/form-data | Bawaan— |
Kolomimage[] | Jenisfile[] | PersyaratanOpsional | Nilai & batasan Item maksimum: 9 Byte terdekode maksimum: 20.971.520 Jenis MIME: image/png, image/jpeg Berlaku jika: pembuatan dengan multipart/form-data | Bawaan— |
Kombinasi bahan masukan
Teks ke gambar · Wajib: prompt
reference_images_generation · Wajib: prompt
Parameter metode dan siklus hidup
| Parameter | Kontrak |
|---|---|
Parametermaterial_types | Kontraktext |
Parameterrequired | Kontrakmodel, prompt |
Parameteroptional_controls | Kontraknull |
Parametercontent_type | Kontrakapplication/json |
Siklus hidup: synchronous_result_then_owned_library
GET /v1/media/tasks/{task_id} · task_id aktual yang dikembalikan atau catatan pustaka media
GET /v1/media/assets/{asset_id}/content
GET /v1/media/assets
GET /v1/media/assets/{asset_id}
Struktur metode dan ID bersifat eksak; kemampuan pemasok terpisah dari penerimaan permintaan.
Paket
Tarif metode Ailoot
POST /v1/images/generations- Keluaran
- US$0,03 per gambar 1K
- Keluaran
- US$0,03 per gambar 2K
Ailoot mencadangkan perkiraan dana sebelum permintaan. Setelah hasil diterima, tagihan akhir diselesaikan berdasarkan penggunaan yang terukur. Penyelesaian tagihan streaming menggunakan catatan penggunaan akhir. Cara kerja cadangan dan penyelesaian tagihan →
Detail tarif referensi
Jadwal referensi tingkat model tidak mengubah pemilihan metode, estimasi harga, atau biaya. Biaya aktif menggunakan tarif metode Ailoot yang dipilih.
wan2.7-image
Harga menurut konfigurasi
| Konfigurasi | Kondisi penagihan | Biaya |
|---|---|---|
| Konfigurasiwan2.7-image · Konfigurasi bawaan | Kondisi penagihanKonfigurasi bawaan | Biaya Masukan · Masukan US$0,00 per pemanggilan Keluaran · Keluaran US$0,06 per pemanggilan |
Contoh permintaan
Ailoot · Gambar
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 · Gambar
Unduh setiap gambar yang dikembalikan atau simpan konten 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 gambar yang selesai; ambil setiap URL yang dikembalikan atau dekode konten Base64-nya.
Simpan setiap item data. Dekodekan setiap b64_json atau ambil data dari setiap URL bertanda tangan yang dikembalikan. Pilih ekstensi nama file berdasarkan MIME/bytes aktual.
Jika respons asli perlu diperiksa
Jika hasil pembuatan atau penyuntingan gambar perlu diperiksa, simpan operation_id/X-Client-Request-ID asli dan informasi hasil yang dikembalikan. Pulihkan hasil milik Anda yang sudah ada melalui pustaka media menggunakan nilai task_id atau asset_id aktual. Jangan mengirim ulang permintaan pembuatan/penyuntingan atau membuat URL polling dari operation_id.
Kolom respons
| Kolom | Jenis |
|---|---|
Kolomcreated | Jenisinteger |
Kolomdata[].url | Jenisstring |
Kolomdata[].b64_json | Jenisbase64 string |
Kolomusage | Jenisobject |
Kesalahan dan langkah berikutnya
| Respons | Kondisi | Langkah berikutnya |
|---|---|---|
Respons400 · invalid_request_error | KondisiBidang wajib, representasi materi, atau nilai parameter tidak valid | Langkah berikutnyaPerbaiki bidang yang ditunjukkan sebelum permintaan pembuatan baru. |
Responsserver_error | KondisiRespons yang dikembalikan menyatakan bahwa operasi atau hasil perlu diperiksa | Langkah berikutnyaSimpan ID operasi/tugas asli yang dikembalikan, header permintaan, dan respons; lanjutkan pembacaan yang didukung untuk operasi asli tersebut. Jangan kirim ulang permintaan pembuatan. |
Alias
Alias model
Ailoot wan2.7-image
Alias jalur metode
Gunakan jalur metode yang ditampilkan di atas.
ID pemanggil terkait
FAQ · wan2.7-image
- Input dan hasil apa yang tersedia?
POST /v1/images/generations·wan2.7-image:text→image- Kolom apa yang digunakan permintaan?
POST /v1/images/generations·wan2.7-image:model,prompt,n,response_format,stream,image,image[]- Batasan apa yang berlaku?
POST /v1/images/generations·wan2.7-image:n.minimum:1