DEV Community

Voor AI
Voor AI

Posted on

Build a Brand-Image Contract Before Generating Campaign Variants

Real Banana Pro AI Studio product and campaign examples

“Keep the brand consistent” is not an executable requirement. A useful image workflow separates invariants—things that may not change—from variables that make each campaign asset new.

This tutorial uses the current Banana Pro AI Studio page on Voor. The exact route exposes a Prompt, optional Image Input, Aspect Ratio including Match Input Image, Public visibility, Reset, and Generate. It presents real product-studio and campaign examples. The live form supplies the current model and credit estimate before submission; no credits were spent here.

1. Encode the invariants

{
  "identity": {
    "product_shape": "short cylindrical bottle with rounded shoulder",
    "cap": "matte black, same height and diameter",
    "label": "cream field, centered two-line wordmark",
    "logo_geometry": "unchanged"
  },
  "materials": {
    "bottle": "amber glass",
    "label": "uncoated paper"
  },
  "must_not_change": [
    "label spelling",
    "cap proportions",
    "bottle silhouette"
  ]
}
Enter fullscreen mode Exit fullscreen mode

Use observable nouns and proportions. “Premium” is a direction; “matte black cap with the same height and diameter” is a constraint.

2. Keep campaign variables separate

{
  "campaign": {
    "environment": "cool stone shelf after rain",
    "lighting": "soft overcast window light",
    "accent": "single eucalyptus stem",
    "crop": "4:5 social hero",
    "negative": ["extra bottles", "floating text", "new logo"]
  }
}
Enter fullscreen mode Exit fullscreen mode

Now you can change environment, lighting, prop, and crop without rewriting the product identity. Version both JSON blocks with the final asset.

3. Assemble a constraint-first prompt

Put invariants before style:

Preserve the exact bottle silhouette, matte-black cap proportions, cream label, and centered two-line wordmark from the input. Place one bottle on a cool stone shelf after rain, soft overcast window light, one eucalyptus stem, 4:5 crop. No extra bottles, no new copy, no logo redesign.

Upload the approved product master, select Match Input Image when geometry is the test, then switch aspect ratio only for a documented channel requirement. Check Public before using unreleased packaging. Read the displayed credit estimate before Generate.

Real current-route examples used to separate preserved identity from campaign variables

4. Validate with code

A small contract checker prevents missing review fields:

const required = [
  "product_shape",
  "cap",
  "label",
  "logo_geometry"
];

export function validateBrief(brief) {
  const missing = required.filter(key => !brief.identity?.[key]);
  if (missing.length) throw new Error(`Missing invariants: ${missing.join(", ")}`);
  if (!brief.campaign?.crop) throw new Error("Missing campaign crop");
  return true;
}
Enter fullscreen mode Exit fullscreen mode

This does not inspect pixels; it makes the human review checklist deterministic. Pair it with a contact sheet showing the product master beside every variant.

5. Reject identity drift before polishing

At 200% zoom, check silhouette, cap, wordmark letters, label margins, glass tint, and highlights. Then review at thumbnail size for campaign hierarchy. Reject a beautiful scene if the product is no longer the product.

The two images above are real examples on the current Banana Pro AI Studio route. They illustrate separate production directions; they are not a promise that arbitrary packaging text will always be exact.

Use the exact Banana Pro AI Studio workspace to test one controlled variable at a time, and keep the invariant contract beside every approved export.

Top comments (0)