Back to Blog

The Narrated-Beat Repair That Kept Causing Its Own Bug

By · 12 min read
AI Evaluation Prompt Engineering Computer Vision Video Generation

A "narrated" beat in the main video-generation service renders silent — the person on screen doesn't speak, the voiceover is added at the stitch — which means the frame-authoring prompt has to actively un-say things a normal talking beat would say: don't look at the lens, don't open the mouth, don't gesture like you're mid-sentence. That's a narrow, specific rewrite, and over five straight days it turned out to be one of the hardest things in the whole pipeline to get right, because every fix for one failure mode of "don't do that" created a new way for the beat to come out wrong.

This post is about that repair step, and about a parallel cluster of identity and relevance critics that had the opposite problem — not saying the wrong thing, but being structurally unable to say anything useful at all.

A repair that fixes what it looks at and never checks what it leaves behind is not a repair. It's a relocation of the same bug.

The repair that produced the defect it prevented

PR #1126 is the fix that should have closed the book on narrated-beat framing, and instead opened a new chapter. Measured on a real reference-less run, the strip step that removes camera-facing language ran on 15 of 30 beats — and the plan critic flagged six of them anyway, not for anything the strip left in, but for what it left dangling. "Tipping it side to side" survived with no object ever established to tip. "The other hand gesturing outward" survived with no first hand established. The strip was removing individual clauses correctly and leaving the clauses around them referring back to something that no longer existed.

The fix PR #1126 shipped was a cascade: once a clause gets removed, drop anything downstream that refers back to it. PR #1128 reverted that same-day, measured against a different run, because the cascade over-corrected — three scenes came back with every action clause stripped, leaving nothing but a bare shot size and the standard not-looking-at-the-lens note. The plan critic's own words on the result: "no staging at all beyond a shot size." The fix for dangling references had traded one defect for a worse one, found and reverted before a single clip was rendered.

PR #1127 caught the regression's quieter half: #1126 correctly made the narrated-direction repair reachable on every narrated beat instead of only the ones whose role had just changed — and that exposed that the repair had only ever touched a beat's motion field, never its accept field, the list of criteria the critic grades the rendered clip against. Measured: 18 of 30 beats had their motion stripped of camera-facing language, and all eighteen still carried an accept list requiring "facing camera." The repair and the check it fed were now disagreeing about what a narrated beat even is, on every single beat the repair touched — and the check, correctly, was the one catching it.

PR #1129 found a third failure shape in the same system: the repair wasn't just removing language, it was appending a denial — "not looking at the lens" — directly next to direction it had deliberately chosen to keep, like "leans in hard toward the camera." A lean toward the lens while narrating is legal, established direction. Writing a denial of eye contact one sentence after affirming a lean toward the camera is a contradiction the module wrote itself, and both the plan critic and the image model reacted to it as exactly that.

The instruction that existed and had no way to arrive

PR #1130 is the root-cause finding underneath the whole cluster, and it's almost funny in how simple it is once stated. The prompt template had, all along, contained the correct instruction: a per-beat block telling the planner a scene's role is "narrated," already decided, don't change it, write motion and accept for someone who is not talking to the camera. That block was gated on a field stamped only by the code path that reads a reference video's own shots. A reference-less run has no reference — so the field was never set, the block was never emitted, and the planner was simply never told. The correct instruction existed in the codebase the entire time; it had no path to reach the one case where it mattered most.

The twin that forbade and requested in one breath

PR #1124 caught the same disease from a different angle: a narrated beat's per-scene message introduced its own voiceover line as "they are mid-delivery of this" — explicit direction to draw an open, speaking mouth — and two lines later, the same message appended "mouth relaxed and closed." One author was told to do a thing and forbidden from doing it in the same breath, which isn't ambiguity, it's a coin flip the model has to resolve on its own. The reviewer's note on the delivered ad was that the cast "appear to be talking over a narration they are not speaking" — exactly the failure mode the contradiction predicted.

And a narrower version of the same bug, caught by PR #1106: a strip rule matched the literal phrase "to the lens" but not the paraphrase "toward the lens," so a clause aiming a face at the camera survived the strip intact and sat right next to the note the module had just appended saying the opposite. Measured on a real run: the critic flagged visual mismatches on 6 of 33 beats, each one a variant of the same near-miss string match.

A check that only detects, and a redo that isn't allowed to help

A parallel thread this same week was about critics that could see a problem and had no way to act on it, or acted in a way that made the problem worse. PR #1114 found that an identity-anchor check added specifically to catch cast drift between frames contradicted a repair mechanism meant to fix exactly that drift: the anchor check fires when a frame shows the wrong person, and a candidate that successfully repairs that has, by definition, changed who's in the frame relative to the one it's replacing — so a second check, comparing the fix against the broken original, correctly says "this is a different person" and reverts the fix. The detector and the repair couldn't coexist on the one defect the detector existed to catch.

PR #1115 found the same check failing in the opposite direction: comparing an anchor frame against later frames by matching people on where they physically stand in the shot, rather than by who they are, produced consistent false positives on a cast that never actually changed — three correct frames failed, every time, because the people in them had simply moved around the room between shots. PR #1110 closed a related gap at the source: a frame-redo mechanism had no rule against changing who the redo produces, so a redo meant to fix a lighting or composition flaw could — and on one real animated run, did — swap in a visibly different person, aging one character down twenty years and completely changing another's hair and glasses between two adjacent scenes of the same ad.

Grading on criteria nobody showed, verdicts about frames already gone

PR #1113 found a b-roll cutaway that shipped into a finished ad carrying its own critic's warning — "no person, face or hand in frame" on a span that was supposed to show someone — with a status field reading "ready" right next to it. The root cause: the generator that paints the cutaway is never shown the acceptance criteria it's later graded against. The criteria exist, the critic reads them, and the thing being critiqued never saw them — which makes a failing grade not a safety net but a formality nobody could have passed.

PR #1111 found a stranger version of the same blind spot at the whole-board level: a storyboard verdict reporting "matches all 2 of the plan's checks, zero failures" was describing frames that, by the time anyone read that verdict, had already been regenerated three times by the step that runs immediately after grading. The board graded real pictures and told the truth about them — the pictures just didn't exist anymore by the time the truth reached anyone.

The audit that found eleven more

PR #1131 is the capstone of the week, and it's refreshingly blunt about what it is: an adversarial audit — 88 agents, 7 lenses, 3 independent skeptics per finding — run specifically against this session's own changes, the same day they shipped. Seventeen raised findings, none refuted, deduplicating to eleven distinct defects, every one introduced earlier that same session and fixed in the same PR that confessed to them. One finding alone — a product-reveal rule that shipped and was structurally inert because the one code arm every real run actually takes never called the function that read it — echoes the exact shape of bug this whole cluster kept rediscovering: correct logic, unreachable from where it needed to run.

The pattern: narration is a double negative, and double negatives don't compose

Every bug in this cluster is a version of the same thing. "Narrated" isn't a positive instruction — it's a list of things a normal talking beat does that this beat must not do, layered on top of direction that was written assuming the beat could talk. Stripping language correctly requires knowing what else in the same message depends on it; appending a denial correctly requires knowing what else in the same message it might contradict; checking a repair correctly requires grading the thing the repair touched, not just the field everyone remembers to update. None of these are hard algorithmically. They're the specific, grinding difficulty of maintaining two true statements — "do this" and "but never like that" — in the same generated paragraph, across every beat, every run, every time the underlying direction changes. The fix was never a smarter model. It was finding, by measurement rather than assumption, every place the pipeline had quietly let the two statements drift out of sync.

Related Articles