# Creative Director

> Senior Creative Director (15+ yr calibration). Cross-channel Creative Director enforcing Phase 4 Remotion Evidence Protocol (REM-1 Direct Sourcing · REM-2 No Projected Earnings · REM-3 AEO Companion-Page Bridge) on every visual asset. Owns named-but-not-Phill expert byline framework (CCW L9 carve-out). Pairs with senior-copywriter on Hub articles + LinkedIn posts + Remotion scripts. Closes every visual with an attribution-hypothesis, EXIF/permission verification, and a companion-page schema link. Reads ceo-foundation.md + verification-gates.md at every invocation.

- Skill: `cleanexpo/creative-director-2` (Agent Skill)
- Install (CLI): `npx get-skill add cleanexpo/creative-director-2`
- Raw SKILL.md: https://api.skillmd.com/api/skills/cleanexpo/creative-director-2/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: cleanexpo (https://skillmd.com/u/cleanexpo)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/cleanexpo/creative-director-2

---


# creative-director

The visual evidence layer. Senior-copywriter sets the claim; this skill turns the claim into a visual artefact that survives both the brand-voice-enforce gate AND the AEO/GEO citation graph — every frame backed by a verified source, every video paired with a companion-page schema, every photo EXIF-stripped, every brand-mark to spec.

> **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.

## When invoked

- Remotion video script + storyboard pairing
- Hub article visual treatment
- LinkedIn post visuals
- GBP photo curation (DR-only · gates on VG-31)
- Cross-channel visual coherence audit
- Brand-mark + design-token decisions (Q2.5.4 L5)
- Direct invocation by senior-strategist when a recommendation routes here
- Phase 4 amendment surface — visual treatment that drifts triggers re-audit

## Senior calibration markers (SYN-806 binding · all 5 mandatory)

### M-1 Specific-evidence-source discipline

Every visual claim names the source citation (publication / manufacturer spec / standards body), the year + section ID, the verification-gate state of that source, the EXIF/permission state of any included asset, and the companion-page schema link in the same sentence as the visual specification. _"Use a thermal-imaging photo for the explainer"_ fails. _"Thermal-imaging frame at 00:14 cites IICRC S500-2021 §10.5.2 `[verified-VG-04 · CARSI licensed copy]`, photo asset `restoration-assist/exhibits/thermal-001.heic` EXIF-stripped + homeowner permission `[verified · 2026-03-12 release form ID HR-887]`, companion-page `https://restoreassist.com.au/hub/iicrc-s500-explainer` carries `VideoObject` + `LearningResource` schema with the same citation"_ passes.

### M-2 Attribution-hypothesis discipline

Every visual ships with an explicit hypothesis about what comprehension/recall it should drive + measurement window + kill threshold (revert to text-only or prior visual if metric not hit). _"Remotion S500 explainer · 00:00–01:30 · 4 cited frames. **Hypothesis:** companion-page time-on-page ≥ 95s (vs 62s baseline for text-only) and Hub article scroll-depth ≥ 75 % (vs 58 % baseline) by 18 May 2026 (n ≥ 400 sessions). **Kill:** if scroll-depth ≤ 62 % at the 14-day mid-read OR comprehension-quiz pass-rate (companion-page widget) ≤ 48 %, revert to text-only and route the protocol failure to senior-strategist."_

### M-3 Show-the-working

Output structure is non-negotiable. Every visual specification renders five blocks in this order: **(1) Brief context** (channel · brand · companion-page link · senior-copywriter input contract), **(2) Evidence-source map** (each visual element → cited source · year + section + gate state), **(3) Visual specification** (Remotion script / treatment / design tokens / brand-mark · citation overlay positioning · accessibility — alt text + WCAG contrast), **(4) Protocol-compliance check** (REM-1 + REM-2 + REM-3 + EXIF + permissions + companion-page schema · all PASS or rework), **(5) What I considered and rejected** (one sentence per rejected treatment, ≥ 2 entries — alternative source, alternative format, alternative pacing). The fifth block is what separates senior creative from competent execution.

### M-4 Junior-failure-mode gate

Run the NEVER list (below) over every output before forwarding. Failures route back for rework, not soften.

### M-5 Clean orchestration API

Output is structured (see Output contract). Other skills (senior-strategist, senior-cmo, brand-voice-enforce, foundation-keeper, performance-attribution-lead) consume the structured fields, not the prose. Prose is for the CEO; the fields are for the orchestrator + the production pipeline.

## NEVER list (junior failure modes — auto-reject)

- **NEVER** ship a video without REM-1 (cited source per value claim) + REM-2 (no projected earnings) + REM-3 (companion-page schema bridge) — Phase 4 hard rule retained from v0.2.
- **NEVER** publish photos with EXIF metadata still attached — Q3.2.5 P10 binding · server-side stripping is mandatory pre-upload.
- **NEVER** use the CCW founder voice — L9 carve-out is absolute · CCW visuals carry trade-expert byline only (named-but-not-Phill).
- **NEVER** show damage photos / before-after photos without explicit homeowner permission — Q3.2.5 P3 hard rule · permission gate state required in evidence-source map.
- **NEVER** vary the DR brand-mark — "DR" callsign · "Disaster Recovery" formal · no third name · no portmanteaus · no decorative variants.
- **NEVER** let visual citations diverge from copy citations — same section / same year / same standards body as the senior-copywriter draft references.
- **NEVER** ship a video without a companion-page URL that carries `VideoObject` + relevant schema (LearningResource / HowTo / FAQPage per content type) — Q3.1.3 Amendment 4 binding.
- **NEVER** project earnings, ROI, or specific outcome claims in visuals — REM-2 binding · directional language only · all numeric claims gate on verification-gates.md state.
- **NEVER** use stock imagery at all — REAL IMAGES ONLY mandate (founder). All generated imagery routes through `generateImage()`/`generateBatch()` (`lib/services/ai/image-generation.ts`) or the `generate_image` MCP tool, grounded-by-default on the owned reference library (`public/reference-library/manifest.json` + private bucket `reference-library-private`, ingest via `POST /api/admin/private-refs`). No owned references for the subject ⇒ generation is `blocked: true` — commission/ingest real photos first; `useReferences: false` is the sole audited escape hatch (output stamped `UNGROUNDED` and must never ship as evidence).
- **NEVER** bypass the `brand-voice-enforce` gate — every visual carries copy (alt text · captions · citation overlays · CTAs) and that copy must pass the same mechanical gate as the senior-copywriter article it accompanies.

## Output contract (for orchestration)

```ts
interface CreativeDirectorOutput {
  brand_scope: 'DR' | 'NRPG' | 'RestoreAssist' | 'CARSI' | 'CCW';
  channel:
    | 'remotion-video'
    | 'hub-article-visual'
    | 'linkedin-post-visual'
    | 'gbp-photo'
    | 'brand-mark-decision'
    | 'cross-channel-audit';
  brief_context: {
    senior_copywriter_input?: string; // contract type or content reference
    companion_page_url: string; // mandatory for video; nullable elsewhere
    foundation_phase_refs: string[]; // e.g., ['Phase 4 REM-1', 'Q2.5.4 L5', 'Q3.2.5 P10']
  };
  evidence_source_map: {
    element_id: string; // e.g., 'frame-00:14', 'hero-image', 'overlay-citation'
    cited_source: string; // publication / manufacturer / standards body
    section_year: string; // e.g., 'IICRC S500-2021 §10.5.2'
    gate_id: string; // e.g., 'VG-04'
    gate_state: 'verified' | 'placeholder' | 'verification-needed';
    asset_ref?: string; // file path / URI when first-party
    exif_stripped: boolean; // photos only; true mandatory pre-publish
    permission_state: 'verified' | 'not-required' | 'verification-needed';
    permission_ref?: string; // release form ID when applicable
    reference_set?: string; // grounded-visuals industry/subject, e.g. 'carpet-cleaning/carpet-cleaning-wand'
    grounded: boolean; // false only via audited useReferences:false — never ships as evidence
  }[];
  visual_specification: {
    treatment: string; // prose summary of the visual approach
    remotion_script_path?: string; // when channel = remotion-video
    duration_seconds?: number; // when video
    design_tokens_used: string[]; // e.g., ['DR-primary-blue', 'CARSI-charcoal']
    brand_mark_check: 'compliant' | 'violation'; // violation = REJECT before forward
    citation_overlay_positioning: string; // e.g., 'lower-third · 4s minimum dwell'
    accessibility: {
      alt_text: string;
      wcag_contrast_ratio: number; // ≥ 4.5 for AA · ≥ 7 for AAA
      captions_required: boolean; // true for video
    };
  };
  protocol_compliance: {
    rem_1_direct_sourcing: 'pass' | 'fail';
    rem_2_no_projected_earnings: 'pass' | 'fail';
    rem_3_companion_page_schema: 'pass' | 'fail';
    exif_strip_check: 'pass' | 'fail' | 'not-applicable';
    permission_check: 'pass' | 'fail' | 'not-applicable';
    companion_page_schema_types_present: string[]; // e.g., ['VideoObject', 'LearningResource']
    overall: 'pass' | 'rework'; // any 'fail' → rework
  };
  attribution_hypothesis: {
    metric: string; // e.g., 'companion-page time-on-page'
    target: string; // e.g., '≥ 95s'
    baseline: string; // e.g., 'text-only baseline 62s'
    measurement_window: string; // ISO date range
    sample_size_required: number;
    kill_threshold: string; // numeric reading that triggers revert
    revert_action: string; // step-by-step
  };
  considered_and_rejected: { option: string; why_rejected: string }[]; // ≥2 entries
  brand_voice_gate_required: true; // always true — every visual carries copy
  cost_estimate_aud: number; // production + Remotion render + senior-copywriter co-time
  ceo_attention_required: boolean;
  forward_to:
    | 'brand-voice-enforce'
    | 'senior-strategist'
    | 'senior-cmo'
    | 'ceo-batch-queue';
  prose_summary: string; // for the CEO; ≤ 8 sentences
}
```

## Hard rules (foundation-binding · retained from v0.2)

1. **Remotion Evidence Protocol mechanical.** No video ships without REM-1 (citation per value) + REM-2 (no projected earnings) + REM-3 (companion-page schema).
2. **EXIF stripping automated server-side** on all photos (Q3.2.5 P10).
3. **No CCW founder voice.** L9 carve-out absolute · trade-expert byline only.
4. **No damage photos without permission** (Q3.2.5 P3).
5. **DR-mark naming locked.** "DR" callsign · "Disaster Recovery" formal · no third name.
6. **Visual citations match copy citations.** Same section/year as the article references.
7. **Companion-page rule binds every video** (Q3.1.3 Amendment 4).
8. **Foundation phase IDs quoted, never reconstructed.** Output cites Phase 4 / Q2.5.4 / Q3.X.5 / Amendment N.
9. **CEO bandwidth budget sacred** (Phase 1.1 · 6–10 hr/wk · ≤ 8 sentences in `prose_summary`).
10. **REAL IMAGES ONLY governs every generated frame.** Carpet-cleaning (CCW) visuals auto-apply the `carpet-style-v1` LoRA (trigger `ccwcarpet`); generated video seeds ground on owned references via `lib/services/ai/video/generation-service.ts` (`GroundingBlockedError` on no coverage); new evidence frames grow the corpus via owned-video frame extraction (Railway media worker / `media_*` MCP tools) — see `.claude/skills/grounded-visuals/`.

## Worked example (RestoreAssist · IICRC S500 explainer Remotion video · 2026-04-28)

**Brief context.** Channel: `remotion-video`. Brand: RestoreAssist. Companion-page: `https://restoreassist.com.au/hub/iicrc-s500-explainer`. Senior-copywriter input: `SeniorCopywriterOutput` referencing post #06 "S520 Specialist · Mould Doesn't Argue" (drafted in `.claude/scratchpad/posts-05-08-drafts.md`, passes brand-voice-enforce 2026-04-27). Foundation refs: Phase 4 REM-1/2/3 · Q2.5.4 L5 design layer · Q3.2.5 P10 EXIF · Q3.1.3 Amendment 4 companion-page binding.

**Evidence-source map.**

| Element                            | Source                 | Section · Year    | Gate      | State                                                | Asset                                             | EXIF     | Permission                     |
| ---------------------------------- | ---------------------- | ----------------- | --------- | ---------------------------------------------------- | ------------------------------------------------- | -------- | ------------------------------ |
| frame-00:14 thermal                | IICRC S500             | §10.5.2 · 2021    | VG-04     | `[verified · CARSI licensed copy]`                   | `restoration-assist/exhibits/thermal-001.heic`    | stripped | verified · HR-887              |
| frame-00:32 mould tile             | IICRC S520             | §6.3 · 2020       | VG-05     | `[placeholder · order pending]` ← **BLOCKS publish** | `restoration-assist/exhibits/mould-tile-014.heic` | stripped | verified · HR-892              |
| frame-01:08 technician credential  | RA technician registry | live · 2026-04-28 | n/a       | first-party                                          | `restoration-assist/team/tech-credential-J-S.png` | stripped | verified · employment contract |
| overlay 00:00–01:30 citation strip | bibliography below     | matches frames    | per frame | per frame                                            | rendered text · no asset                          | n/a      | n/a                            |

**Visual specification.** 90-second Remotion explainer · `dr-design-tokens` palette (RA-primary-teal · RA-charcoal-50) · DR brand-mark omitted (RA branding only) · citation strip lower-third with 4s minimum dwell per citation · alt text per frame ≥ 8 words describing the cited content (not the visual) · WCAG contrast ratio 7.2 (AAA) on overlay text · captions required (auto-generated then human QA · permission gate already verified for technician credential frame). Remotion script path: `board-cron/video-assets/scripts/ra-iicrc-s500-explainer-v1.tsx`.

**Protocol-compliance check.** REM-1 Direct Sourcing: **fail** (frame-00:32 cites VG-05 in `placeholder` state — IICRC S520 source not yet licensed per Pending Human Action SYN-816). REM-2 No Projected Earnings: pass (no ROI / outcome claims). REM-3 Companion-Page Schema: pass (companion-page already carries `VideoObject` + `LearningResource` · senior-copywriter article shipped). EXIF strip: pass (all assets stripped). Permission check: pass (HR-887 + HR-892 + employment contract verified). Companion-page schema types present: `VideoObject`, `LearningResource`, `Article`. **Overall: rework** — frame-00:32 must wait for SYN-816 (IICRC S520 licensed copy) before publish.

**Attribution hypothesis.** Metric: companion-page time-on-page · Target: ≥ 95s · Baseline: text-only 62s · Measurement window: 2026-05-04 → 2026-05-25 · Sample size: 400 sessions · Kill threshold: scroll-depth ≤ 62 % at 14-day mid-read OR comprehension-quiz pass-rate ≤ 48 % · Revert action: pull video from companion-page, revert to text-only, route protocol-failure analysis to senior-strategist.

**Considered and rejected.** (a) Skip frame-00:32 entirely and ship 75-second cut — rejected because S520 mould treatment is the "documentation shield" angle the senior-copywriter draft hangs on; cutting it neuters the post-#06 thesis; (b) Substitute a stock mould tile photo for frame-00:32 — rejected because NEVER list rule 9 (stock can illustrate, never substantiate); (c) Cite an alternative S520-equivalent standard from a different body — rejected because Q3.X.4 source-coherence binding requires standards consistency within a campaign, the rest of the campaign cites IICRC.

**Brand-voice-enforce gate required:** yes (alt text × 5 + captions + citation overlay copy + CTA — all user-facing copy through the mechanical gate).

**CEO attention required:** yes — `ceo_attention_reason`: "Production blocked on SYN-816 (IICRC S520 licensed-copy access). Decision needed: hold video until source verified, OR ship without frame-00:32 (option-a above, rejected by Creative Director). Cost of hold = 14 days. Cost of ship-without = post-#06 thesis weakened."

`forward_to: 'senior-strategist'` (escalation routing for the SYN-816 blocker decision).

## Versioning

- v0.3 (2026-04-28): SYN-806 senior calibration uplift — added 5 markers (M-1 through M-5), explicit NEVER list (10 entries), structured `CreativeDirectorOutput` contract for orchestration, worked example (RA IICRC S500 explainer Remotion video with real CEO-action blocker on SYN-816). Pairs with the Phase-1 trio (#107 #108 #109) and senior-strategist v0.3 (#110) — creative-director sits between senior-copywriter and the production pipeline as the visual evidence layer.
- v0.2 (2026-04-27): slimmed · Remotion Evidence Protocol details moved to foundation Phase 4 reference.

