동영상 모델은 프롬프트 이상의 것을 받아들입니다. 어떤 것은 첫 프레임과 마지막 프레임을 받아들입니다. 어떤 것은 소수의 참조 이미지를 받아들입니다. 어떤 것은 참조 클립을 받아들이고, 그 때문에 다르게 동작합니다 — 자체 사운드트랙을 음소거하거나, 클립의 길이를 결과물의 길이로 취급하는 식으로요. 어떤 것은 참조 오디오 클립을 받아들입니다. 각 모델은 이 수용 규격을 서로 다르게 정의하고 있었고, 우리 쪽 대부분은 그중 일부만 전송하고 있었습니다.
이제는 각 모델의 수용 규격을 설명하는 하나의 장소가 있습니다. 이미지는 몇 장까지, 클립이 허용되는지 그리고 최대 몇 초까지, 오디오가 허용되는지, 오디오에 옆에 이미지가 필요한지, 클립이 모델 자체 소리를 음소거하는지, 클립이 길이를 결정하는지. 이는 제공자 자체 문서에서 읽어낸 뒤, 같은 날 실제 키로 실제 렌더링을 통해 검증되었습니다 — 아래 두 가지는 그렇게 발견된 것입니다.
확장자 없는 파일
링크를 통해 모델에게 클립을 넘기는 것은 명백한 방법입니다. 이는 여러 모델에서 매우 짐작하기 어려운 방식으로 실패합니다. 파일이 확장자 없이 도착하고, 모델은 확장자로 검증하기 때문에, 완전히 멀쩡한 mp4를 이른바 mp4가 아니라며 거부해버립니다. 같은 바이트를 인라인으로 보냈을 때는 어디서든 받아들여졌습니다. 그래서 이제 모든 클립은 먼저 표준 형식으로 재인코딩된 뒤 인라인으로 전송되며, 이를 초과하면 경고와 함께 여전히 링크 경로가 사용되는 크기 상한선이 있습니다.
아무도 받지 못하고 있던 등급
두 번째 문제는 고객에게 돈을 낭비하게 하고 있었습니다. 동영상 모델 중 하나는 해상도 필드가 전혀 없었고 — 화질 등급은 이름이 다른 필드를 통해 설정됩니다 — 그 앞단의 플랫폼은 인식하지 못하는 필드를 조용히 버리고 있었습니다. 그래서 이 모델이 추가된 이후의 모든 렌더링은, 고객이 상위 등급 비용을 지불했음에도 기본 등급으로 돌아오고 있었습니다. 아무것도 실패하지 않았습니다. 동영상은 도착했습니다. 다만 그것이 청구된 동영상이 아니었을 뿐입니다.
이제 등급은 실제로 가격이 책정된 해상도에서 도출되며, 프로브로 확인됩니다.
Seedance가 직결 경로로 옮겨간다
같은 기간에 Seedance 계열 전체가 통합 플랫폼에서 제공자 자체 API로 옮겨갔고, 통합 플랫폼은 대체 경로로 남았습니다. 하나의 모델 행, 하나의 이름, 두 개의 요금 체계 — 그리고 사용자에게 제시된 가격은 주 경로가 실패하고 대체 경로가 작동하더라도 실제로 지불하는 가격입니다. 원장이 실제로 어느 경로가 작업을 수행했는지 기록하기 때문에, 우리 자체의 마진 회계는 견적이 아니라 진실을 읽게 됩니다.
사용자로서 알아둘 만한 한 가지는, 이 경로에서 참조 클립을 첨부하면 제공자가 결과물의 초 수에 더해 클립의 초 수까지 청구한다는 점입니다. 양식의 견적이 이를 보여주며, 실행 전에 제시된 숫자가 실제로 청구되는 숫자입니다.
가는 길에 발견한 것들
세 개의 API 클라이언트에 제공자 이름이 붙은 클래스를 우리 컨테이너에서 보이게 만드는 단 하나의 속성이 빠져 있었습니다. 그중 두 개는 텍스트 음성 변환 클라이언트로, 추가된 날부터 계속 보이지 않는 상태였습니다 — 카탈로그에 심어둔 두 개의 음성이 실제로 서비스될 수 없었던 이유입니다. 이제는 리플렉션 테스트가 누군가 아무 일도 하지 않는 음성을 알아채기를 기다리는 대신, 이런 종류의 누락이 다음에 발생하면 즉시 빌드를 실패시킵니다.
그리고 하루 전날 출시한 웹 검색 페이지는 웹과 모바일의 모든 등급에서 403을 반환하고 있었습니다. 이는 상위 권한으로 잠겨 있었는데, 두 역할 시드 모두 그 세 개의 하위 권한만 부여했고, 어디에서도 하위 권한으로부터 상위 권한이 추론되지 않았습니다. 다른 네 가지 기능이 각각 어느 시점엔가 이를 수동으로 패치했었습니다. 이제는 권한 트리를 순회하며 어떤 역할도 갖고 있지 않은 권한으로 서비스가 잠긴 곳에서 실패하는 검사가 있습니다.