{
  "aboutHtml": "<p>FLUX 3 Image là mô hình tạo và chỉnh sửa ảnh của Black Forest Labs với khả năng kiểm soát bố cục rõ ràng. Mô tả văn bản có thể tạo cảnh mới; ảnh cung cấp có thể xác lập chủ thể, cảnh cần sửa hoặc nhiều yếu tố cần kết hợp. Khung bao cho phép bản yêu cầu chỉ định vị trí từng yếu tố và phần nào của ảnh có sẵn cần thay đổi. Kết quả là hình ảnh có cảnh, chữ và bố cục yêu cầu để kiểm tra.</p><h4>Tạo cảnh hoặc đưa chỉ dẫn chỉnh sửa</h4><p>Với ảnh mới, mô tả chủ thể, hành động hoặc tư thế, bối cảnh, ánh sáng và khung hình. Đặt chữ chính xác cần xuất hiện trong ảnh vào dấu ngoặc kép và nêu vị trí. Một bản yêu cầu sản phẩm tự soạn có thể mô tả cốc cắm trại đỏ trên bề mặt đá nhạt, tiêu đề lớn phía trên và ánh sáng sớm dịu làm rõ tay cầm. Xác định quan hệ giữa tiêu đề, sản phẩm và nền thay vì đưa những từ phong cách rời rạc.</p><p>Khi chỉnh sửa, xác định vật thể cụ thể và thay đổi: đổi màu cốc, thay nhãn, di chuyển một người hoặc đổi phong cách cảnh. Một chỉnh sửa đơn lẻ không đòi hỏi vẽ khung thủ công. Quy trình được công bố mở rộng chỉ dẫn trước khi tạo ảnh và có thể tự định vị yếu tố được nêu tên rồi thêm khung. Câu lệnh đã mở rộng trả về ghi lại cách diễn giải đó, hữu ích khi chỉ dẫn chọn sai vật thể hoặc thêm chi tiết không mong muốn.</p><h4>Kết hợp và chuẩn bị ảnh tham chiếu</h4><p>Cấu hình cụ thể của nhà sản xuất nhận từ một đến mười tham chiếu, cung cấp dưới dạng URL ảnh hoặc dữ liệu ảnh đã mã hoá. Mỗi ảnh phải ít nhất 256×256 pixel và không lớn hơn 16 megapixel. Gọi tham chiếu theo vị trí hoặc nội dung nhìn thấy, rồi giải thích vai trò: người từ Image 1, áo khoác từ Image 2 và căn phòng từ Image 3. Ảnh tham chiếu là nguồn thông tin thị giác, không phải chỉ dẫn sao chép mọi chi tiết không liên quan trong ảnh.</p><p>Thiết lập tỷ lệ khung hình mặc định là auto. Trong đặc tả yêu cầu, tỷ lệ được yêu cầu trong câu lệnh được ưu tiên; nếu không, tham chiếu thứ nhất xác lập khung hình, với đầu ra vuông làm phương án dự phòng khi không có tham chiếu hay hình dạng yêu cầu. Với ảnh ghép, đặt tham chiếu cảnh dự định đầu tiên hoặc chọn tỷ lệ rõ ràng. Lưu ảnh nguồn và thứ tự cùng kết quả để lần sửa sau dùng cùng điểm xuất phát thị giác.</p><h4>Đặt yếu tố bằng khung bao</h4><p>Câu lệnh bố cục kết hợp một chú thích với mảng JSON chứa các hàng yếu tố. Chú thích gọi tên yếu tố qua ký hiệu như &lt;cup_1&gt;; hàng chứa id, bbox và desc. Toạ độ là số nguyên từ 0 đến 1000 theo thứ tự [top, left, bottom, right], đo từ góc trên bên trái. Chẳng hạn, [0, 0, 500, 500] mô tả một phần tư phía trên bên trái, bất kể kích thước điểm ảnh của ảnh. Dùng đúng tỷ lệ khung hình đã dùng khi thiết kế bố cục, vì lưới toạ độ co giãn theo khung.</p><p>Một hàng chỉnh sửa dùng from, src_bbox và tgt_bbox cùng mã định danh và mô tả. ref_image_0 là ảnh đầu tiên được cung cấp. Khung nguồn và đích trùng nhau neo yếu tố tại chỗ; khung khác nhau di chuyển hoặc đổi kích thước yếu tố. Hàng mới không có nguồn tạo nội dung mô tả ở vị trí đích, cho phép thêm, thay hoặc đổi màu. Hàng nguồn không có đích xoá yếu tố. Nêu phần thêm và xoá trong cả chỉ dẫn viết lẫn các hàng, và giữ các hàng neo cho chi tiết phải ở nguyên vị trí.</p><p>Cho chữ một khung riêng và đặt nội dung chính xác trong dấu ngoặc kép ở desc. Khung hướng dẫn vị trí và tỷ lệ; chúng không phải mặt nạ cắt, nên yếu tố có thể vượt ra ngoài hình chữ nhật. Nhà sản xuất báo cáo vật thể mới trong khung khoảng 40×25 pixel thường không xuất hiện trong ví dụ của họ. Chừa đủ không gian nhìn thấy và kiểm tra ranh giới đã sửa. Điểm ảnh ngoài vùng đích thường giữ ổn định, nhưng bóng, phản chiếu và ánh sáng lân cận vẫn có thể thay đổi.</p><h4>Dùng thông tin làm căn cứ, nhóm đầu ra và hồ sơ hữu ích</h4><p>Cấu hình được công bố bật dùng thông tin làm căn cứ theo mặc định, cho phép tìm kiếm web và ảnh cung cấp thông tin cho quá trình tạo ảnh. Có thể tắt với bản yêu cầu chỉ nên dùng mô tả và tham chiếu được cung cấp. Với chủ thể thực tế, xác định rõ địa điểm, sự kiện hoặc vật thể và tách nội dung dữ kiện khỏi cách thể hiện nghệ thuật. Ảnh dựa trên tìm kiếm vẫn cần đối chiếu với tài liệu có thẩm quyền khi nhãn, vật thể hoặc sự kiện được mô tả phải chính xác.</p><p>Năm nhóm độ phân giải là 768sq, 1k, 1.5k, 2k và 4k, mặc định 1k. Trong mỗi nhóm, tổng số điểm ảnh được giữ tương đương giữa các tỷ lệ khung hình, nên chiều rộng và chiều cao chính xác phụ thuộc tỷ lệ đã chọn. Mười lăm tỷ lệ cố định trải từ 21:9 qua định dạng vuông và dọc đến 9:21. Cấu hình mô hình này kiểm soát kích thước qua tỷ lệ và độ phân giải; không cung cấp các trường seed, width hoặc height dùng trong cấu hình yêu cầu FLUX.2. Bộ chọn phiên bản được công bố hiện nêu một bản phát hành thay đổi theo thời gian, thay vì xác lập sự khớp trọng số nhà cung cấp theo ngày cụ thể.</p><p>Quy trình của nhà sản xuất trả ảnh sau xử lý bất đồng bộ, cùng câu lệnh đã mở rộng. Liên kết tải ảnh có chữ ký có hiệu lực một giờ. Lưu ảnh thực tế, câu lệnh cuối cùng và tham chiếu thay vì dựa vào liên kết tạm thời. Với tài nguyên đã kiểm tra, đối chiếu chữ yêu cầu, vị trí vật thể, danh tính theo tham chiếu và vùng thay đổi ở kích thước hiển thị dự định. Quá trình tạo hoàn tất là điểm bắt đầu kiểm tra các yêu cầu hình ảnh đó.</p>",
  "aboutText": "FLUX 3 Image là mô hình tạo và chỉnh sửa ảnh của Black Forest Labs với khả năng kiểm soát bố cục rõ ràng. Mô tả văn bản có thể tạo cảnh mới; ảnh cung cấp có thể xác lập chủ thể, cảnh cần sửa hoặc nhiều yếu tố cần kết hợp. Khung bao cho phép bản yêu cầu chỉ định vị trí từng yếu tố và phần nào của ảnh có sẵn cần thay đổi. Kết quả là hình ảnh có cảnh, chữ và bố cục yêu cầu để kiểm tra.\n\n### Tạo cảnh hoặc đưa chỉ dẫn chỉnh sửa\n\nVới ảnh mới, mô tả chủ thể, hành động hoặc tư thế, bối cảnh, ánh sáng và khung hình. Đặt chữ chính xác cần xuất hiện trong ảnh vào dấu ngoặc kép và nêu vị trí. Một bản yêu cầu sản phẩm tự soạn có thể mô tả cốc cắm trại đỏ trên bề mặt đá nhạt, tiêu đề lớn phía trên và ánh sáng sớm dịu làm rõ tay cầm. Xác định quan hệ giữa tiêu đề, sản phẩm và nền thay vì đưa những từ phong cách rời rạc.\n\nKhi chỉnh sửa, xác định vật thể cụ thể và thay đổi: đổi màu cốc, thay nhãn, di chuyển một người hoặc đổi phong cách cảnh. Một chỉnh sửa đơn lẻ không đòi hỏi vẽ khung thủ công. Quy trình được công bố mở rộng chỉ dẫn trước khi tạo ảnh và có thể tự định vị yếu tố được nêu tên rồi thêm khung. Câu lệnh đã mở rộng trả về ghi lại cách diễn giải đó, hữu ích khi chỉ dẫn chọn sai vật thể hoặc thêm chi tiết không mong muốn.\n\n### Kết hợp và chuẩn bị ảnh tham chiếu\n\nCấu hình cụ thể của nhà sản xuất nhận từ một đến mười tham chiếu, cung cấp dưới dạng URL ảnh hoặc dữ liệu ảnh đã mã hoá. Mỗi ảnh phải ít nhất 256×256 pixel và không lớn hơn 16 megapixel. Gọi tham chiếu theo vị trí hoặc nội dung nhìn thấy, rồi giải thích vai trò: người từ Image 1, áo khoác từ Image 2 và căn phòng từ Image 3. Ảnh tham chiếu là nguồn thông tin thị giác, không phải chỉ dẫn sao chép mọi chi tiết không liên quan trong ảnh.\n\nThiết lập tỷ lệ khung hình mặc định là auto. Trong đặc tả yêu cầu, tỷ lệ được yêu cầu trong câu lệnh được ưu tiên; nếu không, tham chiếu thứ nhất xác lập khung hình, với đầu ra vuông làm phương án dự phòng khi không có tham chiếu hay hình dạng yêu cầu. Với ảnh ghép, đặt tham chiếu cảnh dự định đầu tiên hoặc chọn tỷ lệ rõ ràng. Lưu ảnh nguồn và thứ tự cùng kết quả để lần sửa sau dùng cùng điểm xuất phát thị giác.\n\n### Đặt yếu tố bằng khung bao\n\nCâu lệnh bố cục kết hợp một chú thích với mảng JSON chứa các hàng yếu tố. Chú thích gọi tên yếu tố qua ký hiệu như <cup_1>; hàng chứa id, bbox và desc. Toạ độ là số nguyên từ 0 đến 1000 theo thứ tự [top, left, bottom, right], đo từ góc trên bên trái. Chẳng hạn, [0, 0, 500, 500] mô tả một phần tư phía trên bên trái, bất kể kích thước điểm ảnh của ảnh. Dùng đúng tỷ lệ khung hình đã dùng khi thiết kế bố cục, vì lưới toạ độ co giãn theo khung.\n\nMột hàng chỉnh sửa dùng from, src_bbox và tgt_bbox cùng mã định danh và mô tả. ref_image_0 là ảnh đầu tiên được cung cấp. Khung nguồn và đích trùng nhau neo yếu tố tại chỗ; khung khác nhau di chuyển hoặc đổi kích thước yếu tố. Hàng mới không có nguồn tạo nội dung mô tả ở vị trí đích, cho phép thêm, thay hoặc đổi màu. Hàng nguồn không có đích xoá yếu tố. Nêu phần thêm và xoá trong cả chỉ dẫn viết lẫn các hàng, và giữ các hàng neo cho chi tiết phải ở nguyên vị trí.\n\nCho chữ một khung riêng và đặt nội dung chính xác trong dấu ngoặc kép ở desc. Khung hướng dẫn vị trí và tỷ lệ; chúng không phải mặt nạ cắt, nên yếu tố có thể vượt ra ngoài hình chữ nhật. Nhà sản xuất báo cáo vật thể mới trong khung khoảng 40×25 pixel thường không xuất hiện trong ví dụ của họ. Chừa đủ không gian nhìn thấy và kiểm tra ranh giới đã sửa. Điểm ảnh ngoài vùng đích thường giữ ổn định, nhưng bóng, phản chiếu và ánh sáng lân cận vẫn có thể thay đổi.\n\n### Dùng thông tin làm căn cứ, nhóm đầu ra và hồ sơ hữu ích\n\nCấu hình được công bố bật dùng thông tin làm căn cứ theo mặc định, cho phép tìm kiếm web và ảnh cung cấp thông tin cho quá trình tạo ảnh. Có thể tắt với bản yêu cầu chỉ nên dùng mô tả và tham chiếu được cung cấp. Với chủ thể thực tế, xác định rõ địa điểm, sự kiện hoặc vật thể và tách nội dung dữ kiện khỏi cách thể hiện nghệ thuật. Ảnh dựa trên tìm kiếm vẫn cần đối chiếu với tài liệu có thẩm quyền khi nhãn, vật thể hoặc sự kiện được mô tả phải chính xác.\n\nNăm nhóm độ phân giải là 768sq, 1k, 1.5k, 2k và 4k, mặc định 1k. Trong mỗi nhóm, tổng số điểm ảnh được giữ tương đương giữa các tỷ lệ khung hình, nên chiều rộng và chiều cao chính xác phụ thuộc tỷ lệ đã chọn. Mười lăm tỷ lệ cố định trải từ 21:9 qua định dạng vuông và dọc đến 9:21. Cấu hình mô hình này kiểm soát kích thước qua tỷ lệ và độ phân giải; không cung cấp các trường seed, width hoặc height dùng trong cấu hình yêu cầu FLUX.2. Bộ chọn phiên bản được công bố hiện nêu một bản phát hành thay đổi theo thời gian, thay vì xác lập sự khớp trọng số nhà cung cấp theo ngày cụ thể.\n\nQuy trình của nhà sản xuất trả ảnh sau xử lý bất đồng bộ, cùng câu lệnh đã mở rộng. Liên kết tải ảnh có chữ ký có hiệu lực một giờ. Lưu ảnh thực tế, câu lệnh cuối cùng và tham chiếu thay vì dựa vào liên kết tạm thời. Với tài nguyên đã kiểm tra, đối chiếu chữ yêu cầu, vị trí vật thể, danh tính theo tham chiếu và vùng thay đổi ở kích thước hiển thị dự định. Quá trình tạo hoàn tất là điểm bắt đầu kiểm tra các yêu cầu hình ảnh đó.\n\n",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "f30904b7935c6c78adbe647bf8e2ab203bacc70d9a733e046a5d9bc8eca3d602",
    "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.3 Image</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-3-image</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-3-image\">Ả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 3 Image tạo và chỉnh sửa ảnh từ bản yêu cầu bằng văn bản và tối đa mười tham chiếu. Mô hình bổ sung khung bao dựa trên câu lệnh cho bố cục và thay đổi cục bộ, dùng web và ảnh làm căn cứ, cùng năm nhóm độ phân giải.</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 3 Image là mô hình tạo và chỉnh sửa ảnh của Black Forest Labs với khả năng kiểm soát bố cục rõ ràng. Mô tả văn bản có thể tạo cảnh mới; ảnh cung cấp có thể xác lập chủ thể, cảnh cần sửa hoặc nhiều yếu tố cần kết hợp. Khung bao cho phép bản yêu cầu chỉ định vị trí từng yếu tố và phần nào của ảnh có sẵn cần thay đổi. Kết quả là hình ảnh có cảnh, chữ và bố cục yêu cầu để kiểm tra.</p><h4>Tạo cảnh hoặc đưa chỉ dẫn chỉnh sửa</h4><p>Với ảnh mới, mô tả chủ thể, hành động hoặc tư thế, bối cảnh, ánh sáng và khung hình. Đặt chữ chính xác cần xuất hiện trong ảnh vào dấu ngoặc kép và nêu vị trí. Một bản yêu cầu sản phẩm tự soạn có thể mô tả cốc cắm trại đỏ trên bề mặt đá nhạt, tiêu đề lớn phía trên và ánh sáng sớm dịu làm rõ tay cầm. Xác định quan hệ giữa tiêu đề, sản phẩm và nền thay vì đưa những từ phong cách rời rạc.</p><p>Khi chỉnh sửa, xác định vật thể cụ thể và thay đổi: đổi màu cốc, thay nhãn, di chuyển một người hoặc đổi phong cách cảnh. Một chỉnh sửa đơn lẻ không đòi hỏi vẽ khung thủ công. Quy trình được công bố mở rộng chỉ dẫn trước khi tạo ảnh và có thể tự định vị yếu tố được nêu tên rồi thêm khung. Câu lệnh đã mở rộng trả về ghi lại cách diễn giải đó, hữu ích khi chỉ dẫn chọn sai vật thể hoặc thêm chi tiết không mong muốn.</p><h4>Kết hợp và chuẩn bị ảnh tham chiếu</h4><p>Cấu hình cụ thể của nhà sản xuất nhận từ một đến mười tham chiếu, cung cấp dưới dạng URL ảnh hoặc dữ liệu ảnh đã mã hoá. Mỗi ảnh phải ít nhất 256×256 pixel và không lớn hơn 16 megapixel. Gọi tham chiếu theo vị trí hoặc nội dung nhìn thấy, rồi giải thích vai trò: người từ Image 1, áo khoác từ Image 2 và căn phòng từ Image 3. Ảnh tham chiếu là nguồn thông tin thị giác, không phải chỉ dẫn sao chép mọi chi tiết không liên quan trong ảnh.</p><p>Thiết lập tỷ lệ khung hình mặc định là auto. Trong đặc tả yêu cầu, tỷ lệ được yêu cầu trong câu lệnh được ưu tiên; nếu không, tham chiếu thứ nhất xác lập khung hình, với đầu ra vuông làm phương án dự phòng khi không có tham chiếu hay hình dạng yêu cầu. Với ảnh ghép, đặt tham chiếu cảnh dự định đầu tiên hoặc chọn tỷ lệ rõ ràng. Lưu ảnh nguồn và thứ tự cùng kết quả để lần sửa sau dùng cùng điểm xuất phát thị giác.</p><h4>Đặt yếu tố bằng khung bao</h4><p>Câu lệnh bố cục kết hợp một chú thích với mảng JSON chứa các hàng yếu tố. Chú thích gọi tên yếu tố qua ký hiệu như &lt;cup_1&gt;; hàng chứa id, bbox và desc. Toạ độ là số nguyên từ 0 đến 1000 theo thứ tự [top, left, bottom, right], đo từ góc trên bên trái. Chẳng hạn, [0, 0, 500, 500] mô tả một phần tư phía trên bên trái, bất kể kích thước điểm ảnh của ảnh. Dùng đúng tỷ lệ khung hình đã dùng khi thiết kế bố cục, vì lưới toạ độ co giãn theo khung.</p><p>Một hàng chỉnh sửa dùng from, src_bbox và tgt_bbox cùng mã định danh và mô tả. ref_image_0 là ảnh đầu tiên được cung cấp. Khung nguồn và đích trùng nhau neo yếu tố tại chỗ; khung khác nhau di chuyển hoặc đổi kích thước yếu tố. Hàng mới không có nguồn tạo nội dung mô tả ở vị trí đích, cho phép thêm, thay hoặc đổi màu. Hàng nguồn không có đích xoá yếu tố. Nêu phần thêm và xoá trong cả chỉ dẫn viết lẫn các hàng, và giữ các hàng neo cho chi tiết phải ở nguyên vị trí.</p><p>Cho chữ một khung riêng và đặt nội dung chính xác trong dấu ngoặc kép ở desc. Khung hướng dẫn vị trí và tỷ lệ; chúng không phải mặt nạ cắt, nên yếu tố có thể vượt ra ngoài hình chữ nhật. Nhà sản xuất báo cáo vật thể mới trong khung khoảng 40×25 pixel thường không xuất hiện trong ví dụ của họ. Chừa đủ không gian nhìn thấy và kiểm tra ranh giới đã sửa. Điểm ảnh ngoài vùng đích thường giữ ổn định, nhưng bóng, phản chiếu và ánh sáng lân cận vẫn có thể thay đổi.</p><h4>Dùng thông tin làm căn cứ, nhóm đầu ra và hồ sơ hữu ích</h4><p>Cấu hình được công bố bật dùng thông tin làm căn cứ theo mặc định, cho phép tìm kiếm web và ảnh cung cấp thông tin cho quá trình tạo ảnh. Có thể tắt với bản yêu cầu chỉ nên dùng mô tả và tham chiếu được cung cấp. Với chủ thể thực tế, xác định rõ địa điểm, sự kiện hoặc vật thể và tách nội dung dữ kiện khỏi cách thể hiện nghệ thuật. Ảnh dựa trên tìm kiếm vẫn cần đối chiếu với tài liệu có thẩm quyền khi nhãn, vật thể hoặc sự kiện được mô tả phải chính xác.</p><p>Năm nhóm độ phân giải là 768sq, 1k, 1.5k, 2k và 4k, mặc định 1k. Trong mỗi nhóm, tổng số điểm ảnh được giữ tương đương giữa các tỷ lệ khung hình, nên chiều rộng và chiều cao chính xác phụ thuộc tỷ lệ đã chọn. Mười lăm tỷ lệ cố định trải từ 21:9 qua định dạng vuông và dọc đến 9:21. Cấu hình mô hình này kiểm soát kích thước qua tỷ lệ và độ phân giải; không cung cấp các trường seed, width hoặc height dùng trong cấu hình yêu cầu FLUX.2. Bộ chọn phiên bản được công bố hiện nêu một bản phát hành thay đổi theo thời gian, thay vì xác lập sự khớp trọng số nhà cung cấp theo ngày cụ thể.</p><p>Quy trình của nhà sản xuất trả ảnh sau xử lý bất đồng bộ, cùng câu lệnh đã mở rộng. Liên kết tải ảnh có chữ ký có hiệu lực một giờ. Lưu ảnh thực tế, câu lệnh cuối cùng và tham chiếu thay vì dựa vào liên kết tạm thời. Với tài nguyên đã kiểm tra, đối chiếu chữ yêu cầu, vị trí vật thể, danh tính theo tham chiếu và vùng thay đổi ở kích thước hiển thị dự định. Quá trình tạo hoàn tất là điểm bắt đầu kiểm tra các yêu cầu hình ảnh đó.</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-3-image</div></td><td data-cell-label=\"Mặc định\" data-default=\"unspecified\"><span class=\"card-cell-label\">Mặc định</span>—</td></tr><tr><th data-cell-label=\"Trường\" scope=\"row\"><span class=\"card-cell-label\">Trường</span><code class=\"card-field-name\">prompt</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span><code>string</code></td><td data-cell-label=\"Yêu cầu\"><span class=\"card-cell-label\">Yêu cầu</span>Bắt buộc</td><td data-cell-label=\"Giá trị &amp; giới hạn\"><span class=\"card-cell-label\">Giá trị &amp; giới hạn</span><div>Độ dài tối thiểu: 1</div></td><td data-cell-label=\"Mặc định\" data-default=\"unspecified\"><span class=\"card-cell-label\">Mặc định</span>—</td></tr><tr><th data-cell-label=\"Trường\" scope=\"row\"><span class=\"card-cell-label\">Trường</span><code class=\"card-field-name\">resolution</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span><code>string</code></td><td data-cell-label=\"Yêu cầu\"><span class=\"card-cell-label\">Yêu cầu</span>Không bắt buộc</td><td data-cell-label=\"Giá trị &amp; giới hạn\"><span class=\"card-cell-label\">Giá trị &amp; giới hạn</span><div>768, 1K, 1.5K, 2K, 4K</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>21:9, 2:1, 16:9, 3:2, 7:5, 4:3, 5:4, 1:1, 4:5, 3:4, 5:7, 2:3, 9:16, 1:2, 9:21, 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\">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: 10</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>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=\"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>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=\"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.082</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-1090-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1090-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-1090-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1090-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-3-image&#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-1091-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1091-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-1091-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1091-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-3-image&amp;route=Ultra&amp;caller=black-forest-labs%2Fflux-3-image&amp;fmt=images\"><code>black-forest-labs/flux-3-image</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-3-image&amp;route=Ultra&amp;caller=black-forest-labs%2Fflux-3-image&amp;fmt=images\"><code>black-forest-labs/flux-3-image</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "black-forest-labs/flux-3-image",
        "fmt": "images",
        "http": "POST",
        "path": "/v1/images/generations",
        "request_model_id": "black-forest-labs/flux-3-image",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|images|/v1/images/generations|black-forest-labs%2Fflux-3-image",
      "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-3-image"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "min_length": 1,
                "name": "prompt",
                "required": true,
                "type": "string"
              },
              {
                "enum": [
                  "768",
                  "1K",
                  "1.5K",
                  "2K",
                  "4K"
                ],
                "enum_known": true,
                "name": "resolution",
                "required": false,
                "type": "string"
              },
              {
                "enum": [
                  "21:9",
                  "2:1",
                  "16:9",
                  "3:2",
                  "7:5",
                  "4:3",
                  "5:4",
                  "1:1",
                  "4:5",
                  "3:4",
                  "5:7",
                  "2:3",
                  "9:16",
                  "1:2",
                  "9:21",
                  "auto"
                ],
                "enum_known": true,
                "name": "aspect_ratio",
                "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": 10,
                "minimum_items": 0,
                "name": "input_references",
                "required": false,
                "type": "array"
              },
              {
                "name": "provider",
                "required": false,
                "type": "object"
              }
            ],
            "request_schema": {
              "properties": {
                "aspect_ratio": {
                  "enum": [
                    "21:9",
                    "2:1",
                    "16:9",
                    "3:2",
                    "7:5",
                    "4:3",
                    "5:4",
                    "1:1",
                    "4:5",
                    "3:4",
                    "5:7",
                    "2:3",
                    "9:16",
                    "1:2",
                    "9:21",
                    "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": 10,
                  "minItems": 0,
                  "type": "array"
                },
                "model": {
                  "enum": [
                    "black-forest-labs/flux-3-image"
                  ],
                  "type": "string"
                },
                "n": {
                  "maximum": 1,
                  "minimum": 1,
                  "type": "integer"
                },
                "prompt": {
                  "minLength": 1,
                  "type": "string"
                },
                "provider": {
                  "description": "Exact image provider preferences from the documented image request schema.",
                  "type": "object"
                },
                "resolution": {
                  "enum": [
                    "768",
                    "1K",
                    "1.5K",
                    "2K",
                    "4K"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "model",
                "prompt"
              ],
              "type": "object"
            },
            "schema_template": {
              "actual_file_preparation_required": false,
              "body": {
                "model": "black-forest-labs/flux-3-image",
                "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"
              }
            ]
          },
          {
            "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.082",
                "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.082",
                "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-3-image', '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"
              }
            ]
          },
          {
            "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.082",
                "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.082",
                "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-3-image",
        "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.082",
            "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.082",
            "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-3-image",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "270108786c853d476acee89ef271b83591f625887fda27f64f699910829c3a91",
    "input_html_sha256": "3d7da63f423c8a454e058dcb2f59a64ed51cf1e2c72eb1cecb42a9a854da9246",
    "private_audit_sha256": "44034dd37148e74beb0d421932ab199312f8330d2d5098ebcfcb1feac358a334",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/vi/black-forest-labs-flux-3-image/",
    "description": "FLUX 3 Image tạo và chỉnh sửa ảnh từ bản yêu cầu bằng văn bản và tối đa mười tham chiếu. Mô hình bổ sung khung bao dựa trên câu lệnh cho bố cục và thay đổi cục bộ, dùng web và ảnh làm căn cứ, cùng năm nhóm độ phân giải.",
    "locale": "vi",
    "md_url": "https://ailoot.ai/models/vi/black-forest-labs-flux-3-image/index.md",
    "title": "Black Forest Labs: FLUX.3 Image — Ailoot",
    "url": "https://ailoot.ai/models/vi/black-forest-labs-flux-3-image/"
  },
  "rawModel": {
    "about": "FLUX 3 Image là mô hình tạo và chỉnh sửa ảnh của Black Forest Labs với khả năng kiểm soát bố cục rõ ràng. Mô tả văn bản có thể tạo cảnh mới; ảnh cung cấp có thể xác lập chủ thể, cảnh cần sửa hoặc nhiều yếu tố cần kết hợp. Khung bao cho phép bản yêu cầu chỉ định vị trí từng yếu tố và phần nào của ảnh có sẵn cần thay đổi. Kết quả là hình ảnh có cảnh, chữ và bố cục yêu cầu để kiểm tra.\n\n### Tạo cảnh hoặc đưa chỉ dẫn chỉnh sửa\n\nVới ảnh mới, mô tả chủ thể, hành động hoặc tư thế, bối cảnh, ánh sáng và khung hình. Đặt chữ chính xác cần xuất hiện trong ảnh vào dấu ngoặc kép và nêu vị trí. Một bản yêu cầu sản phẩm tự soạn có thể mô tả cốc cắm trại đỏ trên bề mặt đá nhạt, tiêu đề lớn phía trên và ánh sáng sớm dịu làm rõ tay cầm. Xác định quan hệ giữa tiêu đề, sản phẩm và nền thay vì đưa những từ phong cách rời rạc.\n\nKhi chỉnh sửa, xác định vật thể cụ thể và thay đổi: đổi màu cốc, thay nhãn, di chuyển một người hoặc đổi phong cách cảnh. Một chỉnh sửa đơn lẻ không đòi hỏi vẽ khung thủ công. Quy trình được công bố mở rộng chỉ dẫn trước khi tạo ảnh và có thể tự định vị yếu tố được nêu tên rồi thêm khung. Câu lệnh đã mở rộng trả về ghi lại cách diễn giải đó, hữu ích khi chỉ dẫn chọn sai vật thể hoặc thêm chi tiết không mong muốn.\n\n### Kết hợp và chuẩn bị ảnh tham chiếu\n\nCấu hình cụ thể của nhà sản xuất nhận từ một đến mười tham chiếu, cung cấp dưới dạng URL ảnh hoặc dữ liệu ảnh đã mã hoá. Mỗi ảnh phải ít nhất 256×256 pixel và không lớn hơn 16 megapixel. Gọi tham chiếu theo vị trí hoặc nội dung nhìn thấy, rồi giải thích vai trò: người từ Image 1, áo khoác từ Image 2 và căn phòng từ Image 3. Ảnh tham chiếu là nguồn thông tin thị giác, không phải chỉ dẫn sao chép mọi chi tiết không liên quan trong ảnh.\n\nThiết lập tỷ lệ khung hình mặc định là auto. Trong đặc tả yêu cầu, tỷ lệ được yêu cầu trong câu lệnh được ưu tiên; nếu không, tham chiếu thứ nhất xác lập khung hình, với đầu ra vuông làm phương án dự phòng khi không có tham chiếu hay hình dạng yêu cầu. Với ảnh ghép, đặt tham chiếu cảnh dự định đầu tiên hoặc chọn tỷ lệ rõ ràng. Lưu ảnh nguồn và thứ tự cùng kết quả để lần sửa sau dùng cùng điểm xuất phát thị giác.\n\n### Đặt yếu tố bằng khung bao\n\nCâu lệnh bố cục kết hợp một chú thích với mảng JSON chứa các hàng yếu tố. Chú thích gọi tên yếu tố qua ký hiệu như <cup_1>; hàng chứa id, bbox và desc. Toạ độ là số nguyên từ 0 đến 1000 theo thứ tự [top, left, bottom, right], đo từ góc trên bên trái. Chẳng hạn, [0, 0, 500, 500] mô tả một phần tư phía trên bên trái, bất kể kích thước điểm ảnh của ảnh. Dùng đúng tỷ lệ khung hình đã dùng khi thiết kế bố cục, vì lưới toạ độ co giãn theo khung.\n\nMột hàng chỉnh sửa dùng from, src_bbox và tgt_bbox cùng mã định danh và mô tả. ref_image_0 là ảnh đầu tiên được cung cấp. Khung nguồn và đích trùng nhau neo yếu tố tại chỗ; khung khác nhau di chuyển hoặc đổi kích thước yếu tố. Hàng mới không có nguồn tạo nội dung mô tả ở vị trí đích, cho phép thêm, thay hoặc đổi màu. Hàng nguồn không có đích xoá yếu tố. Nêu phần thêm và xoá trong cả chỉ dẫn viết lẫn các hàng, và giữ các hàng neo cho chi tiết phải ở nguyên vị trí.\n\nCho chữ một khung riêng và đặt nội dung chính xác trong dấu ngoặc kép ở desc. Khung hướng dẫn vị trí và tỷ lệ; chúng không phải mặt nạ cắt, nên yếu tố có thể vượt ra ngoài hình chữ nhật. Nhà sản xuất báo cáo vật thể mới trong khung khoảng 40×25 pixel thường không xuất hiện trong ví dụ của họ. Chừa đủ không gian nhìn thấy và kiểm tra ranh giới đã sửa. Điểm ảnh ngoài vùng đích thường giữ ổn định, nhưng bóng, phản chiếu và ánh sáng lân cận vẫn có thể thay đổi.\n\n### Dùng thông tin làm căn cứ, nhóm đầu ra và hồ sơ hữu ích\n\nCấu hình được công bố bật dùng thông tin làm căn cứ theo mặc định, cho phép tìm kiếm web và ảnh cung cấp thông tin cho quá trình tạo ảnh. Có thể tắt với bản yêu cầu chỉ nên dùng mô tả và tham chiếu được cung cấp. Với chủ thể thực tế, xác định rõ địa điểm, sự kiện hoặc vật thể và tách nội dung dữ kiện khỏi cách thể hiện nghệ thuật. Ảnh dựa trên tìm kiếm vẫn cần đối chiếu với tài liệu có thẩm quyền khi nhãn, vật thể hoặc sự kiện được mô tả phải chính xác.\n\nNăm nhóm độ phân giải là 768sq, 1k, 1.5k, 2k và 4k, mặc định 1k. Trong mỗi nhóm, tổng số điểm ảnh được giữ tương đương giữa các tỷ lệ khung hình, nên chiều rộng và chiều cao chính xác phụ thuộc tỷ lệ đã chọn. Mười lăm tỷ lệ cố định trải từ 21:9 qua định dạng vuông và dọc đến 9:21. Cấu hình mô hình này kiểm soát kích thước qua tỷ lệ và độ phân giải; không cung cấp các trường seed, width hoặc height dùng trong cấu hình yêu cầu FLUX.2. Bộ chọn phiên bản được công bố hiện nêu một bản phát hành thay đổi theo thời gian, thay vì xác lập sự khớp trọng số nhà cung cấp theo ngày cụ thể.\n\nQuy trình của nhà sản xuất trả ảnh sau xử lý bất đồng bộ, cùng câu lệnh đã mở rộng. Liên kết tải ảnh có chữ ký có hiệu lực một giờ. Lưu ảnh thực tế, câu lệnh cuối cùng và tham chiếu thay vì dựa vào liên kết tạm thời. Với tài nguyên đã kiểm tra, đối chiếu chữ yêu cầu, vị trí vật thể, danh tính theo tham chiếu và vùng thay đổi ở kích thước hiển thị dự định. Quá trình tạo hoàn tất là điểm bắt đầu kiểm tra các yêu cầu hình ảnh đó.\n\n",
    "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.082",
            "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.082",
            "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-3-image",
    "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-3-image"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "min_length": 1,
                "name": "prompt",
                "required": true,
                "type": "string"
              },
              {
                "enum": [
                  "768",
                  "1K",
                  "1.5K",
                  "2K",
                  "4K"
                ],
                "enum_known": true,
                "name": "resolution",
                "required": false,
                "type": "string"
              },
              {
                "enum": [
                  "21:9",
                  "2:1",
                  "16:9",
                  "3:2",
                  "7:5",
                  "4:3",
                  "5:4",
                  "1:1",
                  "4:5",
                  "3:4",
                  "5:7",
                  "2:3",
                  "9:16",
                  "1:2",
                  "9:21",
                  "auto"
                ],
                "enum_known": true,
                "name": "aspect_ratio",
                "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": 10,
                "minimum_items": 0,
                "name": "input_references",
                "required": false,
                "type": "array"
              },
              {
                "name": "provider",
                "required": false,
                "type": "object"
              }
            ],
            "request_schema": {
              "properties": {
                "aspect_ratio": {
                  "enum": [
                    "21:9",
                    "2:1",
                    "16:9",
                    "3:2",
                    "7:5",
                    "4:3",
                    "5:4",
                    "1:1",
                    "4:5",
                    "3:4",
                    "5:7",
                    "2:3",
                    "9:16",
                    "1:2",
                    "9:21",
                    "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": 10,
                  "minItems": 0,
                  "type": "array"
                },
                "model": {
                  "enum": [
                    "black-forest-labs/flux-3-image"
                  ],
                  "type": "string"
                },
                "n": {
                  "maximum": 1,
                  "minimum": 1,
                  "type": "integer"
                },
                "prompt": {
                  "minLength": 1,
                  "type": "string"
                },
                "provider": {
                  "description": "Exact image provider preferences from the documented image request schema.",
                  "type": "object"
                },
                "resolution": {
                  "enum": [
                    "768",
                    "1K",
                    "1.5K",
                    "2K",
                    "4K"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "model",
                "prompt"
              ],
              "type": "object"
            },
            "schema_template": {
              "actual_file_preparation_required": false,
              "body": {
                "model": "black-forest-labs/flux-3-image",
                "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"
              }
            ]
          },
          {
            "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.082",
                "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.082",
                "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-3-image', '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"
              }
            ]
          },
          {
            "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.082",
                "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.082",
                "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-3-image",
        "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.082",
            "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.082",
            "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-3-image",
        "request_model_id": "black-forest-labs/flux-3-image",
        "route_label": "Ultra"
      }
    ],
    "name": "Black Forest Labs: FLUX.3 Image",
    "price": {
      "estimate_only": true,
      "in": null,
      "in_label": null,
      "out": 0.082,
      "out_label": "estimate before generation",
      "scope_label": "Estimated generation cost",
      "sort_in": null,
      "sort_out": 0.082,
      "varies": false
    },
    "short": "FLUX 3 Image tạo và chỉnh sửa ảnh từ bản yêu cầu bằng văn bản và tối đa mười tham chiếu. Mô hình bổ sung khung bao dựa trên câu lệnh cho bố cục và thay đổi cục bộ, dùng web và ảnh làm căn cứ, cùng năm nhóm độ phân giải."
  },
  "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 3 Image tạo và chỉnh sửa ảnh từ bản yêu cầu bằng văn bản và tối đa mười tham chiếu. Mô hình bổ sung khung bao dựa trên câu lệnh cho bố cục và thay đổi cục bộ, dùng web và ảnh làm căn cứ, cùng năm nhóm độ phân giải.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "8ab71b4d47961005c89435a4a3592a60c600f8358113754890c05a39f38e6f10",
    "renderer_sha256": "64a62299639eb843877e9ec5c95e32bf22bac3acfe230f6f502c5c3aa186f9c1"
  },
  "sourceRevision": "a54e3861456f50658106ac97e7fc0240c49a64b183327084341520970163cb87"
}
