Sutra

Per-render drift: the real reason AI ads break brand consistency

Everyone blames the prompt. The cause is that every render is an independent sample, and a style guide describes a look without ever deciding a shot. Here is the layer contract we use instead, and the parts we apply in code after generation.

What is in here
  1. Why do AI-generated ads look inconsistent?
  2. Your designer was the consistency. The guide never was.
  3. What actually drifts when the prompt does not change?
  4. The color field that belonged to somebody else's brand
  5. How do you keep AI-generated ads on brand?
  6. Enforce it at creation time, not in QC
  7. What this is worth, honestly
The short answer

Generated ads drift off brand because every render is an independent sample and nothing carries between them, so anything your brief left unspecified gets filled in from the model's own average. A style guide cannot fix that. Guides describe a look and leave the shot to whoever is holding the tool. What holds a brand together across hundreds of generations is a decided visual language plus deterministic assembly: one fixed grade, one grain plate, one type treatment, one shadow geometry, all applied in code after generation, so the only thing the model ever produces is the subject.

What you get out of this
  1. Why identical prompts still return work that does not look like your brand
  2. The difference between a brand guide and a brand system, stated as a table
  3. The layer contract: which parts a model touches, and which parts code owns
  4. The device we ported from a reference brand as craft, and had to strip out of every film

Three statics for our own brand, generated separately

Three worlds, one language
A bedroom, a travertine ledge in hard sun, and a bedside table by candlelight. Nothing about the subject or the world repeats. The wordmark sits in the same top-left corner at the same size in all three, and the display serif, the plate geometry and the grain repeat with it. None of those four came out of a generator.

01Why do AI-generated ads look inconsistent?

Because each render is drawn on its own, from scratch, with no knowledge of the last one. Everything you specified is honored approximately. Everything you did not specify is filled in from the model's prior, which is the average of an enormous amount of other people's advertising. On brand, to a generator, means near the middle of everything it has ever seen.

That is why the prompt is the wrong place to look. You can write a perfect prompt and get twelve outputs that share a subject and disagree about everything else: the warmth of the light, how contrasty the shadows are, how heavy the type sits, whether the edges are crisp or soft. Each of those is a decision. Nobody made them, so the sampler did.

A brand guide against a brand system

The distinction that fixes it
A brand guide against a brand system
DimensionA brand guideA brand system
ColorSix approved hex valuesYes. One grade, one file, applied last on every build
TypeA typeface and a scaleYes. A weight, a plate under it, and a rule for what happens when the words are too long
PhotographyMood board, adjectivesYes. Named camera heights, focal lengths and what is never shot
TextureRarely mentionedYes. One grain plate, one opacity, on every asset
MotionA logo animationYes. One easing curve, a list of moves, and moves that are banned
EnforcementNo. A PDF and somebody's memoryYes. Code that refuses to render the wrong thing
Most brands have the left column and believe it covers the right one. It never has, and generation is simply the first process fast enough to make the gap obvious.

02Your designer was the consistency. The guide never was.

Hand a good designer a brand guide and they fill the gaps with taste, and their taste is consistent because it belongs to one person. Hand the same guide to a sampler and the gaps get filled with the average. The guide was never the thing keeping your brand together. The designer was.

A guide describes a look. It does not decide a shot.

The line we put at the top of every brand system we write

So the work is deciding, in advance, what a guide leaves open. Not more adjectives. Values in a file that a build reads. Here is the shape of one.

The decided part of a visual language

Copy this shape
GRADE ....... one file, applied last, identical on every build
GRAIN ....... one scanned plate, tiled, never scaled, re-seated
              per frame, overlaid at 0.10
EDGE ........ 1.6px gaussian feather on every cutout.
              no keyline, no torn edge, nothing else
EASING ...... smoothstep only. no overshoot, no spring, no bounce
SHADOW ...... an offset blurred copy of the element's own alpha,
              offset as a fraction of the element's width,
              never a fixed number of pixels
BANNED ...... chromatic aberration, halation, scanlines, tape,
              pins, staples, full-frame brand color fields
Six lines, each one a decision that a prompt would otherwise leave to chance. The negative list at the bottom does as much work as everything above it.

The shadow line is the one worth stealing. Offsets expressed as a fraction of the element's own width scale correctly when the element does. Offsets in fixed pixels do not, which is precisely why composited AI elements read as pasted on: a big object and a small object in the same frame end up wearing the same shadow.

The decided parts of one of our own statics

Tap the numbers
A white wellness patch pouch with a coral circle label lying on black silk beside a single dried red rose, with a serif headline and a wordmark in the lower left
Four of these five are fixed for the whole brand and were never generated. One of them, the world, is free to change on every asset. That split is what makes a set look like a family instead of a folder.

03What actually drifts when the prompt does not change?

Grade and white balance drift first, and they drift most. Then contrast and how deep the blacks sit. Then edge quality, texture and grain, which is the one nobody thinks to specify. Then type weight and the space around it. Then the small stuff that turns out to be identity: how heavy a shadow is, whether an object is centered or offset, how much air sits above a headline.

The fix is structural rather than verbal. Let the model make the subject and nothing else, then build everything around the subject in code, the same way every time. It is the same underlying problem as holding one person across six shots, moved up a level from a face to a whole brand.

The layer contract: who owns which layer

Layer anatomy
BGBackground platea real photograph, or a filled plate. Chosen per brand, not per renderSUBJThe generated layerthe subject, and only the subject. The one place drift is allowedTYPEType on its own platethe box fits the words or the plate grows. Decided in code before renderGRADEOne grade, applied lastthe same file on every asset in the brand, every timeGRAINOne grain plate over everythingwhat puts three different sources into one image
One layer is generated. Four are decided. When a client says the new batch does not feel like the last batch, the cause is almost always in a decided layer that nobody decided.
Why grain, of all thingsGrain is the cheapest unifier in the whole stack and almost nobody uses it deliberately. A photographed product, a generated environment and a vector wordmark have three different noise signatures, and the eye reads that as three different pictures stuck together. One real grain plate over all of it, at a low opacity, and they become one image. It is the single most effective thing you can do to make mixed sources look like one brand.

04The color field that belonged to somebody else's brand

We spent weeks admiring a reference system in which a solid brand-color frame fires between shots, ported it into a client engine as craft, and had the owner catch it in the delivered films. In that brand nine products each own a signature color, so a field cutting to a color is naming a SKU; under any other brand it names nothing and reads as a slide transition, which is why every film in the set was recut to remove it and the engine now refuses that shot type with an error naming the reason.

Half a woman's face in close crop against a flat deep pink background, one green eye and a bare lip visible
A frame of ours where a saturated color field is the ground of the shot, holding a face against it. That is a decision inside the picture. The device we had to strip out was the same color fired between shots as a transition, carrying no meaning at all. Same color, opposite jobs.

The same disease in a second organ

The reverse failure is worse and harder to see. We once retired eight finished ads at once because they differed on every mechanical axis and matched on all six of the ones a viewer actually reads, and what makes an ad resist fatigue is that story at full length.

Four things people believe about staying on brand

Flip them
All four have been said to us by people paying for creative. The last one is the most expensive, because it is nearly true.

05How do you keep AI-generated ads on brand?

Decide the visual language once, write it as values rather than adjectives, and apply it in code after generation instead of asking for it in the prompt. The generator's job shrinks to producing subjects. Grade, grain, type, plate geometry, shadow rule and easing never touch a model at all, which is why they cannot drift.

Where each decision gets made, and where it gets applied

The assembly order
00Decide thelanguageone grade, one grain,one type treatment,one shadow ruleONCE PER BRAND01Write the shotsubject, camera,light, and nothingabout style02Generate thesubjectthe onlynon-deterministicstep in the chain03Assemble in codeplate, type, shadow,grade, grain, in thatfixed orderREFUSES ON BREACH04Selectbuild a surplus, shipthe ones that earnedit
00Decide the languageone grade, one grain, one type treatment, one shadow ruleonce per brand
01Write the shotsubject, camera, light, and nothing about style
02Generate the subjectthe only non-deterministic step in the chain
03Assemble in codeplate, type, shadow, grade, grain, in that fixed orderrefuses on breach
04Selectbuild a surplus, ship the ones that earned it
Only step 02 involves a model. The three steps after it are deterministic: same inputs, same output, every time, on any machine.

Where does your consistency effort actually go?

Move the sliders
Rewriting the prompt
Choosing a better model or tool
Adding to the brand guide document
Assembly after generation, in code
Effort

Set it honestly for your own last campaign. In our own logs the bottom row does most of the work and usually gets the least attention, because it is the only row that produces the same result twice.

Audit your own brand system in ten minutes

Tick as you go - it remembers
0%
Six questions. If you cannot answer four of them with a value rather than an adjective, you have a brand guide and not a brand system, and generation will find every gap between them.

06Enforce it at creation time, not in QC

We audited two weeks of our own work against our own rulebook and the pattern was unambiguous. The rules that never broke were the ones enforced by a gate in the only path to the effect. The rules that broke repeatedly were the ones living as prose in a document that people were expected to remember.

The audit lineA rule is either in the path, or it is a suggestion. Prose compliance does not accumulate across people or across agents. Code does.

A build refusing its own output

Watch it run
A shortened, illustrative run. The refusal and the automatic plate growth are real behavior in our engine; the numbers in this playback are stand-ins, not a log from a specific job.

In practice: text never escapes the plate it belongs to, because the box fits the words or the plate grows, decided before render rather than found after. Text escaping its box stops being a review note and becomes a build failure. That is the argument of our piece on deterministic pipelines plus AI generation, and it is the least glamorous thing we do.

What we found when we measured our own enforcement

Our own audit
149 of 293rules that existed only as documentation at the time we audited themSutra Haus rules audit
96of those rules carried kill severity, meaning a breach ends the pieceSutra Haus rules audit
5independent checker passes a film clears before packaging, run by people who saw only the bundleSutra Haus delivery gate
43%of films that clear every automated gate still survive a human's eyeSutra Haus production log
All four are ours. The first two come from an audit of our own rulebook, taken as a snapshot rather than as a permanent state, and they are the reason the policy is now code or checkpoint, never another paragraph.

07What this is worth, honestly

A system like this is a hygiene floor, not a growth engine. CreativeX put the nearest measurement on it: about ten percent more Creative Quality Score buys around two percent off CPM across roughly 822,000 observations. Real and small. We clear the floor every time, at speed. We will not tell you the grain plate is why the ad won.

Four films, four brands, four languages

Ours, made this way
Ephoria - campaign ad
Hotel client - campaign reel
Beauty device - campaign ad
SaaS - studio demo
Different worlds, different casting, different pace. Inside each brand the grade, the grain, the type treatment and the shadow rule are fixed files rather than judgment calls. Tap any of them to watch it with sound.

What the system genuinely buys is cadence. Motion's benchmark set, 550,000 ads across more than 6,000 advertisers, found top accounts and average accounts running the same rough hit rate, with the top large account producing 5.99 winners a month against 1.75 on identical spend, purely by shipping around 31 new creatives a week instead of 11. Nobody sustains 31 a week if every one of them needs a person to protect the brand by hand.

What it costs you

One honest limit. A decided language is a constraint, and constraints cost you shots. We have lost frames we liked because a rule refused them, and kept the rule anyway. That trade is also why our work for two brands in one category should never look like it came from the same director, which is the subject of one visual language per brand.

Questions people actually ask

Open what you need
Why do AI-generated ads look inconsistent even with the same prompt?

Because each generation is an independent sample rather than a continuation of the last one. Your prompt constrains part of the image; everything it leaves open is filled from the model's own average. Grade, contrast, edge quality and texture drift first, and those four are exactly what people read as brand.

How do I keep AI ads on brand?

Shrink what the model decides. Let it produce the subject, then apply grade, grain, type treatment, plate geometry and shadow rule in code afterward, identically on every asset.

Then write your brand system as values rather than adjectives. A hex list and a mood board are not enough to make two hundred renders agree with each other.

Do brand guidelines work for AI-generated content?

Partly, and less than people expect. A guide is written for a human who will fill the gaps with judgment. A generator fills the same gaps with the statistical middle of everything it has seen. Guidelines have to be converted into decisions and defaults before they survive contact with generation.

What is per-render drift?

The variation introduced by each independent generation, even when nothing about your input changed. It is not a defect in a particular model and no prompt removes it. It is what sampling is. You manage it by reducing the surface it can act on, rather than by trying to argue with it.

Should every ad in a campaign look the same?

No, and chasing that is its own failure. We retired eight finished ads at once because they matched on argument, subject, world, energy, point of view and borrowed genre. Consistency means one language spoken in different rooms. Sameness is what a viewer notices instantly and a maker never can.

Can I fix brand consistency with a LoRA or a fine-tune?

It helps with subject identity and it does not touch the layers that actually carry a brand. A fine-tune will not give you one grade, one grain, one type treatment or one shadow geometry across every asset. Those are assembly decisions, and assembly is where they belong.

Most brand inconsistency in generated work was caused by decisions nobody had made, on a document that read as though they had.

Where the numbers came from

  1. Motion. Creative Benchmarks 2026: winners are rare - 550,000+ ads, 6,000+ advertisers, about $1.3bn spend; used for the cadence figures
  2. VidMob and TikTok. The Science of the Hook - 1,678 ads and 7.3bn impressions; used for the static logo overlay figure
  3. CreativeX. Creative Quality Score - roughly 822,000 observations; used for the quality-to-CPM relationship

Every figure above links to the place it was published. Numbers marked as ours are measured inside this studio and we say so where they appear. We do not print a statistic we cannot point at.

Badal Kariwal

Runs Sutra Haus, a one-person ad studio that has shipped over a thousand finished creatives - film and stills - for DTC brands and hotels. Writes here about what the work actually taught him, including the parts that failed. The person who reads your brief is the person who builds the work. Send him something to make.

One language, built for your brand

Send a link. Get one finished ad back.

One finished cut from your own product, inside three days, free and yours to run whether or not we ever work together. You will get the visual language written down with it: the grade, the type treatment, the texture and the list of things your brand does not do.

Replies within a day. Ad within three.
Read next