{
  "aboutHtml": "<p>FLUX Video Upscale là quy trình siêu phân giải video của Black Forest Labs, được vận hành bằng FLUX 3. Quy trình nhận đoạn video có sẵn và trả MP4 phóng lớn, đưa bố cục và âm thanh nguồn vào kết quả. Mô tả ngắn tùy chọn có thể định hướng chi tiết hình ảnh được tăng cường. Hai chế độ tạo lựa chọn có ý nghĩa giữa giữ gần diện mạo cung cấp và tạo chi tiết mạnh hơn, thay vì coi mọi hình ảnh lớn hơn là bản tái dựng trung thành như nhau.</p><h4>Chọn tăng cường chính xác hoặc sáng tạo</h4><p>Thiết lập creativity chọn chế độ. Giá trị 0 là cấu hình chính xác, trung thành với nguồn: nhà sản xuất khuyến nghị khi khuôn mặt, sản phẩm hoặc tài sản thương hiệu cần giữ danh tính. Giá trị 1 bật tăng cường chi tiết sáng tạo và là mặc định. Chế độ này có thể phục hồi hoặc sáng tạo kết cấu mạnh hơn, hữu ích cho cảnh quay được tạo, phong cảnh, đám đông hoặc bề mặt có chi tiết có thể phát triển sáng tạo.</p><p>Nhà sản xuất cảnh báo rõ rằng tăng cường sáng tạo không giữ khuôn mặt và sản phẩm nghiêm ngặt như vậy. Kiểm tra đặc điểm phải còn nhận diện được: diện mạo khuôn mặt, đường nét sản phẩm, chữ, hoa văn chất liệu hoặc logo. Hình trông sắc nét hơn vẫn có thể chứa chi tiết thay đổi hoặc mới được tạo ra. Với trình diễn sản phẩm, dùng diện mạo sản phẩm dự kiến làm tiêu chí xem xét thay vì chỉ chọn phiên bản có kết cấu cầu kỳ hơn.</p><p>Lời nhắc tùy chọn mô tả nội dung đoạn video để hướng dẫn tăng cường; mô tả trống yêu cầu phóng lớn trung tính. Bản mô tả cảnh được tạo ban đầu có thể xác định tường đá phủ rêu, ánh sáng ban ngày dịu và kết cấu lá tinh tế. Tập trung câu chữ vào tư liệu cần tinh chỉnh. Yêu cầu thay vật, dựng lại bối cảnh hoặc đổi hội thoại thuộc quyết định biên tập, trong khi cấu hình này giữ rãnh âm thanh nguồn.</p><h4>Hệ số phóng và diện tích khung đầu ra</h4><p>upscale_factor được mô tả có phạm vi từ 1.5 đến 3, với 2 là mặc định. Thiết lập tăng độ phân giải nguồn trong khi giữ tỷ lệ khung hình. Hệ số đã chọn và kích thước đầu vào xác định đầu ra dự kiến, vì vậy video ngang và bố cục dọc cần được lên kế hoạch từ khung thực tế. Chuẩn bị kích thước hiển thị đích trước khi chọn mức phóng hữu ích.</p><p>Đặc tả chính xác giới hạn mỗi khung đầu ra ở 13.75 đơn vị megapixel của nhà sản xuất. Tài liệu định nghĩa một đơn vị đó là 1,048,576 pixel, cho trần 14,417,920 pixel, xấp xỉ 14.4 triệu. Điều này giải thích cách ghi làm tròn 14.4 megapixel trong hướng dẫn. Vì vậy, nguồn lớn có thể được phóng ít hơn hệ số yêu cầu. Kiểm tra kích thước được giao thay vì giả định yêu cầu 3× luôn tạo gấp ba mỗi chiều nguồn.</p><p>Trần độ phân giải nguồn được công bố là 2560×1440. Quy trình tăng nguồn đủ điều kiện đến gần 4K và cao hơn; nó không chấp nhận nguồn vốn lớn hơn chỉ vì mong muốn đầu ra cao hơn. Giảm kích thước hoặc chuẩn bị bản làm việc phù hợp trước khi dùng cấu hình được mô tả đó. Giữ bản ghi gốc riêng để so sánh cuối không chỉ giới hạn ở bản trung gian đã đổi kích thước.</p><h4>Chuẩn bị nguồn ngắn, rõ</h4><p>Hướng dẫn chuẩn bị thông thường của nhà sản xuất giới hạn nguồn ở hai mươi giây và năm mươi MB. Đoạn video được cung cấp qua URL video hoặc MP4 mã hóa. Tài liệu tham chiếu chính xác lưu ý quá trình xử lý bao quát hai mươi giây đầu: vượt thời lượng ít có thể chỉ được xử lý đến mốc đó, còn đoạn dài hơn đáng kể bị từ chối. Không có dung sai bằng số được công bố. Cắt thành đoạn dự kiến dài hai mươi giây hoặc ngắn hơn thay vì phụ thuộc hành vi biên chưa được quy định.</p><p>Chọn phiên bản ít nén nhất có sẵn. Lỗi do nén giới hạn chi tiết thật mà bộ phóng có thể phục hồi, và tăng cường sáng tạo có thể tạo kết cấu hợp lý mà không xác lập cảnh gốc chứa gì. Hoàn tất chỉnh sửa và cắt mong muốn trước khi phóng đoạn đã chọn. Quy trình ban đầu có thể hoàn thiện cú máy sản phẩm, chọn khoảng hành động hữu ích rồi phóng phần chọn cuối đó, giữ nguồn chưa đổi để so sánh.</p><p>Kết quả giữ rãnh âm thanh nguồn. Kiểm tra thời điểm khớp với hình, đặc biệt đầu và cuối đoạn đã chọn. Cấu hình được mô tả không cung cấp bộ chọn tốc độ khung hình độc lập, tạo hội thoại mới hoặc điều khiển chỉnh sửa bằng ảnh tham chiếu. Mục đích là video lớn hơn với cách xử lý chi tiết đã chọn, giữ tư liệu thời gian và âm thanh nguồn trong đoạn được xử lý.</p><h4>Lưu và kiểm tra đoạn được giao</h4><p>Quy trình nhà sản xuất là bất đồng bộ: tác vụ đã gửi cung cấp mã định danh và vị trí trạng thái, còn kết quả hoàn tất chứa liên kết MP4 có chữ ký. Liên kết hết hạn sau khoảng một giờ. Lưu đoạn video thực tế, nguồn, hệ số đã chọn, chế độ creativity và mô tả nội dung thay vì phụ thuộc vị trí tạm. Phân biệt trạng thái thất bại hoặc bị kiểm duyệt với video hoàn tất.</p><p>Xem xét từng khung về khuôn mặt, dấu hiệu và thay đổi bề mặt, rồi xem toàn chuỗi về tính liên tục, chuyển động và khớp âm thanh. Đầu ra chính xác và sáng tạo đáp ứng yêu cầu hình ảnh khác nhau; sản phẩm hữu ích là đoạn phóng lớn đạt mục tiêu trung thực đã chọn ở kích thước hiển thị dự kiến. Độ phân giải lớn hơn đơn thuần không phải bằng chứng danh tính, câu chữ hoặc chi tiết tinh của nguồn vẫn đúng.</p>",
  "aboutText": "FLUX Video Upscale là quy trình siêu phân giải video của Black Forest Labs, được vận hành bằng FLUX 3. Quy trình nhận đoạn video có sẵn và trả MP4 phóng lớn, đưa bố cục và âm thanh nguồn vào kết quả. Mô tả ngắn tùy chọn có thể định hướng chi tiết hình ảnh được tăng cường. Hai chế độ tạo lựa chọn có ý nghĩa giữa giữ gần diện mạo cung cấp và tạo chi tiết mạnh hơn, thay vì coi mọi hình ảnh lớn hơn là bản tái dựng trung thành như nhau.\n\n### Chọn tăng cường chính xác hoặc sáng tạo\n\nThiết lập creativity chọn chế độ. Giá trị 0 là cấu hình chính xác, trung thành với nguồn: nhà sản xuất khuyến nghị khi khuôn mặt, sản phẩm hoặc tài sản thương hiệu cần giữ danh tính. Giá trị 1 bật tăng cường chi tiết sáng tạo và là mặc định. Chế độ này có thể phục hồi hoặc sáng tạo kết cấu mạnh hơn, hữu ích cho cảnh quay được tạo, phong cảnh, đám đông hoặc bề mặt có chi tiết có thể phát triển sáng tạo.\n\nNhà sản xuất cảnh báo rõ rằng tăng cường sáng tạo không giữ khuôn mặt và sản phẩm nghiêm ngặt như vậy. Kiểm tra đặc điểm phải còn nhận diện được: diện mạo khuôn mặt, đường nét sản phẩm, chữ, hoa văn chất liệu hoặc logo. Hình trông sắc nét hơn vẫn có thể chứa chi tiết thay đổi hoặc mới được tạo ra. Với trình diễn sản phẩm, dùng diện mạo sản phẩm dự kiến làm tiêu chí xem xét thay vì chỉ chọn phiên bản có kết cấu cầu kỳ hơn.\n\nLời nhắc tùy chọn mô tả nội dung đoạn video để hướng dẫn tăng cường; mô tả trống yêu cầu phóng lớn trung tính. Bản mô tả cảnh được tạo ban đầu có thể xác định tường đá phủ rêu, ánh sáng ban ngày dịu và kết cấu lá tinh tế. Tập trung câu chữ vào tư liệu cần tinh chỉnh. Yêu cầu thay vật, dựng lại bối cảnh hoặc đổi hội thoại thuộc quyết định biên tập, trong khi cấu hình này giữ rãnh âm thanh nguồn.\n\n### Hệ số phóng và diện tích khung đầu ra\n\nupscale_factor được mô tả có phạm vi từ 1.5 đến 3, với 2 là mặc định. Thiết lập tăng độ phân giải nguồn trong khi giữ tỷ lệ khung hình. Hệ số đã chọn và kích thước đầu vào xác định đầu ra dự kiến, vì vậy video ngang và bố cục dọc cần được lên kế hoạch từ khung thực tế. Chuẩn bị kích thước hiển thị đích trước khi chọn mức phóng hữu ích.\n\nĐặc tả chính xác giới hạn mỗi khung đầu ra ở 13.75 đơn vị megapixel của nhà sản xuất. Tài liệu định nghĩa một đơn vị đó là 1,048,576 pixel, cho trần 14,417,920 pixel, xấp xỉ 14.4 triệu. Điều này giải thích cách ghi làm tròn 14.4 megapixel trong hướng dẫn. Vì vậy, nguồn lớn có thể được phóng ít hơn hệ số yêu cầu. Kiểm tra kích thước được giao thay vì giả định yêu cầu 3× luôn tạo gấp ba mỗi chiều nguồn.\n\nTrần độ phân giải nguồn được công bố là 2560×1440. Quy trình tăng nguồn đủ điều kiện đến gần 4K và cao hơn; nó không chấp nhận nguồn vốn lớn hơn chỉ vì mong muốn đầu ra cao hơn. Giảm kích thước hoặc chuẩn bị bản làm việc phù hợp trước khi dùng cấu hình được mô tả đó. Giữ bản ghi gốc riêng để so sánh cuối không chỉ giới hạn ở bản trung gian đã đổi kích thước.\n\n### Chuẩn bị nguồn ngắn, rõ\n\nHướng dẫn chuẩn bị thông thường của nhà sản xuất giới hạn nguồn ở hai mươi giây và năm mươi MB. Đoạn video được cung cấp qua URL video hoặc MP4 mã hóa. Tài liệu tham chiếu chính xác lưu ý quá trình xử lý bao quát hai mươi giây đầu: vượt thời lượng ít có thể chỉ được xử lý đến mốc đó, còn đoạn dài hơn đáng kể bị từ chối. Không có dung sai bằng số được công bố. Cắt thành đoạn dự kiến dài hai mươi giây hoặc ngắn hơn thay vì phụ thuộc hành vi biên chưa được quy định.\n\nChọn phiên bản ít nén nhất có sẵn. Lỗi do nén giới hạn chi tiết thật mà bộ phóng có thể phục hồi, và tăng cường sáng tạo có thể tạo kết cấu hợp lý mà không xác lập cảnh gốc chứa gì. Hoàn tất chỉnh sửa và cắt mong muốn trước khi phóng đoạn đã chọn. Quy trình ban đầu có thể hoàn thiện cú máy sản phẩm, chọn khoảng hành động hữu ích rồi phóng phần chọn cuối đó, giữ nguồn chưa đổi để so sánh.\n\nKết quả giữ rãnh âm thanh nguồn. Kiểm tra thời điểm khớp với hình, đặc biệt đầu và cuối đoạn đã chọn. Cấu hình được mô tả không cung cấp bộ chọn tốc độ khung hình độc lập, tạo hội thoại mới hoặc điều khiển chỉnh sửa bằng ảnh tham chiếu. Mục đích là video lớn hơn với cách xử lý chi tiết đã chọn, giữ tư liệu thời gian và âm thanh nguồn trong đoạn được xử lý.\n\n### Lưu và kiểm tra đoạn được giao\n\nQuy trình nhà sản xuất là bất đồng bộ: tác vụ đã gửi cung cấp mã định danh và vị trí trạng thái, còn kết quả hoàn tất chứa liên kết MP4 có chữ ký. Liên kết hết hạn sau khoảng một giờ. Lưu đoạn video thực tế, nguồn, hệ số đã chọn, chế độ creativity và mô tả nội dung thay vì phụ thuộc vị trí tạm. Phân biệt trạng thái thất bại hoặc bị kiểm duyệt với video hoàn tất.\n\nXem xét từng khung về khuôn mặt, dấu hiệu và thay đổi bề mặt, rồi xem toàn chuỗi về tính liên tục, chuyển động và khớp âm thanh. Đầu ra chính xác và sáng tạo đáp ứng yêu cầu hình ảnh khác nhau; sản phẩm hữu ích là đoạn phóng lớn đạt mục tiêu trung thực đã chọn ở kích thước hiển thị dự kiến. Độ phân giải lớn hơn đơn thuần không phải bằng chứng danh tính, câu chữ hoặc chi tiết tinh của nguồn vẫn đúng.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "2bd2d4c893b8adf3f27ed9c1e92d45beb45a18ce27a2e5b6271de53bfedd694f",
    "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 Video Upscale</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-video-upscale</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|videos|/v1/videos|black-forest-labs%2Fflux-video-upscale\">Video</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 Video Upscale phóng lớn đoạn video có sẵn bằng tăng cường chi tiết trung thành với nguồn hoặc sáng tạo. Cấu hình được mô tả cung cấp mức phóng 1.5×–3×, giữ âm thanh và bố cục nguồn, đồng thời giới hạn độ dài nguồn, độ phân giải đầu vào và diện tích khung đầu ra.</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 · Âm thanh · Video</dd></div><div><dt>Kết quả</dt><dd>Video</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 Video Upscale là quy trình siêu phân giải video của Black Forest Labs, được vận hành bằng FLUX 3. Quy trình nhận đoạn video có sẵn và trả MP4 phóng lớn, đưa bố cục và âm thanh nguồn vào kết quả. Mô tả ngắn tùy chọn có thể định hướng chi tiết hình ảnh được tăng cường. Hai chế độ tạo lựa chọn có ý nghĩa giữa giữ gần diện mạo cung cấp và tạo chi tiết mạnh hơn, thay vì coi mọi hình ảnh lớn hơn là bản tái dựng trung thành như nhau.</p><h4>Chọn tăng cường chính xác hoặc sáng tạo</h4><p>Thiết lập creativity chọn chế độ. Giá trị 0 là cấu hình chính xác, trung thành với nguồn: nhà sản xuất khuyến nghị khi khuôn mặt, sản phẩm hoặc tài sản thương hiệu cần giữ danh tính. Giá trị 1 bật tăng cường chi tiết sáng tạo và là mặc định. Chế độ này có thể phục hồi hoặc sáng tạo kết cấu mạnh hơn, hữu ích cho cảnh quay được tạo, phong cảnh, đám đông hoặc bề mặt có chi tiết có thể phát triển sáng tạo.</p><p>Nhà sản xuất cảnh báo rõ rằng tăng cường sáng tạo không giữ khuôn mặt và sản phẩm nghiêm ngặt như vậy. Kiểm tra đặc điểm phải còn nhận diện được: diện mạo khuôn mặt, đường nét sản phẩm, chữ, hoa văn chất liệu hoặc logo. Hình trông sắc nét hơn vẫn có thể chứa chi tiết thay đổi hoặc mới được tạo ra. Với trình diễn sản phẩm, dùng diện mạo sản phẩm dự kiến làm tiêu chí xem xét thay vì chỉ chọn phiên bản có kết cấu cầu kỳ hơn.</p><p>Lời nhắc tùy chọn mô tả nội dung đoạn video để hướng dẫn tăng cường; mô tả trống yêu cầu phóng lớn trung tính. Bản mô tả cảnh được tạo ban đầu có thể xác định tường đá phủ rêu, ánh sáng ban ngày dịu và kết cấu lá tinh tế. Tập trung câu chữ vào tư liệu cần tinh chỉnh. Yêu cầu thay vật, dựng lại bối cảnh hoặc đổi hội thoại thuộc quyết định biên tập, trong khi cấu hình này giữ rãnh âm thanh nguồn.</p><h4>Hệ số phóng và diện tích khung đầu ra</h4><p>upscale_factor được mô tả có phạm vi từ 1.5 đến 3, với 2 là mặc định. Thiết lập tăng độ phân giải nguồn trong khi giữ tỷ lệ khung hình. Hệ số đã chọn và kích thước đầu vào xác định đầu ra dự kiến, vì vậy video ngang và bố cục dọc cần được lên kế hoạch từ khung thực tế. Chuẩn bị kích thước hiển thị đích trước khi chọn mức phóng hữu ích.</p><p>Đặc tả chính xác giới hạn mỗi khung đầu ra ở 13.75 đơn vị megapixel của nhà sản xuất. Tài liệu định nghĩa một đơn vị đó là 1,048,576 pixel, cho trần 14,417,920 pixel, xấp xỉ 14.4 triệu. Điều này giải thích cách ghi làm tròn 14.4 megapixel trong hướng dẫn. Vì vậy, nguồn lớn có thể được phóng ít hơn hệ số yêu cầu. Kiểm tra kích thước được giao thay vì giả định yêu cầu 3× luôn tạo gấp ba mỗi chiều nguồn.</p><p>Trần độ phân giải nguồn được công bố là 2560×1440. Quy trình tăng nguồn đủ điều kiện đến gần 4K và cao hơn; nó không chấp nhận nguồn vốn lớn hơn chỉ vì mong muốn đầu ra cao hơn. Giảm kích thước hoặc chuẩn bị bản làm việc phù hợp trước khi dùng cấu hình được mô tả đó. Giữ bản ghi gốc riêng để so sánh cuối không chỉ giới hạn ở bản trung gian đã đổi kích thước.</p><h4>Chuẩn bị nguồn ngắn, rõ</h4><p>Hướng dẫn chuẩn bị thông thường của nhà sản xuất giới hạn nguồn ở hai mươi giây và năm mươi MB. Đoạn video được cung cấp qua URL video hoặc MP4 mã hóa. Tài liệu tham chiếu chính xác lưu ý quá trình xử lý bao quát hai mươi giây đầu: vượt thời lượng ít có thể chỉ được xử lý đến mốc đó, còn đoạn dài hơn đáng kể bị từ chối. Không có dung sai bằng số được công bố. Cắt thành đoạn dự kiến dài hai mươi giây hoặc ngắn hơn thay vì phụ thuộc hành vi biên chưa được quy định.</p><p>Chọn phiên bản ít nén nhất có sẵn. Lỗi do nén giới hạn chi tiết thật mà bộ phóng có thể phục hồi, và tăng cường sáng tạo có thể tạo kết cấu hợp lý mà không xác lập cảnh gốc chứa gì. Hoàn tất chỉnh sửa và cắt mong muốn trước khi phóng đoạn đã chọn. Quy trình ban đầu có thể hoàn thiện cú máy sản phẩm, chọn khoảng hành động hữu ích rồi phóng phần chọn cuối đó, giữ nguồn chưa đổi để so sánh.</p><p>Kết quả giữ rãnh âm thanh nguồn. Kiểm tra thời điểm khớp với hình, đặc biệt đầu và cuối đoạn đã chọn. Cấu hình được mô tả không cung cấp bộ chọn tốc độ khung hình độc lập, tạo hội thoại mới hoặc điều khiển chỉnh sửa bằng ảnh tham chiếu. Mục đích là video lớn hơn với cách xử lý chi tiết đã chọn, giữ tư liệu thời gian và âm thanh nguồn trong đoạn được xử lý.</p><h4>Lưu và kiểm tra đoạn được giao</h4><p>Quy trình nhà sản xuất là bất đồng bộ: tác vụ đã gửi cung cấp mã định danh và vị trí trạng thái, còn kết quả hoàn tất chứa liên kết MP4 có chữ ký. Liên kết hết hạn sau khoảng một giờ. Lưu đoạn video thực tế, nguồn, hệ số đã chọn, chế độ creativity và mô tả nội dung thay vì phụ thuộc vị trí tạm. Phân biệt trạng thái thất bại hoặc bị kiểm duyệt với video hoàn tất.</p><p>Xem xét từng khung về khuôn mặt, dấu hiệu và thay đổi bề mặt, rồi xem toàn chuỗi về tính liên tục, chuyển động và khớp âm thanh. Đầu ra chính xác và sáng tạo đáp ứng yêu cầu hình ảnh khác nhau; sản phẩm hữu ích là đoạn phóng lớn đạt mục tiêu trung thực đã chọn ở kích thước hiển thị dự kiến. Độ phân giải lớn hơn đơn thuần không phải bằng chứng danh tính, câu chữ hoặc chi tiết tinh của nguồn vẫn đúng.</p></div></details></section><section class=\"card-section\" data-card-section=\"methods\"><h3 tabindex=\"-1\">Có trên Ailoot · đầu vào &amp; phương thức</h3><details class=\"card-method\" open><summary><b>Ailoot Ultra · Tạo video</b> <code>POST /v1/videos</code></summary><dl class=\"method-capabilities\"><div><dt>Đầu vào</dt><dd><code>text</code>, <code>image</code>, <code>audio</code>, <code>video</code></dd></div><div><dt>Đầu ra</dt><dd><code>video</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-video-upscale</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>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: 1</div><div>Số mục 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\">upscale_factor</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span><code>number</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>Tối thiểu: 1,5</div><div>Tối đa: 3</div></td><td data-cell-label=\"Mặc định\" data-default=\"unspecified\"><span class=\"card-cell-label\">Mặc định</span>—</td></tr><tr><th data-cell-label=\"Trường\" scope=\"row\"><span class=\"card-cell-label\">Trường</span><code class=\"card-field-name\">creativity</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>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>0, 1</div></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, input_references, upscale_factor, creativity</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, audio, video</td></tr><tr><th data-cell-label=\"Tham số\" scope=\"row\"><span class=\"card-cell-label\">Tham số</span><code>material_conditions</code></th><td data-cell-label=\"Hợp đồng\"><span class=\"card-cell-label\">Hợp đồng</span>Dùng đúng một URL nội dung của tài sản video thực tế đã hoàn tất, thuộc quyền sở hữu cùng chữ ký được trả về. Chủ sở hữu, kiểu và bằng chứng byte đã lưu của tài sản phải khớp với yêu cầu.</td></tr></tbody></table></div><p>Vòng đời: <code>asynchronous_job_then_owned_outputs</code></p><p class=\"note-s\"><code>GET /v1/videos/{request_id}</code> · id hoặc polling_url thực tế được trả về</p><p class=\"note-s\"><code>GET /v1/videos/{request_id}/content</code></p></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">Bảng giá</h3><div class=\"card-result-process\" data-billing-basis><h5>Cách tính phí cuối cùng</h5><p class=\"note-s\">Các đơn giá hiển thị dùng để ước tính chi phí trước khi tạo. Khoản phí cuối cùng được tính dựa trên chi phí ghi nhận cho lượt tạo gốc. Thời lượng đầu ra đo được và số lượng dự kiến không phải là số lượng cuối cùng dùng để tính phí.</p></div><div data-native-semantic-method=\"v1\" data-tariff-reference-only><p class=\"note-s\" data-rate-support-note>Thông tin biểu giá không bổ sung tùy chọn yêu cầu. Các tham số được hỗ trợ nằm trong phương thức đã chọn.</p><dl data-price-conditions><dt>Chế độ nhanh</dt><dd>Chưa chỉ định <span class=\"note-s\">Khi chọn chế độ nhanh</span></dd><dt>Chế độ Flex</dt><dd>Chưa chỉ định <span class=\"note-s\">Khi chọn chế độ flex</span></dd><dt>Mức độ suy luận tối đa</dt><dd>Chưa chỉ định <span class=\"note-s\">Khi áp dụng mức điều chỉnh mặc định (default) cho mức độ suy luận tối đa</span></dd></dl></div><div data-declared-tariff-pricing><h4>Mức phí ước tính để so sánh</h4><h4>Giá theo cấu hình</h4><p class=\"note-s\">Đối chiếu từng khoản phí với điều kiện hiển thị. Dùng một mức phí cho mỗi nhóm cấu hình thay thế.</p><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>Cấu hình</th><th>Biểu mức phí</th><th>Số lượng dự báo</th><th>Đơn vị tính phí</th><th>Điều kiện tính phí</th><th>Số điểm ảnh mỗi megapixel</th><th>Phí</th></tr></thead><tbody><tr><th data-cell-label=\"Cấu hình\" scope=\"row\"><span class=\"card-cell-label\">Cấu hình</span>Giá cơ sở cho token</th><td data-cell-label=\"Biểu mức phí\"><span class=\"card-cell-label\">Biểu mức phí</span>Mức phí cơ bản</td><td data-cell-label=\"Số lượng dự báo\"><span class=\"card-cell-label\">Số lượng dự báo</span>—</td><td data-cell-label=\"Đơn vị tính phí\"><span class=\"card-cell-label\">Đơn vị tính phí</span>—</td><td data-cell-label=\"Điều kiện tính phí\"><span class=\"card-cell-label\">Điều kiện tính phí</span>—</td><td data-cell-label=\"Số điểm ảnh mỗi megapixel\"><span class=\"card-cell-label\">Số điểm ảnh mỗi megapixel</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>Giá video</th><td data-cell-label=\"Biểu mức phí\"><span class=\"card-cell-label\">Biểu mức phí</span>—</td><td data-cell-label=\"Số lượng dự báo\"><span class=\"card-cell-label\">Số lượng dự báo</span>—</td><td data-cell-label=\"Đơn vị tính phí\"><span class=\"card-cell-label\">Đơn vị tính phí</span>mỗi megapixel-giây</td><td data-cell-label=\"Điều kiện tính phí\"><span class=\"card-cell-label\">Điều kiện tính phí</span>chất lượng: creative</td><td data-cell-label=\"Số điểm ảnh mỗi megapixel\"><span class=\"card-cell-label\">Số điểm ảnh mỗi megapixel</span>1.048.576</td><td data-cell-label=\"Phí\"><span class=\"card-cell-label\">Phí</span><div><span>Đầu ra · Giá video · Ước tính chỉ để so sánh</span> <b>$0.21</b> <span class=\"price-unit\">mỗi megapixel-giây</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>Giá video</th><td data-cell-label=\"Biểu mức phí\"><span class=\"card-cell-label\">Biểu mức phí</span>—</td><td data-cell-label=\"Số lượng dự báo\"><span class=\"card-cell-label\">Số lượng dự báo</span>—</td><td data-cell-label=\"Đơn vị tính phí\"><span class=\"card-cell-label\">Đơn vị tính phí</span>mỗi megapixel-giây</td><td data-cell-label=\"Điều kiện tính phí\"><span class=\"card-cell-label\">Điều kiện tính phí</span>quality: precise</td><td data-cell-label=\"Số điểm ảnh mỗi megapixel\"><span class=\"card-cell-label\">Số điểm ảnh mỗi megapixel</span>1.048.576</td><td data-cell-label=\"Phí\"><span class=\"card-cell-label\">Phí</span><div><span>Đầu ra · Giá video · Ước tính chỉ để so sánh</span> <b>$0.15</b> <span class=\"price-unit\">mỗi megapixel-giây</span></div></td></tr><tr><th data-cell-label=\"Cấu hình\" scope=\"row\"><span class=\"card-cell-label\">Cấu hình</span>Chi phí tạo ước tính</th><td data-cell-label=\"Biểu mức phí\"><span class=\"card-cell-label\">Biểu mức phí</span>—</td><td data-cell-label=\"Số lượng dự báo\"><span class=\"card-cell-label\">Số lượng dự báo</span>ước tính cho một lần tạo</td><td data-cell-label=\"Đơn vị tính phí\"><span class=\"card-cell-label\">Đơn vị tính phí</span>—</td><td data-cell-label=\"Điều kiện tính phí\"><span class=\"card-cell-label\">Điều kiện tính phí</span>—</td><td data-cell-label=\"Số điểm ảnh mỗi megapixel\"><span class=\"card-cell-label\">Số điểm ảnh mỗi megapixel</span>—</td><td data-cell-label=\"Phí\"><span class=\"card-cell-label\">Phí</span><div><span>Đầu ra · Chi phí tạo ước tính · Ước tính chỉ để so sánh</span> <b>$0.15</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 · Tạo video</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-1097-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1097-panel-0\" aria-selected=\"true\" tabindex=\"0\">Sử dụng đầu vào thực tế và giữ lại kết quả đầy đủ</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-1097-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1097-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\n: &quot;${AILOOT_INPUT_REFERENCES_JSON:?Set the actual documented input value}&quot;\nexport AILOOT_INPUT_REFERENCES_JSON\n: &quot;${AILOOT_UPSCALE_FACTOR:?Set the actual documented input value}&quot;\nexport AILOOT_UPSCALE_FACTOR\n: &quot;${AILOOT_CREATIVITY:?Set the actual documented input value}&quot;\nexport AILOOT_CREATIVITY\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nimport json,os\nfrom pathlib import Path\nrequest={&#39;model&#39;: &#39;black-forest-labs/flux-video-upscale&#39;, &#39;input_references&#39;: &#39;${ACTUAL_OWNED_INPUT_REFERENCES}&#39;, &#39;upscale_factor&#39;: &#39;${ACTUAL_UPSCALE_FACTOR}&#39;, &#39;creativity&#39;: &#39;${ACTUAL_CREATIVITY}&#39;}\nrequest[&#39;input_references&#39;]=json.loads(os.environ[&#39;AILOOT_INPUT_REFERENCES_JSON&#39;])\nrequest[&#39;upscale_factor&#39;]=float(os.environ[&#39;AILOOT_UPSCALE_FACTOR&#39;])\nrequest[&#39;creativity&#39;]=int(os.environ[&#39;AILOOT_CREATIVITY&#39;])\nPath(&#39;request.json&#39;).write_text(json.dumps(request,ensure_ascii=False),encoding=&#39;utf-8&#39;)\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/videos \\\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 response.bin\n# Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.\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 · Tạo video</h4><ul class=\"card-result-paths\"><li><code>GET /v1/videos/{request_id}</code></li><li><code>GET /v1/videos/{request_id}/content</code></li></ul><h5>Lưu tất cả tài nguyên đã hoàn tất</h5><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-1098-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1098-panel-0\" aria-selected=\"true\" tabindex=\"0\">GET tất cả tài nguyên đã hoàn tất</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-1098-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1098-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\n: &quot;${AILOOT_STATUS_FILE:?Set the actual completed status JSON file}&quot;\nexport AILOOT_STATUS_FILE\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nimport json,os\nfrom pathlib import Path\nfrom urllib.parse import urlsplit,urljoin\nf=Path(os.environ[&quot;AILOOT_STATUS_FILE&quot;])\nif not f.is_file():raise SystemExit(&quot;Choose the actual completed status file&quot;)\nr=json.loads(f.read_text())\nif r.get(&quot;status&quot;)!=&quot;completed&quot; or not isinstance(r.get(&quot;data&quot;),list) or not r[&quot;data&quot;]:raise SystemExit(&quot;Wait for a completed status with asset paths&quot;)\nurls=[]\nfor x in r[&quot;data&quot;]:\n    if not isinstance(x,str) or &quot;\\n&quot; in x or &quot;\\r&quot; in x:raise SystemExit(&quot;Invalid asset path&quot;)\n    u=urljoin(&quot;https://api.ailoot.ai&quot;,x)\n    z=urlsplit(u)\n    if z.scheme!=&quot;https&quot; or z.netloc!=&quot;api.ailoot.ai&quot; or z.username or z.password:raise SystemExit(&quot;Use the actual Ailoot asset paths from status&quot;)\n    urls.append(u)\nPath(&quot;asset-urls.txt&quot;).write_text(&quot;\\n&quot;.join(urls)+&quot;\\n&quot;)\nPY_REQUEST\nindex=0\nwhile IFS= read -r asset_url; do\n  curl --fail-with-body --silent --show-error &quot;$asset_url&quot; \\\n    -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -o &quot;video-${index}.mp4&quot;\n  index=$((index + 1))\ndone &lt; asset-urls.txt\n</code></pre></div></div></div><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 video đã hoàn tất hoặc tệp trả về; truy xuất từng URL tài nguyên thực tế được trả về.</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, X-Ailoot-Task-Id và id/polling_url thực tế được trả về. Tiếp tục tác vụ ban đầu; 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\">id</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\">status</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[]</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\">outputs[]</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-video-upscale&amp;route=Ultra&amp;caller=black-forest-labs%2Fflux-video-upscale&amp;fmt=videos\"><code>black-forest-labs/flux-video-upscale</code></a></span></p><h4>Bí danh đường dẫn phương thức</h4><p class=\"note-s\">Dùng các đường dẫn phương thức hiển thị ở trên.</p><h4>ID gọi liên quan</h4><p class=\"note-s\"><a href=\"#m=black-forest-labs%2Fflux-video-upscale&amp;route=Ultra&amp;caller=black-forest-labs%2Fflux-video-upscale&amp;fmt=videos\"><code>black-forest-labs/flux-video-upscale</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "black-forest-labs/flux-video-upscale",
        "fmt": "videos",
        "http": "POST",
        "path": "/v1/videos",
        "request_model_id": "black-forest-labs/flux-video-upscale",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|videos|/v1/videos|black-forest-labs%2Fflux-video-upscale",
      "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": {
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/videos/{request_id}/content",
                  "query": {
                    "index": "actual zero-based output index from completed manifest"
                  }
                }
              ],
              "creation_id_field": "id",
              "media_library": {
                "http": "GET",
                "path": "/v1/media/assets"
              },
              "mode": "asynchronous_job_then_owned_outputs",
              "operation_id_is_not_task_id": true,
              "output_content_response": "owned MP4 bytes with Range support",
              "status": [
                {
                  "http": "GET",
                  "id_source": "actual returned id or polling_url",
                  "path": "/v1/videos/{request_id}"
                }
              ],
              "unknown": "Giữ lại X-Client-Request-ID, X-Ailoot-Task-Id và id/polling_url thực tế được trả về. Tiếp tục tác vụ ban đầu; 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": "video",
              "fields": [
                {
                  "description": null,
                  "name": "id",
                  "type": null
                },
                {
                  "description": null,
                  "name": "status",
                  "type": null
                },
                {
                  "description": null,
                  "name": "data[]",
                  "type": null
                },
                {
                  "description": null,
                  "name": "outputs[]",
                  "type": null
                }
              ]
            },
            "parameters": [
              {
                "enum": [
                  "black-forest-labs/flux-video-upscale"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "items": {
                  "additionalProperties": false,
                  "properties": {
                    "type": {
                      "const": "video_url"
                    },
                    "video_url": {
                      "additionalProperties": false,
                      "properties": {
                        "url": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "url"
                      ],
                      "type": "object"
                    }
                  },
                  "required": [
                    "type",
                    "video_url"
                  ],
                  "type": "object"
                },
                "maximum_items": 1,
                "minimum_items": 1,
                "name": "input_references",
                "required": true,
                "type": "array"
              },
              {
                "maximum": 3,
                "minimum": 1.5,
                "name": "upscale_factor",
                "required": true,
                "type": "number"
              },
              {
                "enum": [
                  0,
                  1
                ],
                "enum_known": true,
                "name": "creativity",
                "required": true,
                "type": "integer"
              }
            ],
            "request_schema": {
              "additionalProperties": false,
              "properties": {
                "creativity": {
                  "enum": [
                    0,
                    1
                  ],
                  "type": "integer"
                },
                "input_references": {
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "type": {
                        "const": "video_url"
                      },
                      "video_url": {
                        "additionalProperties": false,
                        "properties": {
                          "url": {
                            "type": "string"
                          }
                        },
                        "required": [
                          "url"
                        ],
                        "type": "object"
                      }
                    },
                    "required": [
                      "type",
                      "video_url"
                    ],
                    "type": "object"
                  },
                  "maxItems": 1,
                  "minItems": 1,
                  "type": "array"
                },
                "model": {
                  "enum": [
                    "black-forest-labs/flux-video-upscale"
                  ],
                  "type": "string"
                },
                "upscale_factor": {
                  "maximum": 3,
                  "minimum": 1.5,
                  "type": "number"
                }
              },
              "required": [
                "model",
                "input_references",
                "upscale_factor",
                "creativity"
              ],
              "type": "object"
            },
            "schema_template": {
              "actual_file_preparation_required": false,
              "body": {
                "creativity": "${ACTUAL_CREATIVITY}",
                "input_references": "${ACTUAL_OWNED_INPUT_REFERENCES}",
                "model": "black-forest-labs/flux-video-upscale",
                "upscale_factor": "${ACTUAL_UPSCALE_FACTOR}"
              },
              "content_type": "application/json"
            }
          },
          "input": {
            "content_type": "application/json",
            "material_conditions": [
              "Dùng đúng một URL nội dung của tài sản video thực tế đã hoàn tất, thuộc quyền sở hữu cùng chữ ký được trả về. Chủ sở hữu, kiểu và bằng chứng byte đã lưu của tài sản phải khớp với yêu cầu."
            ],
            "material_types": [
              "text",
              "image",
              "audio",
              "video"
            ],
            "required": [
              "model",
              "input_references",
              "upscale_factor",
              "creativity"
            ]
          },
          "lifecycle": {
            "content": [
              {
                "http": "GET",
                "path": "/v1/videos/{request_id}/content",
                "query": {
                  "index": "actual zero-based output index from completed manifest"
                }
              }
            ],
            "creation_id_field": "id",
            "media_library": {
              "http": "GET",
              "path": "/v1/media/assets"
            },
            "mode": "asynchronous_job_then_owned_outputs",
            "operation_id_is_not_task_id": true,
            "output_content_response": "owned MP4 bytes with Range support",
            "status": [
              {
                "http": "GET",
                "id_source": "id hoặc polling_url thực tế được trả về",
                "path": "/v1/videos/{request_id}"
              }
            ],
            "unknown": "Keep X-Client-Request-ID, X-Ailoot-Task-Id and actual returned id/polling_url. Continue the original job; do not submit creation again."
          },
          "method": {
            "http": "POST",
            "path": "/v1/videos"
          },
          "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": "video",
            "fields": [
              {
                "description": null,
                "name": "id",
                "type": null
              },
              {
                "description": null,
                "name": "status",
                "type": null
              },
              {
                "description": null,
                "name": "data[]",
                "type": null
              },
              {
                "description": null,
                "name": "outputs[]",
                "type": null
              }
            ]
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "chất lượng: creative",
              "pixels_per_megapixel": 1048576,
              "quoted_unit": "per megapixel-second"
            },
            "label": "Giá video",
            "units": [
              {
                "amount": "0.21",
                "amount_unit": "usd_per_megapixel_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "cents_per_megapixel_second_creative",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.21",
                "native_quantity": 1,
                "public_unit_label": "per megapixel-second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "megapixel_second"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "quality: precise",
              "pixels_per_megapixel": 1048576,
              "quoted_unit": "per megapixel-second"
            },
            "label": "Video price",
            "units": [
              {
                "amount": "0.15",
                "amount_unit": "usd_per_megapixel_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "cents_per_megapixel_second_precise",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.15",
                "native_quantity": 1,
                "public_unit_label": "per megapixel-second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "megapixel_second"
              }
            ]
          },
          {
            "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.15",
                "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.15",
                "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}\"\n: \"${AILOOT_INPUT_REFERENCES_JSON:?Set the actual documented input value}\"\nexport AILOOT_INPUT_REFERENCES_JSON\n: \"${AILOOT_UPSCALE_FACTOR:?Set the actual documented input value}\"\nexport AILOOT_UPSCALE_FACTOR\n: \"${AILOOT_CREATIVITY:?Set the actual documented input value}\"\nexport AILOOT_CREATIVITY\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\nrequest={'model': 'black-forest-labs/flux-video-upscale', 'input_references': '${ACTUAL_OWNED_INPUT_REFERENCES}', 'upscale_factor': '${ACTUAL_UPSCALE_FACTOR}', 'creativity': '${ACTUAL_CREATIVITY}'}\nrequest['input_references']=json.loads(os.environ['AILOOT_INPUT_REFERENCES_JSON'])\nrequest['upscale_factor']=float(os.environ['AILOOT_UPSCALE_FACTOR'])\nrequest['creativity']=int(os.environ['AILOOT_CREATIVITY'])\nPath('request.json').write_text(json.dumps(request,ensure_ascii=False),encoding='utf-8')\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/videos \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o response.bin\n# Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.\n",
            "label": "Use actual input and retain the complete result",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_STATUS_FILE:?Set the actual completed status JSON file}\"\nexport AILOOT_STATUS_FILE\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\nfrom urllib.parse import urlsplit,urljoin\nf=Path(os.environ[\"AILOOT_STATUS_FILE\"])\nif not f.is_file():raise SystemExit(\"Choose the actual completed status file\")\nr=json.loads(f.read_text())\nif r.get(\"status\")!=\"completed\" or not isinstance(r.get(\"data\"),list) or not r[\"data\"]:raise SystemExit(\"Wait for a completed status with asset paths\")\nurls=[]\nfor x in r[\"data\"]:\n    if not isinstance(x,str) or \"\\n\" in x or \"\\r\" in x:raise SystemExit(\"Invalid asset path\")\n    u=urljoin(\"https://api.ailoot.ai\",x)\n    z=urlsplit(u)\n    if z.scheme!=\"https\" or z.netloc!=\"api.ailoot.ai\" or z.username or z.password:raise SystemExit(\"Use the actual Ailoot asset paths from status\")\n    urls.append(u)\nPath(\"asset-urls.txt\").write_text(\"\\n\".join(urls)+\"\\n\")\nPY_REQUEST\nindex=0\nwhile IFS= read -r asset_url; do\n  curl --fail-with-body --silent --show-error \"$asset_url\" \\\n    -H \"Authorization: Bearer $AILOOT_API_KEY\" -o \"video-${index}.mp4\"\n  index=$((index + 1))\ndone < asset-urls.txt\n",
            "label": "GET all completed assets",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "videos",
        "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",
          "audio",
          "video"
        ],
        "label": "Tạo video",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "native_endpoint": "videos",
        "out": null,
        "output": [
          "video"
        ],
        "path": "/v1/videos",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          }
        ],
        "pricing": {
          "billing_mode": "original_invoice_usd",
          "image_input_price": null,
          "image_output_price": null
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "quality: creative",
              "pixels_per_megapixel": 1048576,
              "quoted_unit": "per megapixel-second"
            },
            "label": "Video price",
            "units": [
              {
                "amount": "0.21",
                "amount_unit": "usd_per_megapixel_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "cents_per_megapixel_second_creative",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.21",
                "native_quantity": 1,
                "public_unit_label": "per megapixel-second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "megapixel_second"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "quality: precise",
              "pixels_per_megapixel": 1048576,
              "quoted_unit": "per megapixel-second"
            },
            "label": "Video price",
            "units": [
              {
                "amount": "0.15",
                "amount_unit": "usd_per_megapixel_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "cents_per_megapixel_second_precise",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.15",
                "native_quantity": 1,
                "public_unit_label": "per megapixel-second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "megapixel_second"
              }
            ]
          },
          {
            "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.15",
                "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.15",
                "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-video-upscale",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/videos/{request_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.21",
            "amount_unit": "usd_per_megapixel_second",
            "billing_input": false,
            "estimate_only": true,
            "key": "cents_per_megapixel_second_creative",
            "label": "Video price",
            "native_amount_usd_per_unit": "0.21",
            "native_quantity": 1,
            "public_unit_label": "per megapixel-second",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "megapixel_second"
          },
          {
            "amount": "0.15",
            "amount_unit": "usd_per_megapixel_second",
            "billing_input": false,
            "estimate_only": true,
            "key": "cents_per_megapixel_second_precise",
            "label": "Video price",
            "native_amount_usd_per_unit": "0.15",
            "native_quantity": 1,
            "public_unit_label": "per megapixel-second",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "megapixel_second"
          },
          {
            "amount": "0.15",
            "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.15",
            "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-video-upscale",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "431ea8dc4b57a9cbb233f697e1a6963688c2c1c3a60a4172b6083f1bda9836b1",
    "input_html_sha256": "57d84d22e366ac3e64800b319f3edf059567866c709571be72cf0678333b2c58",
    "private_audit_sha256": "f051a7e8bb0ebeed6f73bb0a668815e38ce805e8d5ac6ed4e73b5371a9dc073a",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/vi/black-forest-labs-flux-video-upscale/",
    "description": "FLUX Video Upscale phóng lớn đoạn video có sẵn bằng tăng cường chi tiết trung thành với nguồn hoặc sáng tạo. Cấu hình được mô tả cung cấp mức phóng 1.5×–3×, giữ âm thanh và bố cục nguồn, đồng thời giới hạn độ dài nguồn, độ phân giải đầu vào và diện tích khung đầu ra.",
    "locale": "vi",
    "md_url": "https://ailoot.ai/models/vi/black-forest-labs-flux-video-upscale/index.md",
    "title": "Black Forest Labs: FLUX Video Upscale — Ailoot",
    "url": "https://ailoot.ai/models/vi/black-forest-labs-flux-video-upscale/"
  },
  "rawModel": {
    "about": "FLUX Video Upscale là quy trình siêu phân giải video của Black Forest Labs, được vận hành bằng FLUX 3. Quy trình nhận đoạn video có sẵn và trả MP4 phóng lớn, đưa bố cục và âm thanh nguồn vào kết quả. Mô tả ngắn tùy chọn có thể định hướng chi tiết hình ảnh được tăng cường. Hai chế độ tạo lựa chọn có ý nghĩa giữa giữ gần diện mạo cung cấp và tạo chi tiết mạnh hơn, thay vì coi mọi hình ảnh lớn hơn là bản tái dựng trung thành như nhau.\n\n### Chọn tăng cường chính xác hoặc sáng tạo\n\nThiết lập creativity chọn chế độ. Giá trị 0 là cấu hình chính xác, trung thành với nguồn: nhà sản xuất khuyến nghị khi khuôn mặt, sản phẩm hoặc tài sản thương hiệu cần giữ danh tính. Giá trị 1 bật tăng cường chi tiết sáng tạo và là mặc định. Chế độ này có thể phục hồi hoặc sáng tạo kết cấu mạnh hơn, hữu ích cho cảnh quay được tạo, phong cảnh, đám đông hoặc bề mặt có chi tiết có thể phát triển sáng tạo.\n\nNhà sản xuất cảnh báo rõ rằng tăng cường sáng tạo không giữ khuôn mặt và sản phẩm nghiêm ngặt như vậy. Kiểm tra đặc điểm phải còn nhận diện được: diện mạo khuôn mặt, đường nét sản phẩm, chữ, hoa văn chất liệu hoặc logo. Hình trông sắc nét hơn vẫn có thể chứa chi tiết thay đổi hoặc mới được tạo ra. Với trình diễn sản phẩm, dùng diện mạo sản phẩm dự kiến làm tiêu chí xem xét thay vì chỉ chọn phiên bản có kết cấu cầu kỳ hơn.\n\nLời nhắc tùy chọn mô tả nội dung đoạn video để hướng dẫn tăng cường; mô tả trống yêu cầu phóng lớn trung tính. Bản mô tả cảnh được tạo ban đầu có thể xác định tường đá phủ rêu, ánh sáng ban ngày dịu và kết cấu lá tinh tế. Tập trung câu chữ vào tư liệu cần tinh chỉnh. Yêu cầu thay vật, dựng lại bối cảnh hoặc đổi hội thoại thuộc quyết định biên tập, trong khi cấu hình này giữ rãnh âm thanh nguồn.\n\n### Hệ số phóng và diện tích khung đầu ra\n\nupscale_factor được mô tả có phạm vi từ 1.5 đến 3, với 2 là mặc định. Thiết lập tăng độ phân giải nguồn trong khi giữ tỷ lệ khung hình. Hệ số đã chọn và kích thước đầu vào xác định đầu ra dự kiến, vì vậy video ngang và bố cục dọc cần được lên kế hoạch từ khung thực tế. Chuẩn bị kích thước hiển thị đích trước khi chọn mức phóng hữu ích.\n\nĐặc tả chính xác giới hạn mỗi khung đầu ra ở 13.75 đơn vị megapixel của nhà sản xuất. Tài liệu định nghĩa một đơn vị đó là 1,048,576 pixel, cho trần 14,417,920 pixel, xấp xỉ 14.4 triệu. Điều này giải thích cách ghi làm tròn 14.4 megapixel trong hướng dẫn. Vì vậy, nguồn lớn có thể được phóng ít hơn hệ số yêu cầu. Kiểm tra kích thước được giao thay vì giả định yêu cầu 3× luôn tạo gấp ba mỗi chiều nguồn.\n\nTrần độ phân giải nguồn được công bố là 2560×1440. Quy trình tăng nguồn đủ điều kiện đến gần 4K và cao hơn; nó không chấp nhận nguồn vốn lớn hơn chỉ vì mong muốn đầu ra cao hơn. Giảm kích thước hoặc chuẩn bị bản làm việc phù hợp trước khi dùng cấu hình được mô tả đó. Giữ bản ghi gốc riêng để so sánh cuối không chỉ giới hạn ở bản trung gian đã đổi kích thước.\n\n### Chuẩn bị nguồn ngắn, rõ\n\nHướng dẫn chuẩn bị thông thường của nhà sản xuất giới hạn nguồn ở hai mươi giây và năm mươi MB. Đoạn video được cung cấp qua URL video hoặc MP4 mã hóa. Tài liệu tham chiếu chính xác lưu ý quá trình xử lý bao quát hai mươi giây đầu: vượt thời lượng ít có thể chỉ được xử lý đến mốc đó, còn đoạn dài hơn đáng kể bị từ chối. Không có dung sai bằng số được công bố. Cắt thành đoạn dự kiến dài hai mươi giây hoặc ngắn hơn thay vì phụ thuộc hành vi biên chưa được quy định.\n\nChọn phiên bản ít nén nhất có sẵn. Lỗi do nén giới hạn chi tiết thật mà bộ phóng có thể phục hồi, và tăng cường sáng tạo có thể tạo kết cấu hợp lý mà không xác lập cảnh gốc chứa gì. Hoàn tất chỉnh sửa và cắt mong muốn trước khi phóng đoạn đã chọn. Quy trình ban đầu có thể hoàn thiện cú máy sản phẩm, chọn khoảng hành động hữu ích rồi phóng phần chọn cuối đó, giữ nguồn chưa đổi để so sánh.\n\nKết quả giữ rãnh âm thanh nguồn. Kiểm tra thời điểm khớp với hình, đặc biệt đầu và cuối đoạn đã chọn. Cấu hình được mô tả không cung cấp bộ chọn tốc độ khung hình độc lập, tạo hội thoại mới hoặc điều khiển chỉnh sửa bằng ảnh tham chiếu. Mục đích là video lớn hơn với cách xử lý chi tiết đã chọn, giữ tư liệu thời gian và âm thanh nguồn trong đoạn được xử lý.\n\n### Lưu và kiểm tra đoạn được giao\n\nQuy trình nhà sản xuất là bất đồng bộ: tác vụ đã gửi cung cấp mã định danh và vị trí trạng thái, còn kết quả hoàn tất chứa liên kết MP4 có chữ ký. Liên kết hết hạn sau khoảng một giờ. Lưu đoạn video thực tế, nguồn, hệ số đã chọn, chế độ creativity và mô tả nội dung thay vì phụ thuộc vị trí tạm. Phân biệt trạng thái thất bại hoặc bị kiểm duyệt với video hoàn tất.\n\nXem xét từng khung về khuôn mặt, dấu hiệu và thay đổi bề mặt, rồi xem toàn chuỗi về tính liên tục, chuyển động và khớp âm thanh. Đầu ra chính xác và sáng tạo đáp ứng yêu cầu hình ảnh khác nhau; sản phẩm hữu ích là đoạn phóng lớn đạt mục tiêu trung thực đã chọn ở kích thước hiển thị dự kiến. Độ phân giải lớn hơn đơn thuần không phải bằng chứng danh tính, câu chữ hoặc chi tiết tinh của nguồn vẫn đúng.",
    "alias_of": null,
    "aliases": [],
    "author": "Black Forest Labs",
    "capabilities": {
      "context_length": 0,
      "manufacturer_input": [
        "text",
        "video"
      ],
      "manufacturer_output": [
        "video"
      ]
    },
    "card_routes": [
      {
        "label": "Ultra",
        "rates": [
          {
            "amount": "0.15",
            "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.15",
            "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": [
      "videos"
    ],
    "id": "black-forest-labs/flux-video-upscale",
    "input": [
      "text",
      "image",
      "audio",
      "video"
    ],
    "kind": "video",
    "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": {
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/videos/{request_id}/content",
                  "query": {
                    "index": "actual zero-based output index from completed manifest"
                  }
                }
              ],
              "creation_id_field": "id",
              "media_library": {
                "http": "GET",
                "path": "/v1/media/assets"
              },
              "mode": "asynchronous_job_then_owned_outputs",
              "operation_id_is_not_task_id": true,
              "output_content_response": "owned MP4 bytes with Range support",
              "status": [
                {
                  "http": "GET",
                  "id_source": "actual returned id or polling_url",
                  "path": "/v1/videos/{request_id}"
                }
              ],
              "unknown": "Giữ lại X-Client-Request-ID, X-Ailoot-Task-Id và id/polling_url thực tế được trả về. Tiếp tục tác vụ ban đầu; 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": "video",
              "fields": [
                {
                  "description": null,
                  "name": "id",
                  "type": null
                },
                {
                  "description": null,
                  "name": "status",
                  "type": null
                },
                {
                  "description": null,
                  "name": "data[]",
                  "type": null
                },
                {
                  "description": null,
                  "name": "outputs[]",
                  "type": null
                }
              ]
            },
            "parameters": [
              {
                "enum": [
                  "black-forest-labs/flux-video-upscale"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "items": {
                  "additionalProperties": false,
                  "properties": {
                    "type": {
                      "const": "video_url"
                    },
                    "video_url": {
                      "additionalProperties": false,
                      "properties": {
                        "url": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "url"
                      ],
                      "type": "object"
                    }
                  },
                  "required": [
                    "type",
                    "video_url"
                  ],
                  "type": "object"
                },
                "maximum_items": 1,
                "minimum_items": 1,
                "name": "input_references",
                "required": true,
                "type": "array"
              },
              {
                "maximum": 3,
                "minimum": 1.5,
                "name": "upscale_factor",
                "required": true,
                "type": "number"
              },
              {
                "enum": [
                  0,
                  1
                ],
                "enum_known": true,
                "name": "creativity",
                "required": true,
                "type": "integer"
              }
            ],
            "request_schema": {
              "additionalProperties": false,
              "properties": {
                "creativity": {
                  "enum": [
                    0,
                    1
                  ],
                  "type": "integer"
                },
                "input_references": {
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "type": {
                        "const": "video_url"
                      },
                      "video_url": {
                        "additionalProperties": false,
                        "properties": {
                          "url": {
                            "type": "string"
                          }
                        },
                        "required": [
                          "url"
                        ],
                        "type": "object"
                      }
                    },
                    "required": [
                      "type",
                      "video_url"
                    ],
                    "type": "object"
                  },
                  "maxItems": 1,
                  "minItems": 1,
                  "type": "array"
                },
                "model": {
                  "enum": [
                    "black-forest-labs/flux-video-upscale"
                  ],
                  "type": "string"
                },
                "upscale_factor": {
                  "maximum": 3,
                  "minimum": 1.5,
                  "type": "number"
                }
              },
              "required": [
                "model",
                "input_references",
                "upscale_factor",
                "creativity"
              ],
              "type": "object"
            },
            "schema_template": {
              "actual_file_preparation_required": false,
              "body": {
                "creativity": "${ACTUAL_CREATIVITY}",
                "input_references": "${ACTUAL_OWNED_INPUT_REFERENCES}",
                "model": "black-forest-labs/flux-video-upscale",
                "upscale_factor": "${ACTUAL_UPSCALE_FACTOR}"
              },
              "content_type": "application/json"
            }
          },
          "input": {
            "content_type": "application/json",
            "material_conditions": [
              "Dùng đúng một URL nội dung của tài sản video thực tế đã hoàn tất, thuộc quyền sở hữu cùng chữ ký được trả về. Chủ sở hữu, kiểu và bằng chứng byte đã lưu của tài sản phải khớp với yêu cầu."
            ],
            "material_types": [
              "text",
              "image",
              "audio",
              "video"
            ],
            "required": [
              "model",
              "input_references",
              "upscale_factor",
              "creativity"
            ]
          },
          "lifecycle": {
            "content": [
              {
                "http": "GET",
                "path": "/v1/videos/{request_id}/content",
                "query": {
                  "index": "actual zero-based output index from completed manifest"
                }
              }
            ],
            "creation_id_field": "id",
            "media_library": {
              "http": "GET",
              "path": "/v1/media/assets"
            },
            "mode": "asynchronous_job_then_owned_outputs",
            "operation_id_is_not_task_id": true,
            "output_content_response": "owned MP4 bytes with Range support",
            "status": [
              {
                "http": "GET",
                "id_source": "id hoặc polling_url thực tế được trả về",
                "path": "/v1/videos/{request_id}"
              }
            ],
            "unknown": "Keep X-Client-Request-ID, X-Ailoot-Task-Id and actual returned id/polling_url. Continue the original job; do not submit creation again."
          },
          "method": {
            "http": "POST",
            "path": "/v1/videos"
          },
          "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": "video",
            "fields": [
              {
                "description": null,
                "name": "id",
                "type": null
              },
              {
                "description": null,
                "name": "status",
                "type": null
              },
              {
                "description": null,
                "name": "data[]",
                "type": null
              },
              {
                "description": null,
                "name": "outputs[]",
                "type": null
              }
            ]
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "chất lượng: creative",
              "pixels_per_megapixel": 1048576,
              "quoted_unit": "per megapixel-second"
            },
            "label": "Giá video",
            "units": [
              {
                "amount": "0.21",
                "amount_unit": "usd_per_megapixel_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "cents_per_megapixel_second_creative",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.21",
                "native_quantity": 1,
                "public_unit_label": "per megapixel-second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "megapixel_second"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "quality: precise",
              "pixels_per_megapixel": 1048576,
              "quoted_unit": "per megapixel-second"
            },
            "label": "Video price",
            "units": [
              {
                "amount": "0.15",
                "amount_unit": "usd_per_megapixel_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "cents_per_megapixel_second_precise",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.15",
                "native_quantity": 1,
                "public_unit_label": "per megapixel-second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "megapixel_second"
              }
            ]
          },
          {
            "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.15",
                "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.15",
                "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}\"\n: \"${AILOOT_INPUT_REFERENCES_JSON:?Set the actual documented input value}\"\nexport AILOOT_INPUT_REFERENCES_JSON\n: \"${AILOOT_UPSCALE_FACTOR:?Set the actual documented input value}\"\nexport AILOOT_UPSCALE_FACTOR\n: \"${AILOOT_CREATIVITY:?Set the actual documented input value}\"\nexport AILOOT_CREATIVITY\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\nrequest={'model': 'black-forest-labs/flux-video-upscale', 'input_references': '${ACTUAL_OWNED_INPUT_REFERENCES}', 'upscale_factor': '${ACTUAL_UPSCALE_FACTOR}', 'creativity': '${ACTUAL_CREATIVITY}'}\nrequest['input_references']=json.loads(os.environ['AILOOT_INPUT_REFERENCES_JSON'])\nrequest['upscale_factor']=float(os.environ['AILOOT_UPSCALE_FACTOR'])\nrequest['creativity']=int(os.environ['AILOOT_CREATIVITY'])\nPath('request.json').write_text(json.dumps(request,ensure_ascii=False),encoding='utf-8')\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/videos \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o response.bin\n# Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.\n",
            "label": "Use actual input and retain the complete result",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_STATUS_FILE:?Set the actual completed status JSON file}\"\nexport AILOOT_STATUS_FILE\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\nfrom urllib.parse import urlsplit,urljoin\nf=Path(os.environ[\"AILOOT_STATUS_FILE\"])\nif not f.is_file():raise SystemExit(\"Choose the actual completed status file\")\nr=json.loads(f.read_text())\nif r.get(\"status\")!=\"completed\" or not isinstance(r.get(\"data\"),list) or not r[\"data\"]:raise SystemExit(\"Wait for a completed status with asset paths\")\nurls=[]\nfor x in r[\"data\"]:\n    if not isinstance(x,str) or \"\\n\" in x or \"\\r\" in x:raise SystemExit(\"Invalid asset path\")\n    u=urljoin(\"https://api.ailoot.ai\",x)\n    z=urlsplit(u)\n    if z.scheme!=\"https\" or z.netloc!=\"api.ailoot.ai\" or z.username or z.password:raise SystemExit(\"Use the actual Ailoot asset paths from status\")\n    urls.append(u)\nPath(\"asset-urls.txt\").write_text(\"\\n\".join(urls)+\"\\n\")\nPY_REQUEST\nindex=0\nwhile IFS= read -r asset_url; do\n  curl --fail-with-body --silent --show-error \"$asset_url\" \\\n    -H \"Authorization: Bearer $AILOOT_API_KEY\" -o \"video-${index}.mp4\"\n  index=$((index + 1))\ndone < asset-urls.txt\n",
            "label": "GET all completed assets",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "videos",
        "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",
          "audio",
          "video"
        ],
        "label": "Tạo video",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "native_endpoint": "videos",
        "out": null,
        "output": [
          "video"
        ],
        "path": "/v1/videos",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          }
        ],
        "pricing": {
          "billing_mode": "original_invoice_usd",
          "image_input_price": null,
          "image_output_price": null
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "quality: creative",
              "pixels_per_megapixel": 1048576,
              "quoted_unit": "per megapixel-second"
            },
            "label": "Video price",
            "units": [
              {
                "amount": "0.21",
                "amount_unit": "usd_per_megapixel_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "cents_per_megapixel_second_creative",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.21",
                "native_quantity": 1,
                "public_unit_label": "per megapixel-second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "megapixel_second"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "quality: precise",
              "pixels_per_megapixel": 1048576,
              "quoted_unit": "per megapixel-second"
            },
            "label": "Video price",
            "units": [
              {
                "amount": "0.15",
                "amount_unit": "usd_per_megapixel_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "cents_per_megapixel_second_precise",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.15",
                "native_quantity": 1,
                "public_unit_label": "per megapixel-second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "megapixel_second"
              }
            ]
          },
          {
            "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.15",
                "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.15",
                "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-video-upscale",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/videos/{request_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.21",
            "amount_unit": "usd_per_megapixel_second",
            "billing_input": false,
            "estimate_only": true,
            "key": "cents_per_megapixel_second_creative",
            "label": "Video price",
            "native_amount_usd_per_unit": "0.21",
            "native_quantity": 1,
            "public_unit_label": "per megapixel-second",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "megapixel_second"
          },
          {
            "amount": "0.15",
            "amount_unit": "usd_per_megapixel_second",
            "billing_input": false,
            "estimate_only": true,
            "key": "cents_per_megapixel_second_precise",
            "label": "Video price",
            "native_amount_usd_per_unit": "0.15",
            "native_quantity": 1,
            "public_unit_label": "per megapixel-second",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "megapixel_second"
          },
          {
            "amount": "0.15",
            "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.15",
            "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-video-upscale",
        "request_model_id": "black-forest-labs/flux-video-upscale",
        "route_label": "Ultra"
      }
    ],
    "name": "Black Forest Labs: FLUX Video Upscale",
    "price": {
      "estimate_only": true,
      "in": null,
      "in_label": null,
      "out": 0.15,
      "out_label": "estimate before generation",
      "scope_label": "Estimated generation cost",
      "sort_in": null,
      "sort_out": 0.15,
      "varies": false
    },
    "short": "FLUX Video Upscale phóng lớn đoạn video có sẵn bằng tăng cường chi tiết trung thành với nguồn hoặc sáng tạo. Cấu hình được mô tả cung cấp mức phóng 1.5×–3×, giữ âm thanh và bố cục nguồn, đồng thời giới hạn độ dài nguồn, độ phân giải đầu vào và diện tích khung đầu ra."
  },
  "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 Video Upscale phóng lớn đoạn video có sẵn bằng tăng cường chi tiết trung thành với nguồn hoặc sáng tạo. Cấu hình được mô tả cung cấp mức phóng 1.5×–3×, giữ âm thanh và bố cục nguồn, đồng thời giới hạn độ dài nguồn, độ phân giải đầu vào và diện tích khung đầu ra.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "9b5c6304e5b0b3b6bef78562081ab9999d89134f24a7f321d3874c7d303b834c",
    "renderer_sha256": "64a62299639eb843877e9ec5c95e32bf22bac3acfe230f6f502c5c3aa186f9c1"
  },
  "sourceRevision": "7d0e13c9c3a2cbf0e67798788175e3e4224fc297c61aae49098942c2deb39811"
}
