Brand Studio
Agent skill · Python runtime · MIT

Brand assets as a pipeline, not a lucky prompt.

Ask an agent for a logo and you get one good image and no memory of why. Brand Studio makes the whole thing repeatable: it reads what your repo has already settled on, hands that as structured weight to whichever producer you've bound, puts every candidate in front of humans, and seals only what you accept.

The loop Develop and settle are one closed circuit — settled assets become the next round's weight.

01 Brand state

Theme tokens, references, and everything previously accepted — read before a single pixel is planned.

02 Generate

Structured brand weight goes to the bound producer skill and your configured backend. In parallel, one subagent per deliverable.

human gate

03 Review

A round board — keep / maybe / drop, with notes. Share it as one link and read the verdicts back.

04 Settle

Keepers are sealed into approved assets with a manifest and checksum. Nothing accepted is ever lost.

settled assets feed the next round's brand weight

It curates. It does not produce.

That one sentence is the architecture. Generation belongs to producer skills and rendering backends you choose; Brand Studio owns the durable, deterministic, human-gated spine between them — which is exactly the part that's hard to keep consistent across a year of asset requests.

The runtime does

  • Resolve paths and roots from one metadata file
  • Validate theme.md frontmatter and campaigns
  • Export structured handoff context — brand weight, deliverable spec, target path
  • Dry-run so you see the plan before spending credits
  • Settle accepted candidates into approved assets, manifests, checksums, portfolio state

The runtime never

  • Calls a model or renders pixels itself
  • Holds your credentials — auth stays in the runner's env
  • Treats a built-in prompt as the source of truth
  • Auto-installs or silently swaps a producer
  • Updates accepted state without an explicit human accept

Multimodal by default

Validation, handoff, settle and reporting dispatch on modality — never on a hard-coded image-extension list. Text is a first-class asset, which is why release notes and brand-tone copy settle the same way a logo does.

capability → producer

You bind the producers

image, video, logo, copy, slide, social — each maps to a skill you already have installed. Brand Studio ships a recommendations catalog: names and links, not vendored implementations.

skills ≠ backends

Prompt-craft and pixels are separate axes

A producer decides what the prompt is; the declared backend decides what renders it — your local codex exec, an API, an MCP server. Swap either without touching the other.

weighted inputs

Brand weight isn't one blob

Org standard, product theme, sibling-repo assets, the accepted portfolio — distinct inputs, named and assembled into the context a producer receives. That's why round 4 still looks like round 1.

release marketing

Changelog in, campaign out

It reads CHANGELOG.md, summarizes releases into an editable copy.yaml, and turns that text asset into a normal campaign — so the release graphic is about the release, not a generic hero.

Review is a link, not a meeting

Candidates go up as one board. Reviewers open it, decide, submit. The agent reads the verdicts back and settles the keepers — no screenshots in chat, no copy-paste shuttle.

artifact-share The transport behind those boards, split out as its own thing. Publish an HTML page, get the verdicts back as JSON. Bundled here as a submodule.
share.sma1lboy.me →

Install

The skill payload lives in skills/brand-studio/. Fork first if you want your own org defaults, producer preferences, and templates to travel with it.

# clone (with the artifact-share submodule) $ git clone --recurse-submodules https://github.com/Sma1lboy/brand-studio # install the skill payload for your agent $ cp -r brand-studio/skills/brand-studio ~/.claude/skills/ # then, inside any product repo: $ $brand-studio init this repo from the attached brand images $ $brand-studio create a campaign for a launch poster, dry-run first $ $brand-studio record the accepted banner into visual asset state

For real team use, fork it: treat Sma1lboy/brand-studio as the generic upstream and your fork as the shared source of truth for metadata, policy, and producer preferences. Product repos pin the fork through a submodule or tag — product assets always stay in the product repo, never in the skill repo.