---
title: One campaign idea, a family of ad variations
display: 'One campaign idea, a family of *ad* variations'
nav_title: Ad variation family
summary:
  - "Four finished 4:5 ads for one campaign idea, each in a different setting, reading as one family."
  - "Fix the product and the look with two references, and set every word of copy in code."
  - "Only the scene line changes per variant; seven runs made the four plates: two failed the layout, one broke the palette."
description: Build a family of ads from one idea, varying the setting and copy while product, look and layout stay fixed. Copy is set in code so it is always exact.
section: playbooks
order: 230
type: playbook
topic: Brand and marketing
level: Build
roles: [marketer]
time: { read: 9, do: 25, wait: 6 }
needs: ["Any plan with credits", "A product packshot and one approved campaign image", "ImageMagick or any layout tool for the copy"]
last_verified: 2026-10-16
models_checked: ["GPT Image 2.5 Sunburst"]
hero: playbooks/ad-variations-family/vireo-ad-family-four.webp
related: [text-and-typography-in-images, product-lifestyle-scenes, key-art-and-store-assets]
run_in: [model_openai-gpt-image-2-5-sunburst]
# the use case made, on scenario.com/explorations, and the platform workflows that run it
made_with:
  - { slug: same-product-every-variation, title: "Same Product, Every Variation" }
  - { slug: the-showroom, title: "The Showroom" }
run_with:
  - { id: wflow_ad-creative-studio, name: "Ad Creative Studio" }
  - { id: wflow_EpDiPMLkZk6zQhtbV65fg47a, name: "Multi-Format Ad Generator" }
thumb: playbooks/ad-variations-family/thumb.webp
video: tutorials/ad-variations-family.mp4
chapters:
  - { at: 0, title: "The ad family to make", image: "/media/images/playbooks/ad-variations-family/ch-01-the-ad-family-to-make.webp" }
  - { at: 33.5, title: "Product first, look second", image: "/media/images/playbooks/ad-variations-family/ch-02-product-first-look-second.webp" }
  - { at: 52.5, title: "One base prompt for the family", image: "/media/images/playbooks/ad-variations-family/ch-03-one-base-prompt-for-the-family.webp" }
  - { at: 72, title: "Change only the scene line", image: "/media/images/playbooks/ad-variations-family/ch-04-change-only-the-scene-line.webp" }
  - { at: 102.5, title: "Describe the empty zone in layout terms", image: "/media/images/playbooks/ad-variations-family/ch-05-describe-the-empty-zone-in-layout-terms.webp" }
  - { at: 116, title: "Set every word in code", image: "/media/images/playbooks/ad-variations-family/ch-06-set-every-word-in-code.webp" }
  - { at: 158, title: "Try it as an Exploration: Content Engine", image: "/media/images/playbooks/ad-variations-family/ch-07-try-it-as-an-exploration-content-engine.webp" }
  - { at: 166, title: "Recap", image: "/media/images/playbooks/ad-variations-family/ch-08-recap.webp" }
steps:
  - title: "Product first, look second"
    text: "Create › Images › GPT Image 2.5 Sunburst, Quality high, Image Count 1, Dimensions 3:4 (there is no 4:5 preset, so crop later). Reference Images › Select from Library: the packshot first, then the campaign look image, because the prompt calls them image 1 and image 2."
  - title: "One base prompt for the family"
    text: "Paste the base prompt once: image 1 is the exact shoe with its keep-list, image 2 sets the look only, the upper left stays empty for a headline, and no text."
    prompt: |-
      Image 1 is the product: the exact shoe, with its shape and proportions, molten orange engineered mesh upper with fine dark fiber flecks, sculpted orange heel collar, white flat laces, the small spaced VIREO wordmark printed in darker orange on the outer side of the heel, and the thick translucent milky-white ribbed midsole with the black carbon plate showing through it as a dark stripe, unchanged. Image 2 sets the campaign look only: blue hour, hard cool light with a warm rim, wet surfaces with fine spray, deep shadow falloff, medium-format clarity. Do not copy the scene or the runner of image 2. Composition: vertical 4:5, the shoe in the lower right third, side view with the outer side and the VIREO wordmark facing the camera and sharp, the upper left 40 percent of the frame calm and uncluttered for a headline added later. No people, no text anywhere except the VIREO wordmark on the shoe, no other logos.
  - title: "Change only the scene line"
    text: "Add one scene line at the end and change only that line per audience: track, seafront, crosswalk, race-day avenue. The rest of the prompt never changes."
    prompt: |-
      Scene: a wet blue running track at blue hour, the shoe beside a plain black starting block on the white lane line, one stadium floodlight glowing far behind, rain droplets on the track.

      Scene: a seafront promenade of wet grey stone at blue hour, a low sea wall, waves breaking with fine spray in the air behind, a dark sea and a deep blue sky.

      Scene: the white stripe of an empty city crosswalk on wet asphalt at blue hour, puddles reflecting distant blurred street lights, a light drizzle.

      Scene: the curb of a wide city avenue closed for a race at first light, a row of plain unbranded metal barriers softly out of focus behind, the road wet and empty, pale dawn sky.
  - title: "Describe the empty zone in layout terms"
    text: "The crosswalk and avenue plates put the shoe where the headline goes, so check every plate against the layout before any copy goes on. Replace the composition sentence with this stricter one; for the avenue, ask for low anonymous buildings and no skyline."
    prompt: |-
      Composition: vertical 4:5. The shoe stands at the right side of the frame, in the lower right third, side view with the outer side and the VIREO wordmark facing the camera and sharp. The whole left half of the frame stays calm and uncluttered for a headline and a button added later.
  - title: "Set every word in code"
    text: "One script adds the gradient, the headline, the product line and the button at the same positions on every ad, with the copy kept in a sheet, one row per ad. Review the four side by side: the look reference owns the light, so keep light words out of the scene lines."
agent_steps:
  - title: "Connect the Scenario MCP"
    text: "Connect your agent and sign in once at [mcp.scenario.com](https://mcp.scenario.com). Then tell it which Scenario team and project to use, so every file lands there."
  - title: "Give the agent the files"
    text: "The product packshot first, then the one approved campaign image that sets the look. Upload them with upload_asset or give their asset IDs; the order matters, because the prompt calls them image 1 and image 2. Add the copy sheet, one row per ad, for the layout script."
  - title: "Brief the agent: the plates"
    text: "One base prompt for the family, and one scene line at the end that changes per audience. The rest of the prompt never changes."
    prompt: |-
      Make one plate per scene line with GPT Image 2.5 Sunburst (model_openai-gpt-image-2-5-sunburst): referenceImages [the packshot, the look image], in that order; width 1024, height 1280; quality "high"; one image each. Each prompt is the base prompt below, word for word, followed by one scene line, word for word. Start the four with wait: false and collect them with one jobs_wait. Quote the total with a dry run first and wait for my go.

      Base prompt:
      Image 1 is the product: the exact shoe, with its shape and proportions, molten orange engineered mesh upper with fine dark fiber flecks, sculpted orange heel collar, white flat laces, the small spaced VIREO wordmark printed in darker orange on the outer side of the heel, and the thick translucent milky-white ribbed midsole with the black carbon plate showing through it as a dark stripe, unchanged. Image 2 sets the campaign look only: blue hour, hard cool light with a warm rim, wet surfaces with fine spray, deep shadow falloff, medium-format clarity. Do not copy the scene or the runner of image 2. Composition: vertical 4:5, the shoe in the lower right third, side view with the outer side and the VIREO wordmark facing the camera and sharp, the upper left 40 percent of the frame calm and uncluttered for a headline added later. No people, no text anywhere except the VIREO wordmark on the shoe, no other logos.

      Scene lines, one per plate:
      Scene: a wet blue running track at blue hour, the shoe beside a plain black starting block on the white lane line, one stadium floodlight glowing far behind, rain droplets on the track.

      Scene: a seafront promenade of wet grey stone at blue hour, a low sea wall, waves breaking with fine spray in the air behind, a dark sea and a deep blue sky.

      Scene: the white stripe of an empty city crosswalk on wet asphalt at blue hour, puddles reflecting distant blurred street lights, a light drizzle.

      Scene: the curb of a wide city avenue closed for a race at first light, a row of plain unbranded metal barriers softly out of focus behind, the road wet and empty, pale dawn sky.
  - title: "Check every plate against the layout"
    text: "The crosswalk and avenue plates put the shoe where the headline goes. Accept when every plate shows the same shoe with VIREO exact on the outer heel, the shoe sits in the lower right third, the upper left is calm enough for two lines of type, and the light matches the look reference. Reject a shoe that drifts left, props in the headline area, generated text, a logo or a recognizable building."
    prompt: |-
      For each plate, tell me where the shoe sits, whether VIREO reads exactly on the outer heel, and whether the upper left is clear for a headline. Redo only a plate that fails, with the composition sentence of the base prompt replaced by this one, word for word:
      Composition: vertical 4:5. The shoe stands at the right side of the frame, in the lower right third, side view with the outer side and the VIREO wordmark facing the camera and sharp. The whole left half of the frame stays calm and uncluttered for a headline and a button added later.

      For the avenue, also ask for low anonymous buildings and no skyline.
  - title: "Set the copy in code"
    text: "Every word is set in code, never generated. The look reference owns the light, so keep light words out of the scene lines."
    prompt: |-
      Download the kept plates and run the layout script on each: the gradient, the headline, the product line and the button at the same positions on every ad, from the copy sheet. Show me the four ads side by side.
  - title: "File and report"
    prompt: |-
      Create a collection for this campaign with the packshot, the look image, the kept plates and the finished ads (upload them with upload_asset). Report the model, every asset ID, which plates you redid and why, and the total cost spent.
updated: 2026-10-16
canonical: https://learn.scenario.com/playbooks/ad-variations-family
---

Last updated: 2026-10-16

# One campaign idea, a family of ad variations

> Build a family of ads from one idea, varying the setting and copy while product, look and layout stay fixed. Copy is set in code so it is always exact.

In short:

- Four finished 4:5 ads for one campaign idea, each in a different setting, reading as one family.
- Fix the product and the look with two references, and set every word of copy in code.
- Only the scene line changes per variant; seven runs made the four plates: two failed the layout, one broke the palette.


Four 4:5 ads for one campaign idea, each in a setting for a different kind of runner, with the same product, light, palette, layout and exact copy. For marketers and agencies testing variants of one idea.

:::note As of October 2026
The models, settings and screens in this article are the ones Scenario offered in October 2026. New models and updates arrive often, so check the app for newer options before you choose.
:::

![Four 4:5 ads side by side: a wet track with a starting block, a seafront with breaking waves, a city crosswalk and a tree-lined avenue with race barriers, each at blue hour with the orange shoe in the lower right, a white condensed headline at top left and an orange Shop the Apex button](https://ufgc0c9mhl4ueq76.public.blob.vercel-storage.com/academy/1f349065320d3e7c13fbc77e3e0d1116b26127311de5b81740d4c9a17330e4c2.webp "The kept family: one idea, four settings, one layout.")

## The brief

| Field | Brief |
|---|---|
| Idea | "Wet roads are part of the season." |
| Audiences | Track sprinters, seafront runners, city commuters, race-day runners |
| Format | 4:5 feed ads, plates at 1024x1280, exported at the placement size (1080x1350) |
| Fixed | The product (packshot); the campaign look (blue hour, hard cool light with a warm rim, wet surfaces, deep shadows); the layout (shoe lower right, calm upper left for the headline, button bottom left); the typefaces and button |
| May vary | Setting and props per audience; one headline per audience |
| Accept when | Wordmark exact at 1:1; the shoe sits in the lower right third and clear of the button; the headline area is calm; copy is correct; the four plates share one light and palette |

The packshot comes from [Clean packshots](https://learn.scenario.com/playbooks/product-packshots.md). The look image is the approved campaign master, a runner on a wet track at blue hour, also used in [Formats from one master](https://learn.scenario.com/playbooks/key-art-and-store-assets.md); the scenes in [Product lifestyle scenes](https://learn.scenario.com/playbooks/product-lifestyle-scenes.md) come from the same packshot.

## Approach

:::flow
Base prompt | Packshot and look references, layout rule |
Plates | GPT Image 2.5 Sunburst, one per audience | image
Layout check | Shoe lower right, calm upper left |
Copy in code | ImageMagick headline, product line, button | image
Family review | Four finals side by side |
:::

A family of variations works when you decide in advance what may change and lock everything else ([Decide what stays fixed](https://learn.scenario.com/browse)). Here three things are fixed by three different means:

- **The product** is fixed by a reference: the white packshot, with the keep-list sentence.
- **The look** ([Give each reference a role](https://learn.scenario.com/browse)) is fixed by a second reference: the approved campaign image, with the instruction "sets the campaign look only, do not copy the scene or the runner". Two references, two jobs, both named in the prompt ([Give references a role](https://learn.scenario.com/browse)).
- **The layout and the copy** are fixed by code. The model generates a plate with empty space; ImageMagick (or your layout tool) sets the headline, the product line and the button.

Models still make spelling and kerning mistakes on headlines, and a 4-ad family multiplies them. Text set in code is exact every time ([Let code own what must be exact](https://learn.scenario.com/browse), [Text and typography in images](https://learn.scenario.com/images/text-and-typography-in-images.md)). Only the "Scene:" line of the prompt changes between variants.

- **Capability:** image to image with two reference images.
- **Model used:** GPT Image 2.5 Sunburst at high quality, 1024x1280, as of October 2026.
- **Alternative:** Nano Banana 2.1, which also takes many references. Check the wordmark on every plate with either.

## Steps

:::steps
1. **Write the base prompt once** ([Batch from a template](https://learn.scenario.com/browse)). Everything except the last line stays the same for every variant:

   ```prompt
   Image 1 is the product: the exact shoe, with its shape and proportions,
   molten orange engineered mesh upper with fine dark fiber flecks, sculpted
   orange heel collar, white flat laces, the small spaced VIREO wordmark
   printed in darker orange on the outer side of the heel, and the thick
   translucent milky-white ribbed midsole with the black carbon plate
   showing through it as a dark stripe, unchanged. Image 2 sets the campaign
   look only: blue hour, hard cool light with a warm rim, wet surfaces with
   fine spray, deep shadow falloff, medium-format clarity. Do not copy the
   scene or the runner of image 2. Composition: vertical 4:5, the shoe in
   the lower right third, side view with the outer side and the VIREO
   wordmark facing the camera and sharp, the upper left 40 percent of the
   frame calm and uncluttered for a headline added later. No people, no text
   anywhere except the VIREO wordmark on the shoe, no other logos.
   Scene: ...
   ```

2. **Set up the panel.** **Create** > **Images**, **GPT Image 2.5 Sunburst**. In **Reference Images**, add the packshot first and the campaign image second (order matters: the prompt calls them image 1 and image 2). **Quality** `high`, **Image Count** 1. This run set a custom 1024x1280 (4:5) through the Scenario MCP. The web panel's **Dimensions** menu offers presets only (**Auto** plus sizes from 9:21 to 21:9, with no 4:5 entry), so in the panel pick 3:4 (1536x2048) and crop to 4:5 afterward.

3. **Generate one plate per audience** by changing only the scene line:

   ```prompt
   Scene: a wet blue running track at blue hour, the shoe beside a plain
   black starting block on the white lane line, one stadium floodlight
   glowing far behind, rain droplets on the track.
   ```

   ```prompt
   Scene: a seafront promenade of wet grey stone at blue hour, a low sea
   wall, waves breaking with fine spray in the air behind, a dark sea and a
   deep blue sky.
   ```

   ```prompt
   Scene: the white stripe of an empty city crosswalk on wet asphalt at blue
   hour, puddles reflecting distant blurred street lights, a light drizzle.
   ```

   ```prompt
   Scene: the curb of a wide city avenue closed for a race at first light, a
   row of plain unbranded metal barriers softly out of focus behind, the
   road wet and empty, pale dawn sky.
   ```

4. **Check each plate against the layout** before setting copy. The track and seafront plates passed. The crosswalk plate put the shoe left of center, in the headline column. The avenue plate did the same and added a skyline whose tower looked like a real landmark. Both were re-run with a stricter composition line in place of the first one:

   ```prompt
   Composition: vertical 4:5. The shoe stands at the right side of the
   frame, in the lower right third, side view with the outer side and the
   VIREO wordmark facing the camera and sharp. The whole left half of the
   frame stays calm and uncluttered for a headline and a button added later.
   ```

   The avenue scene line also gained "tree-lined" and "pale dawn sky above low anonymous buildings, no skyline and no recognizable buildings".

5. **Set the copy in code** ([Typeset text, never generate it](https://learn.scenario.com/browse)). Each plate is resized to 1080x1350 and gets a dark top gradient for legibility, a two-line headline, a product line and a button, all at fixed positions. The run used one ImageMagick script for all four: DIN Condensed Bold headline in off-white (#F4F1EC), DIN Alternate Bold product line `VIREO APEX | CARBON RACING SHOE`, and a rounded molten orange (#FF5A1F) button reading `SHOP THE APEX` in white. Headlines: "START FAST. FINISH FASTER." / "RAIN IS JUST WEATHER." / "EVERY STREET IS A TRACK." / "RACE MORNING. READY."

6. **Review the family side by side**, not one by one. Put the four finals in one row and check that the product, light and layout repeat while the settings differ. Here the review caught the second avenue plate: "first light" and "pale dawn sky" in its scene line turned the sky gold and warm, so it read as a different campaign next to three blue-hour plates. It was re-run with the scene line rewritten for blue hour:

   ```prompt
   Scene: the curb of a wide tree-lined avenue closed for a race, at blue
   hour, a row of plain unbranded metal barriers softly out of focus behind,
   the road wet and empty, low anonymous buildings, no skyline and no
   recognizable buildings.
   ```
:::

**With the Scenario MCP:** `model_run` on `model_openai-gpt-image-2-5-sunburst` with `referenceImages: ["<packshot id>", "<look image id>"]`, `width: 1024`, `height: 1280`, `quality: "high"`. An agent can loop over a list of scene lines, start all plates with `wait: false`, then run the copy script on each download.

:::compare
![Track plate without copy: the shoe beside a black starting block on a wet blue track, a floodlight behind, empty sky at upper left](https://ufgc0c9mhl4ueq76.public.blob.vercel-storage.com/academy/9b103fcd3e01a705cccd704ebb4a74e61bafd9fdd74556a42d8610b8d72d250c.webp "The plate as generated: empty headline area, no text.")
![The finished track ad with the headline START FAST. FINISH FASTER., the product line and the Shop the Apex button](https://ufgc0c9mhl4ueq76.public.blob.vercel-storage.com/academy/ee06633b332f0499991e52615d352878c2d8ab87f41ba91f1344183ade474a2d.webp "The final: copy set in code at fixed positions.")
:::

## Check the result

:::check
**Accept when:** every plate shows the same shoe with VIREO exact on the outer heel; the shoe is in the lower right third and clear of the button zone; the upper left is calm enough for two lines of type; the light and palette match the look reference; the copy is spelled and placed identically on every ad.
**Reject when:** the shoe drifts toward the center or left; props crowd the headline area; the plate contains any generated text, logo or recognizable building; one variant has a different light or palette that breaks the family.
:::

:::compare
![Crosswalk plate with the shoe left of center, in the headline column](https://ufgc0c9mhl4ueq76.public.blob.vercel-storage.com/academy/687990c01e59f4e77c63f84cccbf2ae128ceaade9b75ffcbc08c5d37b912d178.webp "Rejected: shoe left of center, where the headline goes.")
![Crosswalk plate with the shoe at the right and a calm left half](https://ufgc0c9mhl4ueq76.public.blob.vercel-storage.com/academy/c6105effcfd57290b71babb255a28de6b9336b2c5e83aef74ca480b27bbc22de.webp "Kept: re-run with the composition line tightened.")
:::

The model read "lower right third" loosely twice in four plates. Spelling the empty zone in terms of the layout ("the whole left half ... for a headline and a button") fixed both, at the cost of two extra plates. Writing the layout rule precisely in the base prompt is cheaper than fixing composition with edits later.

:::compare
![Avenue plate with a warm gold dawn sky over trees and barriers](https://ufgc0c9mhl4ueq76.public.blob.vercel-storage.com/academy/13f44fc1e32b22a8229d9015aee461b9566dd22394e889dd9fc979b6d0c51e23.webp "Rejected in the family review: the scene line asked for dawn, and the sky turned gold.")
![Avenue plate at blue hour with trees, barriers and street lamps](https://ufgc0c9mhl4ueq76.public.blob.vercel-storage.com/academy/ef90aa10297577ad61d0bd01b67216464aa29795ee5645da236fb2290f79fdb3.webp "Kept: the scene line rewritten for blue hour.")
:::

:::quiz Check yourself
? Two plates for the crosswalk ad. The headline goes in the upper left and the button in the lower left. Which plate goes on to the copy step?
![Crosswalk plate at blue hour with the shoe standing left of center on the white stripe](https://ufgc0c9mhl4ueq76.public.blob.vercel-storage.com/academy/687990c01e59f4e77c63f84cccbf2ae128ceaade9b75ffcbc08c5d37b912d178.webp "Take A")
![Crosswalk plate at blue hour with the shoe standing at the right on the white stripe](https://ufgc0c9mhl4ueq76.public.blob.vercel-storage.com/academy/c6105effcfd57290b71babb255a28de6b9336b2c5e83aef74ca480b27bbc22de.webp "Take B")
- [ ] Take A: the shoe is more central, so it reads better in a feed
- [x] Take B: the shoe sits at the right and the left half stays clear for the headline and button
- [ ] Either one: the copy is set in code, so it can go wherever there is room
> The layout is fixed: shoe lower right, calm upper left, button bottom left. Take A puts the shoe in the headline column, so it fails before any copy is set.

? One plate comes back with a shop sign in the background that spells a made-up brand name. The shoe and the light are right. What do you do?
- [x] Reject it and re-run with "No text anywhere except the VIREO wordmark" and the props named as plain
- [ ] Keep it: the sign makes the street more believable
- [ ] Keep it and place the headline over the sign so it disappears
> Any generated text or logo besides the wordmark is in Reject when. The fix is in If it breaks.
:::

## Make it repeatable

- **Template the prompt** ([Package it as a workflow or skill](https://learn.scenario.com/browse)). In the **Node Editor**: two **Image** inputs (`Product packshot`, `Campaign look`), a **Text** input (`Scene`), a **Prompt Builder** holding the fixed base prompt with the scene appended, and an **Image Generator** on GPT Image 2.5 Sunburst at 1024x1280. Add an **Approval** node with `Approve only if the shoe is in the lower right third and the upper left is empty.` Publish it as an App for the campaign team.
- **Keep copy in a spreadsheet** ([Keep sources as data](https://learn.scenario.com/browse)). One row per variant: scene line, headline, product line, button. The copy script reads the sheet, so a headline change never needs a new generation.
- **Keep the look words out of the scene lines.** The look reference and the base prompt own the light; a scene line that names a time of day ("first light", "pale dawn sky") competes with them.
- **Test more variants cheaply.** Plates cost the same whatever the copy; test several headlines on one plate before generating new settings.

## Runs and time

| Step | Model | Runs or takes | Kept | Wait |
|---|---|---|---|---|
| Plates: track, seafront | GPT Image 2.5 Sunburst, high | 2 | 2 | about 45 to 50 s each |
| Plates: crosswalk, avenue, first pass | GPT Image 2.5 Sunburst, high | 2 | 0 (layout; landmark on the avenue) | about 45 s each |
| Crosswalk and avenue, tightened composition | GPT Image 2.5 Sunburst, high | 2 | 1 (the avenue went gold) | about 50 to 55 s each |
| Avenue, scene line rewritten for blue hour | GPT Image 2.5 Sunburst, high | 1 | 1 | about 45 s |
| Copy and button on four plates | ImageMagick, local | 4 | 4 | seconds |

Seven generations, four kept, about 6 minutes of wait if run one by one. Every plate costs the same, and the copy costs nothing, so headline tests are free; the price shows on the **Generate** button before you run. The packshot and the campaign image come from earlier work.

## Variations

- **Mobile games and apps:** keep the character and UI frame fixed, vary the scene and the hook line. For video variants, see [Mobile UA video ads](https://learn.scenario.com/playbooks/mobile-ua-video-ads.md).
- **Retail promotions:** keep the plate and change only the offer text in code, so a price change costs nothing.
- **Regional markets:** vary the setting for each region and set the copy in each language from the same sheet; the plate does not change.
- **B2B and software:** use a product screenshot as the fixed element, composited in code, and generate only the scene around it.
- **Seasonal refresh:** keep one plate and change only the season with a mask. See [Edit one thing per campaign](https://learn.scenario.com/playbooks/edit-one-thing-campaign.md).

## If it breaks

- **The model copies the look reference's scene or its runner.** Say "sets the campaign look only" and "do not copy the scene or the runner of image 2", and describe the new scene in concrete detail.
- **The product sits in the copy zone.** Describe the empty zone in layout terms and name the side the product must be on; re-run rather than move it with an edit.
- **Generated text appears on props or signs.** Add "No text anywhere except the VIREO wordmark" and name props as plain.
- **A skyline shows a famous-looking tower.** Add "low anonymous buildings, no skyline and no recognizable buildings", or pick a setting without a skyline.
- **The family drifts in color.** Keep the same look reference for every plate and do not mention a time of day or new colors in the scene line.
- **Headlines look different per ad.** They are being typed by hand. Put them in one script or template with fixed font, size and position.

Source: https://learn.scenario.com/playbooks/ad-variations-family
