How to QA a render before it ships

Upload the file and one decode returns black frames, freezes, silence gaps and loudness together, each with a start and an end. These are the checks a human does by scrubbing and usually misses — a two-frame black flash at 04:12 is invisible at playback speed and obvious in a list.

Last updated

The call

Copy this as it stands. “Is there anything broken in this export?” is the question it answers.

TypeScript SDKts
const upload = await playhead.uploads.create("./exports/master-v4.mov");
const qa = await playhead.watch({
  url: upload.upload_id,
  detail: "overview",
});

console.log(qa.technical?.blacks);        // [{ start: 252.1, end: 252.2 }]
console.log(qa.technical?.freezes);
console.log(qa.technical?.silence_gaps);
console.log(qa.video.start_timecode);     // "14:36:27:07"
cURLbash
UPLOAD=$(curl -sX POST https://api.tryplayhead.com/v1/uploads \
  -H "Authorization: Bearer $PLAYHEAD_API_KEY" \
  -F "file=@./exports/master-v4.mov" | jq -r .upload_id)

curl -X POST https://api.tryplayhead.com/v1/frames \
  -H "Authorization: Bearer $PLAYHEAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d "{\"url\": \"$UPLOAD\", \"detail\": \"overview\"}" | jq '.technical'

Watch out for

Everything the API can refuse, and what to send instead, is on the errors page.