GPT Image 1.5
GPT Image 1.5 tạo ảnh từ yêu cầu văn bản, chú trọng làm theo chỉ dẫn chi tiết. Có ba hình dạng khung hình, nhiều mức chất lượng và định dạng kết quả.
- Ailoot · Ảnh
POST /v1/images/generationsgpt-image-1.5 - Ailoot Ultra · Ảnh
POST /v1/images/generationsgpt-image-1.5
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.
Tạo ảnh từ yêu cầu chi tiết
GPT Image 1.5 là mô hình của OpenAI để tạo ảnh từ mô tả văn bản. Nhà sản xuất nhấn mạnh làm theo chỉ dẫn và xử lý yêu cầu chi tiết: có thể xác định nội dung cảnh, bố cục, diện mạo đối tượng và phong cách mong muốn. Kết quả của phương thức ảnh là ảnh hoàn chỉnh.
Trong Ailoot, thẻ này thuộc tạo ảnh với đầu vào văn bản. OpenAI còn mô tả xử lý ảnh nguồn, chỉnh sửa và thay đổi từng vùng. Các khả năng đó cần hỗ trợ đầu vào hình ảnh riêng và không nằm trong cách tạo từ văn bản nêu ở đây.
Trong thao tác chỉnh sửa riêng do OpenAI cung cấp, mặt nạ là định hướng: không bảo đảm kết quả khớp chính xác đường nét của mặt nạ. Thao tác đó cần hỗ trợ truyền ảnh nguồn; thẻ Ailoot hiện tại vẫn thuộc tạo ảnh với đầu vào văn bản.
Ba hình dạng khung hình và cài đặt chất lượng
Mô hình cung cấp kích thước vuông 1024x1024, ngang 1536x1024, dọc 1024x1536 và lựa chọn tự động. Không nên áp dụng kích thước tùy ý của mô hình khác cho phiên bản này.
Các mức chất lượng là low, medium, high và auto. Chọn chất lượng ảnh hưởng đến lượng xử lý và độ chi tiết kết quả. Chất lượng và kích thước là hai cài đặt khác nhau: hướng khung hình xác định không gian bố cục, còn chất lượng xác định chế độ tạo bố cục. Các mức xhigh và max chưa được công bố cho GPT Image 1.5.
Định dạng tệp và nền
Kết quả mặc định được tạo ở PNG; còn có JPEG và WebP. Với JPEG và WebP, có thể đặt mức nén. Đây là cài đặt tệp kết quả, khác với chất lượng tạo ảnh.
Nhà sản xuất cung cấp nền trong suốt, nền đục và lựa chọn tự động. Trong suốt cần PNG hoặc WebP: JPEG không giữ kênh alpha. Nền trong suốt thuận tiện khi ảnh được dùng như một đối tượng riêng trong bố cục tiếp theo. Cần xét hỗ trợ từng tham số theo phương thức đã chọn.
Chữ và bố cục cần kiểm tra
Mô hình có thể thêm chữ vào ảnh và xây dựng cảnh từ nhiều yếu tố, nhưng vị trí chính xác của chữ, đối tượng không được bảo đảm. Việc lặp lại diện mạo một nhân vật hoặc thiết kế giữa các lần tạo riêng cũng cần kiểm soát.
Ảnh phức tạp có thể được tạo lâu hơn ảnh đơn giản; theo OpenAI, một số yêu cầu phức tạp có thể mất tới hai phút. Kết quả phụ thuộc cả độ đầy đủ của mô tả nguồn lẫn kiểm tra ảnh thành phẩm: khả năng đọc chữ, vị trí chi tiết và sự phù hợp với cảnh được yêu cầu phải được đánh giá trên chính tệp.
Ailoot · Ảnh POST /v1/images/generations gpt-image-1.5
gpt-image-1.5Bắt đầu
GPT Image 1.5 tạo ảnh từ yêu cầu văn bản, chú trọng làm theo chỉ dẫn chi tiết. Có ba hình dạng khung hình, nhiều mức chất lượng và định dạng kết quả.
- Đầ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 gpt-image-1.5 | 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ườngquality | 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ườngbackground | 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ườngoutput_format | 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ườngoutput_compression | 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ườngmoderation | 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ườnginput_fidelity | 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ườngstyle | 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— |
Tổ hợp tư liệu đầu vào
Văn bản thành ảnh · 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 vào văn bản
- 0,005 US$ / 1K
- Đầu ra văn bản
- 0,01 US$ / 1K
- Đầu vào, hình ảnh
- 0,008 US$ / 1K tokens
- Đầu ra, hình ảnh
- 0,032 US$ / 1K tokens
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 →
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": "gpt-image-1.5", "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': 'gpt-image-1.5', '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": "gpt-image-1.5", "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 gpt-image-1.5
Ailoot Ultra gpt-image-1.5
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
Ailoot Ultra · Ảnh POST /v1/images/generations gpt-image-1.5
gpt-image-1.5Bắt đầu
GPT Image 1.5 tạo ảnh từ yêu cầu văn bản, chú trọng làm theo chỉ dẫn chi tiết. Có ba hình dạng khung hình, nhiều mức chất lượng và định dạng kết quả.
- Đầ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 Ultra · Ảnh POST /v1/images/generations
- Đầu vào
text- Đầu ra
image
| 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 gpt-image-1.5 | Mặc định— |
Trườngprompt | Loạistring | Yêu cầuBắt buộc | Giá trị & giới hạn Độ dài tối đa: 32.000 | Mặc định— |
Trườngsize | Loạistring | Yêu cầuKhông bắt buộc | Giá trị & giới hạn 1024x1024, 1536x1024, 1024x1536, auto | Mặc địnhauto |
Trườngbackground | Loạistring | Yêu cầuKhông bắt buộc | Giá trị & giới hạn transparent, opaque, auto | Mặc địnhauto |
Trườngmoderation | Loạistring | Yêu cầuKhông bắt buộc | Giá trị & giới hạn low, auto Điều kiện: Dùng auto để kiểm duyệt nội dung tiêu chuẩn. | 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 Tối đa: 10 | Mặc định1 |
Trườngquality | Loạistring | Yêu cầuKhông bắt buộc | Giá trị & giới hạn auto, high, medium, low | Mặc địnhauto |
Trườngoutput_compression | Loạiinteger | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Tối thiểu: 0 Tối đa: 100 Điều kiện: Áp dụng cho đầu ra JPEG và WebP; gửi giá trị số nguyên theo tài liệu. | Mặc định100 |
Trườngoutput_format | Loạistring | Yêu cầuKhông bắt buộc | Giá trị & giới hạn webp, png, jpeg | Mặc địnhpng |
Trườngstream | Loạiboolean | Yêu cầuKhông bắt buộc | Giá trị & giới hạn false Điều kiện: Tuyến này trả về một phản hồi JSON hoàn chỉnh. | Mặc địnhfalse |
Tham số phương thức và vòng đời
| Tham số | Hợp đồng |
|---|---|
Tham sốcontent_type | Hợp đồngapplication/json |
Tham sốrequired | Hợp đồngprompt, model |
Tham sốmaterial_types | Hợp đồngtext |
Tham sốoptional | Hợp đồngsize, background, moderation, n, quality, output_compression, output_format, stream |
Tham sốconditions | Hợp đồngNền trong suốt yêu cầu định dạng PNG hoặc WebP., Nén đầu ra áp dụng cho JPEG hoặc WebP., Phương thức đã chọn tạo từ văn bản. Các tùy chọn chỉnh sửa và truyền trực tuyến mà nhà sản xuất mô tả là những khả năng riêng biệt. |
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}
Bảng giá
Cách tính phí cuối cùng
Các đơn giá hiển thị dùng để ước tính chi phí trước khi tạo. Khoản phí cuối cùng được tính dựa trên chi phí ghi nhận cho lượt tạo gốc. Thời lượng đầu ra đo được và số lượng dự kiến không phải là số lượng cuối cùng dùng để tính phí.
Thông tin biểu giá không bổ sung tùy chọn yêu cầu. Các tham số được hỗ trợ nằm trong phương thức đã chọn.
- Chế độ nhanh
- Chưa chỉ định Khi chọn chế độ nhanh
- Chế độ Flex
- Chưa chỉ định Khi chọn chế độ flex
- Mức độ suy luận tối đa
- Chưa chỉ định Khi áp dụng mức điều chỉnh mặc định (default) cho mức độ suy luận tối đa
Mức phí ước tính để so sánh
Giá theo cấu hình
Đối chiếu từng khoản phí với điều kiện hiển thị. Dùng một mức phí cho mỗi nhóm cấu hình thay thế.
| Cấu hình | Biểu mức phí | Số lượng dự báo | Phí |
|---|---|---|---|
| Cấu hìnhGiá cơ sở cho token | Biểu mức phíMức phí cơ bản | Số lượng dự báo— | Phí Đầu vào · Token đầu vào · Ước tính chỉ để so sánh — / 1K token Đầu ra · Token đầu ra · Ước tính chỉ để so sánh — / 1K token Đầu vào · Đọc bộ nhớ đệm · Ước tính chỉ để so sánh — / 1K token Đầu vào · Ghi bộ nhớ đệm · Ước tính chỉ để so sánh — / 1K token Đầu vào · Ghi bộ nhớ đệm, 1 giờ · Ước tính chỉ để so sánh — / 1K token |
| Cấu hìnhChi phí tạo ước tính | Biểu mức phí— | Số lượng dự báoước tính cho một lần tạo | Phí Đầu ra · Chi phí tạo ước tính · Ước tính chỉ để so sánh $0.32768 ước tính trước khi tạo Ước tính này không phải là khoản phí bổ sung hay mức giá cố định cho lượt tạo đã hoàn tất. |
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 →
Ví dụ yêu cầu
Ailoot Ultra · Ảnh
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
export AILOOT_API_KEY
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p={'prompt': 'A cute baby sea otter', 'model': 'gpt-image-1.5', 'size': '1024x1024', 'n': 1, 'background': 'auto', 'moderation': 'auto', 'output_format': 'png'}
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
Nhận và lưu kết quả
Ailoot Ultra · Ả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ượt đọc nội dung khác
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/media/assets \
-H "Authorization: Bearer $AILOOT_API_KEY" -o owned-assets.json
# Preserve every returned asset and follow its exact signed content URL. Do not construct a signed token.
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.
Giữ lại toàn bộ phản hồi và các header, mọi đầu ra thực tế, các định danh gốc đã trả về và mọi trường usage. Khôi phục thao tác gốc mà không gửi lại yêu cầu tạo.
Nếu cần kiểm tra phản hồi gốc
Giữ lại X-Client-Request-ID đã trả về để đối soát. Chỉ truy xuất theo các giá trị task_id/asset_id thực tế đã trả về hoặc từ thư viện nội dung đa phương tiện thuộc quyền sở hữu của bạn; tuyệt đối không tạo URL tác vụ từ ID thao tác và không gửi lại yêu cầu tạo.
Trường phản hồi
| Trường | Loại |
|---|---|
Trườngcreated | Loại |
Trườngdata[].url | Loại |
Trườngdata[].b64_json | Loại |
Trườngusage | Loại |
Bí danh
Bí danh mô hình
Ailoot gpt-image-1.5
Ailoot Ultra gpt-image-1.5
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 · GPT Image 1.5
- Có những đầu vào và kết quả nào?
POST /v1/images/generations·gpt-image-1.5:text→imagePOST /v1/images/generations·gpt-image-1.5:text→image- Yêu cầu sử dụng những trường nào?
POST /v1/images/generations·gpt-image-1.5:model,prompt,n,response_format,streamPOST /v1/images/generations·gpt-image-1.5:model,prompt,size,background,moderation,n,quality,output_compression,output_format,stream- Áp dụng những giới hạn nào?
POST /v1/images/generations·gpt-image-1.5:n.minimum:1POST /v1/images/generations·gpt-image-1.5:prompt.maximum_length:32000;n.minimum:1;n.maximum:10;output_compression.minimum:0;output_compression.maximum:100