{
  "aboutHtml": "<p>FLUX.2 [pro] là mô hình tạo và chỉnh sửa hình ảnh hướng đến sản xuất của Black Forest Labs. Nhà sản xuất giới thiệu đây là lựa chọn mặc định cho phần lớn tác vụ hình ảnh FLUX.2: tạo ảnh mới từ văn bản hoặc sửa cảnh bằng tham chiếu thị giác. Các khả năng của dòng mô hình gồm chất liệu và ánh sáng chân thực như ảnh chụp, chữ dễ đọc, chỉ dẫn màu chính xác và chủ thể nhất quán qua các lần chỉnh sửa liên quan. Tài nguyên trả về là hình ảnh dùng cho cảnh sản phẩm, bố cục biên tập, ý tưởng thiết kế hoặc truyền thông thị giác.</p><h4>Chuẩn bị bản yêu cầu sản xuất</h4><p>Bắt đầu bằng chủ thể, hành động hoặc cách sắp xếp của chủ thể, phong cách và bối cảnh hoặc ánh sáng. Hướng dẫn viết câu lệnh của nhà sản xuất chú trọng hơn đến những từ ở đầu và khuyến nghị đặt chủ thể cùng hành động thiết yếu trước chi tiết trang trí. Hướng dẫn gợi ý 10–30 từ cho ý tưởng nhanh, 30–80 từ cho dự án thông thường và mô tả dài hơn cho cảnh phức tạp. Những khoảng này là hướng dẫn viết câu lệnh, không phải giới hạn ngữ cảnh văn bản.</p><p>Một bản yêu cầu ảnh danh mục tự soạn có thể mô tả đèn thép xước trên mặt bàn xám ấm, với góc nhìn ba phần tư làm rõ công tắc và chao đèn. Nêu bề mặt, ánh sáng và góc nhìn giúp nhận diện sản phẩm. Với đồ hoạ thông tin hoặc ảnh tiếp thị, hãy chốt nội dung chữ và thứ bậc trước; đặt tiêu đề chính xác trong dấu ngoặc kép, xác định vị trí và nêu phong cách cùng cỡ chữ. Kiểm tra nhãn, số lượng và chi tiết sản phẩm ở kích thước hiển thị cuối cùng.</p><p>Hướng dẫn của dòng mô hình công bố cả câu lệnh ngôn ngữ tự nhiên lẫn câu lệnh có cấu trúc JSON. Bản mô tả cảnh có cấu trúc có thể tách chủ thể, nền, ánh sáng và bố cục thành các trường riêng để sửa rõ ràng từng yêu cầu. Hướng dẫn cũng hỗ trợ mô tả màu bằng mã hex: gắn mã với vật thể hoặc đoạn chữ cụ thể cần tô màu. Mô tả diện mạo mong muốn theo cách khẳng định, vì quy trình viết câu lệnh FLUX.2 được công bố không cung cấp câu lệnh phủ định.</p><h4>Chỉnh sửa bằng tham chiếu và ngân sách điểm ảnh dùng chung</h4><p>Cấu hình yêu cầu [pro] cụ thể có tám vị trí ảnh tham chiếu; giao diện tương tác của nhà sản xuất hỗ trợ riêng mười ảnh. Giao vai trò cho mỗi ảnh, chẳng hạn diện mạo chủ thể, quần áo, thiết kế sản phẩm, căn phòng hoặc phong cách. Với cảnh có sẵn, nêu yếu tố cần thay đổi và bố cục, môi trường cùng chi tiết hình ảnh cần giữ. Ví dụ được công bố gồm ghép nội thất, đổi nền hoặc thời tiết, thay vật thể và sửa chữ.</p><p>Số lượng tham chiếu còn phụ thuộc kích thước đầu ra. Hướng dẫn [pro] của nhà sản xuất quy định tổng ngân sách 9 megapixel cho đầu vào cộng đầu ra. Các ví dụ cho phép tám tham chiếu khi đầu ra 1 megapixel và bảy khi đầu ra 2 megapixel, giảm sức chứa tham chiếu khi kết quả yêu cầu lớn hơn. Lập kế hoạch ảnh nguồn cùng đầu ra, thay vì coi số vị trí tối đa luôn dùng được ở mọi kích thước đầu ra. Dùng những tham chiếu cung cấp thông tin cần thiết và xác định đóng góp dự kiến của từng ảnh.</p><p>Với ảnh ghép sản phẩm, ảnh đầu có thể cung cấp sản phẩm, ảnh thứ hai cung cấp căn phòng, còn ảnh thứ ba xác định bề mặt chất liệu. Giải thích cách kết hợp chúng thành một cảnh thống nhất. Nếu kết quả làm đổi hình dạng, dấu hiệu hoặc danh tính cần giữ, hãy nhắm vào vấn đề đó trong lượt tiếp theo thay vì thay toàn bộ bản yêu cầu. Kết quả thực tế là ảnh đã sửa, được đối chiếu với đầu vào về độ trung thành với tham chiếu và thay đổi cụ thể.</p><h4>Mở rộng câu lệnh và cấu hình cố định so với bản xem trước</h4><p>Đặc tả [pro] cụ thể bật mở rộng câu lệnh theo mặc định. Tuỳ chọn disable_pup dừng việc mở rộng khi cần dùng nguyên chỉ dẫn đã soạn kỹ. Giữ thiết lập đã chọn khi so sánh các phiên bản, vì cùng một ý tưởng ngắn và mô tả đã mở rộng là những đầu vào tạo ảnh khác nhau. Đây là tuỳ chọn của cấu hình nhà sản xuất, không phải bảo đảm mọi chi tiết yêu cầu đều xuất hiện chính xác.</p><p>Tài liệu phân biệt điểm cuối [pro] thông thường là một bản chụp cố định với [pro] Preview, nơi các cải tiến mô hình tiếp theo được đưa vào. Cấu trúc yêu cầu và phản hồi giống nhau, còn trọng số nền khác nhau. Lưu cấu hình đã chọn chính xác cùng ảnh và tham chiếu. Nhãn Preview riêng không nên âm thầm thay thế lựa chọn [pro] thông thường khi lần sửa phụ thuộc vào cùng lựa chọn mô hình được công bố.</p><h4>Kích thước, định dạng và tài nguyên đã chọn</h4><p>Hướng dẫn của dòng mô hình công bố đầu ra tối đa 4 megapixel, với kích thước chỉ định ít nhất 64×64 và là bội số của 16. Hướng dẫn khuyến nghị tối đa 2 megapixel cho phần lớn trường hợp. Chiều rộng và chiều cao xác lập khung hình dự định; ảnh sản phẩm vuông, bố cục dọc và cảnh biên tập rộng phân bổ không gian khác nhau. Yêu cầu cụ thể liệt kê đầu ra JPEG, PNG và WebP, mặc định JPEG, cùng seed tuỳ chọn.</p><p>Cấu hình [max] có tính năng tìm kiếm làm căn cứ riêng, còn [flex] cung cấp số bước lấy mẫu và guidance, và [klein] có cấu hình nhỏ hơn với bốn tham chiếu. Chọn phiên bản theo công việc cần thực hiện thay vì đưa các tuỳ chọn đó vào [pro]. Với tài nguyên đã chọn, giữ ảnh thực tế, câu lệnh cuối cùng, tham chiếu, kích thước và nhãn mô hình. Liên kết kết quả FLUX.2 có chữ ký của nhà sản xuất hết hạn sau mười phút, nên hãy tải ảnh thay vì dựa vào vị trí tạm thời. Kiểm tra danh tính chủ thể, màu sắc, chữ, bố cục và chi tiết đã sửa trước khi đưa kết quả vào tài liệu dành cho khách hàng.</p>",
  "aboutText": "FLUX.2 [pro] là mô hình tạo và chỉnh sửa hình ảnh hướng đến sản xuất của Black Forest Labs. Nhà sản xuất giới thiệu đây là lựa chọn mặc định cho phần lớn tác vụ hình ảnh FLUX.2: tạo ảnh mới từ văn bản hoặc sửa cảnh bằng tham chiếu thị giác. Các khả năng của dòng mô hình gồm chất liệu và ánh sáng chân thực như ảnh chụp, chữ dễ đọc, chỉ dẫn màu chính xác và chủ thể nhất quán qua các lần chỉnh sửa liên quan. Tài nguyên trả về là hình ảnh dùng cho cảnh sản phẩm, bố cục biên tập, ý tưởng thiết kế hoặc truyền thông thị giác.\n\n### Chuẩn bị bản yêu cầu sản xuất\n\nBắt đầu bằng chủ thể, hành động hoặc cách sắp xếp của chủ thể, phong cách và bối cảnh hoặc ánh sáng. Hướng dẫn viết câu lệnh của nhà sản xuất chú trọng hơn đến những từ ở đầu và khuyến nghị đặt chủ thể cùng hành động thiết yếu trước chi tiết trang trí. Hướng dẫn gợi ý 10–30 từ cho ý tưởng nhanh, 30–80 từ cho dự án thông thường và mô tả dài hơn cho cảnh phức tạp. Những khoảng này là hướng dẫn viết câu lệnh, không phải giới hạn ngữ cảnh văn bản.\n\nMột bản yêu cầu ảnh danh mục tự soạn có thể mô tả đèn thép xước trên mặt bàn xám ấm, với góc nhìn ba phần tư làm rõ công tắc và chao đèn. Nêu bề mặt, ánh sáng và góc nhìn giúp nhận diện sản phẩm. Với đồ hoạ thông tin hoặc ảnh tiếp thị, hãy chốt nội dung chữ và thứ bậc trước; đặt tiêu đề chính xác trong dấu ngoặc kép, xác định vị trí và nêu phong cách cùng cỡ chữ. Kiểm tra nhãn, số lượng và chi tiết sản phẩm ở kích thước hiển thị cuối cùng.\n\nHướng dẫn của dòng mô hình công bố cả câu lệnh ngôn ngữ tự nhiên lẫn câu lệnh có cấu trúc JSON. Bản mô tả cảnh có cấu trúc có thể tách chủ thể, nền, ánh sáng và bố cục thành các trường riêng để sửa rõ ràng từng yêu cầu. Hướng dẫn cũng hỗ trợ mô tả màu bằng mã hex: gắn mã với vật thể hoặc đoạn chữ cụ thể cần tô màu. Mô tả diện mạo mong muốn theo cách khẳng định, vì quy trình viết câu lệnh FLUX.2 được công bố không cung cấp câu lệnh phủ định.\n\n### Chỉnh sửa bằng tham chiếu và ngân sách điểm ảnh dùng chung\n\nCấu hình yêu cầu [pro] cụ thể có tám vị trí ảnh tham chiếu; giao diện tương tác của nhà sản xuất hỗ trợ riêng mười ảnh. Giao vai trò cho mỗi ảnh, chẳng hạn diện mạo chủ thể, quần áo, thiết kế sản phẩm, căn phòng hoặc phong cách. Với cảnh có sẵn, nêu yếu tố cần thay đổi và bố cục, môi trường cùng chi tiết hình ảnh cần giữ. Ví dụ được công bố gồm ghép nội thất, đổi nền hoặc thời tiết, thay vật thể và sửa chữ.\n\nSố lượng tham chiếu còn phụ thuộc kích thước đầu ra. Hướng dẫn [pro] của nhà sản xuất quy định tổng ngân sách 9 megapixel cho đầu vào cộng đầu ra. Các ví dụ cho phép tám tham chiếu khi đầu ra 1 megapixel và bảy khi đầu ra 2 megapixel, giảm sức chứa tham chiếu khi kết quả yêu cầu lớn hơn. Lập kế hoạch ảnh nguồn cùng đầu ra, thay vì coi số vị trí tối đa luôn dùng được ở mọi kích thước đầu ra. Dùng những tham chiếu cung cấp thông tin cần thiết và xác định đóng góp dự kiến của từng ảnh.\n\nVới ảnh ghép sản phẩm, ảnh đầu có thể cung cấp sản phẩm, ảnh thứ hai cung cấp căn phòng, còn ảnh thứ ba xác định bề mặt chất liệu. Giải thích cách kết hợp chúng thành một cảnh thống nhất. Nếu kết quả làm đổi hình dạng, dấu hiệu hoặc danh tính cần giữ, hãy nhắm vào vấn đề đó trong lượt tiếp theo thay vì thay toàn bộ bản yêu cầu. Kết quả thực tế là ảnh đã sửa, được đối chiếu với đầu vào về độ trung thành với tham chiếu và thay đổi cụ thể.\n\n### Mở rộng câu lệnh và cấu hình cố định so với bản xem trước\n\nĐặc tả [pro] cụ thể bật mở rộng câu lệnh theo mặc định. Tuỳ chọn disable_pup dừng việc mở rộng khi cần dùng nguyên chỉ dẫn đã soạn kỹ. Giữ thiết lập đã chọn khi so sánh các phiên bản, vì cùng một ý tưởng ngắn và mô tả đã mở rộng là những đầu vào tạo ảnh khác nhau. Đây là tuỳ chọn của cấu hình nhà sản xuất, không phải bảo đảm mọi chi tiết yêu cầu đều xuất hiện chính xác.\n\nTài liệu phân biệt điểm cuối [pro] thông thường là một bản chụp cố định với [pro] Preview, nơi các cải tiến mô hình tiếp theo được đưa vào. Cấu trúc yêu cầu và phản hồi giống nhau, còn trọng số nền khác nhau. Lưu cấu hình đã chọn chính xác cùng ảnh và tham chiếu. Nhãn Preview riêng không nên âm thầm thay thế lựa chọn [pro] thông thường khi lần sửa phụ thuộc vào cùng lựa chọn mô hình được công bố.\n\n### Kích thước, định dạng và tài nguyên đã chọn\n\nHướng dẫn của dòng mô hình công bố đầu ra tối đa 4 megapixel, với kích thước chỉ định ít nhất 64×64 và là bội số của 16. Hướng dẫn khuyến nghị tối đa 2 megapixel cho phần lớn trường hợp. Chiều rộng và chiều cao xác lập khung hình dự định; ảnh sản phẩm vuông, bố cục dọc và cảnh biên tập rộng phân bổ không gian khác nhau. Yêu cầu cụ thể liệt kê đầu ra JPEG, PNG và WebP, mặc định JPEG, cùng seed tuỳ chọn.\n\nCấu hình [max] có tính năng tìm kiếm làm căn cứ riêng, còn [flex] cung cấp số bước lấy mẫu và guidance, và [klein] có cấu hình nhỏ hơn với bốn tham chiếu. Chọn phiên bản theo công việc cần thực hiện thay vì đưa các tuỳ chọn đó vào [pro]. Với tài nguyên đã chọn, giữ ảnh thực tế, câu lệnh cuối cùng, tham chiếu, kích thước và nhãn mô hình. Liên kết kết quả FLUX.2 có chữ ký của nhà sản xuất hết hạn sau mười phút, nên hãy tải ảnh thay vì dựa vào vị trí tạm thời. Kiểm tra danh tính chủ thể, màu sắc, chữ, bố cục và chi tiết đã sửa trước khi đưa kết quả vào tài liệu dành cho khách hàng.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "554bc2501f238030a63707e71dc1c0c56e449a759c4426e3a83f75d17c924742",
    "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\">•</span><h2 id=\"sheet-title\">Black Forest Labs: FLUX.2 Pro</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"Đóng\">×</button></div><div class=\"idline\"><span>Black Forest Labs /</span><code>black-forest-labs/flux.2-pro</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|black-forest-labs%2Fflux.2-pro\">Ả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\">FLUX.2 [pro] là mô hình hình ảnh phục vụ sản xuất của Black Forest Labs, dùng để tạo ảnh từ văn bản và chỉnh sửa theo ảnh tham chiếu. Cấu hình được công bố kết hợp chi tiết chân thực như ảnh chụp, khả năng kiểm soát chữ và màu với ngân sách điểm ảnh dùng chung cho tham chiếu và đầu ra, cùng ảnh tối đa 4 megapixel.</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>FLUX.2 [pro] là mô hình tạo và chỉnh sửa hình ảnh hướng đến sản xuất của Black Forest Labs. Nhà sản xuất giới thiệu đây là lựa chọn mặc định cho phần lớn tác vụ hình ảnh FLUX.2: tạo ảnh mới từ văn bản hoặc sửa cảnh bằng tham chiếu thị giác. Các khả năng của dòng mô hình gồm chất liệu và ánh sáng chân thực như ảnh chụp, chữ dễ đọc, chỉ dẫn màu chính xác và chủ thể nhất quán qua các lần chỉnh sửa liên quan. Tài nguyên trả về là hình ảnh dùng cho cảnh sản phẩm, bố cục biên tập, ý tưởng thiết kế hoặc truyền thông thị giác.</p><h4>Chuẩn bị bản yêu cầu sản xuất</h4><p>Bắt đầu bằng chủ thể, hành động hoặc cách sắp xếp của chủ thể, phong cách và bối cảnh hoặc ánh sáng. Hướng dẫn viết câu lệnh của nhà sản xuất chú trọng hơn đến những từ ở đầu và khuyến nghị đặt chủ thể cùng hành động thiết yếu trước chi tiết trang trí. Hướng dẫn gợi ý 10–30 từ cho ý tưởng nhanh, 30–80 từ cho dự án thông thường và mô tả dài hơn cho cảnh phức tạp. Những khoảng này là hướng dẫn viết câu lệnh, không phải giới hạn ngữ cảnh văn bản.</p><p>Một bản yêu cầu ảnh danh mục tự soạn có thể mô tả đèn thép xước trên mặt bàn xám ấm, với góc nhìn ba phần tư làm rõ công tắc và chao đèn. Nêu bề mặt, ánh sáng và góc nhìn giúp nhận diện sản phẩm. Với đồ hoạ thông tin hoặc ảnh tiếp thị, hãy chốt nội dung chữ và thứ bậc trước; đặt tiêu đề chính xác trong dấu ngoặc kép, xác định vị trí và nêu phong cách cùng cỡ chữ. Kiểm tra nhãn, số lượng và chi tiết sản phẩm ở kích thước hiển thị cuối cùng.</p><p>Hướng dẫn của dòng mô hình công bố cả câu lệnh ngôn ngữ tự nhiên lẫn câu lệnh có cấu trúc JSON. Bản mô tả cảnh có cấu trúc có thể tách chủ thể, nền, ánh sáng và bố cục thành các trường riêng để sửa rõ ràng từng yêu cầu. Hướng dẫn cũng hỗ trợ mô tả màu bằng mã hex: gắn mã với vật thể hoặc đoạn chữ cụ thể cần tô màu. Mô tả diện mạo mong muốn theo cách khẳng định, vì quy trình viết câu lệnh FLUX.2 được công bố không cung cấp câu lệnh phủ định.</p><h4>Chỉnh sửa bằng tham chiếu và ngân sách điểm ảnh dùng chung</h4><p>Cấu hình yêu cầu [pro] cụ thể có tám vị trí ảnh tham chiếu; giao diện tương tác của nhà sản xuất hỗ trợ riêng mười ảnh. Giao vai trò cho mỗi ảnh, chẳng hạn diện mạo chủ thể, quần áo, thiết kế sản phẩm, căn phòng hoặc phong cách. Với cảnh có sẵn, nêu yếu tố cần thay đổi và bố cục, môi trường cùng chi tiết hình ảnh cần giữ. Ví dụ được công bố gồm ghép nội thất, đổi nền hoặc thời tiết, thay vật thể và sửa chữ.</p><p>Số lượng tham chiếu còn phụ thuộc kích thước đầu ra. Hướng dẫn [pro] của nhà sản xuất quy định tổng ngân sách 9 megapixel cho đầu vào cộng đầu ra. Các ví dụ cho phép tám tham chiếu khi đầu ra 1 megapixel và bảy khi đầu ra 2 megapixel, giảm sức chứa tham chiếu khi kết quả yêu cầu lớn hơn. Lập kế hoạch ảnh nguồn cùng đầu ra, thay vì coi số vị trí tối đa luôn dùng được ở mọi kích thước đầu ra. Dùng những tham chiếu cung cấp thông tin cần thiết và xác định đóng góp dự kiến của từng ảnh.</p><p>Với ảnh ghép sản phẩm, ảnh đầu có thể cung cấp sản phẩm, ảnh thứ hai cung cấp căn phòng, còn ảnh thứ ba xác định bề mặt chất liệu. Giải thích cách kết hợp chúng thành một cảnh thống nhất. Nếu kết quả làm đổi hình dạng, dấu hiệu hoặc danh tính cần giữ, hãy nhắm vào vấn đề đó trong lượt tiếp theo thay vì thay toàn bộ bản yêu cầu. Kết quả thực tế là ảnh đã sửa, được đối chiếu với đầu vào về độ trung thành với tham chiếu và thay đổi cụ thể.</p><h4>Mở rộng câu lệnh và cấu hình cố định so với bản xem trước</h4><p>Đặc tả [pro] cụ thể bật mở rộng câu lệnh theo mặc định. Tuỳ chọn disable_pup dừng việc mở rộng khi cần dùng nguyên chỉ dẫn đã soạn kỹ. Giữ thiết lập đã chọn khi so sánh các phiên bản, vì cùng một ý tưởng ngắn và mô tả đã mở rộng là những đầu vào tạo ảnh khác nhau. Đây là tuỳ chọn của cấu hình nhà sản xuất, không phải bảo đảm mọi chi tiết yêu cầu đều xuất hiện chính xác.</p><p>Tài liệu phân biệt điểm cuối [pro] thông thường là một bản chụp cố định với [pro] Preview, nơi các cải tiến mô hình tiếp theo được đưa vào. Cấu trúc yêu cầu và phản hồi giống nhau, còn trọng số nền khác nhau. Lưu cấu hình đã chọn chính xác cùng ảnh và tham chiếu. Nhãn Preview riêng không nên âm thầm thay thế lựa chọn [pro] thông thường khi lần sửa phụ thuộc vào cùng lựa chọn mô hình được công bố.</p><h4>Kích thước, định dạng và tài nguyên đã chọn</h4><p>Hướng dẫn của dòng mô hình công bố đầu ra tối đa 4 megapixel, với kích thước chỉ định ít nhất 64×64 và là bội số của 16. Hướng dẫn khuyến nghị tối đa 2 megapixel cho phần lớn trường hợp. Chiều rộng và chiều cao xác lập khung hình dự định; ảnh sản phẩm vuông, bố cục dọc và cảnh biên tập rộng phân bổ không gian khác nhau. Yêu cầu cụ thể liệt kê đầu ra JPEG, PNG và WebP, mặc định JPEG, cùng seed tuỳ chọn.</p><p>Cấu hình [max] có tính năng tìm kiếm làm căn cứ riêng, còn [flex] cung cấp số bước lấy mẫu và guidance, và [klein] có cấu hình nhỏ hơn với bốn tham chiếu. Chọn phiên bản theo công việc cần thực hiện thay vì đưa các tuỳ chọn đó vào [pro]. Với tài nguyên đã chọn, giữ ảnh thực tế, câu lệnh cuối cùng, tham chiếu, kích thước và nhãn mô hình. Liên kết kết quả FLUX.2 có chữ ký của nhà sản xuất hết hạn sau mười phút, nên hãy tải ảnh thay vì dựa vào vị trí tạm thời. Kiểm tra danh tính chủ thể, màu sắc, chữ, bố cục và chi tiết đã sửa trước khi đưa kết quả vào tài liệu dành cho khách hà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>black-forest-labs/flux.2-pro</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\">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, 4:3, 3:4, 3:2, 2:3, 16:9, 9:16, 21:9, 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\">output_format</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>png, jpeg</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: 8</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>Megapixel của ảnh đầu ra</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 megapixel ảnh đầu ra</td><td data-cell-label=\"Phí\"><span class=\"card-cell-label\">Phí</span><div><span>Đầu ra · Megapixel của ảnh đầu ra · Ước tính chỉ để so sánh</span> <b>$0.06</b> <span class=\"price-unit\">mỗi megapixel ảnh đầu ra</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.06</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-1105-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1105-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-1105-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1105-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;black-forest-labs/flux.2-pro&#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-1106-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1106-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-1106-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1106-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=black-forest-labs%2Fflux.2-pro&amp;route=Ultra&amp;caller=black-forest-labs%2Fflux.2-pro&amp;fmt=images\"><code>black-forest-labs/flux.2-pro</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=black-forest-labs%2Fflux.2-pro&amp;route=Ultra&amp;caller=black-forest-labs%2Fflux.2-pro&amp;fmt=images\"><code>black-forest-labs/flux.2-pro</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "black-forest-labs/flux.2-pro",
        "fmt": "images",
        "http": "POST",
        "path": "/v1/images/generations",
        "request_model_id": "black-forest-labs/flux.2-pro",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|images|/v1/images/generations|black-forest-labs%2Fflux.2-pro",
      "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": [
                  "black-forest-labs/flux.2-pro"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "min_length": 1,
                "name": "prompt",
                "required": true,
                "type": "string"
              },
              {
                "enum": [
                  "1:1",
                  "4:3",
                  "3:4",
                  "3:2",
                  "2:3",
                  "16:9",
                  "9:16",
                  "21:9",
                  "auto"
                ],
                "enum_known": true,
                "name": "aspect_ratio",
                "required": false,
                "type": "string"
              },
              {
                "enum": [
                  "png",
                  "jpeg"
                ],
                "enum_known": true,
                "name": "output_format",
                "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": 8,
                "minimum_items": 0,
                "name": "input_references",
                "required": false,
                "type": "array"
              },
              {
                "name": "provider",
                "required": false,
                "type": "object"
              }
            ],
            "request_schema": {
              "properties": {
                "aspect_ratio": {
                  "enum": [
                    "1:1",
                    "4:3",
                    "3:4",
                    "3:2",
                    "2:3",
                    "16:9",
                    "9:16",
                    "21:9",
                    "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": 8,
                  "minItems": 0,
                  "type": "array"
                },
                "model": {
                  "enum": [
                    "black-forest-labs/flux.2-pro"
                  ],
                  "type": "string"
                },
                "n": {
                  "maximum": 1,
                  "minimum": 1,
                  "type": "integer"
                },
                "output_format": {
                  "enum": [
                    "png",
                    "jpeg"
                  ],
                  "type": "string"
                },
                "prompt": {
                  "minLength": 1,
                  "type": "string"
                },
                "provider": {
                  "description": "Exact image provider preferences from the documented image request schema.",
                  "type": "object"
                }
              },
              "required": [
                "model",
                "prompt"
              ],
              "type": "object"
            },
            "schema_template": {
              "actual_file_preparation_required": false,
              "body": {
                "model": "black-forest-labs/flux.2-pro",
                "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 output image megapixel"
            },
            "label": "output image megapixel",
            "units": [
              {
                "amount": "0.06",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "image_output_megapixel",
                "label": "output image megapixel",
                "native_amount_usd_per_unit": "0.06",
                "native_quantity": 1,
                "public_unit_label": "per output image megapixel",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "image_output_megapixel"
              }
            ]
          },
          {
            "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.06",
                "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.06",
                "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': 'black-forest-labs/flux.2-pro', '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 output image megapixel"
            },
            "label": "output image megapixel",
            "units": [
              {
                "amount": "0.06",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "image_output_megapixel",
                "label": "output image megapixel",
                "native_amount_usd_per_unit": "0.06",
                "native_quantity": 1,
                "public_unit_label": "per output image megapixel",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "image_output_megapixel"
              }
            ]
          },
          {
            "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.06",
                "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.06",
                "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": "black-forest-labs/flux.2-pro",
        "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.06",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "image_output_megapixel",
            "label": "output image megapixel",
            "native_amount_usd_per_unit": "0.06",
            "native_quantity": 1,
            "public_unit_label": "per output image megapixel",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "image_output_megapixel"
          },
          {
            "amount": "0.06",
            "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.06",
            "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": "black-forest-labs/flux.2-pro",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "d85a7043421b9ef4ba89f7a41cb0c4aa8d834e2438e980043bbc5c3063bf4ce2",
    "input_html_sha256": "14226aad582aebcb9fcb52da97e888bd56c1a278cfb4610bc08789cfa2b8d808",
    "private_audit_sha256": "49d7aaeaae652cca3c0ccb6bef106d818bf644e5670793da3c3e8a8b5cba3706",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/vi/black-forest-labs-flux-2-pro/",
    "description": "FLUX.2 [pro] là mô hình hình ảnh phục vụ sản xuất của Black Forest Labs, dùng để tạo ảnh từ văn bản và chỉnh sửa theo ảnh tham chiếu. Cấu hình được công bố kết hợp chi tiết chân thực như ảnh chụp, khả năng kiểm soát chữ và màu với ngân sách điểm ảnh dùng chung cho tham chiếu và đầu ra, cùng ảnh tối đa 4 megapixel.",
    "locale": "vi",
    "md_url": "https://ailoot.ai/models/vi/black-forest-labs-flux-2-pro/index.md",
    "title": "Black Forest Labs: FLUX.2 Pro — Ailoot",
    "url": "https://ailoot.ai/models/vi/black-forest-labs-flux-2-pro/"
  },
  "rawModel": {
    "about": "FLUX.2 [pro] là mô hình tạo và chỉnh sửa hình ảnh hướng đến sản xuất của Black Forest Labs. Nhà sản xuất giới thiệu đây là lựa chọn mặc định cho phần lớn tác vụ hình ảnh FLUX.2: tạo ảnh mới từ văn bản hoặc sửa cảnh bằng tham chiếu thị giác. Các khả năng của dòng mô hình gồm chất liệu và ánh sáng chân thực như ảnh chụp, chữ dễ đọc, chỉ dẫn màu chính xác và chủ thể nhất quán qua các lần chỉnh sửa liên quan. Tài nguyên trả về là hình ảnh dùng cho cảnh sản phẩm, bố cục biên tập, ý tưởng thiết kế hoặc truyền thông thị giác.\n\n### Chuẩn bị bản yêu cầu sản xuất\n\nBắt đầu bằng chủ thể, hành động hoặc cách sắp xếp của chủ thể, phong cách và bối cảnh hoặc ánh sáng. Hướng dẫn viết câu lệnh của nhà sản xuất chú trọng hơn đến những từ ở đầu và khuyến nghị đặt chủ thể cùng hành động thiết yếu trước chi tiết trang trí. Hướng dẫn gợi ý 10–30 từ cho ý tưởng nhanh, 30–80 từ cho dự án thông thường và mô tả dài hơn cho cảnh phức tạp. Những khoảng này là hướng dẫn viết câu lệnh, không phải giới hạn ngữ cảnh văn bản.\n\nMột bản yêu cầu ảnh danh mục tự soạn có thể mô tả đèn thép xước trên mặt bàn xám ấm, với góc nhìn ba phần tư làm rõ công tắc và chao đèn. Nêu bề mặt, ánh sáng và góc nhìn giúp nhận diện sản phẩm. Với đồ hoạ thông tin hoặc ảnh tiếp thị, hãy chốt nội dung chữ và thứ bậc trước; đặt tiêu đề chính xác trong dấu ngoặc kép, xác định vị trí và nêu phong cách cùng cỡ chữ. Kiểm tra nhãn, số lượng và chi tiết sản phẩm ở kích thước hiển thị cuối cùng.\n\nHướng dẫn của dòng mô hình công bố cả câu lệnh ngôn ngữ tự nhiên lẫn câu lệnh có cấu trúc JSON. Bản mô tả cảnh có cấu trúc có thể tách chủ thể, nền, ánh sáng và bố cục thành các trường riêng để sửa rõ ràng từng yêu cầu. Hướng dẫn cũng hỗ trợ mô tả màu bằng mã hex: gắn mã với vật thể hoặc đoạn chữ cụ thể cần tô màu. Mô tả diện mạo mong muốn theo cách khẳng định, vì quy trình viết câu lệnh FLUX.2 được công bố không cung cấp câu lệnh phủ định.\n\n### Chỉnh sửa bằng tham chiếu và ngân sách điểm ảnh dùng chung\n\nCấu hình yêu cầu [pro] cụ thể có tám vị trí ảnh tham chiếu; giao diện tương tác của nhà sản xuất hỗ trợ riêng mười ảnh. Giao vai trò cho mỗi ảnh, chẳng hạn diện mạo chủ thể, quần áo, thiết kế sản phẩm, căn phòng hoặc phong cách. Với cảnh có sẵn, nêu yếu tố cần thay đổi và bố cục, môi trường cùng chi tiết hình ảnh cần giữ. Ví dụ được công bố gồm ghép nội thất, đổi nền hoặc thời tiết, thay vật thể và sửa chữ.\n\nSố lượng tham chiếu còn phụ thuộc kích thước đầu ra. Hướng dẫn [pro] của nhà sản xuất quy định tổng ngân sách 9 megapixel cho đầu vào cộng đầu ra. Các ví dụ cho phép tám tham chiếu khi đầu ra 1 megapixel và bảy khi đầu ra 2 megapixel, giảm sức chứa tham chiếu khi kết quả yêu cầu lớn hơn. Lập kế hoạch ảnh nguồn cùng đầu ra, thay vì coi số vị trí tối đa luôn dùng được ở mọi kích thước đầu ra. Dùng những tham chiếu cung cấp thông tin cần thiết và xác định đóng góp dự kiến của từng ảnh.\n\nVới ảnh ghép sản phẩm, ảnh đầu có thể cung cấp sản phẩm, ảnh thứ hai cung cấp căn phòng, còn ảnh thứ ba xác định bề mặt chất liệu. Giải thích cách kết hợp chúng thành một cảnh thống nhất. Nếu kết quả làm đổi hình dạng, dấu hiệu hoặc danh tính cần giữ, hãy nhắm vào vấn đề đó trong lượt tiếp theo thay vì thay toàn bộ bản yêu cầu. Kết quả thực tế là ảnh đã sửa, được đối chiếu với đầu vào về độ trung thành với tham chiếu và thay đổi cụ thể.\n\n### Mở rộng câu lệnh và cấu hình cố định so với bản xem trước\n\nĐặc tả [pro] cụ thể bật mở rộng câu lệnh theo mặc định. Tuỳ chọn disable_pup dừng việc mở rộng khi cần dùng nguyên chỉ dẫn đã soạn kỹ. Giữ thiết lập đã chọn khi so sánh các phiên bản, vì cùng một ý tưởng ngắn và mô tả đã mở rộng là những đầu vào tạo ảnh khác nhau. Đây là tuỳ chọn của cấu hình nhà sản xuất, không phải bảo đảm mọi chi tiết yêu cầu đều xuất hiện chính xác.\n\nTài liệu phân biệt điểm cuối [pro] thông thường là một bản chụp cố định với [pro] Preview, nơi các cải tiến mô hình tiếp theo được đưa vào. Cấu trúc yêu cầu và phản hồi giống nhau, còn trọng số nền khác nhau. Lưu cấu hình đã chọn chính xác cùng ảnh và tham chiếu. Nhãn Preview riêng không nên âm thầm thay thế lựa chọn [pro] thông thường khi lần sửa phụ thuộc vào cùng lựa chọn mô hình được công bố.\n\n### Kích thước, định dạng và tài nguyên đã chọn\n\nHướng dẫn của dòng mô hình công bố đầu ra tối đa 4 megapixel, với kích thước chỉ định ít nhất 64×64 và là bội số của 16. Hướng dẫn khuyến nghị tối đa 2 megapixel cho phần lớn trường hợp. Chiều rộng và chiều cao xác lập khung hình dự định; ảnh sản phẩm vuông, bố cục dọc và cảnh biên tập rộng phân bổ không gian khác nhau. Yêu cầu cụ thể liệt kê đầu ra JPEG, PNG và WebP, mặc định JPEG, cùng seed tuỳ chọn.\n\nCấu hình [max] có tính năng tìm kiếm làm căn cứ riêng, còn [flex] cung cấp số bước lấy mẫu và guidance, và [klein] có cấu hình nhỏ hơn với bốn tham chiếu. Chọn phiên bản theo công việc cần thực hiện thay vì đưa các tuỳ chọn đó vào [pro]. Với tài nguyên đã chọn, giữ ảnh thực tế, câu lệnh cuối cùng, tham chiếu, kích thước và nhãn mô hình. Liên kết kết quả FLUX.2 có chữ ký của nhà sản xuất hết hạn sau mười phút, nên hãy tải ảnh thay vì dựa vào vị trí tạm thời. Kiểm tra danh tính chủ thể, màu sắc, chữ, bố cục và chi tiết đã sửa trước khi đưa kết quả vào tài liệu dành cho khách hàng.",
    "alias_of": null,
    "aliases": [],
    "author": "Black Forest Labs",
    "capabilities": {
      "context_length": 46864,
      "manufacturer_input": [
        "text",
        "image"
      ],
      "manufacturer_output": [
        "image"
      ]
    },
    "card_routes": [
      {
        "label": "Ultra",
        "rates": [
          {
            "amount": "0.06",
            "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.06",
            "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": "black-forest-labs/flux.2-pro",
    "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": [
                  "black-forest-labs/flux.2-pro"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "min_length": 1,
                "name": "prompt",
                "required": true,
                "type": "string"
              },
              {
                "enum": [
                  "1:1",
                  "4:3",
                  "3:4",
                  "3:2",
                  "2:3",
                  "16:9",
                  "9:16",
                  "21:9",
                  "auto"
                ],
                "enum_known": true,
                "name": "aspect_ratio",
                "required": false,
                "type": "string"
              },
              {
                "enum": [
                  "png",
                  "jpeg"
                ],
                "enum_known": true,
                "name": "output_format",
                "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": 8,
                "minimum_items": 0,
                "name": "input_references",
                "required": false,
                "type": "array"
              },
              {
                "name": "provider",
                "required": false,
                "type": "object"
              }
            ],
            "request_schema": {
              "properties": {
                "aspect_ratio": {
                  "enum": [
                    "1:1",
                    "4:3",
                    "3:4",
                    "3:2",
                    "2:3",
                    "16:9",
                    "9:16",
                    "21:9",
                    "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": 8,
                  "minItems": 0,
                  "type": "array"
                },
                "model": {
                  "enum": [
                    "black-forest-labs/flux.2-pro"
                  ],
                  "type": "string"
                },
                "n": {
                  "maximum": 1,
                  "minimum": 1,
                  "type": "integer"
                },
                "output_format": {
                  "enum": [
                    "png",
                    "jpeg"
                  ],
                  "type": "string"
                },
                "prompt": {
                  "minLength": 1,
                  "type": "string"
                },
                "provider": {
                  "description": "Exact image provider preferences from the documented image request schema.",
                  "type": "object"
                }
              },
              "required": [
                "model",
                "prompt"
              ],
              "type": "object"
            },
            "schema_template": {
              "actual_file_preparation_required": false,
              "body": {
                "model": "black-forest-labs/flux.2-pro",
                "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 output image megapixel"
            },
            "label": "output image megapixel",
            "units": [
              {
                "amount": "0.06",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "image_output_megapixel",
                "label": "output image megapixel",
                "native_amount_usd_per_unit": "0.06",
                "native_quantity": 1,
                "public_unit_label": "per output image megapixel",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "image_output_megapixel"
              }
            ]
          },
          {
            "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.06",
                "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.06",
                "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': 'black-forest-labs/flux.2-pro', '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 output image megapixel"
            },
            "label": "output image megapixel",
            "units": [
              {
                "amount": "0.06",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "image_output_megapixel",
                "label": "output image megapixel",
                "native_amount_usd_per_unit": "0.06",
                "native_quantity": 1,
                "public_unit_label": "per output image megapixel",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "image_output_megapixel"
              }
            ]
          },
          {
            "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.06",
                "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.06",
                "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": "black-forest-labs/flux.2-pro",
        "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.06",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "image_output_megapixel",
            "label": "output image megapixel",
            "native_amount_usd_per_unit": "0.06",
            "native_quantity": 1,
            "public_unit_label": "per output image megapixel",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "image_output_megapixel"
          },
          {
            "amount": "0.06",
            "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.06",
            "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": "black-forest-labs/flux.2-pro",
        "request_model_id": "black-forest-labs/flux.2-pro",
        "route_label": "Ultra"
      }
    ],
    "name": "Black Forest Labs: FLUX.2 Pro",
    "price": {
      "estimate_only": true,
      "in": null,
      "in_label": null,
      "out": 0.06,
      "out_label": "estimate before generation",
      "scope_label": "Estimated generation cost",
      "sort_in": null,
      "sort_out": 0.06,
      "varies": false
    },
    "short": "FLUX.2 [pro] là mô hình hình ảnh phục vụ sản xuất của Black Forest Labs, dùng để tạo ảnh từ văn bản và chỉnh sửa theo ảnh tham chiếu. Cấu hình được công bố kết hợp chi tiết chân thực như ảnh chụp, khả năng kiểm soát chữ và màu với ngân sách điểm ảnh dùng chung cho tham chiếu và đầu ra, cùng ảnh tối đa 4 megapixel."
  },
  "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": "FLUX.2 [pro] là mô hình hình ảnh phục vụ sản xuất của Black Forest Labs, dùng để tạo ảnh từ văn bản và chỉnh sửa theo ảnh tham chiếu. Cấu hình được công bố kết hợp chi tiết chân thực như ảnh chụp, khả năng kiểm soát chữ và màu với ngân sách điểm ảnh dùng chung cho tham chiếu và đầu ra, cùng ảnh tối đa 4 megapixel.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "f8ae8c5360aa42e6bb4bf3a43d381af95fa0173afb121d8b5cbcd83aad850106",
    "renderer_sha256": "64a62299639eb843877e9ec5c95e32bf22bac3acfe230f6f502c5c3aa186f9c1"
  },
  "sourceRevision": "4f78ed3a1c4b6a62523d2809fce213379d8e1138d5c0d63f05603790413947b2"
}
