
A working tutorial for building a character bible that survives a stateless pipeline, from someone who lost a whole afternoon to a heroine who would not stay the same person. The first time I tried to cut a real scene of Lost Garden , my dark-fantasy anime series, my lead character changed faces four times in eleven shots. Shot one, she had a thin scar over her left eyebrow and dark amber eyes. Shot four, the scar jumped to the right side. Shot seven, her eyes had gone green and her jaw had narrowed into someone else entirely. By shot eleven she looked like her own cousin. Every individual shot was fine. Lit well, composed well, each one a frame I would have been happy to put on the screen a year ago. Put in sequence, they were unusable, because the audience would have spent the whole scene wondering why the hero kept getting recast. I did what everyone does first. I went back into the prompts and started adding adjectives. Amber eyes. Thin scar, left brow. Sharp jaw. I rewrote the description ten different ways. It got me ten different women. That afternoon taught me something that took an embarrassingly long time to accept. You cannot fix character drift with a better prompt. You fix it with a better document. Why your character will not stay still Here is the part nobody puts on the landing page. Every AI image and video model you are using is stateless . It has no memory of the shot it made two minutes ago. Each generation is a fresh roll of the dice, and the only thing steering the dice is whatever you handed the model on that exact call. When you describe a character in words, you are not locking anything. ”Amber eyes, thin scar, sharp jaw” is not a person. It is a search query, and the model answers it with the statistical average of every face that has ever matched those words. Run it twice and you get two different averages. The drift is not a bug you can prompt your way out of. It is the default behavior of a system with no continuity built in. So the job is not to describe your character better. The job is to carry your character with you , on every single call, in a form the model cannot misread. That carrier is the character bible. A character bible is not a mood board and it is not backstory. It is the one piece of memory a memoryless pipeline gets to keep. Professional animation and VFX studios have run character bibles for decades, for exactly this reason: a hundred different artists need to draw the same person and have her come out the same. AI filmmaking did not invent the problem. It just removed the human artists who used to hold the consistency in their heads, and handed that job to you. Here is how I build mine now, in order. Step 1: Write it as a spec, not a vibe Open a plain document. Not a paragraph of atmosphere, a list of non-negotiables . The test for every line is simple: could two different people read it and picture the same thing? If not, it is too vague to be in the bible. For Lost Garden’s lead, the locked layer reads like this: Age and build: late twenties, lean, 1m70, athletic not delicate Face: oval, high cheekbones, straight nose, slightly hooded eyes Eyes: dark amber, never green, never blue Hair: black, blunt-cut to the jaw, center part, no fringe The non-negotiable mark: a thin vertical scar through the left eyebrow, always left Signature item: a tarnished brass pendant, worn high at the collarbone Notice there is nothing poetic in there. ”Haunted” and ”otherworldly” do not belong in a bible, because a model cannot draw an adjective. ”Thin vertical scar through the left eyebrow” it can draw, and draw again, and draw a hundredth time. Concrete beats evocative every time you are writing for a machine. Step 2: Split the locked layer from the variable layer A bible that locks everything is useless, because your character has to move through a story. She gets wet, she ages a scene, she changes coats. So the document needs two columns. Locked layer: the things that define her as her and must never move. Face geometry, eye color, the scar, the pendant. Variable layer: the things allowed to change per scene, on purpose. Costume, hair wet or dry, dirt and blood, lighting, expression. The discipline is keeping these honest. The day I let “hair length” drift into the variable layer because one shot looked better with it longer, I paid for it with three shots of re-work to get back to baseline. If it is in the locked layer, it does not get a vote, no matter how good the off-model shot looks. This is the same instinct as killing your darlings in the edit, moved upstream into pre-production. Step 3: Build the visual anchor, because words are not enough This is the step that actually stopped my drift, and it is the one most written guides skip past. A text bible reminds the model what to include. A reference image shows the model what must stay intact, and the second one wins every time. The consensus across every serious workflow in 2026 is the same: visual anchoring beats text anchoring. So the bible is not just the document. It is the document plus a small, deliberate set of reference frames, and a trained identity where the tool supports one. How that looks in the tools I actually use: Higgsfield Soul ID trains a persistent identity from your photos. It wants a minimum of around 20 images, varied angles and expressions, at least one full-height shot for body proportion, all well lit. It learns the facial structure, skin tone, and hair texture, finishes training in roughly three to five minutes, and after that you stop re-describing the face on every prompt. You train the identity once, you reuse it. Midjourney V7 does this through Omni Reference : you pass a reference image and set a character weight. Push that weight to 100 to lock the character hard, dial it toward 70 when you need outfit flexibility. (Note the old character-reference parameter does not work in V7, and Omni Reference costs about twice the GPU time. Worth it.) Runway Gen-4 References anchors a whole generation session to one high-quality still, encoding facial structure and body proportions into the frames so you can drop the same character into new lighting and locations from a single image. Stop typing your character’s face into every prompt. Train it or reference it once, then spend your words on the scene. The three tools differ, but the principle underneath is identical. Hand the model a picture of the truth, not a description of it. Step 4: Version it and log what made each shot A bible you cannot reproduce is a diary, not a tool. The moment your character looks right, write down how you got there: which reference set, which trained identity, which seed, which model and version. I keep a one-line entry per locked shot. This sounds like overhead until the day a model updates and your character shifts half a degree, or you come back to a scene three weeks later and cannot remember which of forty reference frames was the canonical one. The version log is the difference between regenerating the whole scene and re-running one seed against one version of the bible. In a stateless pipeline, your seeds and your version history are the closest thing you have to an undo button. Step 5: Re-inject the bible on every single call This is the habit, not a step you do once. Because the model forgets between shots, the bible has to travel with every generation: the trained identity attached, the reference frame loaded, the locked attributes restated. Skip it on one shot to save thirty seconds and that is the shot that drifts. This is also exactly where a one-person production starts to drown, and it is the problem I have been building ScreenWeaver around: a place where the bible, the references, the seeds, and the version log live as one source of truth, so the canonical version of your character is re-injected into the pipeline instead of half-remembered from a folder of 200 near-identical PNGs. The model will never hold your story’s memory. Something upstream of the model has to. Step 6: QC against the bible before you accept a shot Before a shot earns a place on the timeline, run it against the locked layer. Not “is this a beautiful frame,” but “is this her .” My pre-accept audit is short and brutal: Eye color correct, amber not green? Scar present and on the left? Pendant there, at the collarbone? Face geometry matching the reference, not just “close”? Hair at locked length? Any miss, the shot goes back, however gorgeous it is. A stunning frame of the wrong person is worse than a plain frame of the right one, because the wrong person breaks the spell for the audience and the plain frame does not. The reframe that fixed it for me I stopped thinking of the character bible as a creative document and started treating it as a schema . A small, strict, reusable definition that everything else in the pipeline reads from. The scar is a field. The pendant is a field. The amber eyes are a constraint that the QC step enforces. The reference set is the primary key that makes the row mean one specific person and not the average of a million. When I rebuilt that opening Lost Garden scene with the bible locked first, the same eleven shots came back as one continuous person. Same scar, same side, same amber eyes, shot after shot. The generating was no faster. The difference was that I had stopped asking the model to remember, and started carrying the memory myself. Build the bible before the first frame. The model is never going to hold your character for you. That was always your job.
View original source — Hacker Noon ↗


