The difference between an AI-generated film that holds together and one that reads as a pile of disconnected clips isn't the prompts — it's the loop around them. This is the discipline: lock a still before you animate it, change one thing at a time, compare every shot back to where you started, and know when a failure means "reword it" versus "stop and do something different."
The loop
Don't go straight from a text prompt to a moving clip — that skips a cheap, high-control step. Generate a locked still first (the exact composition, the exact framing, everyone and everything in the position it needs to be), review that, and only animate once the still is right. A still image is far cheaper to iterate than a video clip, and almost every composition problem is easier to see and fix as a still than after it's already moving.
One variable per regeneration
Change one thing per attempt. If a regeneration fixes the thing you changed but the result also differs somewhere you didn't intend, that's not a successful fix — it's a new, unreviewed variable.
A position change specifically needs two things stated together: the new position described against a fixed landmark already in the frame (not a vague relative direction like "move it to the pocket"), and a separate statement that the old spot is now empty. Without the second half, a faint trace of the old position can linger even when the new one is correct.
Multi-stage gestures need a keyframe chain
Most video generation only takes a starting frame and an ending frame — there's no way to specify an exact middle state in one call. For a gesture with a real middle beat (a hand reaches, grips, releases; a head tips, holds, returns), a single first-frame/last-frame generation flattens that middle into whatever the model guesses, which is often wrong.
The chained-keyframe pattern
Lock REST (the starting still) → Lock PEAK (a new still, composed from REST, showing the exact middle state) → Animate REST→PEAK → Animate PEAK→REST (or wherever the beat ends) → Concatenate the two clips, reviewing the join like any other cut.
e.g. A hand reaching for a cup: REST (hand at rest) → PEAK (hand gripping the cup) → two short animated clips joined into one gesture.
This is the same still-then-animate discipline from "The loop" above, just applied twice in a row — the middle still is exactly as cheap to iterate as any other locked frame, and locking it removes the ambiguity that made a single first+last attempt guess wrong.
The standing reference
When reviewing a new shot, compare it back to the first approved shot in the sequence — not just the one immediately before it. Comparing only to the previous shot lets the bar drift down invisibly: each individual step can look like a reasonable, small departure from its immediate neighbor, while the whole sequence quietly drifts far from where it started by the time you're a few shots in.
Two failures, wrong tool
If the same specific problem has failed twice on one axis — the same detail, the same kind of error — that's the signal to change approach, not to try a third reworded prompt. Two failures on one axis means the tool or the technique is wrong for this problem, not that the wording hasn't been found yet.
The ledger — a dependency graph, not a flat list
Track your shot list with each shot's actual parent — which earlier shot or plate it was seeded from — rather than as a flat, numbered sequence. When something drifts, walk backward through that parent chain to find where it actually diverged, instead of assuming the problem started in the shot immediately before the one where you noticed it. Drift often traces back further than the last shot — the parent-chain structure is what lets you actually find the real origin instead of guessing.
Cost-control gates before you spend
Most expensive campaign failures are process skips, not model quality. Run these cheap gates before any generation credit burns, and again before you call a cut delivered.
- Copy-paste the canonical dialogue string from the brief, then diff the prompt line against that string before submit. Retyping from memory is a known full-reroll defect.
- Concept ≠ script. If the brief only has a plan bullet ("phone thought", "end line energy"), do not generate it as locked client copy — label it RECOMMENDATION and wait for approval.
- N coverage shots listed → N frame-locks (or an explicit drop). Collapsing a multi-shot beat into one wide without rewriting the beat list is a lint fail.
- Mix / EDL / loudness-only rebuilds: diff the beat inventory against the last KEEP'd cut. Never regenerate KEEP picture for a mix-only ask.
- Frame-snap the EDL. Cut picture with whole-frame counts, not wall-clock duration alone — assert rendered frame count equals the planned total before muxing audio.
- Syllable-critical SPEAK: brand words and minimal pairs start on the dub route. Two wrong pronunciations of the same syllable ends native SPEAK — mute and TTS; do not burn a third re-roll.
- Ship checklist: voice map (every line, timing, stem, engine), open-music level in the first ~2s matches mix policy, and platform deliverables (cutdowns + captions + per-surface loudness) exist before CLOSE.
Judge every cut by the job
A tight production loop does not guarantee the cut is doing the right job. Once a shot or sequence is structurally sound, judge it by the viewer decision it is supposed to cause - stop scrolling, understand the product, trust the speaker, remember the brand, or click.