{
  "aboutHtml": "<p>Grok Imagine Image 2.0 là mô hình tạo và chỉnh sửa hình ảnh của xAI. Mô hình nhận mô tả bằng văn bản, hoặc mô tả kèm ảnh nguồn, rồi trả về hình ảnh kết quả. Cấu hình 2.0 được nhà sản xuất nêu tên bao gồm tạo cảnh, thay đổi ảnh có sẵn, kết hợp chủ thể từ ảnh tham chiếu và chuyển đổi phong cách thị giác. Hãy bắt đầu bằng việc xác định bạn cần bố cục mới hay một thay đổi cụ thể đối với tư liệu đang có.</p><h4>Tạo hình ảnh từ bản mô tả</h4><p>Mô tả chủ thể chính, bối cảnh, bố cục, ánh sáng và cách thể hiện hình ảnh. Xác định điều người xem cần chú ý đầu tiên và nơi hình ảnh sẽ được sử dụng. Với ý tưởng sản phẩm, một bản mô tả minh hoạ có thể nêu đèn bàn bằng gốm trên bàn đá sáng màu, ánh sáng cửa sổ dịu, góc cận để thấy chất liệu và khoảng trống dành cho tiêu đề được thêm riêng. Với tranh minh hoạ, hãy nêu nhân vật, hành động và thẩm mỹ mong muốn, thay vì kỳ vọng một từ chỉ phong cách có thể xác định toàn bộ cảnh.</p><p>Nhà sản xuất công bố một yêu cầu tạo ảnh có thể trả về từ một đến mười ảnh, mặc định là một ảnh. Nhiều kết quả từ cùng bản mô tả cung cấp các phương án để đánh giá; chúng không bảo đảm chủ thể giống hệt nhau trong mọi biến thể. Kiểm tra chủ thể, bố cục và các chi tiết quan trọng, rồi giữ lại phiên bản phù hợp nhất với bản mô tả. Lưu bản mô tả cùng biến thể đã chọn để những lần chỉnh sửa sau dùng đúng bố cục mong muốn.</p><h4>Bố cục, độ phân giải và chất lượng</h4><p>Hướng dẫn tạo ảnh công bố khả năng tự động chọn tỷ lệ khung hình hoặc chỉ định tỷ lệ cụ thể. Các lựa chọn được liệt kê gồm 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 và 5:2. Chọn hình dạng theo vị trí sử dụng: vuông cho ô nội dung gọn, dọc cho bố cục đứng hoặc ngang cho cảnh rộng. Nêu rõ chủ thể dễ bị ảnh hưởng khi cắt ảnh và khoảng trống bố cục cần có, thay vì chỉ dựa vào tỷ lệ khung hình.</p><p>Các mức độ phân giải tạo ảnh được công bố là 1k và 2k, mặc định là 1k. Chất lượng là một tuỳ chọn riêng, gồm low, medium và auto. Trong hướng dẫn hiện hành của xAI, auto là mặc định và dùng low khi tạo ảnh, medium khi chỉnh sửa; chỉ định rõ low hoặc medium sẽ cố định lựa chọn đó. Vì vậy, độ phân giải và chất lượng là hai tuỳ chọn khác nhau. Nêu những chi tiết hình ảnh quan trọng và kiểm tra chúng trong ảnh trả về, thay vì coi một trong hai tuỳ chọn là bảo đảm chữ viết, hình học hoặc chủ thể được giữ nguyên chính xác.</p><h4>Chỉnh sửa và chuyển phong cách hình ảnh</h4><p>Cung cấp ảnh cần thay đổi và mô tả thay đổi mong muốn dựa trên nội dung nhìn thấy trong ảnh. Một chỉnh sửa có trọng tâm có thể yêu cầu thay bức tường tối bằng bề mặt vữa sáng, đồng thời giữ cách bố trí nội thất, góc máy và ánh sáng ấm. Nếu mục đích là chuyển phong cách, hãy nêu cách thể hiện mong muốn: nhà sản xuất minh hoạ các phong cách nhiếp ảnh, anime, sơn dầu, màu nước, pop art và phác thảo bút chì. Xác định yếu tố nào cần giữ nguyên diện mạo và yếu tố nào có thể thay đổi theo phong cách mới.</p><p>Quy trình chỉnh sửa của nhà sản xuất chấp nhận tham chiếu ảnh nguồn, dữ liệu ảnh đã mã hoá hoặc mã định danh tệp. Với tham chiếu đã lưu, dùng ảnh PNG, JPEG hoặc WebP đã tải lên hoàn tất. Hướng dẫn cũng công bố chỉnh sửa nối tiếp: lấy kết quả của lần chỉnh sửa trước làm đầu vào cho lần tiếp theo. Cách này có thể biến một bố cục cơ sở thành kết quả cụ thể hơn qua lần thay nội thất rồi điều chỉnh ánh sáng. Giữ ảnh gốc và ảnh trung gian đã chọn gắn với từng bản mô tả để có thể kiểm tra lần tinh chỉnh sau theo đúng bố cục dự định.</p><h4>Kết hợp nhiều ảnh tham chiếu</h4><p>Hướng dẫn dùng nhiều ảnh hiện hành cho phép tối đa năm ảnh nguồn trong một lần chỉnh sửa. Nhắc đến chúng theo thứ tự cung cấp và giao cho mỗi ảnh một vai trò rõ ràng, chẳng hạn lấy chủ thể từ ảnh thứ nhất và môi trường từ ảnh thứ hai. Tỷ lệ đầu ra mặc định theo ảnh đầu vào thứ nhất, nhưng có thể ghi đè bằng tỷ lệ được chỉ định rõ. Với ý tưởng sản phẩm trong phòng, mô tả vị trí, kích thước và sự tiếp xúc của sản phẩm với các bề mặt trong phòng, rồi yêu cầu giữ các chi tiết nhận diện sản phẩm. Kiểm tra cách các nguồn được kết hợp, thay vì mặc định rằng mọi yếu tố đều được sao chép nguyên vẹn.</p><h4>Nhận và lưu giữ hình ảnh</h4><p>Nhà sản xuất mặc định trả về địa chỉ ảnh tạm thời và cũng công bố đầu ra dạng ảnh đã mã hoá. Hãy sớm lưu ảnh thực tế khi cần dùng làm tài nguyên. Quy trình trả kết quả sau tuỳ chọn tách việc xác nhận nhận yêu cầu khỏi việc hoàn tất: mã định danh yêu cầu đi kèm trạng thái pending, done hoặc failed; kết quả trả sau dùng dạng phản hồi địa chỉ và có thời gian lưu giữ được công bố là 24 giờ. Yêu cầu đã gửi hoặc trạng thái pending chưa phải hình ảnh hoàn chỉnh. Lưu ảnh đã hoàn tất cùng bản mô tả và các thiết lập đã chọn để dùng lại sau này.</p><p>Một tài nguyên cuối cùng hữu ích là hình ảnh phù hợp với cảnh, bố cục hoặc yêu cầu chỉnh sửa đã xác định. Kiểm tra toàn bộ bố cục và những chi tiết nhỏ, đặc biệt là chủ thể nguồn, ranh giới vật thể, tỷ lệ và mọi chữ viết có ý nghĩa. Khi làm việc lặp lại, thay đổi chỉ dẫn gắn với vấn đề nhìn thấy và dùng kết quả đã chọn làm ảnh tham chiếu tiếp theo. Nêu cụ thể thay đổi mong muốn và yêu cầu giữ nguyên để có thể đánh giá mỗi kết quả theo một mục đích sáng tạo rõ ràng.</p>",
  "aboutText": "Grok Imagine Image 2.0 là mô hình tạo và chỉnh sửa hình ảnh của xAI. Mô hình nhận mô tả bằng văn bản, hoặc mô tả kèm ảnh nguồn, rồi trả về hình ảnh kết quả. Cấu hình 2.0 được nhà sản xuất nêu tên bao gồm tạo cảnh, thay đổi ảnh có sẵn, kết hợp chủ thể từ ảnh tham chiếu và chuyển đổi phong cách thị giác. Hãy bắt đầu bằng việc xác định bạn cần bố cục mới hay một thay đổi cụ thể đối với tư liệu đang có.\n\n### Tạo hình ảnh từ bản mô tả\n\nMô tả chủ thể chính, bối cảnh, bố cục, ánh sáng và cách thể hiện hình ảnh. Xác định điều người xem cần chú ý đầu tiên và nơi hình ảnh sẽ được sử dụng. Với ý tưởng sản phẩm, một bản mô tả minh hoạ có thể nêu đèn bàn bằng gốm trên bàn đá sáng màu, ánh sáng cửa sổ dịu, góc cận để thấy chất liệu và khoảng trống dành cho tiêu đề được thêm riêng. Với tranh minh hoạ, hãy nêu nhân vật, hành động và thẩm mỹ mong muốn, thay vì kỳ vọng một từ chỉ phong cách có thể xác định toàn bộ cảnh.\n\nNhà sản xuất công bố một yêu cầu tạo ảnh có thể trả về từ một đến mười ảnh, mặc định là một ảnh. Nhiều kết quả từ cùng bản mô tả cung cấp các phương án để đánh giá; chúng không bảo đảm chủ thể giống hệt nhau trong mọi biến thể. Kiểm tra chủ thể, bố cục và các chi tiết quan trọng, rồi giữ lại phiên bản phù hợp nhất với bản mô tả. Lưu bản mô tả cùng biến thể đã chọn để những lần chỉnh sửa sau dùng đúng bố cục mong muốn.\n\n### Bố cục, độ phân giải và chất lượng\n\nHướng dẫn tạo ảnh công bố khả năng tự động chọn tỷ lệ khung hình hoặc chỉ định tỷ lệ cụ thể. Các lựa chọn được liệt kê gồm 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 và 5:2. Chọn hình dạng theo vị trí sử dụng: vuông cho ô nội dung gọn, dọc cho bố cục đứng hoặc ngang cho cảnh rộng. Nêu rõ chủ thể dễ bị ảnh hưởng khi cắt ảnh và khoảng trống bố cục cần có, thay vì chỉ dựa vào tỷ lệ khung hình.\n\nCác mức độ phân giải tạo ảnh được công bố là 1k và 2k, mặc định là 1k. Chất lượng là một tuỳ chọn riêng, gồm low, medium và auto. Trong hướng dẫn hiện hành của xAI, auto là mặc định và dùng low khi tạo ảnh, medium khi chỉnh sửa; chỉ định rõ low hoặc medium sẽ cố định lựa chọn đó. Vì vậy, độ phân giải và chất lượng là hai tuỳ chọn khác nhau. Nêu những chi tiết hình ảnh quan trọng và kiểm tra chúng trong ảnh trả về, thay vì coi một trong hai tuỳ chọn là bảo đảm chữ viết, hình học hoặc chủ thể được giữ nguyên chính xác.\n\n### Chỉnh sửa và chuyển phong cách hình ảnh\n\nCung cấp ảnh cần thay đổi và mô tả thay đổi mong muốn dựa trên nội dung nhìn thấy trong ảnh. Một chỉnh sửa có trọng tâm có thể yêu cầu thay bức tường tối bằng bề mặt vữa sáng, đồng thời giữ cách bố trí nội thất, góc máy và ánh sáng ấm. Nếu mục đích là chuyển phong cách, hãy nêu cách thể hiện mong muốn: nhà sản xuất minh hoạ các phong cách nhiếp ảnh, anime, sơn dầu, màu nước, pop art và phác thảo bút chì. Xác định yếu tố nào cần giữ nguyên diện mạo và yếu tố nào có thể thay đổi theo phong cách mới.\n\nQuy trình chỉnh sửa của nhà sản xuất chấp nhận tham chiếu ảnh nguồn, dữ liệu ảnh đã mã hoá hoặc mã định danh tệp. Với tham chiếu đã lưu, dùng ảnh PNG, JPEG hoặc WebP đã tải lên hoàn tất. Hướng dẫn cũng công bố chỉnh sửa nối tiếp: lấy kết quả của lần chỉnh sửa trước làm đầu vào cho lần tiếp theo. Cách này có thể biến một bố cục cơ sở thành kết quả cụ thể hơn qua lần thay nội thất rồi điều chỉnh ánh sáng. Giữ ảnh gốc và ảnh trung gian đã chọn gắn với từng bản mô tả để có thể kiểm tra lần tinh chỉnh sau theo đúng bố cục dự định.\n\n### Kết hợp nhiều ảnh tham chiếu\n\nHướng dẫn dùng nhiều ảnh hiện hành cho phép tối đa năm ảnh nguồn trong một lần chỉnh sửa. Nhắc đến chúng theo thứ tự cung cấp và giao cho mỗi ảnh một vai trò rõ ràng, chẳng hạn lấy chủ thể từ ảnh thứ nhất và môi trường từ ảnh thứ hai. Tỷ lệ đầu ra mặc định theo ảnh đầu vào thứ nhất, nhưng có thể ghi đè bằng tỷ lệ được chỉ định rõ. Với ý tưởng sản phẩm trong phòng, mô tả vị trí, kích thước và sự tiếp xúc của sản phẩm với các bề mặt trong phòng, rồi yêu cầu giữ các chi tiết nhận diện sản phẩm. Kiểm tra cách các nguồn được kết hợp, thay vì mặc định rằng mọi yếu tố đều được sao chép nguyên vẹn.\n\n### Nhận và lưu giữ hình ảnh\n\nNhà sản xuất mặc định trả về địa chỉ ảnh tạm thời và cũng công bố đầu ra dạng ảnh đã mã hoá. Hãy sớm lưu ảnh thực tế khi cần dùng làm tài nguyên. Quy trình trả kết quả sau tuỳ chọn tách việc xác nhận nhận yêu cầu khỏi việc hoàn tất: mã định danh yêu cầu đi kèm trạng thái pending, done hoặc failed; kết quả trả sau dùng dạng phản hồi địa chỉ và có thời gian lưu giữ được công bố là 24 giờ. Yêu cầu đã gửi hoặc trạng thái pending chưa phải hình ảnh hoàn chỉnh. Lưu ảnh đã hoàn tất cùng bản mô tả và các thiết lập đã chọn để dùng lại sau này.\n\nMột tài nguyên cuối cùng hữu ích là hình ảnh phù hợp với cảnh, bố cục hoặc yêu cầu chỉnh sửa đã xác định. Kiểm tra toàn bộ bố cục và những chi tiết nhỏ, đặc biệt là chủ thể nguồn, ranh giới vật thể, tỷ lệ và mọi chữ viết có ý nghĩa. Khi làm việc lặp lại, thay đổi chỉ dẫn gắn với vấn đề nhìn thấy và dùng kết quả đã chọn làm ảnh tham chiếu tiếp theo. Nêu cụ thể thay đổi mong muốn và yêu cầu giữ nguyên để có thể đánh giá mỗi kết quả theo một mục đích sáng tạo rõ ràng.\n\n",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "2d5b85d542c1b90c3a09e4f03e7cbb58b80ec7ee229f72193d9fe819447a73cc",
    "module_sha256": "ee9dc1c50b1e6a8fb7fa062030fcb4646b9aaaeb08be513b723a5a92a7290f06",
    "raw_model_unchanged": true,
    "schema": "ailoot-native-model-editorial-v1"
  },
  "locale": "vi",
  "methods": [
    {
      "html": "<div class=\"sheet-head\"><span class=\"mav\" aria-hidden=\"true\">x</span><h2 id=\"sheet-title\">xAI: Grok Imagine Image 2.0</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"Đóng\">×</button></div><div class=\"idline\"><span>xAI /</span><code>x-ai/grok-imagine-image-2.0</code><button type=\"button\" id=\"copy-id\">Sao chép ID</button></div><nav class=\"card-jump-nav\" aria-label=\"Các phần của thẻ mô hình\"><button type=\"button\" data-card-jump=\"overview\">Bắt đầu</button><button type=\"button\" data-card-jump=\"methods\">Đầu vào &amp; phương thức</button><button type=\"button\" data-card-jump=\"pricing\">Bảng giá</button><button type=\"button\" data-card-jump=\"examples\">Ví dụ</button><button type=\"button\" data-card-jump=\"results\">Kết quả</button><button type=\"button\" data-card-jump=\"aliases\">Bí danh</button></nav><div class=\"card-method-tabs\" role=\"tablist\" aria-label=\"Phương thức API\"><button type=\"button\" role=\"tab\" tabindex=\"0\" aria-controls=\"card-method-content\" aria-selected=\"true\" id=\"card-method-tab-0\" data-card-method=\"Ultra|images|/v1/images/generations|x-ai%2Fgrok-imagine-image-2.0\">Ảnh</button></div><div id=\"card-method-content\" role=\"tabpanel\" aria-labelledby=\"card-method-tab-0\"><section class=\"card-section\" data-card-section=\"overview\"><h3 tabindex=\"-1\">Bắt đầu</h3><p class=\"mdesc-full\">Grok Imagine Image 2.0 tạo hình ảnh từ bản mô tả bằng văn bản và chỉnh sửa ảnh có sẵn bằng chỉ dẫn ngôn ngữ tự nhiên. xAI công bố các tuỳ chọn chất lượng, độ phân giải và bố cục, cùng khả năng dùng nhiều ảnh tham chiếu, chuyển phong cách và tinh chỉnh qua từng lượt.</p><dl class=\"card-io\" data-card-io><div><dt>Đầu vào được chấp nhận</dt><dd>Văn bản · Ảnh</dd></div><div><dt>Kết quả</dt><dd>Ảnh</dd></div></dl><details class=\"card-about\"><summary>Về mô hình</summary><p class=\"note-s\" data-model-method-boundary>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.</p><div class=\"mabout\" id=\"m-about\"><p>Grok Imagine Image 2.0 là mô hình tạo và chỉnh sửa hình ảnh của xAI. Mô hình nhận mô tả bằng văn bản, hoặc mô tả kèm ảnh nguồn, rồi trả về hình ảnh kết quả. Cấu hình 2.0 được nhà sản xuất nêu tên bao gồm tạo cảnh, thay đổi ảnh có sẵn, kết hợp chủ thể từ ảnh tham chiếu và chuyển đổi phong cách thị giác. Hãy bắt đầu bằng việc xác định bạn cần bố cục mới hay một thay đổi cụ thể đối với tư liệu đang có.</p><h4>Tạo hình ảnh từ bản mô tả</h4><p>Mô tả chủ thể chính, bối cảnh, bố cục, ánh sáng và cách thể hiện hình ảnh. Xác định điều người xem cần chú ý đầu tiên và nơi hình ảnh sẽ được sử dụng. Với ý tưởng sản phẩm, một bản mô tả minh hoạ có thể nêu đèn bàn bằng gốm trên bàn đá sáng màu, ánh sáng cửa sổ dịu, góc cận để thấy chất liệu và khoảng trống dành cho tiêu đề được thêm riêng. Với tranh minh hoạ, hãy nêu nhân vật, hành động và thẩm mỹ mong muốn, thay vì kỳ vọng một từ chỉ phong cách có thể xác định toàn bộ cảnh.</p><p>Nhà sản xuất công bố một yêu cầu tạo ảnh có thể trả về từ một đến mười ảnh, mặc định là một ảnh. Nhiều kết quả từ cùng bản mô tả cung cấp các phương án để đánh giá; chúng không bảo đảm chủ thể giống hệt nhau trong mọi biến thể. Kiểm tra chủ thể, bố cục và các chi tiết quan trọng, rồi giữ lại phiên bản phù hợp nhất với bản mô tả. Lưu bản mô tả cùng biến thể đã chọn để những lần chỉnh sửa sau dùng đúng bố cục mong muốn.</p><h4>Bố cục, độ phân giải và chất lượng</h4><p>Hướng dẫn tạo ảnh công bố khả năng tự động chọn tỷ lệ khung hình hoặc chỉ định tỷ lệ cụ thể. Các lựa chọn được liệt kê gồm 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 và 5:2. Chọn hình dạng theo vị trí sử dụng: vuông cho ô nội dung gọn, dọc cho bố cục đứng hoặc ngang cho cảnh rộng. Nêu rõ chủ thể dễ bị ảnh hưởng khi cắt ảnh và khoảng trống bố cục cần có, thay vì chỉ dựa vào tỷ lệ khung hình.</p><p>Các mức độ phân giải tạo ảnh được công bố là 1k và 2k, mặc định là 1k. Chất lượng là một tuỳ chọn riêng, gồm low, medium và auto. Trong hướng dẫn hiện hành của xAI, auto là mặc định và dùng low khi tạo ảnh, medium khi chỉnh sửa; chỉ định rõ low hoặc medium sẽ cố định lựa chọn đó. Vì vậy, độ phân giải và chất lượng là hai tuỳ chọn khác nhau. Nêu những chi tiết hình ảnh quan trọng và kiểm tra chúng trong ảnh trả về, thay vì coi một trong hai tuỳ chọn là bảo đảm chữ viết, hình học hoặc chủ thể được giữ nguyên chính xác.</p><h4>Chỉnh sửa và chuyển phong cách hình ảnh</h4><p>Cung cấp ảnh cần thay đổi và mô tả thay đổi mong muốn dựa trên nội dung nhìn thấy trong ảnh. Một chỉnh sửa có trọng tâm có thể yêu cầu thay bức tường tối bằng bề mặt vữa sáng, đồng thời giữ cách bố trí nội thất, góc máy và ánh sáng ấm. Nếu mục đích là chuyển phong cách, hãy nêu cách thể hiện mong muốn: nhà sản xuất minh hoạ các phong cách nhiếp ảnh, anime, sơn dầu, màu nước, pop art và phác thảo bút chì. Xác định yếu tố nào cần giữ nguyên diện mạo và yếu tố nào có thể thay đổi theo phong cách mới.</p><p>Quy trình chỉnh sửa của nhà sản xuất chấp nhận tham chiếu ảnh nguồn, dữ liệu ảnh đã mã hoá hoặc mã định danh tệp. Với tham chiếu đã lưu, dùng ảnh PNG, JPEG hoặc WebP đã tải lên hoàn tất. Hướng dẫn cũng công bố chỉnh sửa nối tiếp: lấy kết quả của lần chỉnh sửa trước làm đầu vào cho lần tiếp theo. Cách này có thể biến một bố cục cơ sở thành kết quả cụ thể hơn qua lần thay nội thất rồi điều chỉnh ánh sáng. Giữ ảnh gốc và ảnh trung gian đã chọn gắn với từng bản mô tả để có thể kiểm tra lần tinh chỉnh sau theo đúng bố cục dự định.</p><h4>Kết hợp nhiều ảnh tham chiếu</h4><p>Hướng dẫn dùng nhiều ảnh hiện hành cho phép tối đa năm ảnh nguồn trong một lần chỉnh sửa. Nhắc đến chúng theo thứ tự cung cấp và giao cho mỗi ảnh một vai trò rõ ràng, chẳng hạn lấy chủ thể từ ảnh thứ nhất và môi trường từ ảnh thứ hai. Tỷ lệ đầu ra mặc định theo ảnh đầu vào thứ nhất, nhưng có thể ghi đè bằng tỷ lệ được chỉ định rõ. Với ý tưởng sản phẩm trong phòng, mô tả vị trí, kích thước và sự tiếp xúc của sản phẩm với các bề mặt trong phòng, rồi yêu cầu giữ các chi tiết nhận diện sản phẩm. Kiểm tra cách các nguồn được kết hợp, thay vì mặc định rằng mọi yếu tố đều được sao chép nguyên vẹn.</p><h4>Nhận và lưu giữ hình ảnh</h4><p>Nhà sản xuất mặc định trả về địa chỉ ảnh tạm thời và cũng công bố đầu ra dạng ảnh đã mã hoá. Hãy sớm lưu ảnh thực tế khi cần dùng làm tài nguyên. Quy trình trả kết quả sau tuỳ chọn tách việc xác nhận nhận yêu cầu khỏi việc hoàn tất: mã định danh yêu cầu đi kèm trạng thái pending, done hoặc failed; kết quả trả sau dùng dạng phản hồi địa chỉ và có thời gian lưu giữ được công bố là 24 giờ. Yêu cầu đã gửi hoặc trạng thái pending chưa phải hình ảnh hoàn chỉnh. Lưu ảnh đã hoàn tất cùng bản mô tả và các thiết lập đã chọn để dùng lại sau này.</p><p>Một tài nguyên cuối cùng hữu ích là hình ảnh phù hợp với cảnh, bố cục hoặc yêu cầu chỉnh sửa đã xác định. Kiểm tra toàn bộ bố cục và những chi tiết nhỏ, đặc biệt là chủ thể nguồn, ranh giới vật thể, tỷ lệ và mọi chữ viết có ý nghĩa. Khi làm việc lặp lại, thay đổi chỉ dẫn gắn với vấn đề nhìn thấy và dùng kết quả đã chọn làm ảnh tham chiếu tiếp theo. Nêu cụ thể thay đổi mong muốn và yêu cầu giữ nguyên để có thể đánh giá mỗi kết quả theo một mục đích sáng tạo rõ ràng.</p></div></details></section><section class=\"card-section\" data-card-section=\"methods\"><h3 tabindex=\"-1\">Có trên Ailoot · đầu vào &amp; phương thức</h3><details class=\"card-method\" open><summary><b>Ailoot Ultra · Ảnh</b> <code>POST /v1/images/generations</code></summary><dl class=\"method-capabilities\"><div><dt>Đầu vào</dt><dd><code>text</code>, <code>image</code></dd></div><div><dt>Đầu ra</dt><dd><code>image</code></dd></div></dl><div class=\"tw\" data-card-parameters data-typed-parameters><table><thead><tr><th>Trường</th><th>Loại</th><th>Yêu cầu</th><th>Giá trị &amp; giới hạn</th><th>Mặc định</th></tr></thead><tbody><tr><th data-cell-label=\"Trường\" scope=\"row\"><span class=\"card-cell-label\">Trường</span><code class=\"card-field-name\">model</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span><code>string</code></td><td data-cell-label=\"Yêu cầu\"><span class=\"card-cell-label\">Yêu cầu</span>Bắt buộc</td><td data-cell-label=\"Giá trị &amp; giới hạn\"><span class=\"card-cell-label\">Giá trị &amp; giới hạn</span><div>x-ai/grok-imagine-image-2.0</div></td><td data-cell-label=\"Mặc định\" data-default=\"unspecified\"><span class=\"card-cell-label\">Mặc định</span>—</td></tr><tr><th data-cell-label=\"Trường\" scope=\"row\"><span class=\"card-cell-label\">Trường</span><code class=\"card-field-name\">prompt</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span><code>string</code></td><td data-cell-label=\"Yêu cầu\"><span class=\"card-cell-label\">Yêu cầu</span>Bắt buộc</td><td data-cell-label=\"Giá trị &amp; giới hạn\"><span class=\"card-cell-label\">Giá trị &amp; giới hạn</span><div>Độ dài tối thiểu: 1</div></td><td data-cell-label=\"Mặc định\" data-default=\"unspecified\"><span class=\"card-cell-label\">Mặc định</span>—</td></tr><tr><th data-cell-label=\"Trường\" scope=\"row\"><span class=\"card-cell-label\">Trường</span><code class=\"card-field-name\">resolution</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span><code>string</code></td><td data-cell-label=\"Yêu cầu\"><span class=\"card-cell-label\">Yêu cầu</span>Không bắt buộc</td><td data-cell-label=\"Giá trị &amp; giới hạn\"><span class=\"card-cell-label\">Giá trị &amp; giới hạn</span><div>1K, 2K</div></td><td data-cell-label=\"Mặc định\" data-default=\"unspecified\"><span class=\"card-cell-label\">Mặc định</span>—</td></tr><tr><th data-cell-label=\"Trường\" scope=\"row\"><span class=\"card-cell-label\">Trường</span><code class=\"card-field-name\">aspect_ratio</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span><code>string</code></td><td data-cell-label=\"Yêu cầu\"><span class=\"card-cell-label\">Yêu cầu</span>Không bắt buộc</td><td data-cell-label=\"Giá trị &amp; giới hạn\"><span class=\"card-cell-label\">Giá trị &amp; giới hạn</span><div>1:1, 3:4, 4:3, 9:16, 16:9, 2:3, 3:2, 9:19.5, 19.5:9, 9:20, 20:9, 1:2, 2:1, auto</div></td><td data-cell-label=\"Mặc định\" data-default=\"unspecified\"><span class=\"card-cell-label\">Mặc định</span>—</td></tr><tr><th data-cell-label=\"Trường\" scope=\"row\"><span class=\"card-cell-label\">Trường</span><code class=\"card-field-name\">quality</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span><code>string</code></td><td data-cell-label=\"Yêu cầu\"><span class=\"card-cell-label\">Yêu cầu</span>Không bắt buộc</td><td data-cell-label=\"Giá trị &amp; giới hạn\"><span class=\"card-cell-label\">Giá trị &amp; giới hạn</span><div>low, medium</div></td><td data-cell-label=\"Mặc định\" data-default=\"unspecified\"><span class=\"card-cell-label\">Mặc định</span>—</td></tr><tr><th data-cell-label=\"Trường\" scope=\"row\"><span class=\"card-cell-label\">Trường</span><code class=\"card-field-name\">n</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span><code>integer</code></td><td data-cell-label=\"Yêu cầu\"><span class=\"card-cell-label\">Yêu cầu</span>Không bắt buộc</td><td data-cell-label=\"Giá trị &amp; giới hạn\"><span class=\"card-cell-label\">Giá trị &amp; giới hạn</span><div>Tối thiểu: 1</div><div>Tối đa: 1</div></td><td data-cell-label=\"Mặc định\" data-default=\"unspecified\"><span class=\"card-cell-label\">Mặc định</span>—</td></tr><tr><th data-cell-label=\"Trường\" scope=\"row\"><span class=\"card-cell-label\">Trường</span><code class=\"card-field-name\">input_references</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span><code>array</code></td><td data-cell-label=\"Yêu cầu\"><span class=\"card-cell-label\">Yêu cầu</span>Không bắt buộc</td><td data-cell-label=\"Giá trị &amp; giới hạn\"><span class=\"card-cell-label\">Giá trị &amp; giới hạn</span><div>Số mục tối thiểu: 0</div><div>Số mục tối đa: 3</div></td><td data-cell-label=\"Mặc định\" data-default=\"unspecified\"><span class=\"card-cell-label\">Mặc định</span>—</td></tr><tr><th data-cell-label=\"Trường\" scope=\"row\"><span class=\"card-cell-label\">Trường</span><code class=\"card-field-name\">provider</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span><code>object</code></td><td data-cell-label=\"Yêu cầu\"><span class=\"card-cell-label\">Yêu cầu</span>Không bắt buộc</td><td data-cell-label=\"Giá trị &amp; giới hạn\"><span class=\"card-cell-label\">Giá trị &amp; giới hạn</span></td><td data-cell-label=\"Mặc định\" data-default=\"unspecified\"><span class=\"card-cell-label\">Mặc định</span>—</td></tr></tbody></table></div><details class=\"note-s\" data-method-contract><summary>Tham số phương thức và vòng đời</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>Tham số</th><th>Hợp đồng</th></tr></thead><tbody><tr><th data-cell-label=\"Tham số\" scope=\"row\"><span class=\"card-cell-label\">Tham số</span><code>content_type</code></th><td data-cell-label=\"Hợp đồng\"><span class=\"card-cell-label\">Hợp đồng</span>application/json</td></tr><tr><th data-cell-label=\"Tham số\" scope=\"row\"><span class=\"card-cell-label\">Tham số</span><code>required</code></th><td data-cell-label=\"Hợp đồng\"><span class=\"card-cell-label\">Hợp đồng</span>model, prompt</td></tr><tr><th data-cell-label=\"Tham số\" scope=\"row\"><span class=\"card-cell-label\">Tham số</span><code>material_types</code></th><td data-cell-label=\"Hợp đồng\"><span class=\"card-cell-label\">Hợp đồng</span>text, image</td></tr></tbody></table></div><p>Vòng đời: <code>synchronous_result_then_owned_library</code></p><p class=\"note-s\"><code>GET /v1/media/tasks/{task_id}</code> · 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</p><p class=\"note-s\"><code>GET /v1/media/assets/{asset_id}/content</code></p><p class=\"note-s\"><code>GET /v1/media/assets</code></p><p class=\"note-s\"><code>GET /v1/media/assets/{asset_id}</code></p></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">Bảng giá</h3><div class=\"card-result-process\" data-billing-basis><h5>Cách tính phí cuối cùng</h5><p class=\"note-s\">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í.</p></div><div data-native-semantic-method=\"v1\" data-tariff-reference-only><p class=\"note-s\" data-rate-support-note>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.</p><dl data-price-conditions><dt>Chế độ nhanh</dt><dd>Chưa chỉ định <span class=\"note-s\">Khi chọn chế độ nhanh</span></dd><dt>Chế độ Flex</dt><dd>Chưa chỉ định <span class=\"note-s\">Khi chọn chế độ flex</span></dd><dt>Mức độ suy luận tối đa</dt><dd>Chưa chỉ định <span class=\"note-s\">Khi áp dụng mức điều chỉnh mặc định (default) cho mức độ suy luận tối đa</span></dd></dl></div><div data-declared-tariff-pricing><h4>Mức phí ước tính để so sánh</h4><h4>Giá theo cấu hình</h4><p class=\"note-s\">Đố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ế.</p><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>Cấu hình</th><th>Biểu mức phí</th><th>Số lượng dự báo</th><th>Đơn vị tính phí</th><th>Phí</th></tr></thead><tbody><tr><th data-cell-label=\"Cấu hình\" scope=\"row\"><span class=\"card-cell-label\">Cấu hình</span>Giá cơ sở cho token</th><td data-cell-label=\"Biểu mức phí\"><span class=\"card-cell-label\">Biểu mức phí</span>Mức phí cơ bản</td><td data-cell-label=\"Số lượng dự báo\"><span class=\"card-cell-label\">Số lượng dự báo</span>—</td><td data-cell-label=\"Đơn vị tính phí\"><span class=\"card-cell-label\">Đơn vị tính phí</span>—</td><td data-cell-label=\"Phí\"><span class=\"card-cell-label\">Phí</span><div><span>Đầu vào · Token đầu vào · Ước tính chỉ để so sánh</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Đầu ra · Token đầu ra · Ước tính chỉ để so sánh</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Đầu vào · Đọc bộ nhớ đệm · Ước tính chỉ để so sánh</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Đầu vào · Ghi bộ nhớ đệm · Ước tính chỉ để so sánh</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Đầu vào · Ghi bộ nhớ đệm, 1 giờ · Ước tính chỉ để so sánh</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div></td></tr><tr><th data-cell-label=\"Cấu hình\" scope=\"row\"><span class=\"card-cell-label\">Cấu hình</span>ảnh đầu vào</th><td data-cell-label=\"Biểu mức phí\"><span class=\"card-cell-label\">Biểu mức phí</span>—</td><td data-cell-label=\"Số lượng dự báo\"><span class=\"card-cell-label\">Số lượng dự báo</span>—</td><td data-cell-label=\"Đơn vị tính phí\"><span class=\"card-cell-label\">Đơn vị tính phí</span>mỗi ảnh đầu vào</td><td data-cell-label=\"Phí\"><span class=\"card-cell-label\">Phí</span><div><span>Đầu vào · ảnh đầu vào · Ước tính chỉ để so sánh</span> <b>$0.02</b> <span class=\"price-unit\">mỗi ảnh đầu vào</span></div></td></tr><tr><th data-cell-label=\"Cấu hình\" scope=\"row\"><span class=\"card-cell-label\">Cấu hình</span>Chi phí tạo ước tính</th><td data-cell-label=\"Biểu mức phí\"><span class=\"card-cell-label\">Biểu mức phí</span>—</td><td data-cell-label=\"Số lượng dự báo\"><span class=\"card-cell-label\">Số lượng dự báo</span>ước tính cho một lần tạo</td><td data-cell-label=\"Đơn vị tính phí\"><span class=\"card-cell-label\">Đơn vị tính phí</span>—</td><td data-cell-label=\"Phí\"><span class=\"card-cell-label\">Phí</span><div><span>Đầu ra · Chi phí tạo ước tính · Ước tính chỉ để so sánh</span> <b>$0.08</b> <span class=\"price-unit\">ước tính trước khi tạo</span></div><p class=\"note-s\">Ướ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.</p></td></tr></tbody></table></div></div><p class=\"note-s\">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. <a href=\"/docs/vi/billing/reserve/\">Cách hoạt động của cơ chế tạm giữ và quyết toán →</a></p></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">Ví dụ yêu cầu</h3><h4>Ailoot Ultra · Ảnh</h4><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Các phiên bản mã\"><button class=\"cg-tab\" id=\"model-code-2716-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-2716-panel-0\" aria-selected=\"true\" tabindex=\"0\">curl</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Sao chép mã\"><svg class=\"cp\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><rect x=\"5.25\" y=\"5.25\" width=\"8.5\" height=\"8.5\" rx=\"1.75\"/><path d=\"M10.75 5.25V3.5a1.25 1.25 0 0 0-1.25-1.25H3.5A1.25 1.25 0 0 0 2.25 3.5v6a1.25 1.25 0 0 0 1.25 1.25h1.75\"/></svg><svg class=\"ok\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><path d=\"m3 8.5 3.25 3.25L13 5\"/></svg></button></div></div><div class=\"cg-body\"><div class=\"cg-pane\" id=\"model-code-2716-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-2716-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\nexport AILOOT_API_KEY\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nimport json,os\nfrom pathlib import Path\np={&#39;model&#39;: &#39;x-ai/grok-imagine-image-2.0&#39;, &#39;prompt&#39;: &#39;a red panda astronaut floating in space, studio lighting&#39;}\n\nPath(&quot;request.json&quot;).write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/images/generations \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -H &#39;Content-Type: application/json&#39; \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - &lt;&lt;&#39;PY_RESULT&#39;\nimport base64, json, os, subprocess\nfrom pathlib import Path\nfrom urllib.parse import urlsplit, urljoin\n\ndef save_images(items):\n    if not items: raise SystemExit(&quot;No completed images; retain the full response&quot;)\n    for index, item in enumerate(items):\n        encoded=item.get(&quot;b64_json&quot;)\n        uri=item.get(&quot;url&quot;, &quot;&quot;)\n        if not encoded and uri.startswith(&quot;data:image/&quot;):\n            header, separator, encoded=uri.partition(&quot;,&quot;)\n            if not separator or &quot;;base64&quot; not in header: raise SystemExit(&quot;Unsupported image data URI&quot;)\n        if encoded:\n            raw=base64.b64decode(encoded,validate=True)\n        elif uri:\n            uri=urljoin(&quot;https://api.ailoot.ai&quot;,uri)\n            parsed=urlsplit(uri)\n            if parsed.scheme!=&quot;https&quot; or not parsed.netloc or parsed.username or parsed.password:\n                raise SystemExit(&quot;Invalid returned image URL&quot;)\n            owned=parsed.netloc==&quot;api.ailoot.ai&quot; and parsed.path.startswith(&quot;/v1/media/assets/&quot;) and parsed.path.endswith(&quot;/content&quot;)\n            args=[&quot;curl&quot;,&quot;--fail-with-body&quot;,&quot;--silent&quot;,&quot;--show-error&quot;,uri]\n            if owned: args += [&quot;-H&quot;,&quot;Authorization: Bearer &quot;+os.environ[&quot;AILOOT_API_KEY&quot;]]\n            temporary=Path(f&quot;image-{index}.bin&quot;)\n            subprocess.run(args+[&quot;-o&quot;,str(temporary)],check=True)\n            raw=temporary.read_bytes()\n            temporary.unlink()\n        else: raise SystemExit(&quot;Image has neither bytes nor URL&quot;)\n        if not raw: raise SystemExit(&quot;Empty image result&quot;)\n        ext=&quot;png&quot; if raw.startswith(b&quot;\\x89PNG&quot;) else &quot;jpg&quot; if raw.startswith(b&quot;\\xff\\xd8&quot;) else &quot;webp&quot; if raw[:4]==b&quot;RIFF&quot; and raw[8:12]==b&quot;WEBP&quot; else &quot;svg&quot; if raw.lstrip().startswith((b&quot;&lt;svg&quot;,b&quot;&lt;?xml&quot;)) else &quot;bin&quot;\n        Path(f&quot;image-{index}.{ext}&quot;).write_bytes(raw)\n    print(&quot;Every returned image saved; complete response metadata retained&quot;)\nsave_images(json.loads(Path(&quot;result.json&quot;).read_text())[&quot;data&quot;])\nPY_RESULT\n</code></pre></div></div></div></section><section class=\"card-section\" data-card-section=\"results\"><h3 tabindex=\"-1\">Nhận và lưu kết quả</h3><h4>Ailoot Ultra · Ảnh</h4><p class=\"note-s\">Tải xuống từng ảnh trả về hoặc lưu nội dung Base64 của ảnh</p><ul class=\"card-result-paths\"><li><code>GET /v1/media/tasks/{task_id}</code></li><li><code>GET /v1/media/assets/{asset_id}/content</code></li><li><code>GET /v1/media/assets</code></li><li><code>GET /v1/media/assets/{asset_id}</code></li></ul><details class=\"card-about\"><summary>Lượt đọc nội dung khác</summary><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Các phiên bản mã\"><button class=\"cg-tab\" id=\"model-code-2717-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-2717-panel-0\" aria-selected=\"true\" tabindex=\"0\">Đọc tài nguyên hiện có thuộc về bạn</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Sao chép mã\"><svg class=\"cp\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><rect x=\"5.25\" y=\"5.25\" width=\"8.5\" height=\"8.5\" rx=\"1.75\"/><path d=\"M10.75 5.25V3.5a1.25 1.25 0 0 0-1.25-1.25H3.5A1.25 1.25 0 0 0 2.25 3.5v6a1.25 1.25 0 0 0 1.25 1.25h1.75\"/></svg><svg class=\"ok\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><path d=\"m3 8.5 3.25 3.25L13 5\"/></svg></button></div></div><div class=\"cg-body\"><div class=\"cg-pane\" id=\"model-code-2717-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-2717-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/media/assets \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -o owned-assets.json\n# Preserve every returned asset and follow its exact signed content URL. Do not construct a signed token.\n</code></pre></div></div></div></details><div class=\"card-result-process\" data-all-results><h5>Lưu tất cả kết quả đã hoàn tất</h5><p class=\"note-s\">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.</p><p class=\"note-s\">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.</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>Nếu cần kiểm tra phản hồi gốc</h5><p class=\"note-s\">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.</p></div><details class=\"card-about\" data-output-fields><summary>Trường phản hồi</summary><div class=\"tw\" data-card-table=\"output\"><table><thead><tr><th>Trường</th><th>Loại</th></tr></thead><tbody><tr><th data-cell-label=\"Trường\" scope=\"row\"><span class=\"card-cell-label\">Trường</span><code class=\"card-field-name\">created</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span></td></tr><tr><th data-cell-label=\"Trường\" scope=\"row\"><span class=\"card-cell-label\">Trường</span><code class=\"card-field-name\">data[].url</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span></td></tr><tr><th data-cell-label=\"Trường\" scope=\"row\"><span class=\"card-cell-label\">Trường</span><code class=\"card-field-name\">data[].b64_json</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span></td></tr><tr><th data-cell-label=\"Trường\" scope=\"row\"><span class=\"card-cell-label\">Trường</span><code class=\"card-field-name\">usage</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span></td></tr></tbody></table></div></details></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">Bí danh</h3><h4>Bí danh mô hình</h4><p class=\"note-s\"><span data-model-alias-route=\"Ultra\"><b>Ailoot Ultra</b> <a href=\"#m=x-ai%2Fgrok-imagine-image-2.0&amp;route=Ultra&amp;caller=x-ai%2Fgrok-imagine-image-2.0&amp;fmt=images\"><code>x-ai/grok-imagine-image-2.0</code></a></span></p><h4>Bí danh đường dẫn phương thức</h4><p class=\"note-s\"><code>/v1/images</code></p><h4>ID gọi liên quan</h4><p class=\"note-s\"><a href=\"#m=x-ai%2Fgrok-imagine-image-2.0&amp;route=Ultra&amp;caller=x-ai%2Fgrok-imagine-image-2.0&amp;fmt=images\"><code>x-ai/grok-imagine-image-2.0</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "x-ai/grok-imagine-image-2.0",
        "fmt": "images",
        "http": "POST",
        "path": "/v1/images/generations",
        "request_model_id": "x-ai/grok-imagine-image-2.0",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|images|/v1/images/generations|x-ai%2Fgrok-imagine-image-2.0",
      "ordinal": 0,
      "rawMethod": {
        "available": null,
        "billing_basis": {
          "basis": "original_invoice_usd",
          "description": "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í.",
          "forecast_quantity_is_estimate": true,
          "physical_output_is_billable_quantity": false,
          "version": "original_invoice_usd_v1"
        },
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "all_results": "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.",
            "lifecycle": {
              "assets": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets"
                },
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}"
                }
              ],
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}/content",
                  "url_source": "exact returned signed URL; never construct token"
                }
              ],
              "mode": "synchronous_result_then_owned_library",
              "operation_id_is_not_task_id": true,
              "status": [
                {
                  "http": "GET",
                  "id_source": "actual returned task_id or media library record",
                  "path": "/v1/media/tasks/{task_id}"
                }
              ],
              "unknown": "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."
            },
            "outputs": {
              "all_results": "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.",
              "family": "image",
              "fields": [
                {
                  "description": null,
                  "name": "created",
                  "type": null
                },
                {
                  "description": null,
                  "name": "data[].url",
                  "type": null
                },
                {
                  "description": null,
                  "name": "data[].b64_json",
                  "type": null
                },
                {
                  "description": null,
                  "name": "usage",
                  "type": null
                }
              ]
            },
            "parameters": [
              {
                "enum": [
                  "x-ai/grok-imagine-image-2.0"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "min_length": 1,
                "name": "prompt",
                "required": true,
                "type": "string"
              },
              {
                "enum": [
                  "1K",
                  "2K"
                ],
                "enum_known": true,
                "name": "resolution",
                "required": false,
                "type": "string"
              },
              {
                "enum": [
                  "1:1",
                  "3:4",
                  "4:3",
                  "9:16",
                  "16:9",
                  "2:3",
                  "3:2",
                  "9:19.5",
                  "19.5:9",
                  "9:20",
                  "20:9",
                  "1:2",
                  "2:1",
                  "auto"
                ],
                "enum_known": true,
                "name": "aspect_ratio",
                "required": false,
                "type": "string"
              },
              {
                "enum": [
                  "low",
                  "medium"
                ],
                "enum_known": true,
                "name": "quality",
                "required": false,
                "type": "string"
              },
              {
                "maximum": 1,
                "minimum": 1,
                "name": "n",
                "required": false,
                "type": "integer"
              },
              {
                "items": {
                  "properties": {
                    "image_url": {
                      "properties": {
                        "url": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "url"
                      ],
                      "type": "object"
                    },
                    "type": {
                      "const": "image_url"
                    }
                  },
                  "required": [
                    "type",
                    "image_url"
                  ],
                  "type": "object"
                },
                "maximum_items": 3,
                "minimum_items": 0,
                "name": "input_references",
                "required": false,
                "type": "array"
              },
              {
                "name": "provider",
                "required": false,
                "type": "object"
              }
            ],
            "request_schema": {
              "properties": {
                "aspect_ratio": {
                  "enum": [
                    "1:1",
                    "3:4",
                    "4:3",
                    "9:16",
                    "16:9",
                    "2:3",
                    "3:2",
                    "9:19.5",
                    "19.5:9",
                    "9:20",
                    "20:9",
                    "1:2",
                    "2:1",
                    "auto"
                  ],
                  "type": "string"
                },
                "input_references": {
                  "items": {
                    "properties": {
                      "image_url": {
                        "properties": {
                          "url": {
                            "type": "string"
                          }
                        },
                        "required": [
                          "url"
                        ],
                        "type": "object"
                      },
                      "type": {
                        "const": "image_url"
                      }
                    },
                    "required": [
                      "type",
                      "image_url"
                    ],
                    "type": "object"
                  },
                  "maxItems": 3,
                  "minItems": 0,
                  "type": "array"
                },
                "model": {
                  "enum": [
                    "x-ai/grok-imagine-image-2.0"
                  ],
                  "type": "string"
                },
                "n": {
                  "maximum": 1,
                  "minimum": 1,
                  "type": "integer"
                },
                "prompt": {
                  "minLength": 1,
                  "type": "string"
                },
                "provider": {
                  "description": "Exact image provider preferences from the documented image request schema.",
                  "type": "object"
                },
                "quality": {
                  "enum": [
                    "low",
                    "medium"
                  ],
                  "type": "string"
                },
                "resolution": {
                  "enum": [
                    "1K",
                    "2K"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "model",
                "prompt"
              ],
              "type": "object"
            },
            "schema_template": {
              "actual_file_preparation_required": false,
              "body": {
                "model": "x-ai/grok-imagine-image-2.0",
                "prompt": "a red panda astronaut floating in space, studio lighting"
              },
              "content_type": "application/json"
            }
          },
          "input": {
            "content_type": "application/json",
            "material_types": [
              "text",
              "image"
            ],
            "required": [
              "model",
              "prompt"
            ]
          },
          "lifecycle": {
            "assets": [
              {
                "http": "GET",
                "path": "/v1/media/assets"
              },
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}"
              }
            ],
            "content": [
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "url_source": "exact returned signed URL; never construct token"
              }
            ],
            "mode": "synchronous_result_then_owned_library",
            "operation_id_is_not_task_id": true,
            "status": [
              {
                "http": "GET",
                "id_source": "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",
                "path": "/v1/media/tasks/{task_id}"
              }
            ],
            "unknown": "Keep the returned X-Client-Request-ID for reconciliation. Read only actual returned task_id/asset_id values or the owned media library; never build a task URL from the operation ID and never resubmit creation."
          },
          "method": {
            "http": "POST",
            "path": "/v1/images/generations"
          },
          "output": {
            "all_results": "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.",
            "family": "image",
            "fields": [
              {
                "description": null,
                "name": "created",
                "type": null
              },
              {
                "description": null,
                "name": "data[].url",
                "type": null
              },
              {
                "description": null,
                "name": "data[].b64_json",
                "type": null
              },
              {
                "description": null,
                "name": "usage",
                "type": null
              }
            ]
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quoted_unit": "per input image"
            },
            "label": "input image",
            "units": [
              {
                "amount": "0.02",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "image_input",
                "label": "input image",
                "native_amount_usd_per_unit": "0.02",
                "native_quantity": 1,
                "public_unit_label": "per input image",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "image_input"
              }
            ]
          },
          {
            "basis": "Ướ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.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Chi phí tạo ước tính",
            "units": [
              {
                "amount": "0.08",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "forecast_usd",
                "label": "Estimated generation cost",
                "native_amount_usd_per_unit": "0.08",
                "native_quantity": 1,
                "public_unit_label": "estimate before generation",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "request_estimate"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\nexport AILOOT_API_KEY\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np={'model': 'x-ai/grok-imagine-image-2.0', 'prompt': 'a red panda astronaut floating in space, studio lighting'}\n\nPath(\"request.json\").write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/images/generations \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - <<'PY_RESULT'\nimport base64, json, os, subprocess\nfrom pathlib import Path\nfrom urllib.parse import urlsplit, urljoin\n\ndef save_images(items):\n    if not items: raise SystemExit(\"No completed images; retain the full response\")\n    for index, item in enumerate(items):\n        encoded=item.get(\"b64_json\")\n        uri=item.get(\"url\", \"\")\n        if not encoded and uri.startswith(\"data:image/\"):\n            header, separator, encoded=uri.partition(\",\")\n            if not separator or \";base64\" not in header: raise SystemExit(\"Unsupported image data URI\")\n        if encoded:\n            raw=base64.b64decode(encoded,validate=True)\n        elif uri:\n            uri=urljoin(\"https://api.ailoot.ai\",uri)\n            parsed=urlsplit(uri)\n            if parsed.scheme!=\"https\" or not parsed.netloc or parsed.username or parsed.password:\n                raise SystemExit(\"Invalid returned image URL\")\n            owned=parsed.netloc==\"api.ailoot.ai\" and parsed.path.startswith(\"/v1/media/assets/\") and parsed.path.endswith(\"/content\")\n            args=[\"curl\",\"--fail-with-body\",\"--silent\",\"--show-error\",uri]\n            if owned: args += [\"-H\",\"Authorization: Bearer \"+os.environ[\"AILOOT_API_KEY\"]]\n            temporary=Path(f\"image-{index}.bin\")\n            subprocess.run(args+[\"-o\",str(temporary)],check=True)\n            raw=temporary.read_bytes()\n            temporary.unlink()\n        else: raise SystemExit(\"Image has neither bytes nor URL\")\n        if not raw: raise SystemExit(\"Empty image result\")\n        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\"\n        Path(f\"image-{index}.{ext}\").write_bytes(raw)\n    print(\"Every returned image saved; complete response metadata retained\")\nsave_images(json.loads(Path(\"result.json\").read_text())[\"data\"])\nPY_RESULT\n",
            "label": "curl · exact creation/save all outputs",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/media/assets \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -o owned-assets.json\n# Preserve every returned asset and follow its exact signed content URL. Do not construct a signed token.\n",
            "label": "Read existing owned assets",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "images",
        "hints": [
          "Use the exact caller model ID and documented input representation.",
          "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again."
        ],
        "http": "POST",
        "in": null,
        "input": [
          "text",
          "image"
        ],
        "label": "Ảnh",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [
          "/v1/images"
        ],
        "native_endpoint": "images",
        "out": null,
        "output": [
          "image"
        ],
        "path": "/v1/images/generations",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          }
        ],
        "pricing": {
          "billing_mode": "original_invoice_usd",
          "image_input_price": null,
          "image_output_price": null
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quoted_unit": "per input image"
            },
            "label": "input image",
            "units": [
              {
                "amount": "0.02",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "image_input",
                "label": "input image",
                "native_amount_usd_per_unit": "0.02",
                "native_quantity": 1,
                "public_unit_label": "per input image",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "image_input"
              }
            ]
          },
          {
            "basis": "This estimate is not an additional charge or a fixed rate for the completed generation.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Estimated generation cost",
            "units": [
              {
                "amount": "0.08",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "forecast_usd",
                "label": "Estimated generation cost",
                "native_amount_usd_per_unit": "0.08",
                "native_quantity": 1,
                "public_unit_label": "estimate before generation",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "request_estimate"
              }
            ]
          }
        ],
        "request_model_id": "x-ai/grok-imagine-image-2.0",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/media/tasks/{task_id}"
        ],
        "tiers": [],
        "units": [
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          },
          {
            "amount": "0.02",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "image_input",
            "label": "input image",
            "native_amount_usd_per_unit": "0.02",
            "native_quantity": 1,
            "public_unit_label": "per input image",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "image_input"
          },
          {
            "amount": "0.08",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "forecast_usd",
            "label": "Estimated generation cost",
            "native_amount_usd_per_unit": "0.08",
            "native_quantity": 1,
            "public_unit_label": "estimate before generation",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "request_estimate"
          }
        ]
      }
    }
  ],
  "model_id": "x-ai/grok-imagine-image-2.0",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "b70a8999d6a9140b2ee90a2a6de1e900ca8f2b0cc9e54629462eb908bdc039b3",
    "input_html_sha256": "4d4c71463f361bf2526ed109f9fab22c26938e4d4284c0fa845beb360ce3db5e",
    "private_audit_sha256": "a22dc15eb21cfd2b37732bad79e0986f97d98c8661aaf87c197fcbda9808e887",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/vi/x-ai-grok-imagine-image-2-0/",
    "description": "Grok Imagine Image 2.0 tạo hình ảnh từ bản mô tả bằng văn bản và chỉnh sửa ảnh có sẵn bằng chỉ dẫn ngôn ngữ tự nhiên. xAI công bố các tuỳ chọn chất lượng, độ phân giải và bố cục, cùng khả năng dùng nhiều ảnh tham chiếu, chuyển phong cách và tinh chỉnh qua từng lượt.",
    "locale": "vi",
    "md_url": "https://ailoot.ai/models/vi/x-ai-grok-imagine-image-2-0/index.md",
    "title": "xAI: Grok Imagine Image 2.0 — Ailoot",
    "url": "https://ailoot.ai/models/vi/x-ai-grok-imagine-image-2-0/"
  },
  "rawModel": {
    "about": "Grok Imagine Image 2.0 là mô hình tạo và chỉnh sửa hình ảnh của xAI. Mô hình nhận mô tả bằng văn bản, hoặc mô tả kèm ảnh nguồn, rồi trả về hình ảnh kết quả. Cấu hình 2.0 được nhà sản xuất nêu tên bao gồm tạo cảnh, thay đổi ảnh có sẵn, kết hợp chủ thể từ ảnh tham chiếu và chuyển đổi phong cách thị giác. Hãy bắt đầu bằng việc xác định bạn cần bố cục mới hay một thay đổi cụ thể đối với tư liệu đang có.\n\n### Tạo hình ảnh từ bản mô tả\n\nMô tả chủ thể chính, bối cảnh, bố cục, ánh sáng và cách thể hiện hình ảnh. Xác định điều người xem cần chú ý đầu tiên và nơi hình ảnh sẽ được sử dụng. Với ý tưởng sản phẩm, một bản mô tả minh hoạ có thể nêu đèn bàn bằng gốm trên bàn đá sáng màu, ánh sáng cửa sổ dịu, góc cận để thấy chất liệu và khoảng trống dành cho tiêu đề được thêm riêng. Với tranh minh hoạ, hãy nêu nhân vật, hành động và thẩm mỹ mong muốn, thay vì kỳ vọng một từ chỉ phong cách có thể xác định toàn bộ cảnh.\n\nNhà sản xuất công bố một yêu cầu tạo ảnh có thể trả về từ một đến mười ảnh, mặc định là một ảnh. Nhiều kết quả từ cùng bản mô tả cung cấp các phương án để đánh giá; chúng không bảo đảm chủ thể giống hệt nhau trong mọi biến thể. Kiểm tra chủ thể, bố cục và các chi tiết quan trọng, rồi giữ lại phiên bản phù hợp nhất với bản mô tả. Lưu bản mô tả cùng biến thể đã chọn để những lần chỉnh sửa sau dùng đúng bố cục mong muốn.\n\n### Bố cục, độ phân giải và chất lượng\n\nHướng dẫn tạo ảnh công bố khả năng tự động chọn tỷ lệ khung hình hoặc chỉ định tỷ lệ cụ thể. Các lựa chọn được liệt kê gồm 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 và 5:2. Chọn hình dạng theo vị trí sử dụng: vuông cho ô nội dung gọn, dọc cho bố cục đứng hoặc ngang cho cảnh rộng. Nêu rõ chủ thể dễ bị ảnh hưởng khi cắt ảnh và khoảng trống bố cục cần có, thay vì chỉ dựa vào tỷ lệ khung hình.\n\nCác mức độ phân giải tạo ảnh được công bố là 1k và 2k, mặc định là 1k. Chất lượng là một tuỳ chọn riêng, gồm low, medium và auto. Trong hướng dẫn hiện hành của xAI, auto là mặc định và dùng low khi tạo ảnh, medium khi chỉnh sửa; chỉ định rõ low hoặc medium sẽ cố định lựa chọn đó. Vì vậy, độ phân giải và chất lượng là hai tuỳ chọn khác nhau. Nêu những chi tiết hình ảnh quan trọng và kiểm tra chúng trong ảnh trả về, thay vì coi một trong hai tuỳ chọn là bảo đảm chữ viết, hình học hoặc chủ thể được giữ nguyên chính xác.\n\n### Chỉnh sửa và chuyển phong cách hình ảnh\n\nCung cấp ảnh cần thay đổi và mô tả thay đổi mong muốn dựa trên nội dung nhìn thấy trong ảnh. Một chỉnh sửa có trọng tâm có thể yêu cầu thay bức tường tối bằng bề mặt vữa sáng, đồng thời giữ cách bố trí nội thất, góc máy và ánh sáng ấm. Nếu mục đích là chuyển phong cách, hãy nêu cách thể hiện mong muốn: nhà sản xuất minh hoạ các phong cách nhiếp ảnh, anime, sơn dầu, màu nước, pop art và phác thảo bút chì. Xác định yếu tố nào cần giữ nguyên diện mạo và yếu tố nào có thể thay đổi theo phong cách mới.\n\nQuy trình chỉnh sửa của nhà sản xuất chấp nhận tham chiếu ảnh nguồn, dữ liệu ảnh đã mã hoá hoặc mã định danh tệp. Với tham chiếu đã lưu, dùng ảnh PNG, JPEG hoặc WebP đã tải lên hoàn tất. Hướng dẫn cũng công bố chỉnh sửa nối tiếp: lấy kết quả của lần chỉnh sửa trước làm đầu vào cho lần tiếp theo. Cách này có thể biến một bố cục cơ sở thành kết quả cụ thể hơn qua lần thay nội thất rồi điều chỉnh ánh sáng. Giữ ảnh gốc và ảnh trung gian đã chọn gắn với từng bản mô tả để có thể kiểm tra lần tinh chỉnh sau theo đúng bố cục dự định.\n\n### Kết hợp nhiều ảnh tham chiếu\n\nHướng dẫn dùng nhiều ảnh hiện hành cho phép tối đa năm ảnh nguồn trong một lần chỉnh sửa. Nhắc đến chúng theo thứ tự cung cấp và giao cho mỗi ảnh một vai trò rõ ràng, chẳng hạn lấy chủ thể từ ảnh thứ nhất và môi trường từ ảnh thứ hai. Tỷ lệ đầu ra mặc định theo ảnh đầu vào thứ nhất, nhưng có thể ghi đè bằng tỷ lệ được chỉ định rõ. Với ý tưởng sản phẩm trong phòng, mô tả vị trí, kích thước và sự tiếp xúc của sản phẩm với các bề mặt trong phòng, rồi yêu cầu giữ các chi tiết nhận diện sản phẩm. Kiểm tra cách các nguồn được kết hợp, thay vì mặc định rằng mọi yếu tố đều được sao chép nguyên vẹn.\n\n### Nhận và lưu giữ hình ảnh\n\nNhà sản xuất mặc định trả về địa chỉ ảnh tạm thời và cũng công bố đầu ra dạng ảnh đã mã hoá. Hãy sớm lưu ảnh thực tế khi cần dùng làm tài nguyên. Quy trình trả kết quả sau tuỳ chọn tách việc xác nhận nhận yêu cầu khỏi việc hoàn tất: mã định danh yêu cầu đi kèm trạng thái pending, done hoặc failed; kết quả trả sau dùng dạng phản hồi địa chỉ và có thời gian lưu giữ được công bố là 24 giờ. Yêu cầu đã gửi hoặc trạng thái pending chưa phải hình ảnh hoàn chỉnh. Lưu ảnh đã hoàn tất cùng bản mô tả và các thiết lập đã chọn để dùng lại sau này.\n\nMột tài nguyên cuối cùng hữu ích là hình ảnh phù hợp với cảnh, bố cục hoặc yêu cầu chỉnh sửa đã xác định. Kiểm tra toàn bộ bố cục và những chi tiết nhỏ, đặc biệt là chủ thể nguồn, ranh giới vật thể, tỷ lệ và mọi chữ viết có ý nghĩa. Khi làm việc lặp lại, thay đổi chỉ dẫn gắn với vấn đề nhìn thấy và dùng kết quả đã chọn làm ảnh tham chiếu tiếp theo. Nêu cụ thể thay đổi mong muốn và yêu cầu giữ nguyên để có thể đánh giá mỗi kết quả theo một mục đích sáng tạo rõ ràng.\n\n",
    "alias_of": null,
    "aliases": [],
    "author": "xAI",
    "capabilities": {
      "context_length": 65536,
      "manufacturer_input": [
        "text",
        "image"
      ],
      "manufacturer_output": [
        "image"
      ]
    },
    "card_routes": [
      {
        "label": "Ultra",
        "rates": [
          {
            "amount": "0.08",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "forecast_usd",
            "label": "Estimated generation cost",
            "native_amount_usd_per_unit": "0.08",
            "native_quantity": 1,
            "public_unit_label": "estimate before generation",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "request_estimate"
          }
        ],
        "summary": "Giá theo cấu hình được trình bày đầy đủ trong phần chi tiết."
      }
    ],
    "ctx": null,
    "formats": [
      "images"
    ],
    "id": "x-ai/grok-imagine-image-2.0",
    "input": [
      "text",
      "image"
    ],
    "kind": "image",
    "max_out": null,
    "methods": [
      {
        "available": null,
        "billing_basis": {
          "basis": "original_invoice_usd",
          "description": "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í.",
          "forecast_quantity_is_estimate": true,
          "physical_output_is_billable_quantity": false,
          "version": "original_invoice_usd_v1"
        },
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "all_results": "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.",
            "lifecycle": {
              "assets": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets"
                },
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}"
                }
              ],
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}/content",
                  "url_source": "exact returned signed URL; never construct token"
                }
              ],
              "mode": "synchronous_result_then_owned_library",
              "operation_id_is_not_task_id": true,
              "status": [
                {
                  "http": "GET",
                  "id_source": "actual returned task_id or media library record",
                  "path": "/v1/media/tasks/{task_id}"
                }
              ],
              "unknown": "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."
            },
            "outputs": {
              "all_results": "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.",
              "family": "image",
              "fields": [
                {
                  "description": null,
                  "name": "created",
                  "type": null
                },
                {
                  "description": null,
                  "name": "data[].url",
                  "type": null
                },
                {
                  "description": null,
                  "name": "data[].b64_json",
                  "type": null
                },
                {
                  "description": null,
                  "name": "usage",
                  "type": null
                }
              ]
            },
            "parameters": [
              {
                "enum": [
                  "x-ai/grok-imagine-image-2.0"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "min_length": 1,
                "name": "prompt",
                "required": true,
                "type": "string"
              },
              {
                "enum": [
                  "1K",
                  "2K"
                ],
                "enum_known": true,
                "name": "resolution",
                "required": false,
                "type": "string"
              },
              {
                "enum": [
                  "1:1",
                  "3:4",
                  "4:3",
                  "9:16",
                  "16:9",
                  "2:3",
                  "3:2",
                  "9:19.5",
                  "19.5:9",
                  "9:20",
                  "20:9",
                  "1:2",
                  "2:1",
                  "auto"
                ],
                "enum_known": true,
                "name": "aspect_ratio",
                "required": false,
                "type": "string"
              },
              {
                "enum": [
                  "low",
                  "medium"
                ],
                "enum_known": true,
                "name": "quality",
                "required": false,
                "type": "string"
              },
              {
                "maximum": 1,
                "minimum": 1,
                "name": "n",
                "required": false,
                "type": "integer"
              },
              {
                "items": {
                  "properties": {
                    "image_url": {
                      "properties": {
                        "url": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "url"
                      ],
                      "type": "object"
                    },
                    "type": {
                      "const": "image_url"
                    }
                  },
                  "required": [
                    "type",
                    "image_url"
                  ],
                  "type": "object"
                },
                "maximum_items": 3,
                "minimum_items": 0,
                "name": "input_references",
                "required": false,
                "type": "array"
              },
              {
                "name": "provider",
                "required": false,
                "type": "object"
              }
            ],
            "request_schema": {
              "properties": {
                "aspect_ratio": {
                  "enum": [
                    "1:1",
                    "3:4",
                    "4:3",
                    "9:16",
                    "16:9",
                    "2:3",
                    "3:2",
                    "9:19.5",
                    "19.5:9",
                    "9:20",
                    "20:9",
                    "1:2",
                    "2:1",
                    "auto"
                  ],
                  "type": "string"
                },
                "input_references": {
                  "items": {
                    "properties": {
                      "image_url": {
                        "properties": {
                          "url": {
                            "type": "string"
                          }
                        },
                        "required": [
                          "url"
                        ],
                        "type": "object"
                      },
                      "type": {
                        "const": "image_url"
                      }
                    },
                    "required": [
                      "type",
                      "image_url"
                    ],
                    "type": "object"
                  },
                  "maxItems": 3,
                  "minItems": 0,
                  "type": "array"
                },
                "model": {
                  "enum": [
                    "x-ai/grok-imagine-image-2.0"
                  ],
                  "type": "string"
                },
                "n": {
                  "maximum": 1,
                  "minimum": 1,
                  "type": "integer"
                },
                "prompt": {
                  "minLength": 1,
                  "type": "string"
                },
                "provider": {
                  "description": "Exact image provider preferences from the documented image request schema.",
                  "type": "object"
                },
                "quality": {
                  "enum": [
                    "low",
                    "medium"
                  ],
                  "type": "string"
                },
                "resolution": {
                  "enum": [
                    "1K",
                    "2K"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "model",
                "prompt"
              ],
              "type": "object"
            },
            "schema_template": {
              "actual_file_preparation_required": false,
              "body": {
                "model": "x-ai/grok-imagine-image-2.0",
                "prompt": "a red panda astronaut floating in space, studio lighting"
              },
              "content_type": "application/json"
            }
          },
          "input": {
            "content_type": "application/json",
            "material_types": [
              "text",
              "image"
            ],
            "required": [
              "model",
              "prompt"
            ]
          },
          "lifecycle": {
            "assets": [
              {
                "http": "GET",
                "path": "/v1/media/assets"
              },
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}"
              }
            ],
            "content": [
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "url_source": "exact returned signed URL; never construct token"
              }
            ],
            "mode": "synchronous_result_then_owned_library",
            "operation_id_is_not_task_id": true,
            "status": [
              {
                "http": "GET",
                "id_source": "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",
                "path": "/v1/media/tasks/{task_id}"
              }
            ],
            "unknown": "Keep the returned X-Client-Request-ID for reconciliation. Read only actual returned task_id/asset_id values or the owned media library; never build a task URL from the operation ID and never resubmit creation."
          },
          "method": {
            "http": "POST",
            "path": "/v1/images/generations"
          },
          "output": {
            "all_results": "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.",
            "family": "image",
            "fields": [
              {
                "description": null,
                "name": "created",
                "type": null
              },
              {
                "description": null,
                "name": "data[].url",
                "type": null
              },
              {
                "description": null,
                "name": "data[].b64_json",
                "type": null
              },
              {
                "description": null,
                "name": "usage",
                "type": null
              }
            ]
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quoted_unit": "per input image"
            },
            "label": "input image",
            "units": [
              {
                "amount": "0.02",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "image_input",
                "label": "input image",
                "native_amount_usd_per_unit": "0.02",
                "native_quantity": 1,
                "public_unit_label": "per input image",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "image_input"
              }
            ]
          },
          {
            "basis": "Ướ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.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Chi phí tạo ước tính",
            "units": [
              {
                "amount": "0.08",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "forecast_usd",
                "label": "Estimated generation cost",
                "native_amount_usd_per_unit": "0.08",
                "native_quantity": 1,
                "public_unit_label": "estimate before generation",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "request_estimate"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\nexport AILOOT_API_KEY\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np={'model': 'x-ai/grok-imagine-image-2.0', 'prompt': 'a red panda astronaut floating in space, studio lighting'}\n\nPath(\"request.json\").write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/images/generations \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - <<'PY_RESULT'\nimport base64, json, os, subprocess\nfrom pathlib import Path\nfrom urllib.parse import urlsplit, urljoin\n\ndef save_images(items):\n    if not items: raise SystemExit(\"No completed images; retain the full response\")\n    for index, item in enumerate(items):\n        encoded=item.get(\"b64_json\")\n        uri=item.get(\"url\", \"\")\n        if not encoded and uri.startswith(\"data:image/\"):\n            header, separator, encoded=uri.partition(\",\")\n            if not separator or \";base64\" not in header: raise SystemExit(\"Unsupported image data URI\")\n        if encoded:\n            raw=base64.b64decode(encoded,validate=True)\n        elif uri:\n            uri=urljoin(\"https://api.ailoot.ai\",uri)\n            parsed=urlsplit(uri)\n            if parsed.scheme!=\"https\" or not parsed.netloc or parsed.username or parsed.password:\n                raise SystemExit(\"Invalid returned image URL\")\n            owned=parsed.netloc==\"api.ailoot.ai\" and parsed.path.startswith(\"/v1/media/assets/\") and parsed.path.endswith(\"/content\")\n            args=[\"curl\",\"--fail-with-body\",\"--silent\",\"--show-error\",uri]\n            if owned: args += [\"-H\",\"Authorization: Bearer \"+os.environ[\"AILOOT_API_KEY\"]]\n            temporary=Path(f\"image-{index}.bin\")\n            subprocess.run(args+[\"-o\",str(temporary)],check=True)\n            raw=temporary.read_bytes()\n            temporary.unlink()\n        else: raise SystemExit(\"Image has neither bytes nor URL\")\n        if not raw: raise SystemExit(\"Empty image result\")\n        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\"\n        Path(f\"image-{index}.{ext}\").write_bytes(raw)\n    print(\"Every returned image saved; complete response metadata retained\")\nsave_images(json.loads(Path(\"result.json\").read_text())[\"data\"])\nPY_RESULT\n",
            "label": "curl · exact creation/save all outputs",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/media/assets \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -o owned-assets.json\n# Preserve every returned asset and follow its exact signed content URL. Do not construct a signed token.\n",
            "label": "Read existing owned assets",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "images",
        "hints": [
          "Use the exact caller model ID and documented input representation.",
          "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again."
        ],
        "http": "POST",
        "in": null,
        "input": [
          "text",
          "image"
        ],
        "label": "Ảnh",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [
          "/v1/images"
        ],
        "native_endpoint": "images",
        "out": null,
        "output": [
          "image"
        ],
        "path": "/v1/images/generations",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          }
        ],
        "pricing": {
          "billing_mode": "original_invoice_usd",
          "image_input_price": null,
          "image_output_price": null
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quoted_unit": "per input image"
            },
            "label": "input image",
            "units": [
              {
                "amount": "0.02",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "image_input",
                "label": "input image",
                "native_amount_usd_per_unit": "0.02",
                "native_quantity": 1,
                "public_unit_label": "per input image",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "image_input"
              }
            ]
          },
          {
            "basis": "This estimate is not an additional charge or a fixed rate for the completed generation.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Estimated generation cost",
            "units": [
              {
                "amount": "0.08",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "forecast_usd",
                "label": "Estimated generation cost",
                "native_amount_usd_per_unit": "0.08",
                "native_quantity": 1,
                "public_unit_label": "estimate before generation",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "request_estimate"
              }
            ]
          }
        ],
        "request_model_id": "x-ai/grok-imagine-image-2.0",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/media/tasks/{task_id}"
        ],
        "tiers": [],
        "units": [
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          },
          {
            "amount": "0.02",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "image_input",
            "label": "input image",
            "native_amount_usd_per_unit": "0.02",
            "native_quantity": 1,
            "public_unit_label": "per input image",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "image_input"
          },
          {
            "amount": "0.08",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "forecast_usd",
            "label": "Estimated generation cost",
            "native_amount_usd_per_unit": "0.08",
            "native_quantity": 1,
            "public_unit_label": "estimate before generation",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "request_estimate"
          }
        ]
      }
    ],
    "model_aliases": [
      {
        "canonical_model_id": "x-ai/grok-imagine-image-2.0",
        "request_model_id": "x-ai/grok-imagine-image-2.0",
        "route_label": "Ultra"
      }
    ],
    "name": "xAI: Grok Imagine Image 2.0",
    "price": {
      "estimate_only": true,
      "in": null,
      "in_label": null,
      "out": 0.08,
      "out_label": "estimate before generation",
      "scope_label": "Estimated generation cost",
      "sort_in": null,
      "sort_out": 0.08,
      "varies": false
    },
    "short": "Grok Imagine Image 2.0 tạo hình ảnh từ bản mô tả bằng văn bản và chỉnh sửa ảnh có sẵn bằng chỉ dẫn ngôn ngữ tự nhiên. xAI công bố các tuỳ chọn chất lượng, độ phân giải và bố cục, cùng khả năng dùng nhiều ảnh tham chiếu, chuyển phong cách và tinh chỉnh qua từng lượt."
  },
  "renderer_schema": {
    "method_order": "Original DTO methods order; every exact route/format/path/caller survives.",
    "prices": "Original public DTO fields and original native display HTML; no flattened or normalized offers."
  },
  "representation": "exact-public-dto-and-native-renderer-html",
  "representationNotes": {
    "current_reference": {
      "about_json_pointer": "/aboutHtml",
      "methods": [
        {
          "contract_json_pointer": "/methods/0/rawMethod/contract",
          "html_json_pointer": "/methods/0/html",
          "method_ordinal": 0
        }
      ],
      "role": "current-semantic-reference"
    },
    "raw_input": {
      "examples_role": "historical-input-not-current-ready-examples",
      "json_pointers": [
        "/rawModel",
        "/methods/0/rawMethod"
      ],
      "role": "historical-owner-input"
    },
    "schema": "ailoot-native-model-representations-v1"
  },
  "schema": "ailoot-static-model-facts-v1",
  "schema_version": 1,
  "shortText": "Grok Imagine Image 2.0 tạo hình ảnh từ bản mô tả bằng văn bản và chỉnh sửa ảnh có sẵn bằng chỉ dẫn ngôn ngữ tự nhiên. xAI công bố các tuỳ chọn chất lượng, độ phân giải và bố cục, cùng khả năng dùng nhiều ảnh tham chiếu, chuyển phong cách và tinh chỉnh qua từng lượt.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "600c74e36a064a120ac0f58aaa4ad829a316340e231005617936e1ea725a7164",
    "renderer_sha256": "64a62299639eb843877e9ec5c95e32bf22bac3acfe230f6f502c5c3aa186f9c1"
  },
  "sourceRevision": "2922934e6c140f664aef4dc7687fa729060e5720033b14d1c1ef5f6ba9214b54"
}
