Keep a generated character the same across images and clips: build a reference pack and a verbatim identity block, apply per-model reference settings for Midjourney, Runway, Veo, Kling, Gemini, GPT Image, FLUX Kontext, IP-Adapter and LoRA, score drift against the pack with a sheet and CLI, and fix face, wardrobe and hair drift with worked fixes. Triggers on 'consistent character', 'character keeps changing', 'same character across shots', 'character drift', 'reference pack', 'character sheet for AI video', or when a recurring generated person, mascot or creature must survive new poses, scenes, styles or clips.
name: "ai_character_consistency" description: "Keep a generated character the same across images and clips: build a reference pack and a verbatim identity block, apply per-model reference settings for Midjourney, Runway, Veo, Kling, Gemini, GPT Image, FLUX Kontext, IP-Adapter and LoRA, score drift against the pack with a sheet and CLI, and fix face, wardrobe and hair drift with worked fixes. Triggers on 'consistent character', 'character keeps changing', 'same character across shots', 'character drift', 'reference pack', 'character sheet for AI video', or when a recurring generated person, mascot or creature must survive new poses, scenes, styles or clips."
AI Character Consistency
Purpose
Keep one generated character recognisable across a set of images or clips. Text alone does not hold a face. The pack holds it: a small set of approved reference images, a text identity block copied word for word into every prompt, and a drift check that runs before anything ships.
This skill is a general method for any invented character. It does not depend on one person, one show, or one model. Pick the model row that matches the job, use its reference controls, and score every output the same way.
Scope: stills, image edits, and short generated clips. For a full narrative film pipeline, pair this with a storyboard skill. For API batch rendering, pair it with a video API workflow skill. This skill owns identity.
Workflow
1. Lock the character on paper before generating the pack
Write the identity block first. Use assets/identity-block-template.md. It has nine lines, no adjectives that cannot be seen:
- Name and trigger: a short code name used in file names and, for a LoRA, as the trigger word. Example:
mira_v1.
- Age band and build: a range, height impression, shoulder and posture facts.
- Face: face shape, jaw, nose, eyes (colour, spacing impression), brows, mouth, skin tone in plain colour words, and any fixed mark with its exact side and place. Example: small scar on the left cheek, under the eye.
- Hair: length, cut, parting, colour, texture. State what never changes, for example never longer than the jaw, never parted in the middle.
- Signature wardrobe: one default outfit described piece by piece with colours and materials. List allowed variants separately. Anything not listed is a drift risk.
- Signature prop or accessory: one item, which hand or side carries it, and its colour and shape.
- Silhouette test: two or three shapes a viewer should recognise in a thumbnail, for example bob haircut, wide yellow coat, round glasses.
- Style lock: medium, palette, light, and rendering facts that stay fixed for the set. Example: hand painted watercolour, warm earth palette, soft outlines.
- Never list: three to five things that must never appear or change. Example: no beard, no hat, no change to hair colour.
Gate: if a line cannot be filled from a decision, stop and decide it. Generating first and describing later is how three different faces get approved as one character.
2. Build the reference pack
Generate or select images against the locked block, then approve them as a set. Minimum pack for reference-image tools is three files. A full pack is eight. Name files exactly as in assets/reference-pack-manifest.csv and fill that manifest.
Minimum pack:
01-hero-front.png: front face, neutral expression, neutral even light, plain background, head and shoulders. This is the main reference for most tools.
02-three-quarter.png: three-quarter view, same outfit, same light. Shows face geometry off axis.
03-full-body.png: full body in signature wardrobe, standing, plain background. Locks proportions, wardrobe and silhouette.
Full pack adds:
04-profile-left.png and 05-profile-right.png: clean profiles. Catch nose, jaw and hair shape drift.
06-expression-sheet.png: four expressions on one sheet or four files, same framing. Use for close dialogue or reaction shots.
07-wardrobe-detail.png: close view of wardrobe details that get lost at distance, such as a logo, clasp, pattern or shoe.
08-hair-back.png: back and top of the hair. Needed for over the shoulder and walking away shots.
Pack rules:
- One character per image, face unobstructed, no sunglasses, no heavy shadow on the face, no motion blur, no other people cropped in.
- Same outfit, same hair, same light family across the pack. A pack shot in three styles teaches the model three characters.
- Check every pack image against the identity block line by line. Reject an image that is pretty but wrong on one fixed mark. It becomes the source of that error in every later shot.
- Keep the pack in one folder with the manifest. Version it. When the hero image changes, the pack version changes and old outputs are rescored.
Rights rule: only build a pack from a character you invented or have the right to use. Do not build a pack from a real person without their clear permission.
3. Choose the consistency method by job length
Use the weakest method that can hold the job. Stronger methods cost more setup.
- One to five images, same session: identity block plus edit chaining. Generate the hero, then pass that approved image as the edit input for each new scene and restate the block. OpenAI image prompting guidance uses exactly this pattern: establish the character, reuse the generated image, repeat the defining details.
- Five to fifty images or a few clips: reference-image controls on one model. Use the per-model settings in step 4. This is the normal production case.
- A series, a season, a brand mascot, or photoreal close-ups in many poses: train or commission a LoRA, or build a reusable saved reference on the video platform. A LoRA needs a training set, commonly 15 to 30 clean images with varied angles and expressions and plain backgrounds in handbook practice, captioned with a trigger word. Treat that count and the weight ranges in
references/model-settings.md as practice guidance, not a vendor spec, and test on your base model.
- Multi-character scenes: give each character their own pack and their own reference slot or tag. Never put two characters in one reference image and hope the model sorts them out, except where a vendor explicitly supports a multi-person sheet and you label each person in the prompt. Even then, score each face separately.
4. Apply the per-model reference settings
Read the full table in references/model-settings.md before the first generation on a new model. Short version, verified 2026-10-19:
- Midjourney V6:
--cref <url> --cw 100 for full face, hair and clothes. Lower --cw toward 0 to keep the face and let clothes and hair follow the prompt.
- Midjourney V7: Omni Reference. One image only,
--oref <url> --ow 100 by default. Range is 1 to 1000. Keep it below 400 unless stylize is very high. It costs 2x GPU time and needs a text prompt. On V8.x, use the Edit Model with up to four reference images instead.
- Runway Gen-4 References: up to three reference images per generation. Upload, name or tag each reference, then refer to the tag in the prompt. Save a good character reference for reuse across sessions. Use a neutral, evenly lit hero image.
- Google Veo 3.1: up to three subject images of one person, character or product. It preserves the subject appearance in the video. Put the hero, three-quarter and full body in those three slots.
- Kling VIDEO 3.0: Elements 3.0 subject binding. Bind a character as an Element from reference images or video, up to three elements in one task. Use two to four views for one element where the interface allows it.
- Gemini image models (Nano Banana 2): in one workflow the model can hold resemblance for up to five characters and fidelity for up to 14 objects. Give each character separate labelled references and state which reference is which person in the prompt.
- GPT Image: no weight slider. Control comes from the edit input and the text. Pass the hero as the input image, assign roles in words (Image 1 is the character, Image 2 is the background), state what changes and what stays, and change one thing per edit.
- FLUX.1 Kontext: use it for iterative edits. Start from the hero, make one edit at a time in plain words, and check identity after each step. It is built to hold character consistency across multiple edits without fine tuning.
- IP-Adapter and IP-Adapter FaceID in Diffusers or ComfyUI: scale runs 0.0 to 1.0. At 1.0 the result is conditioned only on the image prompt, at 0.0 only on the text prompt. Library examples use 0.5 for a full face model and 0.7 per face for FaceID style work. Start at 0.6, score, then move in steps of 0.1. FaceID checkpoints use face identity embeddings from InsightFace instead of CLIP image embeddings, so they usually hold a face better and carry less outfit and background baggage.
- LoRA: call the trigger word in every prompt and set the LoRA weight. In handbook practice, 0.6 to 0.85 lets the scene breathe, 0.9 to 1.0 tightens identity when drift starts. Prove the range on a test grid for your checkpoint before production.
Universal settings rules:
- Repeat the identity block word for word in every prompt. Do not paraphrase it, shorten it, or improve the wording mid-set.
- Keep the prompt from fighting the reference. If the reference has short black hair and the prompt says long blonde hair, the model blends them and both lose.
- Change one variable per generation while you are diagnosing: pose or scene or style or weight. Changing two at once hides which one caused the drift.
- Log model, version, reference files, weight, seed or job ID, and prompt for every accepted output. A shot you cannot reproduce is a shot you cannot fix later.
5. Run the comparison workflow before a big set
Do not commit fifty shots to a model and setting you have not tested on this character.
- Pick four test shots that stress identity: a front close-up smiling, a profile in a new location, a full body walking shot, and a style or lighting change the production actually needs.
- Run the four shots on the candidate setup. If you are choosing between two models or two weights, run the same four on both. Keep the identity block and the scene prompts identical.
- Score all outputs with step 6. Record the scores in one sheet per setup.
- Pick the setup with the best worst shot, not the best average. One broken face in a set is what a viewer remembers.
- Lock the setup in the project notes: model, version, references, weight, and pack version. Any later change re-runs the four test shots.
Worked example is in references/drift-fixes.md: the same character tested at two IP-Adapter scales and at a Midjourney Omni weight, with scores and the decision.
6. Score drift against the pack on every output
Use assets/drift-score-sheet.csv or run the CLI. Score each category 0, 1 or 2 against the hero and full body images, side by side, at full size. Do not score from a thumbnail.
Categories and weights in the sheet and CLI:
- Face geometry, weight 3: shape, eye spacing impression, nose, jaw, age band.
- Fixed marks, weight 3: scar, mole, tattoo, freckle pattern, glasses shape. Exact side and place must match.
- Hair, weight 2: length, cut, parting, colour, texture.
- Wardrobe, weight 2: pieces, colours, materials, details from the wardrobe detail image.
- Body and silhouette, weight 1: build, proportions, posture, thumbnail recognisability.
- Prop and accessory, weight 1: presence, side or hand, colour, shape.
- Style and palette, weight 1: medium, palette, light family from the style lock.
Scoring: 2 means matches the pack, 1 means close but a viewer who knows the character would notice, 0 means wrong or missing.
Run the CLI: python3 scripts/drift_score.py assets/drift-score-sheet.csv It prints a weighted percent per shot and a verdict. Pass is 85 percent or higher with no zero in face geometry or fixed marks. Fix is 70 to 84 percent, or any single 1 in a weight 3 category. Reject is under 70 percent, or a zero in face geometry or fixed marks. A reject is never fixed by captioning it or cropping the face out, unless the shot plan changes and is logged.
For video, score three frames per clip: first clear face frame, middle frame, and last clear face frame. Use the lowest frame score as the clip score. Temporal drift counts too: if the face changes during the clip, score face geometry 0 even if one frame matches.
7. Fix drift by type, not by re-rolling
If the same failure appears twice, stop generating and fix the cause. Full worked fixes are in references/drift-fixes.md. Summary:
- Face drift (face looks older, wider, or like a cousin in profile and expression shots): the reference set is too front heavy or the weight is too low for off-axis work. Add the profile and expression images to the reference slots, raise the reference weight one step, and remove any prompt words that describe a different face. If it still drifts in a local pipeline, switch that character to FaceID or a LoRA.
- Wardrobe and detail drift (coat colour shifts, logo or clasp vanishes, outfit morphs between cuts): small details are the first thing reference models lose. Midjourney official guidance warns that intricate details such as freckles or logos may not perfectly match. Add the wardrobe detail image as its own reference, name the detail in the identity block and in the shot prompt, lower stylize or competing weights, and for a logo or text detail, composite the approved detail in post rather than asking the model to redraw it every shot.
- Hair and silhouette drift (hair grows, changes colour, or the character stops reading in a thumbnail, often after a lighting or style change): the prompt or the new light is describing a new head. Restate hair facts at the start and end of the prompt when changing style, keep the full body silhouette image in the references, and reject any pack or test image where the silhouette test fails. In video, shorten the clip or split the move: long turns and hair or cloth simulation are where silhouette breaks first.
After a fix, regenerate the failed test shot first. Only resume the set when that shot passes.
8. Hand off the set with its proof
Deliver the outputs with the pack version, the locked identity block, the setup log, and the drift sheet. A set without its sheet is unreviewed, not finished.
Output Contract
A completed consistency job delivers:
identity-block.md: the locked nine line identity block, copied from the template, with a version and date.
reference-pack/: the approved reference images named as in the manifest, plus reference-pack-manifest.csv filled with file, view, outfit, light, approved by, and pack version per file.
setup-log.md: per model used, the version, reference files, weights or scales, and any saved reference names or tags, plus seed or job ID per accepted output.
test-comparison.md: the four test shots, the setups compared, their drift scores, and the setup chosen with its worst shot score.
drift-scores.csv: one scored row per output (three rows per video clip, marked as frames), filled with the sheet in assets/, plus the CLI output showing pass, fix or reject per shot.
- The accepted images or clips, named with the character code and shot number, for example
mira_v1-shot-04.png. Rejected outputs are kept in a separate rejects folder with a one line reason each, not mixed with accepts.
Operating Rules
- Accuracy: check any model limit, reference count, weight range or version claim against that vendor's current official docs before a plan depends on it. The numbers in this skill were verified on 2026-10-19 from the sources in
references/model-settings.md. Vendors move controls between versions, as Midjourney did from --cref in V6 to Omni Reference in V7 to the Edit Model in V8.x, so re-check at the start of a new production.
- One source of truth: the identity block and the hero image. If they disagree, fix the block or replace the hero, then rescore. Never let a later output quietly become the new reference without a pack version change and a rescore of the set.
- No silent re-rolls: two failures of the same type means a method fix in step 7, not more attempts at the same settings. Log the fix.
- Rights and likeness: use only characters and reference images you have the right to use. No real person's face, likeness or voice without clear permission. Do not use a pack to imitate a real actor, artist or private person.
- Disclosure: label delivered sets as AI generated where the platform or client requires it, and keep any watermark or provenance mark the tool embedded.
- Small details rule: do not promise that a reference model will hold a tiny logo, exact text, jewellery or a freckle pattern across every shot. Plan a composite or a close-up insert for details that must be exact.
No ratings yet — be the first to rate it.