Back to projects

Adhance

Ongoing

An agentic pipeline that takes a text brief and returns researched ad concepts alongside multiple art-directed ad images. Claude does the reasoning and the web research, an image model does the rendering, and a typed contract sits between them so the two halves cannot drift apart.

  • Python
  • LLMs
  • Agents
  • Image generation
  • Claude
  • Turns a plain text brief into researched concepts and finished, art-directed ad images.
  • Orchestrates Claude for LLM reasoning and web research together with an image-generation model.
  • A typed contract between the stages, so no step parses another step's prose.

The idea


Going from a brief to an ad is not one task, it is a chain of them: understand the product, find out what is actually true about the market it is entering, decide on angles worth running, and only then art-direct an image for each. Each of those steps needs different capabilities, and doing them in one prompt produces generic output that could be for anything.

Adhance splits the chain and gives each step the tool it needs — research to a model that can search, concepting to a model that can reason, rendering to a model that can draw.

How it works


  • A text brief goes in — the product, the audience, whatever constraints exist.
  • Claude researches the brief against the web, so concepts are grounded in what is actually out there rather than in the model's priors alone.
  • The research is turned into distinct ad concepts, each with the angle it is taking and the art direction it implies.
  • Each concept becomes a prompt for an image-generation model, so the visual follows the concept instead of being decorated after the fact.
  • Every stage hands off through a typed contract — the research step's output is a declared shape the concept step consumes, and so on down the chain.

What I learned


The typed contract is the load-bearing part. In a multi-stage agent pipeline, free-form text between stages means an error at step one arrives at step four as something that still looks plausible and is quietly wrong. A declared shape at each boundary makes failures land where they happen.

The other thing is that art direction has to be decided upstream of the image model, not inside it. Asking for an image of a concept gives you the model's default aesthetic every time; deciding the direction as part of the concept and passing it down is what makes several outputs read as several distinct ideas rather than one idea rendered several times.