# Visual Content Brief

> Synthex visual content enforcer. NEVER produce generic stock-photo prompts, "professional woman at a desk" imagery without brand colour injection, or AI image prompts that could belong to any brand. ALWAYS inject the brand's primary hex, lighting that matches brand tone, and a negative prompt banning competitor colours and stock-photo feel. Activate on ANY request to create visuals, image prompts, design briefs, social graphics, product photography, or brand imagery — including "what should my images look like".

- Skill: `cleanexpo/visual-content-brief` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add cleanexpo/visual-content-brief`
- Raw SKILL.md: https://api.skillmd.com/api/skills/cleanexpo/visual-content-brief/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: cleanexpo (https://skillmd.com/u/cleanexpo)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/cleanexpo/visual-content-brief

---


# Visual Content Brief

> **Visual generation (binding):** all images/video route through the grounded
> pipeline — see `.claude/rules/real-images-only.md` + the `grounded-visuals`
> skill. Direct provider calls fail CI.

## Purpose

Translates a Business DNA profile into precise AI image generation prompts and
visual direction briefs. Bridges Pomelli's visual generation concept with Synthex's
content workflow — prompts feed the grounded pipeline (see "Generation via the
grounded pipeline" below); the resulting images are used in Synthex's scheduled
posts.

## Workflow

```
1. Load Business DNA (colours, visual style, tone)
2. Identify visual content type (social post, ad creative, product shot, story, banner)
3. Generate tailored AI image prompts for each type
4. Produce platform-specific dimension specs
5. Output visual brief document
6. (Optional) Generate via Synthex's image pipeline if BYOK image key available
```

## Visual Brief Components

For each requested visual, produce:

### 1. AI Image Prompt

Structure every prompt using this formula:

```
[Subject + Action] + [Brand Style] + [Colour Palette] + [Lighting] + [Mood] + [Technical Spec]
```

**Example for a wellness brand:**

```
A calm professional woman working at a minimalist desk, soft morning light,
brand palette: sage green #8FAF8F and warm white #FAFAF8, clean editorial style,
shallow depth of field, magazine-quality photography, no text overlays,
16:9 aspect ratio, photorealistic
```

**Negative prompt (always include):**

```
Avoid: busy backgrounds, stock photo feel, competitor brand colours,
harsh shadows, low resolution, watermarks, text in image
```

### 2. Brand Colour Application Guide

```
PRIMARY COLOUR: [hex from DNA]
  → Background fills, CTA buttons, key accent elements

SECONDARY COLOURS: [hex list]
  → Supporting elements, borders, typography backgrounds

NEUTRAL: white/near-white or dark
  → Image backgrounds, breathing room

FORBIDDEN: [colours that clash with brand or signal competitors]
```

### 3. Platform Specs

| Platform          | Format                | Dimensions            | Safe Zone        |
| ----------------- | --------------------- | --------------------- | ---------------- |
| Instagram Feed    | Square / 4:5 portrait | 1080×1080 / 1080×1350 | 250px top/bottom |
| Instagram Story   | 9:16 vertical         | 1080×1920             | 250px top/bottom |
| LinkedIn Post     | Landscape             | 1200×627              | 100px all sides  |
| Facebook Post     | Landscape             | 1200×628              | 100px all sides  |
| Twitter/X         | Landscape             | 1600×900              | 100px all sides  |
| TikTok / Reel     | 9:16 vertical         | 1080×1920             | 350px top/bottom |
| YouTube Thumbnail | 16:9                  | 1280×720              | 100px all sides  |

## Content Type Templates

### Product Photography

```
[Product name] on [clean background matching brand colour], [lighting style],
professional product photography, [surface texture], brand colour accent [hex],
top-down / 45-degree angle, crisp focus, ecommerce-ready, white background
optional for cutout use
```

### Social Proof / People

```
[Demographic matching target audience], [setting relevant to product use],
candid authentic moment, not stock-photo feel, brand colour accent in environment,
diverse representation, natural lighting, editorial photography style
```

### Abstract / Brand Awareness

```
Abstract [brand concept] visualisation, [primary colour hex] dominant,
geometric / organic shapes, minimal and sophisticated, no human figures,
suitable for brand awareness campaign, premium feel
```

### Animated / Video Thumbnails

```
Split-screen before/after | Dynamic motion blur | Bold text overlay position:
[top third / bottom third] — leave [X]% of frame clear for text
```

## Generation via the grounded pipeline (REAL IMAGES ONLY mandate)

The sole sanctioned entry point is `generateImage()`/`generateBatch()` in
`lib/services/ai/image-generation.ts`, or the `generate_image` / `generate_video`
MCP studio tools (which inherit the same defaults). Every generation is
grounded-by-default on the owned reference library — `public/reference-library/manifest.json`
(143+ subjects incl. 135 CCW products) plus the PRIVATE Supabase bucket
`reference-library-private` (customer job photos, signed URLs, ingest via
`POST /api/admin/private-refs`). The prompt auto-detects the industry; **no owned
references ⇒ the call is `blocked: true`** ("No owned references for this subject —
add real photos to the reference library first"). `useReferences: false` is the
sole audited escape hatch and every result it produces is stamped `UNGROUNDED`.
The `carpet-style-v1` LoRA (trigger `ccwcarpet`) auto-applies for carpet-cleaning.
Direct provider calls (Artlist/Nano Banana/margot/Gemini/OpenAI/Stability/fal) fail
the CI guard test `tests/unit/ai/no-direct-image-apis.test.ts`.

Keep the prompt formula / negative-prompt / brand-colour discipline above — it
feeds the `prompt` parameter of `generateImage()`. Use the dashboard's 3-variant
batch + tap-to-rank flow to deliver a prompt set for review.

## Output Format

Deliver the brief as a structured document the user can save:

```
──────────────────────────────────────────
 VISUAL BRIEF — [Brand Name]
 Generated: [date]
──────────────────────────────────────────

BRAND VISUAL DNA
  Primary: [hex] | Secondary: [hexes]
  Style: [image style from DNA]
  Avoid: [list]

PROMPT SET A — Instagram Feed (×3 variations)
  Prompt 1: [full prompt]
  Negative: [negative prompt]
  Dimensions: 1080×1080

PROMPT SET B — LinkedIn (×2 variations)
  ...

PRODUCT PHOTOGRAPHY BRIEF
  [structured brief]
```

## Reference

- Grounded pipeline (mandatory): `.claude/rules/real-images-only.md`, `.claude/skills/grounded-visuals/`
- Brand DNA: `.claude/skills/business-dna/`
- Image generation service: `lib/services/ai/image-generation.ts`

---

## Capability Uplift — Override Defaults

**NEVER** produce a prompt that omits the brand's colour palette, uses
"professional woman/man at a clean desk" as a default setting, outputs prompts
that could apply to any brand, or skips the negative prompt.

**INSTEAD** every image prompt uses this structure:

[Subject + Action] + [Brand Visual Style from DNA] + [Primary Colour Hex] +
[Lighting that matches brand tone: editorial/dramatic/natural/documentary] +
[Mood] + [Technical Spec: aspect ratio, photorealistic/illustrated]

Negative: stock photo feel, generic office background, competitor brand colours
[hex list], watermarks, harsh shadows, low resolution

For a Synthex-generated brand, pull the primary colour from Business DNA
before writing any prompt. A prompt without a hex code is not a Synthex prompt.

**REFERENCE** `.claude/skills/synthex-standards/references/aesthetic-standards.md`

---

## Foundation & Gate Wiring (SYN-1050)

> Adopted from the senior-skill standard so every artefact this skill produces is checked against the locked foundation before it lands.

**Reads at every invocation (never cached — re-read each run):**

- `.claude/memory/ceo-foundation.md` — visual brand consistency, voice tag (Q2.5.5), universal + brand-specific taboos.
- `.claude/memory/verification-gates.md` — gate state for any claim referenced.

**Output gate:** every client-facing artefact this skill produces routes through `brand-voice-enforce` before the CEO batched-review queue. A REJECT blocks the artefact until the quoted offending string is fixed.

**Evidence standard:** every quantitative or factual claim carries exactly one tag — `[VERIFIED]` / `[INFERENCE]` / `[UNCONFIRMED]`. Untagged = defect (`.claude/rules/fabel-evidence-standard.md`). Never state a projected result as fact.

**Spec:** see `spec.md` in this skill directory.

