Guides

    QC a Finished Master, Not a Generation

    Generation QA grades a clip against its prompt. Finishing QC signs off freeze frames, black, sync, flash, loudness, captions, slate, textless, and a checksum.

    Versely Team9 min read

    A clip that matches its prompt is not a picture master. Prompt-match is a generation question. A master is a file you will put your name on, and the failures that kill it (a frozen last frame, a one-frame black, late captions, a loudness miss, a missing textless) never show up on a prompt-adherence score.

    Treat those as two passes. A defect taxonomy for generated video is the generation pass: RENDER, MOTION, CONTINUITY, SYNC, BRIEF, RIGHTS. Automated QA before a paid placement is the machine assist on that pass. Finishing QC runs after the cut is locked, the grade is in, the mix is printed, and someone is about to send the file.

    Generation QA does not catch finishing defects

    Generation QA asks whether the shot is the shot you asked for. Finishing QC asks whether the file is legal to ingest.

    They fail in different places. A melted hand is a generation defect; you reroll. A locked :30 whose last two frames freeze because the encoder held the out-point is a finishing defect: the shot is fine and the master is not. A mix that hits EBU R 128 on the timeline and then gets a 3 dB lift on export is a finishing defect. Captions that exist as a sidecar in the editor and never made the delivery folder are a finishing defect.

    If you only watch the middle of the spot at 1x, you will sign off all of those. Finishing QC is a structured walk of the file, not a vibe check of the cut.

    The nine checks

    Run them in this order. Earlier items are cheaper to fail.

    # Check Pass Fail
    1 Freeze frames Every frame unique, or a hold is editorial Last frame of a generated clip stuck; encoder freeze on the out-point
    2 Black frames Counted blacks match the spec Dropped-frame black in the body; extra black after the slate
    3 A/V sync Within ±1 frame Lips late; 2-pop off its flash
    4 Flash No illegal flash or pattern Strobe or lightning that trips ITU-R BT.1702
    5 Loudness Integrated loudness and true peak as specified Wrong target; true peak over the ceiling
    6 Captions present The named caption object is in the folder Burn missing on social; sidecar missing on long-form
    7 Slate Present or absent as specified Bars on a TikTok file; no slate on an agency ProRes
    8 Textless Same grade, cut, and duration as the texted Missing, or a different grade
    9 Checksum Hash on the note matches bytes on disk Truncated transfer; a renamed copy of the wrong print

    Freeze frames. Play at 1x, then step every cut and the first and last second of each generated clip and of the programme. Models smear or hold the last frames of a take; a hard cut on that hold is a freeze. Scrubbing will miss it, because a freeze looks like a still when you are parked.

    Black frames. Count them. Agency leader uses black: the two seconds between a 2-pop and first frame of action are supposed to be black. Unexpected black is a dropped frame, a failed stitch, or an untrimmed tail. Stitching clips is a common place for a one-frame black at a join.

    A/V sync, ±1 frame. Write the tolerance so two reviewers do not argue about "a little late." At 25 fps one frame is 40 milliseconds; at 24 fps it is about 42 milliseconds. Check a hard consonant against the mouth, and the 2-pop against its flash if you have leader. Lip-sync drift across a clip is a generation or retiming problem. A whole-file offset of one or two frames is almost always export or conform. Fix it in the editor. Do not reroll the picture.

    Flash. ITU-R BT.1702-3 (November 2023) is what QC houses test to. Netflix Partner Help requires it on branded animated titles and may request it where strobing or VFX is heavy. WCAG 2.2 Success Criterion 2.3.1: no more than three flashes in any one-second period, unless below the general and red flash thresholds. Harding FPA is an analyser, not the standard. Without a PSE tool you still owe a human pass on lightning and strobes. A fail is a recut, not a disclaimer card.

    Loudness. Broadcast: EBU R 128, programme loudness −23.0 LUFS, true peak −1 dBTP. Short-form has R 128 s1. Social platforms do not publish an equivalent in their own help docs; loudness normalization separates the EBU figure from the forum figure. Write the target on the slate and on this form. Measure the exported file, not the timeline.

    Captions present. Not "are they good." Does the folder contain the caption object the spec named. A muted-feed social master wants burned-in captions. A long-form or streamer master wants a sidecar. Burned-in captions versus SRT and VTT is the destination rule. Finishing QC confirms the object is there, timed, and in the right language.

    Slate. Agency and broadcast still want leader. Social files and several streamer mezzanine specs want it gone. Presence and absence are both items. Eight seconds of bars and a 2-pop have to be on the file if the spec says so. If first frame of the file is first frame of action, bars are a fail.

    Textless. Titles, supers, or an end card require a textless of the same grade, cut, and duration. An earlier grade, or two frames shorter, is not a textless. Localization cannot restamp type you flattened into the picture.

    Checksum. Hash the file you are sending (MD5 is still what most agency notes ask for; SHA-256 if the spec names it). Put the hex on the delivery note. After transfer, hash the arrived bytes. A matching filename is not a matching file.

    How to run the pass without fooling yourself

    Do it on the exported file, not the timeline. The timeline is not what the client ingests.

    1. Export the real master, not a proxy. Versely's editor can return a free 480p preview pass with a short per-user cooldown. That is a layout check, not a loudness, freeze, or checksum pass. Iterate on the preview; sign off the charged export. Previews versus final export is the billing split.
    2. Open that export in a player that is not the editor, full screen, audio on.
    3. Watch start to finish at 1x. Do not skip leader or the end-card hold.
    4. Step the first and last 24 frames and every edit.
    5. Park on a line of dialogue. Park on the 2-pop if you have one.
    6. Measure loudness on the file. Write the number down.
    7. Confirm captions and textless sit in the same folder as the texted.
    8. Hash the file. Write the hash on the form.

    A second pair of eyes on steps 3 to 5 is worth more than another tool. Watching the video back before you publish catches on-screen text and pacing; it will not measure LUFS or a checksum. Use it as the content read, then do the file checks by hand.

    The sign-off form

    Copy this into the job folder. One row per master (texted, textless, 16:9, 9:16). A blank cell is a fail.

    Field Value
    Job / ISCI or Ad-ID
    Version (e.g. UK_EN_TEXTED_v03)
    Filename
    Checksum (algorithm + hex)
    Duration of program (not including leader)
    Frame rate / sample rate
    Freeze frames Pass / Fail / N/A. Notes:
    Black frames Pass / Fail / N/A. Counted blacks:
    A/V sync Pass / Fail. Offset in frames:
    Flash (BT.1702 / WCAG 2.3.1) Pass / Fail / Not tested. Tool:
    Loudness (integrated LUFS, true peak dBTP, target used)
    Captions Burn / sidecar / none. Language. Present: Y/N
    Slate / bars / 2-pop Present as specified / omitted as specified / fail
    Textless Filename. Duration match: Y/N. Grade match: Y/N
    Rights (likeness, music, claims, disclosure) Pass / hold
    Signed by / date / time

    File the form next to the master. The next revision is v04, not final_final. If a later export changes a pixel, it gets a new hash and a new row.

    FAQ

    Can I skip finishing QC on a social-only cut?

    No. You skip leader. You do not skip freeze, black, sync, flash, loudness, captions, or the checksum. A 9:16 with a frozen last frame still ships a frozen last frame. Mark slate "omitted as specified," and mark textless "N/A" only if there is no on-screen type to restamp.

    Is ±1 frame of sync actually good enough?

    It is the tolerance you write so the argument stops. A 25 fps frame is 40 milliseconds. Viewers will not clock a single-frame offset on a wide shot, and they will clock it on a close-up with dialogue. If the spec names a tighter number, that number wins. Anything larger than ±1 frame is a recut of the export, not a taste note.

    Do I need a Harding licence to sign off flash?

    You need a method. ITU-R BT.1702 is the recommendation; Harding FPA is one analyser. Without the licence, still do a human pass on known triggers, and do not sign "Pass" on a strobe-heavy cut you have not measured. Write "Not tested: human review of lightning at 00:00:12" rather than a fake pass.

    What if generation QA already ran?

    Keep both. Generation QA can miss a freeze on the stitched out-point, a loudness miss on export, and a sidecar that never left the editor. Finishing QC can ignore whether shot 4 matches the prompt. Mixing the two passes is how a beautiful wrong shot ships with a perfect checksum.