AI Image Batch Style Drift: Lock Style Across a Batch

Generate 20 campaign images and they look like 20 different photographers shot them? Here is the June-2026 workflow to lock style across a batch: sref, Omni Reference, Flux Redux, LoRA, and palette enforcement.

You need 20 images for a campaign: same brand, same mood, same color palette. You generate them across a week, maybe across two different scenes, and when you lay them out together they look like 20 different photographers shot them. Lighting drifted, color temperature drifted, sharpness drifted, even the composition logic drifted. The reason is simple: diffusion models have no persistent style state. Every generation samples freshly from the model, so words alone never reproduce the same look twice.

Fastest fix: stop describing style with words and start passing the same reference image on every generation. In Midjourney that is --sref with one fixed image URL and a fixed --sw; in ComfyUI/Flux it is Flux Redux (the renamed IP-Adapter); in Gemini’s Nano Banana you attach the same reference image(s) to every request. Lock to one model version, then catch the last bit of drift with a single shared color preset in post. That alone fixes most batches. The rest of this page is the full diagnosis and the high-volume path (a style LoRA).

Which bucket are you in

Most drifting batches have one or two of these root causes. Find yours in the table, then jump to the matching step below.

Symptom you seeLikely causeGo to
Look changes every render even with “consistent style” in the promptNo image reference passedStep 2
Half the batch looks one way, half anotherModel or version changed mid-batchStep 1
Product shots and lifestyle shots clash but each set is fineDifferent scenes need different promptsStep 3
The vertical and square crops feel like different brandsAspect ratio shifts framing and lightStep 3
Style is close but the color/tone wobblesResidual model driftStep 5
One or two images are obvious outliersUneven post-processing or a bad seedStep 6

1. No style reference passed in

Asking for “consistent style” with words alone produces drift across seeds. The model re-interprets style words slightly differently every generation. This is the single most common root cause.

How to spot it: Are you using only text prompts across your batch? Yes = this is it.

2. Different scenes need different prompt structures

A product hero shot and a lifestyle scene need different prompts. Different prompts give the model different starting points, so style drifts even when you reuse the same modifiers.

3. Model or model version drifted

You generated half the batch on Midjourney V8.1 and half on the older --v 7, or half on FLUX.2 [pro] and half on [dev]. Even inside one family, versions shift behavior. Hosted models also update silently: Midjourney made V8.1 the default on June 10, 2026, so a batch started in May and finished in June can straddle two defaults if you never pinned the version.

4. Resolution and aspect ratio differ

A vertical poster and a square social card from the same prompt look stylistically different because the model fits the framing differently. Different aspect ratios change perceived lighting and depth.

5. Different seeds amplify subtle prompt differences

Two prompts that differ by one adjective produce different outputs at the same seed. Add seed variation on top and the drift compounds.

6. Post-processing applied unevenly

Some images upscaled, some not. Some color-graded, some not. Even if the AI output was consistent, uneven post reintroduces drift.

Before you start

  • Define the style brief in concrete terms. “Warm editorial, golden hour, shallow DOF, muted earth palette” is concrete. “Premium aesthetic” is not.
  • Pick or generate one anchor image that represents the target style. This is your style reference for the whole batch.
  • Save the seed, prompt template, and model of the anchor.
  • Confirm you can use the same model version across the entire batch. Lock the version explicitly.

Information to collect

  • The anchor image (your style north-star).
  • Style brief: palette, lighting direction, lens look, mood.
  • Model and exact version. For Midjourney, the version (e.g. --v 8.1). For SDXL, the checkpoint hash. For Flux, the exact variant: FLUX.2 [pro], [flex], [dev], or [klein].
  • A list of every scene the batch must cover, with the intended aspect ratio for each.

Step-by-step fix

Ordered by ROI. Steps 1 and 2 cover most batch consistency cases.

Step 1: Lock model and version

Pick one model and one version for the whole batch. Document the exact version. On hosted providers, screenshot the version selector, because they update silently.

  • Midjourney: add the same explicit version on every prompt, e.g. --v 8.1. Do not let it ride the default, because the default changed to V8.1 on June 10, 2026. If you are reusing an --sref code discovered before June 2025, also pin the style version with --sv 4; the current default is --sv 7 and it reads old codes differently.
  • SDXL: same checkpoint file. Note the hash so you can prove it later.
  • Flux: same FLUX.2 variant on every prompt: [pro], [flex], [dev], or [klein]. Do not mix variants, and do not mix FLUX.1 and FLUX.2.
  • Nano Banana / Imagen (Gemini): same model (e.g. Nano Banana Pro, the Gemini 3 Pro Image model) for the whole batch.

Step 2: Pass a style reference on every generation

Replace style-by-words with style-by-image. Use the same reference image on every prompt in the batch.

  • Midjourney: add --sref <anchor URL> with a fixed --sw. --sw ranges from 0 to 1000 (default 100); the practical sweet spot for batches is roughly 65 to 175. Use the identical sref URL or code on every prompt. (Use --oref <URL> --ow 100 instead, or in addition, only when you also need the same subject or character in every frame; Omni Reference is V7 today and costs 2x GPU.)
  • SDXL: use IP-Adapter with the anchor image at style strength 0.6 to 0.8. Same anchor on every prompt.
  • Flux: use Flux Redux in ComfyUI (Black Forest Labs renamed IP-Adapter to “Redux”). Same anchor on every render. For edit-style consistency across variants, FLUX.1 Kontext is also strong.
  • Nano Banana (Gemini): attach the same reference image(s) to every request. Nano Banana models accept up to 14 reference images per request and hold style and up to 5 people consistent, which makes them a fast option for batch work.

Step 3: Build a prompt template and stick to it

Create one prompt template with placeholders for the scene-specific bits, then fill in only those per image. Everything else stays byte-for-byte identical.

[scene description], warm editorial photography, golden hour side-light,
shallow depth of field, muted earth palette, slight film grain,
shot on 35mm lens, ar [ratio], --sref [anchor URL] --sw 150

If different scenes truly need different prompts (product hero vs lifestyle), keep the style block (everything after the scene description) identical and vary only the scene and aspect ratio. Changing the aspect ratio changes perceived light and depth, so review crops side by side, not in isolation.

Step 4: Train a style LoRA for high-volume work

If the batch is 50+ images or the campaign runs for months, train a style LoRA. It holds style more tightly than sref across very different scenes.

  • Collect 20 to 50 reference images that all clearly share the target style.
  • Train it. As of June 2026, AI-Toolkit (from OstrisAI, with a web UI) is the standard trainer for FLUX.2 [dev] and [klein]; Kohya SS still covers SDXL and FLUX.1; or train hosted on fal.ai or Replicate. Note: FLUX.2 [pro] and [flex] are proprietary and do not support LoRA training, so train against [dev] or [klein].
  • Use the LoRA on every generation at strength 0.7 to 1.0.

Step 5: Lock palette in post

Even with sref or LoRA, small palette drift remains. Run every image through a palette-locking post step:

  • In Lightroom, save the color grade as a preset and apply to every image.
  • In Photoshop, use a Color Lookup adjustment layer with a fixed LUT.
  • In Davinci Resolve, build a node graph and apply to all stills.

This catches the last 10% of drift the model could not lock.

Step 6: Audit before delivery

Lay all images in a grid at the same display size. Look for:

  • Color temperature outliers (one image warmer or cooler than the rest).
  • Sharpness outliers (one image softer or harder).
  • Composition outliers (one image with a very different rule-of-thirds setup).

Mark outliers and either regenerate or correct in post.

How to confirm the fix

  • Build a contact sheet of the batch at the final display size. Style outliers should jump out immediately.
  • Use a color-picker to sample the same hue across multiple images. They should be within a small delta-E range.
  • Show the contact sheet to someone who did not generate the images. Ask which image looks different. None should.
  • Verify the deliverable looks consistent on the actual surface (web, print, social).

Long-term prevention

  • For any campaign-scale work, build a style anchor and an sref or LoRA before generating.
  • Maintain a prompt template document for the project. Update it once when the brief changes; never edit prompts ad hoc.
  • Pin model versions and document them (Midjourney --v, Flux variant, SDXL checkpoint hash). When a provider ships a new default, retest the anchor before adopting it.
  • Run every batch through one consistent post-processing recipe saved as a preset.
  • For long-running campaigns, train a project-specific LoRA and reuse it.

Common pitfalls

  • Trusting that “consistent style” in the prompt is enough. It is not.
  • Letting Midjourney ride the default version, then having it flip to V8.1 mid-campaign.
  • Mixing FLUX.2 variants ([pro] vs [dev]) or mixing FLUX.1 and FLUX.2 in one batch.
  • Forgetting that aspect ratio changes affect perceived style.
  • Skipping the post-processing pass and assuming the model output is already grade-accurate.
  • Generating across many days without re-checking provider version updates.

FAQ

Q: What’s the difference between --sref and --oref in Midjourney? A: --sref (style reference) copies the look: color, lighting, lens, mood. --oref (Omni Reference) copies a specific subject, like a character or product, into the frame. For batch style consistency you want --sref. Add --oref only when the same subject must also appear in every image. As of June 2026, Omni Reference is a V7 feature and costs about 2x the GPU time of a normal job.

Q: What --sw value should I use? A: --sw runs from 0 to 1000 (default 100). For batch consistency, 65 to 175 is the practical sweet spot. Push higher only if the style is barely registering; very high values can fight your scene prompt and make results unpredictable.

Q: How many reference images do I need to train a style LoRA? A: 20 to 50 high-quality references are enough for SDXL or FLUX.2. Quality beats quantity: choose images that all clearly share the style you want to lock. Train against FLUX.2 [dev] or [klein], since [pro] and [flex] do not support LoRA training.

Q: Will a style reference work across very different scenes (indoor product vs outdoor lifestyle)? A: Style transfers well; subject matter does not. The anchor determines style adherence (color, lighting, lens look) but does not force the subject to match. For scenes that differ a lot, a trained LoRA holds tighter than a single sref.

Q: Why does my batch still drift even with sref at maximum weight? A: A maxed --sw often fights the scene prompt and degrades both. Drop it back into the 100 to 150 range, add explicit style descriptors in the prompt, and confirm you pinned the model version (and --sv if you are reusing an old sref code).

Tags: #ai-image #Troubleshooting #style #batch