/banner-critique — Vision-model design review for banners
Reads a banner image, scores it on 5 graphic-design axes, returns specific fixes. Used as a self-review gate before showing creative output to the user.
When to invoke
- After any banner render step in
~/.nexus/projects/smsads/casino-rewards/ (or other creative project)
- After the
gpt-image-banner skill produces a hero
- After the compositor (Prompt 05) outputs a final asset
- Before announcing iteration N to the user
- User explicitly says:
/banner-critique {path}, "rate this design", "is this good enough to ship?", "critique this banner"
ANTI-PATTERN — do NOT use for:
- Code review (use
code-review or audit-pro)
- Text-only review (use
audit-pro)
- Performance analysis (use
audit)
- Architecture review (use
audit-pro profile=architecture)
Required input
image_path — absolute path to the banner file (JPG/PNG/GIF/WebP)
- Optional
--brand — brand code (CK/LXC/ZC) to anchor brand-fit scoring against the LP style ref
- Optional
--target-size — expected dimensions like 250x250 for hierarchy scoring at that scale
- Optional
--reference — path to a comparison reference banner (1+); enables side-by-side scoring
Method
- Read the image with the runtime image-viewing tool (
view_image in Codex).
- If
--brand is provided, also read:
~/.nexus/projects/smsads/casino-rewards/recon/lp-style/{brand}-{lang_geo}.md for palette + voice baseline
- If
--reference is provided, read each ref image and prepare comparative judgment.
- Score the input image on the 5 axes below (each 1–5, integer).
- Identify the top 3 design issues.
- Suggest 3 specific, actionable fixes (one per issue).
- Compute verdict:
- All axes ≥ 4 → PASS (ship-ready)
- Mostly ≥ 3, one axis = 2 → REVIEW (operator judgement needed)
- Any axis ≤ 2, OR mean < 3 → FAIL (do not ship; iterate)
- Return the report.
5-axis scoring rubric
Axis 1 — Readability (1–5)
- 5: All text is crisp, contrast ratio ≥ 7:1 (WCAG AAA), minimum 18pt at final render, no clipping, no kerning issues, sub-pixel anti-aliasing clean.
- 4: Text legible at full size, minor contrast issue OR slight kerning issue OR small text near 14pt.
- 3: Text legible at full size but uncomfortable; contrast ratio 4.5–6.5; some sub-12pt elements.
- 2: Text fights with background; multiple legibility issues at full size.
- 1: Text unreadable, blends with image, missing contrast, clipped or cut.
Axis 2 — Hierarchy (1–5)
- 5: One dominant element clearly carries the message (eye lands on it within 0.3s); supporting elements graded by size, color, weight; legal subordinate but readable; flow obvious.
- 4: Clear dominant element, minor competition between two elements; flow still readable.
- 3: Hierarchy attempted but partially flat; eye doesn't know where to land first; some elements compete.
- 2: All elements roughly equal weight; eye bounces; no clear focal point.
- 1: Chaotic; multiple competing focal points OR everything is flat-equal.
Axis 3 — Depth (1–5)
- 5: Genuine depth — layered z-order, atmospheric haze, drop shadow, accent glow, foreground-midground-background distinction, photographic lighting; banner feels three-dimensional.
- 4: Depth attempted with shadow/glow on key elements; works but flatter than ideal.
- 3: Some shadow OR glow on one element; still mostly flat layered.
- 2: Pure flat design with no depth cues; sticker-art / wireframe look.
- 1: Aggressively flat; HTML-table-cell aesthetic; no graphic-design polish.
Axis 4 — Brand fit (1–5) — REQUIRES --brand
- 5: Matches LP palette ±5 hex per channel, font family matches LP, CTA verb verbatim, voice mirrors LP (pronoun, currency, punctuation).
- 4: Matches LP palette ±15 hex, font close-substitute, copy verbatim.
- 3: Recognizable as the brand but with drift on either palette OR font OR voice.
- 2: Two of the three drifted; ambiguous brand identity.
- 1: Could be any generic casino brand; no LP-anchor recognition.
(If --brand not provided, score = 3 with note "brand-fit unmeasured — pass --brand to enable")
Axis 5 — Professional polish (1–5)
- 5: Looks like a paid-design-agency deliverable — would be at home in Meta Ads Library top-100 casino creatives. Confident composition, sophisticated lighting, no amateur tells.
- 4: Polished and shippable; clean execution; could be A/B tested against an agency creative.
- 3: Decent first-pass; visible amateur tells (basic CSS look, generic typography, no atmosphere) but reads as competent.
- 2: Looks like a homework assignment; clearly machine-made; no design judgement.
- 1: Looks broken or rushed; would harm brand perception if shipped.
Output format
Return to chat AND write to ~/.nexus/projects/smsads/casino-rewards/deliverables/{brand_slug}/{lang_geo}/critique-{timestamp}.md:
BANNER CRITIQUE — {image_path}
Brand: {brand_code} | Target: {WxH} | Reference: {ref_count}
SCORES:
Readability: {N}/5
Hierarchy: {N}/5
Depth: {N}/5
Brand fit: {N}/5
Professional polish: {N}/5
--------------------------
MEAN: {N.NN}/5
VERDICT: {PASS|REVIEW|FAIL}
TOP 3 ISSUES:
1. {issue} — affects axis {N}
2. {issue} — affects axis {N}
3. {issue} — affects axis {N}
3 SPECIFIC FIXES (in priority order):
1. {action verb} {element}: {specific change with measurable target}
(Expected lift: +X on axis {N})
2. {action verb} {element}: ...
3. {action verb} {element}: ...
SHIPPABLE? {Y/N — with one-line rationale}
NEXT STEP RECOMMENDATION:
- If FAIL → list the cheapest fix-then-recritique loop
- If REVIEW → list the 1 operator decision needed
- If PASS → ready for compliance gate (Prompt 06) then ship
Constraints
- Use Codex vision through the runtime image-viewing tool — no external API.
- Always score all 5 axes (use 3 as placeholder for unmeasured with explanation).
- Never lie to the user — if the banner is amateur, score it 2/5 honestly. Iter-02 in casino-rewards is the cautionary tale.
- For brand-fit, read the actual LP-style ref file; don't guess colors from memory.
- Verdict thresholds are HARD: PASS requires ALL axes ≥4. Anything less is REVIEW or FAIL.
- Acronym expansion first-use: LP (Landing Page), CTA (Call To Action), WCAG AAA (Web Content Accessibility Guidelines, AAA conformance), CSS (Cascading Style Sheets).
- Time budget: ≤2 min per critique.
Example invocation
/banner-critique /Users/pafi/.nexus/projects/smsads/casino-rewards/deliverables/luxury-casino/fr-burkina/lxc-fr-burkina-250x250-v01.jpg --brand LXC --target-size 250x250 --reference /Users/pafi/.nexus/projects/smsads/casino-rewards/recon/sample-banners/luxury-casino-1000bonus-hero-300x250.gif
Returns scored critique. If FAIL, the calling agent (Mercury, banner pipeline) MUST iterate before showing the user.
Anti-glaze rule
This skill exists to PREVENT amateur output from reaching the user. Do not score generously to be polite. The iter-02 banner that triggered this skill's creation scored:
- Readability: 4 (legible)
- Hierarchy: 4 (figure dominates)
- Depth: 1 (pure flat CSS, no atmosphere)
- Brand fit: 3 (palette OK but no LP visual identity)
- Professional polish: 2 (homework-tier)
Mean: 2.8 → FAIL
That assessment should have prevented the user from seeing it. This skill is the gate.
1---2name: banner-critique3description: Vision-based design critique for banners, creatives, or any rendered visual. Use AFTER any banner production step and BEFORE showing the user. Reads the image through Codex vision and scores it on 5 axes (readability, hierarchy, depth, brand fit, professional polish), returns top 3 issues + 3 specific fixes + PASS/REVIEW/FAIL verdict. Use when user says '/banner-critique', 'critique this banner', 'rate this design', or as a self-check gate before delivery. ANTI-PATTERN: do not use for code review (use code-review), text review (use audit-pro), or non-visual outputs.4---56# /banner-critique — Vision-model design review for banners78Reads a banner image, scores it on 5 graphic-design axes, returns specific fixes. Used as a self-review gate before showing creative output to the user.910## When to invoke1112- After any banner render step in `~/.nexus/projects/smsads/casino-rewards/` (or other creative project)13- After the `gpt-image-banner` skill produces a hero14- After the compositor (Prompt 05) outputs a final asset15- Before announcing iteration N to the user16- User explicitly says: `/banner-critique {path}`, "rate this design", "is this good enough to ship?", "critique this banner"1718ANTI-PATTERN — do NOT use for:19- Code review (use `code-review` or `audit-pro`)20- Text-only review (use `audit-pro`)21- Performance analysis (use `audit`)22- Architecture review (use `audit-pro` profile=architecture)2324## Required input2526- `image_path` — absolute path to the banner file (JPG/PNG/GIF/WebP)27- Optional `--brand` — brand code (CK/LXC/ZC) to anchor brand-fit scoring against the LP style ref28- Optional `--target-size` — expected dimensions like `250x250` for hierarchy scoring at that scale29- Optional `--reference` — path to a comparison reference banner (1+); enables side-by-side scoring3031## Method32331. Read the image with the runtime image-viewing tool (`view_image` in Codex).342. If `--brand` is provided, also read:35 - `~/.nexus/projects/smsads/casino-rewards/recon/lp-style/{brand}-{lang_geo}.md` for palette + voice baseline363. If `--reference` is provided, read each ref image and prepare comparative judgment.374. Score the input image on the 5 axes below (each 1–5, integer).385. Identify the top 3 design issues.396. Suggest 3 specific, actionable fixes (one per issue).407. Compute verdict:41 - All axes ≥ 4 → **PASS** (ship-ready)42 - Mostly ≥ 3, one axis = 2 → **REVIEW** (operator judgement needed)43 - Any axis ≤ 2, OR mean < 3 → **FAIL** (do not ship; iterate)448. Return the report.4546## 5-axis scoring rubric4748### Axis 1 — Readability (1–5)49- 5: All text is crisp, contrast ratio ≥ 7:1 (WCAG AAA), minimum 18pt at final render, no clipping, no kerning issues, sub-pixel anti-aliasing clean.50- 4: Text legible at full size, minor contrast issue OR slight kerning issue OR small text near 14pt.51- 3: Text legible at full size but uncomfortable; contrast ratio 4.5–6.5; some sub-12pt elements.52- 2: Text fights with background; multiple legibility issues at full size.53- 1: Text unreadable, blends with image, missing contrast, clipped or cut.5455### Axis 2 — Hierarchy (1–5)56- 5: One dominant element clearly carries the message (eye lands on it within 0.3s); supporting elements graded by size, color, weight; legal subordinate but readable; flow obvious.57- 4: Clear dominant element, minor competition between two elements; flow still readable.58- 3: Hierarchy attempted but partially flat; eye doesn't know where to land first; some elements compete.59- 2: All elements roughly equal weight; eye bounces; no clear focal point.60- 1: Chaotic; multiple competing focal points OR everything is flat-equal.6162### Axis 3 — Depth (1–5)63- 5: Genuine depth — layered z-order, atmospheric haze, drop shadow, accent glow, foreground-midground-background distinction, photographic lighting; banner feels three-dimensional.64- 4: Depth attempted with shadow/glow on key elements; works but flatter than ideal.65- 3: Some shadow OR glow on one element; still mostly flat layered.66- 2: Pure flat design with no depth cues; sticker-art / wireframe look.67- 1: Aggressively flat; HTML-table-cell aesthetic; no graphic-design polish.6869### Axis 4 — Brand fit (1–5) — REQUIRES `--brand`70- 5: Matches LP palette ±5 hex per channel, font family matches LP, CTA verb verbatim, voice mirrors LP (pronoun, currency, punctuation).71- 4: Matches LP palette ±15 hex, font close-substitute, copy verbatim.72- 3: Recognizable as the brand but with drift on either palette OR font OR voice.73- 2: Two of the three drifted; ambiguous brand identity.74- 1: Could be any generic casino brand; no LP-anchor recognition.7576(If `--brand` not provided, score = 3 with note "brand-fit unmeasured — pass --brand to enable")7778### Axis 5 — Professional polish (1–5)79- 5: Looks like a paid-design-agency deliverable — would be at home in Meta Ads Library top-100 casino creatives. Confident composition, sophisticated lighting, no amateur tells.80- 4: Polished and shippable; clean execution; could be A/B tested against an agency creative.81- 3: Decent first-pass; visible amateur tells (basic CSS look, generic typography, no atmosphere) but reads as competent.82- 2: Looks like a homework assignment; clearly machine-made; no design judgement.83- 1: Looks broken or rushed; would harm brand perception if shipped.8485## Output format8687Return to chat AND write to `~/.nexus/projects/smsads/casino-rewards/deliverables/{brand_slug}/{lang_geo}/critique-{timestamp}.md`:8889```90BANNER CRITIQUE — {image_path}91Brand: {brand_code} | Target: {WxH} | Reference: {ref_count}9293SCORES:94 Readability: {N}/595 Hierarchy: {N}/596 Depth: {N}/597 Brand fit: {N}/598 Professional polish: {N}/599 --------------------------100 MEAN: {N.NN}/5101 VERDICT: {PASS|REVIEW|FAIL}102103TOP 3 ISSUES:104 1. {issue} — affects axis {N}105 2. {issue} — affects axis {N}106 3. {issue} — affects axis {N}1071083 SPECIFIC FIXES (in priority order):109 1. {action verb} {element}: {specific change with measurable target}110 (Expected lift: +X on axis {N})111 2. {action verb} {element}: ...112 3. {action verb} {element}: ...113114SHIPPABLE? {Y/N — with one-line rationale}115116NEXT STEP RECOMMENDATION:117 - If FAIL → list the cheapest fix-then-recritique loop118 - If REVIEW → list the 1 operator decision needed119 - If PASS → ready for compliance gate (Prompt 06) then ship120```121122## Constraints123124- Use Codex vision through the runtime image-viewing tool — no external API.125- Always score all 5 axes (use 3 as placeholder for unmeasured with explanation).126- Never lie to the user — if the banner is amateur, score it 2/5 honestly. Iter-02 in casino-rewards is the cautionary tale.127- For brand-fit, read the actual LP-style ref file; don't guess colors from memory.128- Verdict thresholds are HARD: PASS requires ALL axes ≥4. Anything less is REVIEW or FAIL.129- Acronym expansion first-use: LP (Landing Page), CTA (Call To Action), WCAG AAA (Web Content Accessibility Guidelines, AAA conformance), CSS (Cascading Style Sheets).130- Time budget: ≤2 min per critique.131132## Example invocation133134```135/banner-critique /Users/pafi/.nexus/projects/smsads/casino-rewards/deliverables/luxury-casino/fr-burkina/lxc-fr-burkina-250x250-v01.jpg --brand LXC --target-size 250x250 --reference /Users/pafi/.nexus/projects/smsads/casino-rewards/recon/sample-banners/luxury-casino-1000bonus-hero-300x250.gif136```137138Returns scored critique. If FAIL, the calling agent (Mercury, banner pipeline) MUST iterate before showing the user.139140## Anti-glaze rule141142This skill exists to PREVENT amateur output from reaching the user. Do not score generously to be polite. The iter-02 banner that triggered this skill's creation scored:143- Readability: 4 (legible)144- Hierarchy: 4 (figure dominates)145- Depth: **1** (pure flat CSS, no atmosphere)146- Brand fit: 3 (palette OK but no LP visual identity)147- Professional polish: **2** (homework-tier)148Mean: 2.8 → **FAIL**149That assessment should have prevented the user from seeing it. This skill is the gate.