Một mô hình video chấp nhận nhiều hơn một lời nhắc. Một số chấp nhận khung hình đầu tiên và khung hình cuối cùng. Một số chấp nhận một nhúm hình ảnh tham chiếu. Một số chấp nhận một đoạn phim tham chiếu, rồi hành xử khác đi vì điều đó — tắt tiếng chính bản nhạc nền của nó, hoặc lấy thời lượng đoạn phim làm thời lượng của kết quả. Một số chấp nhận một đoạn âm thanh tham chiếu. Mỗi mô hình vẽ ra bao bì đó theo cách khác nhau, và phần lớn mô hình của chúng tôi chỉ gửi một phần của nó.
Giờ đây có một nơi duy nhất mô tả bao bì của từng mô hình: bao nhiêu hình ảnh, có cho phép một đoạn phim hay không và tối đa bao nhiêu giây, có chấp nhận âm thanh hay không, âm thanh có cần một hình ảnh đi kèm hay không, một đoạn phim có tắt tiếng âm thanh riêng của mô hình hay không, một đoạn phim có ấn định thời lượng hay không. Điều này được đọc từ tài liệu riêng của các nhà cung cấp, rồi được kiểm chứng ngay trong ngày đó bằng các bản kết xuất thật trên các khóa thật — chính vì vậy hai điều dưới đây đã được phát hiện.
Một tệp không có phần mở rộng
Trao một đoạn phim cho mô hình qua liên kết là cách rõ ràng nhất. Điều này thất bại ở một số mô hình theo cách rất khó đoán: tệp đến mà không có phần mở rộng, và mô hình xác thực dựa trên phần mở rộng, nên nó từ chối một tệp mp4 hoàn toàn ổn chỉ vì cho rằng nó không phải mp4. Cùng những byte đó khi gửi trực tiếp lại được chấp nhận ở mọi nơi. Vì vậy giờ đây mỗi đoạn phim trước tiên được mã hóa lại thành định dạng chuẩn rồi gửi trực tiếp, kèm một mức trần dung lượng mà vượt qua đó vẫn dùng đường liên kết, kèm cảnh báo.
Một mức không ai thực sự nhận được
Điều thứ hai đang khiến khách hàng mất tiền oan. Một trong các mô hình video hoàn toàn không có trường độ phân giải — mức chất lượng của nó được đặt qua một trường mang tên khác — và nền tảng phía trước nó âm thầm loại bỏ các trường nó không nhận ra. Vì vậy mọi bản kết xuất trên mô hình đó kể từ khi được thêm vào đều trả về ở mức mặc định trong khi khách hàng đã trả tiền cho mức cao hơn. Không có gì thất bại. Video vẫn đến. Chỉ là nó không phải là video đã được tính phí.
Mức này giờ đây được suy ra từ độ phân giải thực sự được định giá, và được xác nhận bằng đầu dò.
Seedance chuyển sang kênh trực tiếp
Trong cùng giai đoạn đó, toàn bộ họ Seedance đã chuyển từ bên tổng hợp sang API riêng của nhà cung cấp, với bên tổng hợp được giữ lại làm phương án dự phòng. Một dòng mô hình, một cái tên, hai bộ biểu phí — và mức giá được báo cho bạn là mức bạn thực sự trả ngay cả khi kênh chính thất bại và phương án dự phòng chạy thay, với sổ cái ghi lại kênh nào thực sự thực hiện công việc, để hệ thống kế toán biên lợi nhuận của chúng tôi đọc được sự thật thay vì mức báo giá.
Một điều người dùng cần biết: khi bạn đính kèm một đoạn phim tham chiếu trên kênh đó, nhà cung cấp tính phí số giây của đoạn phim cộng thêm vào số giây của kết quả. Ước tính trong biểu mẫu nêu rõ điều này, và con số được báo trước khi chạy chính là con số bị tính phí.
Phát hiện dọc đường
Ba client API thiếu thuộc tính duy nhất giúp một lớp mang tên nhà cung cấp hiển thị được trong container của chúng tôi. Hai trong số đó là client chuyển văn bản thành giọng nói, vô hình kể từ ngày được thêm vào — đó là lý do hai giọng nói được gieo vào danh mục chưa bao giờ thực sự được phục vụ. Giờ đây một bài kiểm thử phản chiếu sẽ làm bản dựng thất bại ngay khi có sự bỏ sót kiểu này lần tới, thay vì chờ ai đó nhận ra một giọng nói không làm gì cả.
Và trang tìm kiếm web mà chúng tôi phát hành hôm trước đã trả về lỗi 403 ở mọi cấp độ, trên cả web và di động. Nó bị khóa bởi một quyền cha; cả hai bộ khởi tạo vai trò đều chỉ cấp ba quyền con của nó, và không nơi nào suy ra quyền cha từ các quyền con. Bốn tính năng khác đã từng vá lỗi này bằng tay vào một thời điểm nào đó. Giờ đây có một kiểm tra đi qua toàn bộ cây quyền và thất bại ở nơi một dịch vụ bị khóa bởi một quyền mà không vai trò nào sở hữu.