wan2.7-image
Mô hình tạo ảnh từ văn bản để chuẩn bị các phương án thiết kế và hình minh họa. Theo Alibaba, phiên bản này hướng tới việc tạo ảnh nhanh hơn.
Về mô hình
Mô tả này trình bày khả năng của mô hình. Đầu vào, đầu ra và tùy chọn có trên Ailoot được liệt kê bên dưới cho phương thức đã chọn.
Wan2.7-Image tạo ảnh từ yêu cầu bằng văn bản. Thẻ Ailoot hiện tại giới thiệu đúng loại đầu vào văn bản này và kết quả dạng ảnh. Theo Alibaba, phiên bản này hướng tới việc tạo các phương án nhanh hơn. Đặc tả của nhà sản xuất còn có chỉnh sửa, kết hợp ảnh tham chiếu và thay đổi cục bộ; các cách này cần hỗ trợ đầu vào ảnh riêng, chưa được cung cấp qua phương thức hiện tại của thẻ.
Các chế độ được Alibaba mô tả
Với chế độ dùng ảnh tham chiếu, Alibaba cho phép tối đa chín ảnh nguồn trong một yêu cầu. Chúng là cơ sở cho diện mạo đối tượng, bố cục và chi tiết. Mô hình có thể kết hợp nhiều tư liệu thành cảnh mới hoặc thay đổi ảnh nguồn trong khi giữ đối tượng chính. Để chỉnh sửa từng phần, có thể chỉ rõ các vùng: trên một ảnh được phép xác định tối đa hai vùng hình chữ nhật.
Trong đặc tả Alibaba, chế độ thông thường tạo từ một đến bốn kết quả. Chuỗi liên tiếp cho phép yêu cầu tối đa 12 ảnh liên kết bằng câu chuyện hoặc những đặc điểm chung của nhân vật. Đây là giới hạn trên của chuỗi: mô hình tự xác định số khung hình cần thiết và có thể trả về ít hơn. Yêu cầu và tư liệu nguồn giúp giữ mạch truyện chung.
Có chế độ suy luận cho việc tạo ảnh thông thường từ văn bản, không dùng ảnh tham chiếu hoặc chuỗi liên tiếp. Ở chế độ này, mô hình phân tích mô tả phức tạp kỹ hơn trước khi tạo ảnh. Khi chỉnh sửa dựa trên ảnh và trong chuỗi liên tiếp, chế độ này không được áp dụng. Có thể đặt bảng màu gồm 3–10 màu ngoài các chuỗi liên tiếp.
Đầu vào và kết quả
Trong các chế độ dùng ảnh nguồn của nhà sản xuất, các định dạng được hỗ trợ là JPEG, JPG, PNG không có độ trong suốt, BMP và WEBP. Mỗi chiều có thể từ 240 đến 8000 pixel, dung lượng tệp tối đa 20 MB, tỷ lệ khung hình từ 1:8 đến 8:1.
Yêu cầu bằng văn bản hỗ trợ tiếng Trung và tiếng Anh, giới hạn 5000 ký tự; phần vượt giới hạn bị cắt bỏ. Phiên bản này không có mô tả phủ định hoặc tính năng mở rộng yêu cầu bổ sung.
Định dạng đầu ra là PNG, độ phân giải tối đa ở mức 2K. Ký hiệu này chỉ tổng diện tích pixel, không phải độ dài cạnh tối đa cố định; hình dạng có thể được chọn trong phạm vi từ 1:8 đến 8:1. Khi chỉnh sửa với độ phân giải đặt sẵn, kết quả giữ tỷ lệ khung hình của ảnh tham chiếu cuối cùng. Cùng một hạt giống ngẫu nhiên giúp tạo các phương án tương tự, nhưng không bảo đảm trùng khớp hoàn toàn.
Ailoot · Ảnh POST /v1/images/generations wan2.7-image
wan2.7-imageBắt đầu
Mô hình tạo ảnh từ văn bản để chuẩn bị các phương án thiết kế và hình minh họa. Theo Alibaba, phiên bản này hướng tới việc tạo ảnh nhanh hơn.
- Đầu vào được chấp nhận
- Văn bản
- Kết quả
- Ảnh
Có trên Ailoot · đầu vào & phương thức
Ailoot · Ảnh POST /v1/images/generations
- Đầu vào
text- Đầu ra
image- Định dạng đầu ra
- Tệp ảnh
| Trường | Loại | Yêu cầu | Giá trị & giới hạn | Mặc định |
|---|---|---|---|---|
Trườngmodel | Loạistring | Yêu cầuBắt buộc | Giá trị & giới hạn wan2.7-image | Mặc định— |
Trườngprompt | Loạistring | Yêu cầuBắt buộc | Giá trị & giới hạn Độ dài tối thiểu: 1 | Mặc định— |
Trườngn | Loạiinteger | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Tối thiểu: 1 | Mặc định1 |
Trườngresponse_format | Loạistring | Yêu cầuKhông bắt buộc | Giá trị & giới hạn url, b64_json | Mặc định— |
Trườngstream | Loạiboolean | Yêu cầuKhông bắt buộc | Giá trị & giới hạn | Mặc địnhfalse |
Trườngsize | Loạistring | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Tùy thuộc vào mô hình | Mặc định— |
Trườngpartial_images | Loạiinteger | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Tùy thuộc vào mô hình | Mặc định— |
Trườngimages[].image_url | Loạistring | Yêu cầuKhông hỗ trợ | Giá trị & giới hạn Số byte tối đa sau giải mã: 20.971.520 Loại MIME: image/png, image/jpeg Số ảnh tối đa mỗi mảng: 9 Điều kiện: Một URL thực tế cho mỗi đối tượng images[]. Số phần tử mảng khác với nút lá dạng chuỗi này. Áp dụng khi: Chỉ JSON images/edits; JSON images/generations không phân tích các tham chiếu images. | Mặc định— |
Trườngimage | Loạifile | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Số byte tối đa sau giải mã: 20.971.520 Loại MIME: image/png, image/jpeg Áp dụng khi: tạo bằng multipart/form-data | Mặc định— |
Trườngimage[] | Loạifile[] | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Số mục tối đa: 9 Số byte tối đa sau giải mã: 20.971.520 Loại MIME: image/png, image/jpeg Áp dụng khi: tạo bằng multipart/form-data | Mặc định— |
Tổ hợp tư liệu đầu vào
Văn bản thành ảnh · Bắt buộc: prompt
reference_images_generation · Bắt buộc: prompt
Tham số phương thức và vòng đời
| Tham số | Hợp đồng |
|---|---|
Tham sốmaterial_types | Hợp đồngtext |
Tham sốrequired | Hợp đồngmodel, prompt |
Tham sốoptional_controls | Hợp đồngnull |
Tham sốcontent_type | Hợp đồngapplication/json |
Vòng đời: synchronous_result_then_owned_library
GET /v1/media/tasks/{task_id} · Giá trị task_id thực tế đã trả về hoặc bản ghi trong thư viện nội dung đa phương tiện
GET /v1/media/assets/{asset_id}/content
GET /v1/media/assets
GET /v1/media/assets/{asset_id}
Cấu trúc phương thức và ID là chính xác; khả năng của nhà cung cấp tách biệt với việc cho phép tiếp nhận yêu cầu.
Bảng giá
Mức phí phương thức Ailoot
POST /v1/images/generations- Đầu ra
- 0,03 US$ mỗi ảnh 1K
- Đầu ra
- 0,03 US$ mỗi ảnh 2K
Ailoot tạm giữ một khoản ước tính trước yêu cầu. Sau khi có kết quả, phí cuối cùng được quyết toán theo mức sử dụng đo được. Việc quyết toán khi truyền luồng dùng bản ghi mức sử dụng cuối cùng. Cách hoạt động của cơ chế tạm giữ và quyết toán →
Chi tiết giá cước tham chiếu
Biểu tham chiếu cấp mô hình không thay đổi việc chọn phương thức, báo giá hoặc khoản phí. Khoản phí đang áp dụng dùng mức phí phương thức Ailoot đã chọn.
wan2.7-image
Giá theo cấu hình
| Cấu hình | Điều kiện tính phí | Phí |
|---|---|---|
| Cấu hìnhwan2.7-image · Cấu hình mặc định | Điều kiện tính phíCấu hình mặc định | Phí Đầu vào · Đầu vào 0,00 US$ mỗi lần gọi Đầu ra · Đầu ra 0,06 US$ mỗi lần gọi |
Ví dụ yêu cầu
Ailoot · Ảnh
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");
Nhận và lưu kết quả
Ailoot · Ảnh
Tải xuống từng ảnh trả về hoặc lưu nội dung Base64 của ảnh
GET /v1/media/tasks/{task_id}GET /v1/media/assets/{asset_id}/contentGET /v1/media/assetsGET /v1/media/assets/{asset_id}
Lưu tất cả kết quả đã hoàn tất
Lưu mọi ảnh đã hoàn tất; truy xuất từng URL trả về hoặc giải mã nội dung Base64 của ảnh.
Lưu mọi phần tử dữ liệu. Giải mã từng b64_json hoặc tải xuống từ mọi URL có chữ ký đã trả về. Chọn phần mở rộng tệp dựa trên MIME/nội dung byte thực tế.
Nếu cần kiểm tra phản hồi gốc
Nếu kết quả tạo hoặc chỉnh sửa ảnh cần được kiểm tra, giữ lại operation_id/X-Client-Request-ID gốc và thông tin kết quả đã trả về. Khôi phục các kết quả hiện có thuộc quyền sở hữu của bạn qua thư viện nội dung đa phương tiện bằng các giá trị task_id hoặc asset_id thực tế. Không gửi lại yêu cầu tạo/chỉnh sửa ảnh hoặc tạo URL truy vấn trạng thái từ operation_id.
Trường phản hồi
| Trường | Loại |
|---|---|
Trườngcreated | Loạiinteger |
Trườngdata[].url | Loạistring |
Trườngdata[].b64_json | Loạibase64 string |
Trườngusage | Loạiobject |
Lỗi và bước tiếp theo
| Phản hồi | Điều kiện | Bước tiếp theo |
|---|---|---|
Phản hồi400 · invalid_request_error | Điều kiệnTrường bắt buộc, cách biểu diễn tài liệu hoặc giá trị tham số không hợp lệ | Bước tiếp theoSửa các trường được chỉ ra trước khi gửi yêu cầu tạo mới. |
Phản hồiserver_error | Điều kiệnPhản hồi trả về cho biết thao tác hoặc kết quả cần được kiểm tra | Bước tiếp theoGiữ lại ID thao tác/tác vụ gốc đã trả về, các header của yêu cầu và toàn bộ phản hồi; tiếp tục truy xuất thao tác gốc đó bằng các phương thức được hỗ trợ. Không gửi lại yêu cầu tạo. |
Bí danh
Bí danh mô hình
Ailoot wan2.7-image
Bí danh đường dẫn phương thức
Dùng các đường dẫn phương thức hiển thị ở trên.
ID gọi liên quan
FAQ · wan2.7-image
- Có những đầu vào và kết quả nào?
POST /v1/images/generations·wan2.7-image:text→image- Yêu cầu sử dụng những trường nào?
POST /v1/images/generations·wan2.7-image:model,prompt,n,response_format,stream,image,image[]- Áp dụng những giới hạn nào?
POST /v1/images/generations·wan2.7-image:n.minimum:1