Static ad pipeline · measured test · 4 August 2026

The image model was never asked to leave room for the copy

We have been trying to composite exact typography onto plates that were generated with an instruction to fill the frame. This is what changes when you ask the plate to make space first — and what still does not work.

Plates 8Seeds 4Model gpt-image-1.5/edit, input_fidelity high Measured spend $0.3468Composites 16

01The omission

The text-free branch of the production prompt does not ask for negative space. It asks for the opposite.

THIS AD CARRIES NO TEXT AT ALL. Render a pure product image… The photograph alone has to do the work.

That closing sentence pushes the model toward a self-sufficient, filled frame, and a separate PRODUCT SCALE AND FRAMING rule pins the product to roughly the same share of frame as the reference. So every plate in the earlier bake-off arrived as a complete photograph, and the compositor then had to hunt for clean regions that were never created.

The architecture already knows how to reserve space — there is a reserved-corner rule so a real logo can be composited without the model drawing one. It simply was never extended to copy. For this test that closing sentence is replaced (not appended to, which would leave the prompt arguing with itself) by a clause asking for one generous, even band, clearly light or clearly dark.

02Does the clause change the pixels?

Not a matter of opinion. A band scan slides a 20%-height window down the safe box and scores every candidate on evenness and value. “Usable” means spread ≤ 28, mean outside the 110–138 dead zone, and best available ink clearing 4.5:1.

Before — no space asked for

4 / 16
plates with a usable copy band. Median usable bands per plate: 0

After — space reserved

4 / 8
plates with a usable copy band. Median usable bands per plate: 4

The headline rate is the weaker number. The median is the real signal: it moves from 0 to 4 usable bands per plate. When the clause lands, the model does not leave one marginal gap — it opens most of the frame. When it misses, it misses completely.

03Seed, incumbent, plate, and both arms

Every row leads with the original seed, outlined in amber, so any claim about fidelity can be checked rather than taken on trust. Column two is what ships today: gpt-image-2 setting its own type. The two arms are the ones that measured best so far — gpt-5.4 directing from the plate, and gpt-5.4 shown gpt-image-2’s own finished ad and told to reproduce its type treatment.

Black leather shoe dark product

original seed photograph
ORIGINAL SEEDTop-down. Black leather, TWO touch-fastening straps with a vamp tab above them, tan interior lining, “UNIFORM-SHOE” printed inside the collar, black outsole, light grey ground.
gpt-image-2 setting its own type
the incumbent — gpt-image-2 set this type itselfwhat ships today. Square, because no 9:16 typeset render exists.
text-free plate with reserved band
the plate — space reserved has a usable bandbest band y=36%, mean 162, spread 21, 4/23 bands usable
Black leather shoe composited by gpt54
gpt-5.4 direct all type clears 4.5:1 0 inks corrected by the renderer
Black leather shoe composited by xfer
style transfer from gpt-image-2 all type clears 4.5:1 0 inks corrected by the renderer
text-free plate with reserved band
the plate — space reserved no usable bandbest band y=18%, mean 187, spread 64, 0/23 bands usable
Black leather shoe composited by gpt54
gpt-5.4 direct all type clears 4.5:1 2 inks corrected by the renderer
Black leather shoe composited by xfer
style transfer from gpt-image-2 all type clears 4.5:1 2 inks corrected by the renderer

PELAGIC Torrent Jacket

original seed photograph
ORIGINAL SEEDOn-model. Grey shell, full-length centre zip, chest pocket, PELAGIC wordmark visible. The seed contains a PERSON — the prompt rule under test requires that person to stay.
gpt-image-2 setting its own type
the incumbent — gpt-image-2 set this type itselfwhat ships today. Square, because no 9:16 typeset render exists.
old plate, no space reserved
old plate — no space asked forthe handicap: composed as a complete photograph.
text-free plate with reserved band
the plate — space reserved has a usable bandbest band y=40%, mean 102, spread 23, 14/23 bands usable
PELAGIC Torrent Jacket composited by gpt54
gpt-5.4 direct all type clears 4.5:1 1 ink corrected by the renderer
PELAGIC Torrent Jacket composited by xfer
style transfer from gpt-image-2 all type clears 4.5:1 1 ink corrected by the renderer
text-free plate with reserved band
the plate — space reserved has a usable bandbest band y=50%, mean 89, spread 26, 5/23 bands usable
PELAGIC Torrent Jacket composited by gpt54
gpt-5.4 direct all type clears 4.5:1 2 inks corrected by the renderer
PELAGIC Torrent Jacket composited by xfer
style transfer from gpt-image-2 all type clears 4.5:1 1 ink corrected by the renderer

Gymshark Flutter Tee

original seed photograph
ORIGINAL SEEDOn-model. Black cap-sleeve tee. Gymshark mark present. Its generated plates came back the DARKEST of any run (mean luminance 54–77).
gpt-image-2 setting its own type
the incumbent — gpt-image-2 set this type itselfwhat ships today. Square, because no 9:16 typeset render exists.
old plate, no space reserved
old plate — no space asked forthe handicap: composed as a complete photograph.
text-free plate with reserved band
the plate — space reserved no usable bandbest band y=62%, mean 36, spread 32, 0/23 bands usable
Gymshark Flutter Tee composited by gpt54
gpt-5.4 direct all type clears 4.5:1 0 inks corrected by the renderer
Gymshark Flutter Tee composited by xfer
style transfer from gpt-image-2 all type clears 4.5:1 0 inks corrected by the renderer
text-free plate with reserved band
the plate — space reserved no usable bandbest band y=62%, mean 48, spread 31, 0/23 bands usable
Gymshark Flutter Tee composited by gpt54
gpt-5.4 direct all type clears 4.5:1 0 inks corrected by the renderer
Gymshark Flutter Tee composited by xfer
style transfer from gpt-image-2 all type clears 4.5:1 0 inks corrected by the renderer

Gymshark Campus Crest Tee

original seed photograph
ORIGINAL SEEDOn-model. Printed crest graphic on the chest — an on-item graphic, which is exactly what the fidelity block forbids redrawing from imagination.
gpt-image-2 setting its own type
the incumbent — gpt-image-2 set this type itselfwhat ships today. Square, because no 9:16 typeset render exists.
old plate, no space reserved
old plate — no space asked forthe handicap: composed as a complete photograph.
text-free plate with reserved band
the plate — space reserved has a usable bandbest band y=48%, mean 103, spread 23, 11/23 bands usable
Gymshark Campus Crest Tee composited by gpt54
gpt-5.4 direct all type clears 4.5:1 2 inks corrected by the renderer
Gymshark Campus Crest Tee composited by xfer
style transfer from gpt-image-2 all type clears 4.5:1 0 inks corrected by the renderer
text-free plate with reserved band
the plate — space reserved no usable bandbest band y=52%, mean 112, spread 33, 0/23 bands usable
Gymshark Campus Crest Tee composited by gpt54
gpt-5.4 direct all type clears 4.5:1 0 inks corrected by the renderer
Gymshark Campus Crest Tee composited by xfer
style transfer from gpt-image-2 all type clears 4.5:1 0 inks corrected by the renderer

04The contrast finding that closed a false wall

A separate zero-cost test: four director specs applied across all 16 portrait plates, 192 type elements, local background luminance 48–218.

Near-black fallback #12161c

9
failures — every one at background 120–126, every one marginal at 4.30–4.49:1

Pure black fallback #000000

0
failures across all 192 elements and the entire luminance range

This corrects something written into the handoff as a hard limit. White clears 4.5:1 up to background ≈118.7; pure black clears it from ≈116.1. Those ranges overlap, so every background is coverable and no dead zone exists. A designer’s near-black only works from ≈126.3, which manufactures a gap at 118.7–126.3 — exactly where all nine failures sat. “No-scrim is not always satisfiable” was wrong: the constraint was satisfiable, the fallback palette could not reach it.

05Band scan, every plate

Before — plates with no space asked for

platemeanspreadusable bands
samples14/01115290/23none
samples14/02155290/23none
samples14/03153310/23none
samples14/04128280/23none
samples14/05139280/23none
samples14/06166340/23none
samples14/07102261/23usable
samples14/08139262/23usable
samples16/01129220/23none
samples16/02138241/23usable
samples16/03124250/23none
samples16/04157272/23usable
samples17/0164390/23none
samples17/0250340/23none
samples17/0334310/23none
samples17/0443300/23none

After — space reserved

platemeanspreadusable bands
campus-011032311/23usable
campus-02112330/23none
flutter-0136320/23none
flutter-0248310/23none
pelagic-011022314/23usable
pelagic-0289265/23usable
shoe-01162214/23usable
shoe-02187640/23none

06What is still wrong

Half the new plates still have no usable band. The clause is not reliably obeyed. The failures are specific and readable: the Flutter plates came back very dark but busy (spread 31–32), campus-02 landed at mean 112 — inside the dead zone the clause explicitly warns against — and shoe-02 put its quietest band at spread 64, which is no band at all.

07The decision

Exactness is no longer the question — composited copy is exact by construction, and the renderer now guarantees 4.5:1 on any background. The question is entirely taste: read down each row and decide whether the composited arms are ones you would ship next to what gpt-image-2 produces on its own.

If they are, the work that remains is making the reservation clause reliable — it is obeyed about half the time, and the misses are measurable before a single peso of typesetting is spent, which means a plate without a usable band can simply be regenerated.