| name | generate-graphic |
| description | Generates an on-brand marketing graphic — hero image, ad creative,
background, or texture — with an image model, optionally stamped with the
brand logo and a caption. Opt-in: needs a provider key and network access.
Use when a user wants a photographic or illustrative graphic, not a
text-heavy asset.
Trigger with "make a hero image", "ad background", or "/brand-make graphic".
|
| allowed-tools | Read, Write, Glob, Bash(node:*) |
| argument-hint | [subject to depict, e.g. "a mountain trail at dawn"] |
| version | 0.5.1 |
| author | localplugins <localplugins@proton.me> |
| license | MIT |
| compatibility | Designed for Claude Code |
| tags | ["branding","image-generation","marketing","raster","opt-in"] |
Generate Graphic
Generates an on-brand marketing graphic through an image model — the one opt-in feature that reaches the network — optionally stamped with the brand logo and a caption.
Overview
The generate-graphic skill is the opt-in raster engine. Everything else in brand-forge
(logos, social, docs) stays vector and zero-permission; this skill is the only path
that calls an external image provider, so it runs only when a user explicitly wants a
photographic or illustrative graphic. The generator builds a brand-aware prompt with
lib/raster.mjs, calls the provider with lib/genimage.mjs, and can composite a crisp
vector logo and caption over the result with lib/composite.mjs. Text is deliberately
kept out of the image and added as vector on top.
Prerequisites
- An active brand profile created with
/brand-new. Read loads its color-system.json, typography.json, and visual-identity.md.
- Two opt-in signals, both required:
BRAND_FORGE_RASTER=1 and a provider key (GEMINI_API_KEY by default, or OPENAI_API_KEY). The 30-preflight emitter surfaces this at session start.
- Authentication: the provider api key is read from that environment variable and sent as a request header, never placed in the URL. No credentials are written to disk.
- Node.js on the PATH and Write access to an
output/ directory.
Instructions
-
Verify both opt-in signals are set. If either is missing, stop, explain how to enable raster, and offer the vector path (generate-social or a template) instead, which needs neither.
-
Use Glob to locate the active brand directory, then Read and validate the profile with validateProfile.
-
Build the prompt with lib/raster.mjs (no network). It encodes the palette in words, the imagery style, and the tone, and turns the brand's don't-rules into an "Avoid:" clause. Warn the user when literal text is requested and route text-heavy work to the vector engine.
import { loadProfile } from '../../lib/brand.mjs';
import { buildRasterPrompt } from '../../lib/raster.mjs';
const profile = (activeDir);
prompt = (profile, { : });