What actually costs time
A campaign is rarely one asset. It is a hero, six crops, three languages, a set of vertical stories, a banner pack and whatever the retail partner asks for on Thursday — and every one of them has to carry the same product, the same colour and the same claim.
Generated one at a time from a re-typed prompt, they drift. The bottle gets a slightly different label. The model wears a different jacket. The light moves three degrees. None of these are visible in isolation; all of them are visible when the set is laid out on one page in front of a brand manager.
Catching that is a review cycle. Fixing it is a re-run that may drift somewhere else. And the second round of client changes lands on a set that has already been patched once, which is where a two-day job becomes a two-week one.
1 hero
What the brief describes
40+ assets
What actually gets delivered
2–4 rounds
What each of them survives
How the work runs here
The same campaign, built as a graph.
Put the product in one node
The pack shot, the talent look and the brand treatment each become a node. They are inputs, not sentences you retype and hope you retyped identically.
Connect them to the hero
Drag from each reference to the hero frame. The hero now depends on them, which is the fact the whole rest of this relies on.
Branch the sizes
Crops and aspect ratios hang off the hero rather than being separate projects. A 9:16 story and a 1:1 tile are siblings that share a parent, not two documents somebody has to keep in sync by hand.
Add the languages
Locale variants branch the same way. What is shared stays shared; what differs is stated once, in the branch where it differs.
Take the client change
A new pack shot replaces one node. Everything connected to it re-runs in dependency order. Everything not connected to it does not move — which is the part that makes round three survivable.
What it replaces, and what it does not
| Stage | Before | With a graph |
|---|---|---|
| Concept | Mood boards and stock comps | Explore the actual product in the actual treatment, early |
| Variations | A prompt retyped per size, results collected in a folder | Branches off one parent, framing shared by construction |
| Revisions | Re-run everything, hope nothing else moved | Change the node, re-run its dependents only |
| Approval | "Which version did they sign off?" answered from memory | Run history attached to the frame that produced it |
| Final delivery | Your existing pipeline | Unchanged — this hands off, it does not replace |
Where the seams are
Exact brand colour is not guaranteed by a generative pass. Treat the output as a plate and correct it where you already correct things; the canvas is built to hand off cleanly, not to own the last mile of colour management.
Faces and likeness are a rights question before they are a technical one. If a real person is being represented, that requires their agreement, and no tool grants it on your behalf.
Questions from marketing teams
Can we use the output in paid media?
Yes — what you make is yours to use commercially. Individual model providers have their own terms about their outputs, and where one imposes a restriction that matters we surface it rather than burying it.
How do we keep an exact brand colour?
You do not, in the generative pass. Get the composition and the light right here, then correct colour downstream where you have measurement and a profile. Anyone promising you Pantone accuracy out of a diffusion model is selling something.
Our product has fine detail — a logo, a label. Does that survive?
Partially, and it is the honest weak point. Use the product reference to hold form, framing and light, and composite the label or logo cleanly where legibility matters. That is a normal pipeline step, not a workaround.
Can two people work on the same campaign?
Shared cloud projects exist. Simultaneous editing of one graph by two people is on the roadmap under Now; today, split by branch rather than by editing the same node at the same moment.
Is our brief used to train anything?
No. Your projects are not training data, and that is the default rather than a setting.