Project · An AI image generation system I built for ecommerce

Real products. Generated worlds. Same result every time.

tldr; I designed and built a system that turns one written product brief into consistent, production-ready ecommerce imagery, running the latest AI image models through their APIs. The system, not any single image, is the portfolio piece.

Every image on this page came out of that system: a product lock written once and pasted verbatim into every prompt, reference plates attached to every generation, a realism block that rotates exactly one human flaw, and a log that records every prompt, ratio, attempt and pick by ID. An automated runner I wrote sends each brief to the newest image models over their APIs and files the result under its ID, so the full set of 90 came back in under two hours with one person at the controls. The products are fictional and fully generated so nothing here trades on a brand I did not shoot for. Every image had a stated job before it was made.

90finals kept from 94 generations
< 2 hrsfor the full set, 1 operator, automated runner
3 × 6products held across 6 environments each
5aspect ratios, copy zones planned first
~20 sper image, latest image models via API

01 Consistency

One product, six worlds, three times

The primary problem in production AI imagery is not one good image, it is the tenth one matching the first. Each row is one generated reference plate carried into 6 scenes by attaching the plate and repeating the product lock word for word. Shape, label, colour and scale hold across the row.

Fragrance

glass, amber liquid, black wood cap, cream label
Perfume bottle on a white studio backdrop
A01Studio white · 1:1
Perfume bottle on a marble counter in morning light
A02Marble morning · 3:4
Perfume bottle on black slate under one hard light
A03Dark stone · 3:4
Perfume bottle on a concrete ledge in afternoon sun
A04Outdoor concrete · 3:4
Hand holding the perfume bottle
A05In the hand · 3:4
Perfume bottle on a home shelf among objects
A06Home shelf · 16:9

Footwear

knit upper, grey suede overlays, gum outsole
Sneaker on a white studio backdrop
A07Studio white · 1:1
Sneaker on a marble counter
A08Marble morning · 3:4
Sneaker on black slate
A09Dark stone · 3:4
Sneaker on a concrete ledge
A10Outdoor concrete · 3:4
Hand holding the sneaker
A11In the hand · 3:4
Sneaker on a wooden shelf
A12Home shelf · 16:9

Skincare

frosted glass jar, brushed aluminium lid, sage band
Skincare jar on a white studio backdrop
A13Studio white · 1:1
Skincare jar on marble
A14Marble morning · 3:4
Skincare jar on black slate
A15Dark stone · 3:4
Skincare jar on a concrete ledge
A16Outdoor concrete · 3:4
Hand holding the skincare jar
A17In the hand · 3:4
Skincare jar on a wooden shelf
A18Home shelf · 16:9

02 Placements

The copy zone stays empty until the type arrives

Hero, feed, story and sale creative are briefed with the zone first. The render leaves it plain and evenly lit, the focal point sits where the crop will keep it, and the headline, price and call to action are placed afterwards. Top row: raw renders with the zone reserved. Bottom row: finished creative.

Zone reserved

raw renders, nothing added
Site hero with product right and empty wall left
E01Site hero, left zone · 16:9
Mobile hero with empty wall above the product
E02Mobile hero, zone above · 3:4
Feed ad with product low and empty top third
E03Feed ad, top third · 1:1
Story ad with product in the middle third
E04Story, top and bottom · 9:16
Sale creative with one red accent
E05Sale, single red accent · 3:4
Black Friday dark set with bottom zone in shadow
E06Black Friday, bottom zone · 1:1

Finished creative

headline, price, CTA placed where the render left room
Homepage hero for fragrance with headline
H01Homepage hero · Fragrance · 16:9
Homepage hero for footwear with headline
H02Homepage hero · Footwear · 16:9
Sale ad for the sneaker
H04Meta feed, end of season · 1:1
Story ad for the fragrance on dark
H05Story ad, launch · 9:16
Review ad for skincare with quote
H06Review ad · Skincare · 1:1
Collection tile for fragrance
H10Collection tile · Fragrance · 1:1
Collection tile for footwear
H11Collection tile · Footwear · 1:1

03 Category heroes

Product page conversion across categories

Same system, different materials: glass, foil, denim, leather, steel. Each brief named the surface, the light and the one detail the shopper needs to see.

Serum dropper with a drop about to fall
B01Serum dropper · 3:4
Perfume bottle on a black mirror with smoke
B03Fragrance on mirror · 3:4
Chocolate bar snapped in two
B06Chocolate, macro · 1:1
Stack of folded jeans
B08Denim stack · 1:1
Tan leather tote on a stool
B10Leather tote · 3:4
Steel watch on a wrist
B13Watch on wrist · 3:4

04 Lifestyle

The customer sees their own life

People with real skin, rooms with real clutter, one flaw per frame. The product stays sharp and never hidden by more than a third.

Perfume sprayed on a wrist in backlight
C02Spritz on the wrist · 3:4
Coffee pour-over at a breakfast table
C03Sunday breakfast · 16:9
Sneakers on a city curb
C04Sneakers on a curb · 3:4
Tote bag at a market
C06Tote at the market · 3:4
Watch on a wrist pouring coffee
C08Watch, pouring coffee · 1:1
Mug on a rainy windowsill
C09Mug and rain · 3:4
Dog eating from a steel bowl
C11Dog bowl · 1:1
Lit candle at dusk
C13Candle at dusk · 3:4

05 Feature explainers

Back the claim

Each image supports one product claim on the page. The claim is written under it because that is what the image is judged on.

Water beading on dark fabric
D01Waterproof · 1:1
Split of dry and hydrated skin
D03Hydration, split · 1:1
Sneaker midsole compressed mid stride
D04Cushioning · 3:4
Cold brew bottle sweating in the sun
D06Cold brew, condensation · 3:4
Leather bag new and with patina
D07Durability, 10 years · 1:1
Skincare jar with ingredients laid out
D08Ingredients · 16:9

06 UGC

Performance creative that reads as a customer's phone

The camera line changes to a phone, on-camera HDR and honest clutter are allowed, and the product still matches its plate.

Sneaker unboxing on a bed
F01Unboxing on the bed · 3:4
Skincare jar on a messy desk
F03Desk flat lay · 1:1
Perfume on a nightstand at night
F04Night mode nightstand · 9:16
Skincare jar in a car cupholder
F05Car cupholder · 3:4
Sneakers on a gym bag
F06Gym bag · 3:4

07 Interface

How the image behaves inside the layout

An image is finished when it holds in the product page, the phone hero, the grid and the billboard, not when it looks good alone.

Laptop showing a product page
G01Laptop PDP · 16:9
Phone showing a mobile hero
G02Phone hero · 9:16
Phone showing an Instagram grid
G05Instagram grid · 1:1
Billboard at dusk showing the hero
G04Billboard at dusk · 16:9
Contact sheet with one frame circled
G06Contact sheet, the pick circled · 16:9

08 Process

The system is the portfolio piece

Everything above came from 4 text blocks and a runner I built. The blocks are pasted, never paraphrased. The runner picks the model, sets aspect ratio and references per prompt, calls the model's API and writes the log. Swap the model and the system stays the same, which is how it keeps up as newer models ship.

1. Product lock, written once, pasted verbatim

Product: the perfume bottle in the reference images, reproduced exactly. Shape: tall rectangular flacon, 12cm, shoulders slightly rounded, heavy thick base. Material: clear glass, amber liquid at 90 percent fill. Cap: black lacquered wood cylinder, matte. Label: small cream paper rectangle centred on the front, thin black border, text unreadable. Same scale, colour and proportion in every image. Nothing added to the product.

2. Realism block

Shot on a Canon EOS R5, 50mm or 100mm macro prime, f/5.6 to f/8, ISO 100, colour-accurate raw conversion, gentle S-curve, no HDR. Studio: one large softbox key plus a white bounce. Location: natural window light shaped with one bounce. True white balance. Real surface texture, real reflections in glass and metal, real shadows with soft edges. No CGI sheen, no plastic skin, no oversaturation, no vignette filter, no lens flare.

3. One flaw only, rotated

a. slight highlight clipping on the window   b. one prop a little off its mark
c. faint fingerprint on glass or metal       d. a crumb, petal or thread on the surface
e. camera a degree off level                  f. a water ring where a glass stood
g. one light left on in daylight              h. a corner of backdrop paper visible
i. a stray hair on fabric                     j. focus a hair in front of the label

4. Negatives, appended to all

No text, no watermark, no extra copies of the product, no warped label, no floating objects, no melted edges, no wrong proportions, no cartoon, no illustration, no render look.

How a run works

  1. Reference plates are generated first (P01 fragrance, P02 sneaker, P03 skincare) and stored once as the reference set for the whole run.
  2. A script writes SHOTS.md: one heading per image with ID, ratio and title, a REFS line, then lock + scene + realism + flaw + negatives.
  3. The runner I wrote reads each brief, selects the latest image model, sets the ratio and a single output, attaches the named plates, calls the model's API and saves the native-resolution result as img/ID.jpg.
  4. Any prompt the model filters is timed out and reworded. IDs that already have a file on disk are skipped, so a run can be stopped and resumed at any point.
ElapsedIDRatioRefsResult
0:00:00P011:1noneplate saved 1024x1024, 18 s
0:08:17A011:1P01saved, run of 79 begins
1:22:54B093:4nonesaved 896x1200, 20 s
1:24:17H0116:9P01saved 1376x768, 34 s
1:28:43H084:3P02filtered, timed out, reworded
1:35:31H111:1P02saved 1024x1024, 31 s

94 generations, 3 filtered, 90 kept, under two hours end to end. Full log and SHOTS.md available on request. Latest image models · API · Automated runner

What I would do for a real product

Photograph 3 clean angles of the actual item, write the lock from the photos and the spec sheet, generate 4 per prompt on the strongest current model, keep the one that matches the plate, and publish the log with the deck. The same system, with the client's product held constant.

Want this run on your product?

Send three clean angles and a spec sheet. You get the plate, the lock, the finals and the log.

Get in touch → More projects →

Contact

Let's build something together. Reach out anytime.