Character Consistency in AI Video: a Four-Layer Checklist to Stop Faces Drifting Across Episodes
Faces drift because every video call is a fresh sample; the fix is a reference chain that never breaks. Work in four layers, lowest cost first: (1) appearance text an image model can redraw (face shape, brows, eyes, nose, lips, skin, hair, build, apparent age, one static anchor); (2) a white-background, neutral-light character sheet with a face crop; (3) the same reference files sent with every segment, within each model's cap (MiniMax H3 up to 9, Wan 3.0 up to 10, Kling 3.0 Omni up to 7, Vidu up to 7, Veo 3.1 up to 3); (4) storyboards that name the people in frame and carry over the previous end state. Debug in the same order.
The test: what consistent has to mean
Decide the pass/fail test before generating anything. A cast is consistent when every segment of every episode keeps each character's face structure, hair, build and default costume, and nobody appears who was not written into the shot. Check it the same way every time: put the face crop from the character sheet next to a paused frame from each segment and compare brows, eyes, nose, jaw and the static anchor. The four layers below fix drift in cost order, lowest cost first, and the same order is the order to debug in. For why models drift at all, see the consistency explainer; the definitions are in the glossary under character consistency.
Layer 1 — Appearance text: a template to copy
| Field | Write | Avoid |
|---|---|---|
| Face | long narrow face, square jaw | handsome, striking |
| Brows and eyes | straight thick brows, hooded dark-brown eyes | piercing gaze |
| Nose and lips | high narrow bridge, thin lips | perfect features |
| Skin | fair skin, freckles across the nose | flawless, porcelain |
| Hair | shoulder-length black hair, centre part | stylish |
| Build and age | 1.70 m, slim, looks about 30 | young, mature |
| Static anchor | 1 cm scar through the left eyebrow | a warm smile (an expression) |
| Default costume | grey wool coat over a white shirt | fashionable outfit |
Anchors must be static. Write a habitual expression ("her eyes crinkle when she smiles") and the sheet is drawn smiling; every segment then opens on that smile. Leave out stance and gait as well: "leans forward" in a full-body sheet reads as a high camera angle. Costume vocabulary tied to a particular culture or period is understood unevenly across image models, so render one test sheet on your chosen model before committing a look.
Layer 2 — The character-sheet spec
- Plain white background, stated as its own sentence and repeated in the exclusion list; buried inside another sentence it tends to be ignored.
- Frontal full body, camera level at half the subject's height, feet and shoes visible.
- Directional key light with fill and rim; flat, shadowless light makes skin look plastic.
- Priority order: face, then posture, then costume. Never widen the frame to show clothes.
- Neutral expression, no cinematic grade, no haze or light beams.
- 9:16 at 2K-class resolution, so a face crop still has detail.
- Export three files per look: full body, half body, face crop.
- Several looks per character: keep one facial description, make one sheet per costume or hairstyle, and record which look each episode uses.
The sheet is a reference, not a poster: any mood lit into it is inherited by every shot and then fights the storyboard's lighting. More on the format: character sheet.
Layer 3 — Plan references per segment, per model
| Model | Reference images per call | Constraints |
|---|---|---|
| MiniMax H3 (API) | Up to 9 | First 5 free, then $0.04 each; any reference image, video or audio rules out a first or last frame |
| Wan 3.0 (Alibaba Cloud) | Up to 10, plus up to 5 videos and 5 audio clips (each group 15 s total) | Cite them in the prompt as Image 1, Video 1, Audio 1 |
| Kling 3.0 Omni | Up to 7 images or elements (4 when a reference video is used) | One element combines up to 4 images of the same subject from different angles |
| Vidu (reference-to-video API) | Up to 7 (viduq2-pro: up to 4 when a reference video is also sent) | Cite subjects in the prompt as @name |
| Veo 3.1 and 3.1 Fast (Gemini API) | Up to 3 (none on Veo 3.1 Lite) | Clips must be 8 s long when references are used |
A per-segment allocation plan, counting each character's full-body sheet and face crop plus one scene plate:
| People in the segment | Images to send | Fits |
|---|---|---|
| 1 | Sheet + face crop + plate = 3 | Every model above, including Veo 3.1's three slots |
| 2 | 2 × (sheet + face) + plate = 5 | H3's free five; Kling, Vidu and Wan caps. On Veo 3.1, send one face-forward image per person plus the plate |
| 3 | 3 × (sheet + face) + plate = 7 | Kling without a reference video, Vidu, Wan; H3 with two paid images ($0.08); not Veo 3.1 |
| Add a key prop | +1 prop sheet | Check the cap first; on H3 every image past the fifth costs $0.04 |
Sora 2 is not in the table: OpenAI's deprecations page schedules the Sora 2 models and the Videos API for removal on 2026-09-24, and its API rejected input images with human faces. Send the same files for the same look every time; a different crop is a different reference. On the first-frame trade-off: chaining the last frame of one segment into the next buys positional continuity but, on H3, costs you every cast reference in that call.
Layer 4 — Continuity rules for the storyboard
- Name the people who are in frame. Never write who is absent or that "others leave"; a named character tends to be drawn.
- Carry state across the join: whatever the previous segment ended on (standing, holding the mug, a cut on the left cheek) becomes the next segment's opening line.
- Restate temporary visible states every segment until the story ends them: injuries, wet clothes, a changed prop.
- Place people by scene anchors ("at the end of the counter by the window"), not by frame direction ("screen left"); a camera change breaks the latter.
- One look per character per segment; change looks at a segment boundary.
- Large groups in one frame raise the chance of swapped faces; cover them with shots of two or three people.
The full segment format is in the storyboard template.
Symptom, layer, fix
| Symptom | Usual layer | Fix |
|---|---|---|
| Face drifts gradually over episodes | 1–2 | Replace vague features with measurable ones; remake the sheet in neutral light; add the face crop |
| Face changes at a cut inside one segment | 3 | Send the face crop, not just the full body; fewer people per shot |
| Right face, wrong costume | 2 and 4 | One sheet per look; name the look in the storyboard |
| Someone appears who was not written | 4 | Delete every mention of absent people |
| Two characters swap faces | 3 and 4 | One reference set per person, cited by index or name; split the shot |
| Everyone lit in the same moody way | 2 | Remake sheet and plate with neutral light |
| Faces reset after first-frame chaining | 3 | Use references instead and state the end position in text |
| Face fine in the draft, different in the final | 3 | A re-render is a new sample; review finals as carefully as drafts |
Debug in this order: the sheet, the references actually sent (check the request or render log, not your plan), the storyboard wording, and the model last. Twelve common failure types and their causes: why AI dramas fail.
Who keeps track of the references
The reference cap belongs to the model; who remembers which file goes into which call depends on the tool. End-to-end tools do the bookkeeping for layers 2 and 3: LTX Studio handles casting inside one production, and SceneMixer keeps a cast library and injects full-body and face references into every segment. Model platforms give you the mechanism and leave the bookkeeping to you: Kling's element library, Vidu's subjects, Hailuo's multi-reference calls and Veo's ingredients.
The trade-offs mirror each other. A pipeline removes the risk of sending the wrong file, but it decides what is sent, and the cap of the model underneath still applies; LTX Studio's cast lives inside one production, and SceneMixer's references are bounded by whichever model tier a segment is rendered on. A model platform lets you choose every file per call, and every mix-up is yours to catch. Either way, layers 1 and 4 are writing, and they stay with whoever writes the sheets and the storyboard.
Key figures and sources
| Figure | Value | Source | Date |
|---|---|---|---|
| MiniMax H3 reference inputs | Up to 9 images; audio up to 3 clips, 15 s total; any reference role rules out first/last frame | platform.minimax.io | 2026-09-12 |
| MiniMax H3 reference-image billing | First 5 images free, then $0.04 per image | platform.minimax.io | 2026-09-12 |
| Wan 3.0 reference inputs | Up to 10 images, 5 videos and 5 audio clips (videos and audio 15 s total each); cited as Image 1 / Video 1 | www.alibabacloud.com | 2026-09-12 |
| Kling VIDEO 3.0 Omni references | Up to 7 images or elements per generation, 4 with a reference video | kling.ai | 2026-09-12 |
| Vidu reference-to-video | 1–7 images per call (viduq2-pro: 1–4 with a reference video); subjects cited as @name | platform.vidu.com | 2026-09-12 |
| Veo 3.1 reference images | Up to 3 on Veo 3.1 and 3.1 Fast (not Lite); clip duration must be 8 s when used | ai.google.dev | 2026-09-12 |
FAQ
The same reference gives different fidelity on different models — why?
Models weight reference images differently, and some understand costume and hairstyle vocabulary better than others. Test one sheet and one two-person segment on the model you will render with before committing the cast, and keep the model fixed for a whole episode.
Can face-swap tools fix drift afterwards?
Partly. They struggle with profiles, occlusion and group shots, add a production step to every segment, and raise consent questions when a real face is involved. Fixing the sheet and the references is usually cheaper than repairing hundreds of clips.
How many reference images should I send per character?
Two where the cap allows: the full-body sheet and a face crop from the same image. On MiniMax H3 keep the total at five to stay inside the free slots; on Veo 3.1 send one face-forward image per character because there are three slots in total.
Can I use a photo of a real actor as the reference?
Not without the person's written consent and a clear license for AI use. YouTube requires disclosure when realistic content makes a real person appear to say or do something they did not.
When is fine-tuning (LoRA) worth it?
When the same cast recurs across many titles or hundreds of episodes and reference images alone still drift. It adds training cost and a model you must maintain, so exhaust layers 1–4 first.
Sources
- https://platform.minimax.io/docs/api-reference/video-generation-v2-create
- https://platform.minimax.io/docs/guides/pricing-paygo
- https://www.alibabacloud.com/help/en/model-studio/wan3-video-generation-guide
- https://kling.ai/quickstart/klingai-video-3-omni-model-user-guide
- https://kling.ai/quickstart/klingai-video-3-model-user-guide
- https://platform.vidu.com/docs/reference-to-video
- https://ai.google.dev/gemini-api/docs/veo
- https://developers.openai.com/api/docs/guides/video-generation
- https://developers.openai.com/api/docs/deprecations
- https://support.google.com/youtube/answer/14328491