Case study · CreativeLab

I didn't build a prompt box. I built a system.

CreativeLab is a node-based tool I built in React that turns brand data — pack, palette, rules, channel specs — into channel-ready lifestyle imagery through Gemini and Veo. This is the part a gallery can't show: the problem I was actually solving, the dead ends, the architecture decision at the heart of it, and what it changed.

Role
Designed & built it end-to-end
Stack
React · React Flow · Gemini · Veo
Read time
7 minutes
CreativeLab — the full node-based canvas: brand context on the left, a graph of Prompt, Reference, Generate, Iterate, Output, and Video nodes wiring a One A Day gummy from reference to Veo animation
CreativeLab v0.1. Brand context is loaded once on the left; the graph on the right runs Reference → Generate → Iterate → Output → Video. The designer wires the pipeline; the graph runs it.
01 · The problem

Brand-safe lifestyle imagery didn't scale. The math was the problem.

For the last seven years I've built brands across healthcare. The recurring bottleneck was never taste — it was volume against a compliance bar.

Take one launch. One A Day alone spans Women's, Men's, Kids, Prenatal, Teen, and 50+ — each in gummy and tablet, each needing lifestyle imagery for Amazon, retailer platforms, brand .com, social, print, and the trade-show booth. Multiply segment × format × channel and you're staring at hundreds of unique frames, every one of which has to be on-palette, on-pack, and legally clean before it ships.

The two ways to make those frames both broke at scale. A photoshoot is days of lead time and five figures per setup — you can't reshoot because a retailer wants a squarer crop. And the AI tools that were supposed to help were prompt boxes: type a paragraph, roll the dice, get something beautiful and slightly wrong. Change one word and the whole image changes. There was no way to hold the brand still while you moved one variable.

Everyone was doing prompt-box roulette — gorgeous output, zero guarantees, and no way to say “keep everything, change only this.”

That was the real tension I set out to solve. Not “make images faster.” Make images fast while guaranteeing the brand survives the trip — and make the control legible enough that a designer, not an engineer, drives it.

02 · The insight

The system, not the prompt. Make brand the environment, not a sentence.

The unlock was reframing what a designer should be touching. In a chat interface, the brand lives inside the prompt string — buried in prose, re-typed every time, impossible to hold constant. That's backwards. Brand isn't a sentence you write; it's the environment the work happens in.

So CreativeLab loads brand context once, at the top of the canvas — palette, pack references, a brand toolbox — and every node inherits it. What the designer actually manipulates is a graph: composable nodes wired together, each one a small, legible decision. Reference in. Generate. Look. Change one thing. Pin the keeper. Animate it.

Choosing a node graph over a chat box was the core design-technologist decision, and it wasn't cosmetic. A graph makes the pipeline visible and re-runnable. You can see where brand enters, where a choice was made, where the compliance check sits. You can swap a reference and re-run just the tail. It turns “generate an image” from a slot-machine pull into a wiring diagram a designer can reason about.

Brand context loaded once — every node inherits it
Reference
Brand in
Pack shot, palette, and rules enter as structured inputs — not as prose in a prompt.
Generate
Gemini
Nano Banana 2 renders variations against the reference, not from scratch.
Iterate
Delta only
The reference stays anchored; only your delta prompt re-rolls. Keep everything, change one thing.
Output
Pin the keeper
Composite and lock a channel-ready still. The compliance check lives here.
Video
Veo
Wire the keeper frame into a Veo node and the still becomes motion.
The canvas — one graph, brief to motion
CreativeLab canvas close-up: Prompt and Reference nodes feed a Generate node running Gemini Nano Banana 2, into Output, into an Iterate node with a delta prompt, into a final Output and a Veo Video node
Reference in, motion out. A real graph for One A Day Women's 50+ Multi Gummy: the pack reference feeds Generate, an Iterate node carries a delta prompt (“overhead view, more dramatic lighting”), and the pinned keeper wires into a Veo node. Every node is a decision you can see and re-run.
03 · What didn't work

The first version failed in exactly the way healthcare can't afford.

The honest part. My first pass was closer to everyone else's prompt box — and it broke on the one thing regulated brands can't compromise: the pack.

The generations were gorgeous and wrong. The model would render a beautiful scene and quietly mangle the label — “Nxtritional Support,” a garbled serving line, a logo lockup that drifted a few degrees off. In consumer healthcare, that's not a cute artifact; it's the thing legal rejects and the reason the whole approach gets thrown out. A tool that generates non-compliant packaging faster is worse than no tool.

The tell — beautiful, and off-brand
First generation of the Women's 50+ gummy — clean studio scene but the pack copy reads 'Nxtritional Support', an AI text-drift error
Gen v1. Look closely: the pack copy has drifted. Studio-clean, legally unusable.
Iteration with warm kitchen light — improved mood, but serving text still garbled
Iterate, warm. Better mood after a delta prompt — but re-rolling still nudged the label.
Iteration with dramatic overhead lighting on a dark ground
Iterate, dramatic. A single delta — “overhead, darker” — without re-rolling the whole frame.

Two failures taught me the architecture. First: a prompt string can't guarantee a pack. That pushed pack and brand rules out of the prose and into structured reference inputs the model treats as fixed — and it's why the real pipeline ends on an Output node where the compliance check lives, not on whatever the model happened to spit out.

Second: re-rolling changed everything at once. Nudge the lighting and you'd lose the composition you liked. So the Iterate node became a mask-free global re-roll that keeps the reference anchored and applies only the delta — keep everything, change one thing. For tighter work, a Modify path does brush-masked local edits. That single behavior — deltas over re-rolls — is what turned the tool from a slot machine into an instrument.

I cut a lot to get there: a freeform chat mode, a “surprise me” button, an early auto-compositor that fought the designer. None of them respected the real constraint. The tool got smaller and sharper the more I understood the failure.

04 · Still to motion

The last node turns a keeper frame into a shot.

Once a still is pinned and clean, the designer wires it into a Video node — Veo, eight seconds, 720p — and the frame animates. No handoff to a motion team, no re-briefing, no losing the brand between tools. The chain that started at a pack reference ends as a moving shot, all inside one graph, in minutes.

The video node — Veo, wired to the keeper
Close-up of the Iterate, Output, and Video nodes — the pinned still wired into a Veo 3.1 video node rendering an 8-second clip
Wiring the shot. The pinned Output feeds a Veo node. Image in, motion out — the tail of the same graph.
The output. Women's 50+ Multi Gummy — Veo animation from the Gemini-generated keeper. Nothing photographed.
Veo frames — the shot, decomposed
Veo animation frame 1
Veo animation frame 2
Veo animation frame 4
Veo animation frame 5
05 · Impact

Days to minutes — and a practice the team could keep.

The headline is honest and it's the one that matters: a brand-compliant lifestyle frame that used to take days of shoot-or-source now takes minutes on the canvas.

Days min
Time to a brand-compliant lifestyle frame, shoot-or-source vs. canvas.
1 graph
Reference to still to motion in a single pipeline — no tool-to-tool handoff.
NACDS '26
Same pipeline ran at trade-show scale for One A Day's booth panels and heroes.

Beyond speed, two things mattered more for how the work read. It stayed on-brand by construction — brand context is the environment, and the compliance check is a node, so “fast” never meant “off-brief.” And it was legible enough to hand off: I taught the practice to my team in a talk called “AI for Designers,” and designers — not engineers — could wire graphs themselves. The same pipeline that made a single hero also produced One A Day's NACDS 2026 booth panels and close-up heroes.

I'm deliberately not inflating this. The win isn't a made-up multiplier; it's that a regulated brand got a repeatable, compliant, designer-driven way to make lifestyle imagery at the volume the digital shelf actually demands.

06 · What's next

Where I'd take it.

ACompliance as a first-class node.

Right now the compliance check is a discipline at the Output stage. The next version makes it a real node with brand rules encoded — palette tolerances, logo geometry, required legal copy — that flags a frame before a human has to catch a mangled label. The tool should know its own brand bar.

BShareable graphs as brand templates.

A wired graph is institutional knowledge. If a great “kitchen hero” pipeline could be saved and handed to a teammate as a starting point — brand context and all — the tool becomes a way a team accumulates craft, not just a faster way to render.

CThe graph as the brief.

The most interesting direction: the graph itself becomes the deliverable a stakeholder reviews. Instead of approving 200 finished frames, you approve the pipeline — and trust it to run. That's a different relationship between design, review, and generation, and it's the one I'd want to keep pulling on.

AI is just the newest material on my bench. The instinct that pulled me from graphite to oil to clay to 3D pulls me here — and increasingly, to building the tool that makes the work.