← All work
00 / BrandFlow Studio · Case study

A brand kit that drives its own pipeline.

BrandFlow Studio is a local-first desktop app that turns branded image and video generation into a node canvas. A skill researches the brand and loads it as working context before the graph runs, and it already produces finished campaign work.

BrandFlow Studio canvas
The canvas: brand kit → reference plate → prompt composer → diffuser → upscale, with a live inspector and run drawer.
01 / The problem

Prompts don't scale.

Writing prompts by hand is slow, inconsistent, and impossible to hand to anyone else. A brand's rules live in one person's head, and every asset becomes a fresh negotiation with the model. The output is only ever as reliable as the last thing you typed.

BrandFlow's answer: make the brand a reusable object, make generation a graph, and let the pipeline enforce the rules so a non-expert can re-run it and stay on brand.

02 / Architecture

A run is a graph, not a prompt box.

Every node in the library does one job. Brand rules are injected, prompts are composed from them, guardrails filter before the model runs, and a human review gate can block anything downstream.

BrandFlow node library and run states
Six core node types and five run states (idle · running · success · error · awaiting review). Note the Brand Context node enforcing rules like "no beach, no party, no club imagery", the same guardrail idea used to keep DEYA on brand.
Brand as data
  • Each brand is a pack: palette, voice, hard visual rules, per-SKU policy, negative list
  • Prompt Builder composes from it with resolved template variables like {{brand.palette.warm}}
  • Guardrails reject an off-brand prompt before spending a model call
Traceable and gated
  • Every output carries the graph, prompt and seed that made it
  • A review gate holds candidates for human approval and blocks downstream
  • Full run history: nothing is a one-off you cannot reproduce
03 / The stack

Real layers, not a wrapper.

A working desktop application with a clean boundary between the canvas, the execution graph, and the model providers.

Shell
Tauri (Rust), file I/O, dialogs, secure key storage
Canvas
React + React Flow, the node graph and inspector
State
Zustand, graph, runs, history, project and settings stores, fully wired and tested
Providers
Gemini image models and fal video, behind an adapter boundary the UI never imports
Nodes
brand-context · input · prompt-builder · still-model · motion-model · image-reference · review · save · plus landing-page-brief and page-plan for web concepts
Discipline
TypeScript strict, no any, no provider logic in the UI, no abstraction until two real use cases exist
04 / The proof

One garment, a whole campaign.

The tool earns its keep on finished work. The strongest run is Angle Design, a streetwear line generated as a coherent campaign: one brand defined once, then run across editorial, packshot and on-model streetwear. Eight frames, six settings, three models, two graphics, one consistent brand.

Editorial frame: model in Angle streetwear seated against driftwood on a beach
Editorial · driftwood beach
Packshot flatlay: Angle
Packshot · flatlay
Model facing away showing the back print, Royal Crescent, Bath behind
Streetwear · Royal Crescent
Model in Angle streetwear on a Cheltenham Regency street
Streetwear · Cheltenham
Model in Angle streetwear against an industrial unit
Streetwear · industrial
Model in Angle streetwear at a skate undercroft
Streetwear · undercroft
Back print shown against Stokes Croft graffiti, Bristol
Streetwear · Stokes Croft
Summer 25 graphic on the back of a hoodie at the undercroft
Streetwear · Summer 25 graphic

That consistency is the whole point. It is a system output, not eight lucky prompts.

05 / The skill layer

Research and context-loading happen before a node fires.

preflight-brand-check is the first of a small library of skills. It researches the brand, writes the findings into the schema section 02 describes, and loads that context into the graph so a run starts primed instead of blank.

What the skill does
  • Runs the research pass on a brand before any node fires
  • Writes findings into the same schema the nodes read: palette, voice, rules, negative list
  • Hands the primed context to the graph, so the prompt builder starts already on-brand
What that buys
  • No repeated research pass per run, the context persists
  • No agency retainer or one-off prompt-engineering job per campaign
  • A system that adapts as the brand pack grows, without losing what it already learned

Most side projects don't get custom software built for them. This one did, and it isn't a novelty: the aim is realistic, repeatable output a non-expert can re-run without re-deriving the brand from scratch each time.

06 / The walkthrough

Two minutes inside the canvas.

The highest-leverage asset: a real screen capture of the tool. A brand loads, a graph composes, a run streams and an output lands. The shot breakdown is below.

TimeShotPoint it makes
0:00–0:10The dark canvas, a DEYA graph wired left to rightThis is a pipeline, not a prompt box
0:10–0:30Click the brand-context node; inspector shows the rules and paletteBrand is a reusable object
0:30–0:50Change the SKU on the input node; the prompt recomposesOne graph, many outputs
0:50–1:10Run; the drawer streams; an output lands; the review gate appearsGeneration is inspectable and gated
1:10–1:30Cut to a grid of finished Angle Design and DEYA framesThe system produces real, on-brand work
07 / The split

Automated vs curated by taste.

Automated by the pipeline
  • The whole run graph, per brand
  • Brand-rule enforcement and negative lists
  • Run history and reproducibility
Curated by taste
  • Which locations tell the brand story
  • Model and framing selection
  • The final eight, for composition and consistency