Why AI characters drift between shots
Anyone who has assembled a short film from text-to-video clips knows the feeling: shot one has a character with a slightly square jaw and a dark green jacket; shot four has the same person with softer features, a teal jacket, and hair that suddenly falls a little longer on the left side. Nothing is catastrophically wrong, but the illusion of a single continuous story collapses.
The root cause is that most generative video models have no persistent memory of your character. Each generation is a fresh sampling process conditioned on your prompt, your seed, and any reference images you supply. Identity is not stored anywhere — it is re-inferred from scratch every time. Small differences in wording, aspect ratio, motion intensity, or lighting description push the sampler toward a slightly different point in its latent space, and that point corresponds to a slightly different person.
A second cause is that prompts describe characters in ways models do not strongly enforce. "Brown hair, green jacket" is a weak constraint because the model treats those words as suggestions about the general vibe of the scene. The words do not pin down hair length, jacket shade, or how light falls on fabric.
A third cause is uneven reference conditioning. Image-to-video and character-reference features vary in how strongly they hold identity across motion. A single reference frame anchors the first second well and decays from there, especially when the character turns, walks away, or passes through shadow.
Understanding these three failure modes points directly at the fix: reduce identity to a small, stable, reusable description that the model can reconstruct consistently, and control everything else around it deliberately. That is the core idea behind pixel-grid normalization.
What pixel-grid normalization actually does
Pixel-grid normalization is the practice of converting a character into a compact, low-resolution structural representation before you ever start generating video. Instead of feeding a model a beautiful 2K portrait full of detail it can reinterpret, you feed it a deliberately coarse block grid — for example, a 24×36 arrangement of flat color blocks — plus a small, fixed color palette.
The analogy is a sprite sheet from classic game development. A sprite is not a photograph; it is a canonical set of rectangles that defines a character's silhouette, proportions, and color blocking. Because it is so reduced, every artist who touches the character produces something recognizably the same.
In an AI video workflow, the block grid serves three purposes:
- Structural anchor. It defines height-to-width ratios, head size relative to shoulders, and the silhouette of hair and clothing. These are the features viewers use to recognize a character across cuts.
- Color anchor. A six-to-ten color palette removes ambiguity about shade. "Green jacket" becomes a specific hex value the model can hit repeatedly.
- Reusable artifact. Because the grid is small and text-describable, you can attach it to every prompt, every shot, and every model without bloating your inputs.
Extracting a character signature
Start with four to eight clean images of the character: front, three-quarter, profile, back, plus one or two full-body frames. Ideally these come from a single consistent source, such as one photo shoot, one 3D render turnaround, or one carefully curated set of generated stills.
Then follow a simple reduction pipeline:
- Crop every image to the same framing: head at the top edge, feet at the bottom, character centered.
- Remove or neutralize the background so only the character remains.
- Downsample to a coarse grid, typically 16 to 40 blocks on the long edge, using area averaging rather than nearest-neighbor so the result reads as blocks, not noise.
- Quantize the colors down to a fixed palette, usually six to ten entries.
- Record the palette as hex codes and save the grid as a small image plus a plain-text description of its major blocks.
The output is your character signature. It is ugly. That is the point.
Why coarse beats detailed
High-detail references invite the model to make decisions. When you hand over a sharp portrait, the model has to decide which of the thousands of details are identity-defining and which are incidental — eyelash length, skin texture, the exact fall of a shadow under the jaw. It will decide differently in every generation.
A coarse grid removes the ambiguity. There is not enough information left for the model to invent anything meaningful about identity, so it fills the gap with the same structural facts every time. Detail is then supplied by your lighting and style prompts, which are much easier to keep constant.
Assembling a character reference kit
Before generating a single video clip, build a project folder that contains everything a collaborator would need to reproduce your character. A workable kit looks like this:
- Turnaround sheet: four to six views at matched scale and lighting.
- Pixel grid: the normalized block representation, at two resolutions (coarse for prompts, medium for visual checking).
- Palette file: hex codes with names you will reuse in prompts, such as
jacket_green #2F4A32. - Hero frames: three to five finished frames in your target style that define the look.
- Text lock block: the fixed paragraph of prompt text that describes the character. It never changes except for wardrobe state.
- Drift log: a running list of details the model tends to get wrong, which becomes your negative prompt list.
- Shot list: with continuity columns for wardrobe state, lighting direction, props, and time of day.
Naming discipline matters more than people expect. Use a consistent scheme such as charA_front_ref.png, charA_palette.txt, charA_grid_coarse.png, and version numbers when the design changes. When you later wonder which reference produced the good shot, you will be able to answer in seconds.
Writing a reusable character prompt block
Most consistency problems are prompt problems. The fix is to separate your prompt into two clearly distinct parts: an identity block that is frozen, and a shot block that changes.
An identity block should be short, concrete, and ordered consistently. A workable template:
CHARACTER: adult, 30s, tall, broad shoulders.
HAIR: short dark brown, straight, side part, ends at jaw.
FACE: rectangular jaw, straight nose, thick eyebrows, no facial hair.
WARDROBE: matte dark green field jacket, olive undershirt, charcoal trousers.
PALETTE: jacket_green #2F4A32, shirt_olive #5A5F3A, trousers #33363A, skin #C28A64.
SIGNATURE PROP: leather-strap wristwatch, left wrist, worn brown.
Then your shot block covers only what changes:
SHOT: medium wide, character walks left to right past a shuttered storefront.
LIGHT: overcast daylight from camera left, soft shadows, cool ambient.
LENS: 35mm equivalent, eye-level, slow dolly right.
Three rules make this work:
- Never reorder or reword the identity block. Models are sensitive to phrasing. If "short dark brown, straight, side part" becomes "dark brown short hair with a side part," you may get a different face.
- Never add detail to the identity block mid-project. New details belong in the shot block or, if they are permanent, they require regenerating your reference kit.
- Repeat the palette every time. Color values are the single most effective anchor for cross-shot continuity and cost almost nothing in prompt length.
Shot planning for continuity
Continuity is largely decided before generation. A shot list with explicit continuity columns prevents most drift, because you stop asking the model to hold information you have not written down.
Recommended columns: shot number, framing, camera move, wardrobe state, prop state, light direction, time of day, and which model you will use.
A few planning rules that pay off immediately:
- Cap distinct looks per scene. Three lighting and wardrobe states per scene is usually the practical maximum before drift becomes visible.
- Batch by setup, not by story order in the timeline. Generate all coverage of the same camera position, lighting, and wardrobe state in one sitting with a fixed seed.
- Shoot in narrative order when state changes. Generate the clean-jacket shots before the muddy-jacket shots, even if the edit will interleave them later.
- Plan occlusion transitions. A character passing behind a pillar is an opportunity: the two shots on either side only need to match loosely.
- Keep a continuity still. Export the approved frame from each setup and keep it open while generating the next one.
Seed control, image-to-video, and keyframe techniques
Once your references are set, technique does the rest of the work.
Fix the seed per setup. For every batch generated from the same camera position and lighting, use one seed. Variation in performance should come from prompt-level motion description, not from reseeding. When you do need a different performance, change the seed deliberately and note it in the shot list.
Use first-frame conditioning. Image-to-video anchors identity to a specific approved frame. Generate a strong still of the character in the target pose and lighting, approve it, then animate from it. This is by far the most reliable consistency method available today, because the model starts from your decision rather than making its own.
Interpolate between two keyframes. For shots with a defined start and end pose, supply both frames and let the model fill the motion. This keeps the character inside a corridor of approved appearances.
Repair locally instead of regenerating. If faces warp in a two-second stretch, use inpainting or frame-level repair on the affected region rather than re-rolling the whole clip. Re-rolling risks losing the good frames you already have.
Upscale last. Compose and approve at low resolution, then upscale the final selection. Upscaling early multiplies detail the model will happily reinterpret on the next generation.
Consider multi-image fusion. Several tools accept multiple reference images and blend them into a conditioning set. Feed your turnaround plus one approved frame from the current scene. This keeps identity stable while adapting to the current lighting.
Camera, lighting, and motion choices that hide seams
Even a perfect character can look inconsistent if the camera work contradicts itself. Audiences forgive a lot when the visual grammar stays stable.
Match lens language. If your establishing shot is 35mm eye-level, do not cut to a 14mm low angle for the next beat unless you want the audience to feel a new setup. Consistency in lens choice reads as consistency in the character.
Match light direction across a scene. A character lit from camera left in shot one and camera right in shot two will look like a different person, even with identical features, because the shading pattern on the face changes.
Avoid extreme close-ups early. Faces at extreme close-up expose every micro-inconsistency. Earn the close-up late in a scene, after the audience has committed to the character.
Keep motion vectors calm. Fast whip pans, spin moves, and rapid direction changes give the model fewer stable frames to work with and reduce identity hold. Slow, continuous motion is your friend.
Use transitional occlusion and cuts on movement. Passing objects, doorways, and cuts mid-motion give the eye something to track other than facial detail.
Matching the generator to the job
Different classes of model excel at different parts of a shot list, and mixing them within a single setup is the fastest way to introduce drift.
- Fast, low-cost generators are ideal for coverage, B-roll, wide establishing shots, and iteration. Use them to explore blocking and timing.
- Mid-tier cinematic models handle hero shots, dialogue moments, and anything where facial performance matters.
- High-fidelity slow models are worth reserving for the two or three shots that will appear in thumbnails or trailers.
The governing rule: one model per setup. If a shot needs coverage from three angles, generate all three with the same model, same seed, same prompt block, and same reference set. Different models interpret even a perfectly specified identity differently, so mixing them inside one camera position creates a visible seam.
A second useful pattern is the escalation ladder. Generate every shot on the fast model first, assemble a rough cut, and only then regenerate the shots that survive editing on a higher-fidelity model using the approved low-res frame as the first-frame reference. This keeps iteration cheap and final quality high.
A quality-control checklist and feedback loop
Consistency is a measurable property if you define what to measure. Run this check on every approved shot before it enters the edit:
- Palette delta. Sample the jacket, hair, and skin from the current shot and compare to your palette file. A noticeable shift means regenerate or color-correct.
- Silhouette overlap. Downsample the frame to your grid resolution and compare the character's silhouette to the reference grid. Proportional drift — longer legs, narrower shoulders — is a hard fail.
- Wardrobe state. Count visible layers, buttons, straps, and props. Missing or added elements are the most common continuity error.
- Light direction. Trace the shadow under the nose and jaw. It should point the same way as the previous shot in the scene.
- Eye-line and head angle. Verify the character is looking at the correct off-screen target for the cut.
- Motion continuity. Check that the character's position and direction of travel match the previous and next shot.
Keep a drift log. Every time the model gets something wrong, write the failure in plain language and add a matching line to your negative prompt. Over a project, that log becomes the most valuable document in the folder — it is your character's institutional memory.
Common mistakes and how to fix them
Too many contradictory references. Feeding twelve references in different lighting conditions gives the model an average of twelve people. Fix: reduce to a turnaround plus one approved frame per scene.
Rewording the identity block. Even synonyms change outputs. Fix: copy and paste the block verbatim into every prompt.
Regenerating instead of repairing. Re-rolling loses approved frames. Fix: use local inpainting and frame-level fixes first.
Using high-resolution references. Detail invites reinterpretation. Fix: normalize to a pixel grid and attach the palette.
Ignoring color temperature. A warm shot next to a cool shot reads as a different person. Fix: lock a white balance and a light-direction line in every shot prompt.
No shot list. Without written continuity state, you are relying on memory. Fix: build the continuity columns before generating anything.
Mixing aspect ratios. Cropping a 21:9 render to 16:9 reframes the character and changes apparent proportions. Fix: fix the delivery aspect ratio and keep every render in it.
Letting the model invent wardrobe detail. Unspecified pockets, zippers, and trim get filled in differently each time. Fix: specify or explicitly forbid them in the negative prompt.
FAQ
How many reference images do I actually need?
Four to six is the sweet spot for a turnaround: front, three-quarter, profile, back, plus one or two full-body frames. More than eight usually dilutes identity rather than strengthening it.
Does pixel-grid normalization hurt visual quality?
No, because the grid is a conditioning input, not a render target. You are constraining identity, then letting the generator produce full-detail output guided by your style and lighting prompts.
What is the minimum viable workflow for a short project?
A turnaround, one palette file, one frozen identity prompt block, a shot list with wardrobe and light columns, one fixed seed per setup, and image-to-video from approved stills. That combination removes most drift.
Can I use the same approach for multiple characters?
Yes, but generate each character in separate batches and composite them rather than asking a model to render both consistently in one pass. Two characters in one generation doubles the identity variance.
How do I handle wardrobe changes across a story?
Treat each wardrobe state as a separate look with its own approved still and palette variant. Keep the identity block frozen and change only the wardrobe lines and palette values for that state.
What if the character turns or walks away from camera?
That is where the back view from your turnaround earns its keep. Attach it as an additional reference for any shot where the character's face is not visible, and the model has structural guidance for the silhouette.
How do I fix a single bad second in an otherwise good clip?
Isolate the frames, mask the character region, and run a local repair pass using an approved frame as reference. Then re-time the repaired segment back into the clip. Regenerating the entire shot should be a last resort.
When should I abandon a shot and start over?
When the silhouette or wardrobe state is wrong at the frame level, not the pixel level. Structural errors cannot be corrected downstream; color and texture errors usually can.
Putting it together
Consistency is not a model feature you switch on. It is an artifact of a disciplined pipeline: reduce your character to a stable, low-information signature, freeze the language that describes them, plan continuity before generating, keep one model and one seed per setup, and run a repeatable quality check on every approved shot.
Start small. Build one character kit, normalize one pixel grid, and run a six-shot scene using a single model, a single seed per setup, and image-to-video from approved stills. Then measure the drift. Once you can produce six shots where the jacket shade, jawline, and light direction all hold, you have a workflow that scales to a full sequence — and a character the audience will follow without ever wondering why they look slightly different from one cut to the next.


