# Sync Desk > THE TOLERANCE IS NOT CENTRED ON ZERO. Audio arriving EARLY is far more objectionable than audio > arriving late, because in the world sound always lags light and the ear has no experience of the > reverse. So the window allows 45 ms of lead against 125 ms of lag - nearly three times as much > room in one direction. Five lanes over one programme, plus a free browser-side engine judging > signed offsets against four thresholds. URL: https://sync-desk.skillsafe.ai/ API: https://sync-desk.skillsafe.ai/api.html Derived from bradautomates/claude-video (https://github.com/bradautomates/claude-video), MIT, a skill that watches a video: it downloads it, extracts frames, pulls the transcript and hands both to a model to reason about together. Doing that assumes the picture and the sound agree about when things happened, and every statement of the form "this is said while that is on screen" is wrong by exactly the offset when they do not. Not affiliated with or endorsed by bradautomates. ## The window ```text detectable +45 ms early ... -125 ms late unacceptable +90 ms early ... -185 ms late ``` SIGN CONVENTION: positive means the audio is EARLY - it arrives before the picture it belongs to. Negative means late. SO "SYNC ERROR: 60 MS" IS HALF A MEASUREMENT. Sixty late is comfortably inside the window and sixty early is outside it, and the report that gives only a magnitude has thrown away the half that decides which. The detectable window is 170 ms wide and its midpoint is 40 ms LATE, not zero. ## A frame is not a millisecond ```text one frame 40 ms at 25 41.7 ms at 23.976 16.7 ms at 60 ``` Audio is moved in frames unless somebody opens a sample editor, so the frame is the resolution of the fix. HALF A FRAME AT 25 IS 20 MS, WHICH IS NEARLY HALF THE ENTIRE EARLY BUDGET - so on the tight side an edit-level fix is sometimes not a fix at all. AND AN OFFSET UNDER HALF A FRAME CANNOT BE MOVED BY SLIDING FRAMES, because the nearest multiple is zero. That is a sample-accurate job or it is nothing. ## A slip and a slope look identical at one measurement ```text 48000 played at 47952 stretched, runs LATE 1 ms every second 48000 played at 48048 compressed, runs EARLY 1 ms every second ``` If the clocks agree the offset is constant and sliding the track fixes it everywhere. If they do not, the offset GROWS - so a slip fixes one moment and breaks every other one. A THOUSANDTH IS 3.6 SECONDS AN HOUR. It is the same 1001 that renames frames in drop-frame timecode: one constant, two entirely different problems, and this is the one you can hear. AND THE DIRECTION DECIDES HOW LONG YOU HAVE. Running late a thousandth takes about two minutes to become detectable; running early it takes forty-five seconds, because that side of the window is a third as wide. ONLY A RESAMPLE FIXES A DRIFT. ## The room adds lag, and only ever lag Sound covers about 343 m/s, so a listener 15 m from the speakers hears a perfectly synced mix 44 ms late, and at 30 m 87 ms. Both are inside the lag tolerance and neither could ever happen in the other direction. THAT ASYMMETRY IN THE WORLD IS WHY THE TOLERANCE IS ASYMMETRIC. The room only ever spends the budget on the side that has room to spare - which also makes it the one case where a mix measuring slightly EARLY at the desk gets better further back. ## What this page cannot do Everything here is arithmetic on numbers somebody measured. IT HAS NOT SEEN THE PICTURE OR HEARD THE SOUND. Whether an offset is noticed depends on whether there is a cue in the shot: a mouth in shot is the most sensitive comparison a viewer has, and ambience has no on-screen source at all. THE THRESHOLDS ARE A RECOMMENDATION, NOT A LAW OF PERCEPTION - a line drawn through a spread of listeners. AND A MEASUREMENT IS ONLY AS GOOD AS WHERE IT WAS TAKEN. One reading at the head cannot distinguish a constant offset from a drift, which is the single most useful thing to know about a sync fault. ## The sheet ```text PROGRAMME rate | 25 clock | 48000 played | 48000 room | 15 CUES c1 | 60 early | dialogue | the interview at 2:14 c2 | 20 late | impact | the slate at the head ``` A cue row is `id | offset | cue kind | description`. `-60`, `60 late` and `60ms behind` are all late; `+60`, `60 early` and `60 ahead` are all early. A bare `60` is read as EARLY by the convention and reported every time. A sign that contradicts its own word is refused rather than resolved. `rate` is required and has no default. `clock` and `played` turn on the drift check. `room` is in metres. A cue kind turns on the judgement about whether anybody would notice. ## The lanes - `plan` - decides what to measure, before anything is measured - `check` - says what every measurement means - `window` - places each one in the asymmetric window, both ways round - `drift` - says whether it is a slip or a slope - `deliver` - sorts findings into as measured, fix in the edit, needs a resample ## What it does not do It reasons about numbers somebody measured. It has not seen the picture or heard the sound.