Why
Character drift is the single most recognisable failure of AI film, and it is almost never a prompting problem. It is a data-modelling problem that manifests as a prompting problem.
The mistake happens like this. You build a character, generate twenty good shots, and then the story requires her bloodied. Writing the injury into the prompt changes the face, because generation models do not separate "who this is" from "what has happened to them". So you tune the prompt until the injured version looks right — and now you have a second description that produces a subtly different person. You save it as a new character to keep it. From that moment the film has two Sarahs and no way to reconcile them, because there is no longer a single source of truth to reconcile to.
The fix is structural and has to be in place before the first generation:
One entity. One canonical descriptor. One anchor image set. One locked seed. Many states, each expressed only as a delta.
The canonical descriptor holds what cannot change: bone structure, eye colour and shape, distinguishing marks, natural hair colour and texture. The state holds what has changed: blood, damp, exhaustion, styling, wardrobe, makeup. The state never restates the person — it says only what is different. "left eye swollen shut, dried blood from hairline to jaw, hair matted" is a state. Anything that re-describes the face is a second character wearing the first one's name.
A useful test for what belongs where: if a make-up artist could produce it in an hour, it is a state. If it would require different casting, it is canonical.
How
- Build the canonical descriptor from structured tokens, not prose. Prose invites the writer to re-describe; tokens do not.
- Generate the anchor set before any story shot: front, both profiles, three-quarter, full body. These are the reference images every downstream generation is conditioned on.
- Lock the entity. Locking is not bureaucracy — it is what makes the blast radius of a later change computable.
- Exclude hair styling from the canonical descriptor. Styling is a state. Baking a haircut into the anchor is the most common way an anchor becomes unusable in Act 3.
- Create a state for every meaningful change, with the scene range it applies to. Assign a state to every entity in every shot. An unstated state is a state the model will invent.
- Never edit the canonical descriptor to solve a single shot's problem. If one shot needs a change, that change is a state, or the shot is wrong.
- When a locked entity genuinely must change, use the version bump and read the blast-radius list before confirming. Sixty shots changing is fine if you know it is sixty.
- Feed generated frames back for drift detection. An anchor that is never checked against output is an assumption, not a control.
Notes on cost
State discipline is slower up front. Building an anchor set for a character who appears in four shots feels like overhead, and for four shots it genuinely is — the break-even is around eight to ten appearances.
The cost of skipping it is not linear, though. It arrives all at once, late, as a re-generation of every shot containing that character, at the point in the project where you have the least appetite for it. Decide per character before you generate, not after.