Scenario Brand Kit
SkillDev toolsLets your agent create a full brand kit including logos, colors, fonts, and design templates.
Available today. Use it from your connected AI after setup.
No other account needed.
Add ahel to your AI once: Claude, ChatGPT, Cursor, Claude Code or Codex. Then ask it to use this.
Then ask your AI: use the Scenario Brand Kit skill
About this skill
Use when building a visual identity or brand kit with Scenario: a logo, wordmark, or icon as editable SVG, a color palette and typography spec, logo variants (mono, reversed, favicon), and brand applications like social templates, avatars, banners, or merchandise mockups. Also for a rebrand or refre
What this skill tells your AI
The instructions your AI receives, as published by scenario-labs/skills in skills/scenario-brand-kit/SKILL.md and read by ahel’s review.
Overview
An identity is decided, then rendered. Palette and typography are choices written into a spec before any run; the logo is generated once as a real vector and reused everywhere; every application references the approved mark instead of re-imagining it. Connection and the core loop: see the scenario skill. Finding the direction when nothing is decided: scenario-inspiration. Image runs and reference wiring: scenario-image. Exact taglines and CTAs on applications: scenario-text-overlay. Per-placement sizes: scenario-formats. Gating contract: scenario-asset-analysis. If a sibling skill named here is missing from your available skills, ask the user to install it (npx skills add scenario-labs/skills --skill <name>); unattended, proceed from tool schemas and flag the gap.
Quick reference
| Need | Route |
|---|---|
| The spec | Written first, by you with the user, before any generation: contents under The spec sheet |
| Logo, native | recommend capability="txt2img", the prompt demanding a real editable SVG and not a raster: that clause, not the capability, is what surfaces the vector generator; skip a style member ranked first (it refuses a run without style inputs, see Icon strip) for the plain SVG sibling, found by search on the same name |
| Logo, traced | An existing raster mark: recommend capability="img2img", the prompt saying trace to editable SVG, do not regenerate |
| Gate | asset_analyze the mark with the spec via text_inputs; a drifted wordmark is re-run, never patched |
| Variants | asset_get the mark, save its url (curl -L) for the stored SVG, recolor locally, upload_asset each variant |
| Applications | recommend with capability="img2img", approved mark as reference, spec hex values in the prompt, one placement per run |
| Icon strip | The vector generator's style members (search, filters={"tags": ["style-consistency", "svg"]}; its plain SVG members expose no image field): raster renders of the mark (asset_download with format png returns a raster of the stored SVG) as styleReferenceImages on the first icon, then that job's style_id (job_get, verbose=true, output metadata) as styleId on the rest, never both |
| The board | model_scenario-compose-image (first-party compositor, id fixed): mark, swatches, specimen, applications as positioned layers, labels via scenario-text-overlay |
| File the kit | collection_create before the first run, collection_add_assets each keeper as it lands, asset_update for each one's role and rule |
The spec sheet
One short document anchors every run and every gate: four to six hex values, each with a role (primary, ink, paper, accent), the accent recurring on every asset because a second accent reads as none; two type families with weights and their jobs (display, body); one voice line, short and specific rather than a slogan; the logo's clear space and minimum size; three "never" rules (never stretch, never recolor outside the palette, never set the wordmark in another face). Prompts name hex values from it verbatim, and every gate hands its full text to asset_analyze through text_inputs (a paraphrase drops exact spelling and hex roles). Type comes from families the destination can load (widely available or licensed): a generated "font" is a picture of one, so real text is set by scenario-text-overlay in the spec's family. The wordmark is the exception: it is drawn once into the mark, gated letter by letter, and reused as artwork from then on.
Worked example: an identity for a new game studio
- Spec first. Name the category, the audience, the promise and the core metaphor before anything is written down, since step 2's mark comes out of that metaphor. The brief names a mood;
scenario-inspirationturns it into a chosen direction when it names nothing. Write palette, type, and rules down before any generation and confirm with the user (unattended: take the brief's constraints, decide the rest, mark it provisional). Create this run's collection before the first generation (collection_create, catalog write lane,nameonly), thencollection_add_assetseach keeper as it lands; its returneditemCountis the receipt. - Mark:
recommendwithcapability="txt2img"and a prompt demanding a real editable SVG and not a raster;model_schema_getthe pick. Prompt one idea about what the studio makes, reduced until it still reads in one color at favicon size: flat closed geometry, few colors, the spec's hex values, the studio name for the wordmark. Say what to avoid or the model reaches for its defaults (gradient mesh, sparkles, an unmotivated bolt, a globe). A pick that rejects a schema-conformant call is spent: take the next option rather than debugging it, since a schema can mark a field optional that the model requires. Three candidates, each on a different construction method and combining no more than two of them, so the set spans an axis rather than reseeding one idea: monogram fused with the metaphor, the product's verb as a symbol, two ideas reduced to one, negative space carrying a second reading, geometry on a stated grid. Passpriority="cost"on this round, since two of the three are discarded andrecommendotherwise defaults to the quality pick. Onemodel_runper candidate,jobs_wait,asset_display, and let the user pick (unattended: gate all, keep the best pass). - Gate the pick with
asset_analyze(write lane, contract inscenario-asset-analysis), the spec viatext_inputs: name read letter by letter, geometry closed and centered, no resemblance to an existing mark. It gates the render, not the file (scenario-asset-analysis), so the palette check is a local parse of the SVG's fills. Fail means re-run with the prompt tightened (jobs_waitthe new job before re-gating), never an edit of the drifted output. - Variants:
asset_getthe winning mark and save itsurlwithcurl -L, which serves the stored SVG verbatim (asset_downloadconverts to raster,formatdefaulting topng). Recolor fills to make mono, reversed, and paper-background variants;upload_asseteach (kindimage). One mark, colorways as data. - Applications:
recommendwithcapability="img2img", skipping a pick whosewhen_general_betterorcaveatsname the placement at hand; wire the approved mark as reference exactly as the schema says (an array only underarray: true; a pick whose schema has no image field cannot hold the mark, so take the next option). Onemodel_runper placement (avatar, banner, printed card or badge), each prompt subordinating the scene to the mark and barring lettering or fake UI from the frame (a plate shows the mark in place, not the product working): "the exact logo from the reference, unaltered, centered on...".jobs_waitthe runs, then gate each against the spec; text the gate cannot resolve at output size is unverified, not passed (upscale and re-gate, or flag it), and a scene that mangled the mark goes back through the sameimg2imgcall, the prompt naming the defect with the approved mark as ground truth. - Exact text (tagline, handle, URL) is composited by
scenario-text-overlayin the spec's type, never prompted into the plate. Placement sizes derive perscenario-formats. - Board: the kit is judged as one picture.
model_scenario-compose-imagetakes the mark, palette swatches, a type specimen, the voice line set large, an image-direction plate (one more run), an icon and badge strip and two applications as layers placed byx,y,anchorandzIndexon acanvasMode: "custom"canvas, plus a construction panel drawn locally from the master SVG, never generated (a generated diagram shows geometry the mark does not have), panel labels rendered byscenario-text-overlay(layer fields and traps:scenario-video-assembly). Give every layer an explicitwidthandheight, the mark's larger than any other, each withfit: "contain": empty is documented as native size and is not reliable, and setting both dimensions activates the defaultfill, which stretches and breaks the spec's own never-stretch rule. Size the canvas for the smallest caption rather than for a screen (it takes up to 7680x4320, and a 1920x1080 board left palette captions near ten pixels tall), and render each layer from the master SVG at the pixel size that layer occupies instead of reusing one raster everywhere: the vector master exists so that no layer is ever upscaled.upload_asseteach render before composing, since a layersourcetakes an asset, not a local file. - The collection, filled as the run went, is the kit: the SVG master, every variant, every application, the board. Write each asset's role and rule into its
asset_updatedescription, and deliver the spec sheet as the kit's usage page.
Common mistakes
- Generating applications before a spec exists: without written hex values and rules there is nothing to gate against, and the kit drifts apart asset by asset.
- Re-imagining the logo per application instead of referencing it: ten cousins, no identity. The mark is generated once, then reused.
- Upscaling a raster of the logo: the vector already scales; the SVG stays the master.
- Recoloring by regenerating: fills and strokes in an SVG are text edits; a regeneration changes the geometry too.
- Passing a wordmark that looks right at thumbnail size: letterform drift hides there; the gate reads it back letter by letter.
- Treating palette hex values as a vibe: unnamed colors drift warm or cool per run; every prompt names them from the spec.
- Uploading a variant that is byte-identical to the master: the platform returns the master's own asset id, so two kit entries silently collapse into one and the collection count is wrong. A variant that changes nothing is not a variant; edit a fill, or drop the baked ground path, before uploading.
- Deriving a variant from a mockup instead of the master: derivative-of-derivative compounds artifacts (
scenario-formatshas the order of operations).
Signals
- GitHub stars
- 681
- Forks
- 82
- Last commit
- Sep 2026
Advanced
- Item type
- skill
- Key
scenario-brand-kit- Source
- github.com/scenario-labs/skills