grok-imagine-image-2.0
Grok Imagine Image 2.0 tạo ảnh từ mô tả, cho phép chọn tỷ lệ, độ phân giải và chất lượng. Chính mô hình còn hỗ trợ chỉnh sửa ảnh và chuyển phong cách hình ảnh.
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 và điều chỉnh ảnh
Grok Imagine Image 2.0 nhận mô tả cảnh và tạo ảnh. Mô hình xAI còn xử lý được tư liệu hình ảnh nguồn: áp dụng thay đổi theo chỉ dẫn văn bản và tiếp tục chỉnh sửa bằng kết quả trước làm đầu vào mới. Ailoot công bố phương thức tạo ảnh từ văn bản.
Phong cách hình ảnh
Với Image 2.0, xAI mô tả ảnh chụp chân thực, anime, tranh sơn dầu và vẽ chì. Phong cách được đặt bằng lời; khi xử lý ảnh nguồn, chỉ dẫn xác định thẩm mỹ mong muốn. Thay đổi tuần tự cho phép thêm chi tiết và điều chỉnh kết quả từng bước.
Tỷ lệ, kích thước và số lượng
nđặt từ 1 đến 10 ảnh cho cùng mô tả; mặc định một ảnh.aspect_ratiochọn hình dạng khung;autođể mô hình lựa chọn.resolutionđặt 1K hoặc 2K; giá trị tiêu chuẩn là 1K.
Có định dạng vuông, ngang, dọc: 1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 2:1, 1:2. Các định dạng màn hình kéo dài gồm 19.5:9, 9:19.5, 20:9, 9:20, cùng định dạng rộng 21:9 và 5:2.
Chọn chất lượng
Image 2.0 hỗ trợ low, medium và auto. Tham số thuộc đúng phiên bản này; auto được dùng nếu không đặt chất lượng. Tại thời điểm kiểm tra, chế độ tự động chọn low khi tạo ảnh và medium khi chỉnh sửa.
Theo xAI, chế độ medium dành thêm tính toán để xử lý chi tiết ảnh. Chọn rõ low hoặc medium cố định chế độ cần thiết, còn hành vi auto phụ thuộc vào cài đặt hiện tại của nhà sản xuất.
Đầu vào và kết quả
Mô hình có đầu vào văn bản, hình ảnh và đầu ra ảnh. Trong chế độ chỉnh sửa riêng của xAI, Image 2.0 nhận tối đa năm ảnh nguồn; phương thức tạo ảnh Ailoot hiện tại sử dụng đầu vào văn bản. Kết quả có thể được truyền bằng tệp qua liên kết hoặc dạng base64.
Ailoot · Ảnh POST /v1/images/generations grok-imagine-image-2.0
grok-imagine-image-2.0Bắt đầu
Grok Imagine Image 2.0 tạo ảnh từ mô tả, cho phép chọn tỷ lệ, độ phân giải và chất lượng. Chính mô hình còn hỗ trợ chỉnh sửa ảnh và chuyển phong cách hình ảnh.
- Đầ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 grok-imagine-image-2.0 | Mặc định— |
Trườngprompt | Loạistring | Yêu cầuBắt buộc | Giá trị & giới hạ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ườngresponse_format | Loạistring | Yêu cầuKhông bắt buộc | Giá trị & giới hạn url, b64_json | Mặc địnhurl |
Trườngresolution | Loạistring | Yêu cầuKhông bắt buộc | Giá trị & giới hạn 1k, 2k | Mặc định1k |
Trườngaspect_ratio | Loạistring | Yêu cầuKhông bắt buộc | Giá trị & giới hạn auto, 1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 2:1, 1:2, 19.5:9, 9:19.5, 20:9, 9:20, 21:9, 5:2 | Mặc địnhauto |
Trườngquality | Loạistring | Yêu cầuKhông bắt buộc | Giá trị & giới hạn low, medium, auto | 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
- 0,01 US$ mỗi ảnh đầu vào
- Đầu ra
- 0,05 US$ mỗi ảnh 1.5K, chất lượng thấp
- Đầu ra
- 0,07 US$ mỗi ảnh 1.5K, chất lượng trung bình
- Đầu ra
- 0,04 US$ mỗi ảnh 1K, chất lượng thấp
- Đầu ra
- 0,06 US$ mỗi ảnh 1K, chất lượng trung bình
- Đầu ra
- 0,06 US$ mỗi ảnh 2K, chất lượng thấp
- Đầu ra
- 0,08 US$ mỗi ảnh 2K, chất lượng trung bình
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": "grok-imagine-image-2.0", "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': 'grok-imagine-image-2.0', '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": "grok-imagine-image-2.0", "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 grok-imagine-image-2.0
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 · grok-imagine-image-2.0
- Có những đầu vào và kết quả nào?
POST /v1/images/generations·grok-imagine-image-2.0:text→image- Yêu cầu sử dụng những trường nào?
POST /v1/images/generations·grok-imagine-image-2.0:model,prompt,n,response_format,resolution,aspect_ratio,quality- Áp dụng những giới hạn nào?
POST /v1/images/generations·grok-imagine-image-2.0:n.minimum:1;n.maximum:10