The continuity gate#

Generating fifteen versions of a scene and picking the one where the character still looks right is how most AI production works today. It is cherry-picking by eye, and it does not scale to a twenty-minute film.

The continuity gate is the alternative: every generated shot is measured against the references it was supposed to be made from, and the measurement is stored with the shot. "This shot held" becomes evidence rather than an opinion.

Read the honest limits before you rely on this. Today the gate measures and reports; it does not yet reject a shot for drifting. What the gate does not do yet explains why, and what is enforced in the meantime.

Shots, and what they commit to#

Your project has a board: shots in order, optionally attached to a script. Before a shot can be generated, it commits to the entities it contains — and it commits to a specific locked version of each, not to the living bible entry.

That distinction is what makes retakes trustworthy. A shot redone six weeks later is regenerated from exactly the references it used the first time, even if the character's entry has since gained new photographs. And when a shot does drift, you can point at the specific locked reference it drifted from.

Two commitments are refused outright:

  • A version with no rights basis, or one whose rights have been withdrawn. This refusal has no threshold and no override. It happens before anything is reserved or generated, so an undocumented likeness never conditions work you pay for. See The production bible.
  • Two versions of the same entity on one shot. A shot holding both revision 1 and revision 2 of the same character would be measured against two contradictory sets of references, with no way to say which was meant.

What the gate measures#

For every entity a shot committed to, frames from the generated result are compared against that entity's locked references, on separate axes:

AxisWhat it compares
IdentityA character's face against the face built from their reference pack.
ElementA figure or prop against its references.
SetAn environment against its references.

There is deliberately no single blended score. One number tells you a shot is bad without telling you what is wrong, and a retake needs to know whether to fix the character, the prop or the set. (A palette axis is named in the scorecard but has nothing to measure against yet, so it is always reported as unmeasured rather than guessed at.)

Every score is recorded together with the version of the scoring rules that produced it, so changing those rules later cannot silently reinterpret numbers taken under the old ones.

Two stages, and why the still comes first#

A still image costs roughly a tenth of what a video clip costs. So the gate runs twice:

  1. The keyframe stage scores a still for the shot. It runs before any video is paid for.
  2. The video stage samples several frames evenly across the finished clip and scores those the same way, taking the middle value rather than the worst — a single motion-blurred frame is noise, while real drift is sustained.

The point of the order is money. A keyframe that has lost the character should never become a video bill. The video stage runs after the spend, so it informs whether you accept the take and what you retake, rather than authorising anything.

What the gate enforces today#

Video generation for a shot is refused until the keyframe stage has run for that shot. That is a real rule, enforced before anything is reserved or sent to a model, and it is what makes the two-stage design something you cannot walk around. The most recent keyframe result speaks for the shot, so answering a bad take with a fresh one works the way you would expect.

The rights refusal described above is also fully enforced. It is a legal control rather than a quality one, and it fails closed.

What the gate does not do yet#

The gate does not currently refuse a shot on continuity grounds. It measures every axis it can, records the scores, and leaves the verdict blank.

The reason is calibration. Turning a similarity number into "passed" or "failed" requires a threshold, and a threshold invented rather than measured is worse than none at all: set it too high and it rejects perfectly good work until people learn to ignore it; set it too low and it waves drift through while looking like a check. Thresholds here come from a curated set of shots — pairs that genuinely held and pairs deliberately drifted — that the gate has to separate reliably before any number is trusted. Until that measurement exists, no axis has a threshold and no score carries a ruling.

So, plainly: do not rely on the gate to catch drift today. Review your shots. What you get in the meantime is the measurement history, the two-stage structure enforced, and scores that become verdicts with no change to how you work once the thresholds land.

When a score is missing#

A missing score is never a pass. Absence of a measurement is not evidence of continuity, and the gate keeps two different absences apart because they call for different things:

  • Not yet calibrated. The axis was measured; there is no threshold to judge it by. This is our gap, and it is the one above.
  • Nothing to measure. The shot committed to a character and no frame showed a face, or the character's reference pack never produced one. This is a fact about your material, and it is the one worth acting on. A character deliberately framed from behind is fine and will read this way. A character who should have been clearly visible is telling you something — either about the shot or about the references.

Because the second case is legitimate often enough, it is reported rather than refused. A quality check whose first act is to reject correct work teaches people to route around it.

Where this lives today#

ZymCOS is in active development. The board and its commitments work through the API; the scoring passes are run by Zynth as part of operating your project; and the shot review screens that will show per-entity scorecards are still being built. Nothing described in this page as enforced depends on those screens.