An end-to-end pipeline for a single brand. Brand setup → data brief → concept slate → copy refinement → AI generation → grading → delivery. This page maps the steps and explains what each canonical doc in /Briefing/Docs/ is for, so anyone walking in cold can find the right file in 30 seconds.
Generated Assets/{date}/AUDIT.md. §1 Visual at Phase B; §2 Voice at Phase C. Both are STOP gates.generate-ads-gpt2.mjs script — I need the prompt-assembly rules, the SAFE_ZONE block, the Tier-1 hard rules, the Fal API call structure.Every batch — for any brand, sales proposal or existing client — flows through these seven phases. The two starter prompts (SALES_PROPOSAL_STARTER_PROMPT.md and EXISTING_CLIENT_STARTER_PROMPT.md) are wrappers that orchestrate this same sequence with brand-specific Phase A inputs.
Phase A
Brand setup / Data brief
Sales proposal: scrape the brand site, pull design tokens, read the discovery transcript, build spec cards.
Existing client: run pull-insights.mjs against the iteration tracker — Meta time-series + Adlib gap analysis. Produces EXTEND / RETIRE / FILL recommendations.
Stop for user
→ DATA_BRIEF.md / spec cards
Phase B
Concept slate + visual diversity audit
Build the 14-row slate (concept · format · persona · angle · emotion · SKU per slot). Pick the format-file variant per slot. Apply the King's Hawaiian archetype quotas (≥2 platform-UGC, ≥1 macro, ≥1 outdoor, ≥1 type-only, ≥1 chaotic). Then fill in AUDIT.md §1 Visual — surface bucket / lighting / primary subject / color cast / Pinterest grid test.
Stop for user
→ SLATE.md + AUDIT.md §1
Phase C
Copy refinement + voice diversity audit
Run all 14 ads' COPY through Agents 01–09 (persona fit · angle · emotion · copy excellence · format compliance · brand compliance · Kahneman heuristics · static conversion · ad reviewer). Brand voice agent loads as Agent 06's override. Every ad must clear ≥ 90 on every rubric. Then fill in AUDIT.md §2 Voice — voice register tally / source citation per line / repeated-anchor / brand-swap test.
Hard gate 1Stop for user
→ COPY_REFINED.md + AUDIT.md §2
Phase D
Generate via Fal
Run generate-ads-gpt2.mjs sequentially against openai/gpt-image-2/edit. Per call: brand spec card + visual style card + per-ad SKU reference. Prompt assembled per GPT_IMAGE_2_PIPELINE.md § 3. Saves PNGs immediately on success with 4-attempt fetch retry.
→ Generated Assets/{date}/*.png
Phase E
Agent 10 grading
Run Agent 10 (creative grader, 11-gate rubric) on every PNG. Catches safe-zone violations, paper-inset artifacts, dropped headlines, fabricated stats, banned-word leakage, brand-fit failures. For existing clients, Gate 10 (Brand Performance Resonance) scores each ad's format × persona × angle × emotion against the action plan. Iterate any ad < 90.
Hard gate 2 — every ad ≥ 90
→ AGENT_10_REPORT.md
Phase F
Deliver 9:16 source-of-truth
Move final PNGs into Generated Assets/{date}/Final Delivery/9x16/. Filenames per RESIZE_WORKFLOW.md convention. Save the locked generate-ads-gpt2.mjs + AGENT_10_REPORT.md alongside as the audit trail.
Stop for user before Phase G
→ Final Delivery/9x16/*.png
Phase G
Resize to 1:1 and re-grade
Run resize-folder-to-1x1.mjs over the approved 9:16 folder. Re-grade every 1:1 through Agent 10 (1:1 has different safe-zone constraints — top blocked 0–110 px, bottom blocked 970–1080 px). Manual fallback for any 1:1 < 90.
→ Final Delivery/1x1/*.png
Walks through 12 numbered steps to onboard a new client from cold:
Clients/{Brand}/ for existing assets — brand guidelines, transcripts, style guides, performance data. These are gold and override anything from a website scrape.Clients/{Brand}/{SHORTCODE}-brand-bible.md — 10 sections covering company, product, customer, positioning, voice/tone, compliance, visual direction, personas/angles, paid social process, emotional architecture.{SHORTCODE}-creative-onboarding.md — the "read this before writing a single line of copy" cheat sheet.{SHORTCODE}-product-catalog.md.{SHORTCODE}-brand-voice-agent.md — the client-specific override for Agent 06 (Brand Compliance). 5 weighted scoring dimensions, hard violations list, proprietary truths.{SHORTCODE}.md.Clients/{BRAND}/
├ {SHORTCODE}.md ← client overview (personas, angles, KPI, team)
├ {SHORTCODE}-brand-bible.md ← 10-section comprehensive brand reference
├ {SHORTCODE}-creative-onboarding.md ← TL;DR brand cheat sheet
├ {SHORTCODE}-product-catalog.md ← every SKU with specs
├ {SHORTCODE}-brand-voice-agent.md ← Agent 06 override (brand-specific)
├ {SHORTCODE}-brand-spec-card.png ← typography + color palette card
└ {SHORTCODE}-visual-style-card.png ← photography direction + mood card
Every downstream batch (sales-proposal or existing-client) reads from this folder. Skipping setup or running it half-way is the #1 way to produce off-brand copy — there's nothing for Phase C's Agent 06 to anchor against. Both starter prompts will halt and point here if any prerequisite is missing.
Wraps the Phase A → G pipeline with sales-proposal-specific intake (discovery transcript drives voice DNA) and adds Phase F (build proposal site) + Phase G (compose email). The actual ad-generation phases are the same as the existing-client flow — they share the canonical BATCH_GENERATION_PIPELINE.md playbook.
Product and Logo Scraper.md against the brand URL. Run Color and Font Scraper.md. Read the discovery call transcript end-to-end and extract voice adjectives, banned words, persona signals, deal economics, specific objections. Build spec cards from scraped tokens + transcript-derived voice. The discovery transcript is the central anchor — without it, voice is guesses.AUDIT.md §1 Visual. STOP for user.AUDIT.md §2 Voice. STOP for user.{brand}.selfmade.co. index.html with prospect-specific economics, packaging, kickoff timeline. work.html with the 14 graded ads. Deploy to Vercel.email-draft.md. Short — 3-4 paragraphs max. The proposal page does the heavy lifting; the email is the hook.If you only want the 14 ads (no proposal site, no email), run Phases A (steps 1-6), B, C, D, E only. The full prompt has a slim-version block at the bottom of the file with this scope.
Differentiated from the sales-proposal flow by Phase A: the data drives the slate. Instead of voice from a discovery transcript, the iteration tracker provides a spend-weighted action plan that allocates EXTEND / RETIRE / FILL slots automatically.
pull-insights.mjs against the iteration tracker. Writes insights-export.json + an auto-formatted DATA_BRIEF.md with three buckets:
replicate/extend action-plan recs, sorted by priority. The proven winners.pause/avoid recs (dead/fatigued dimensions with material spend). Per-ad bottomByRoas losers.missing/underused types) by priority score.In-House Clients/Brands/{Brand} ({CODE})/Assets/) so SKU selection is data-grounded.
AUDIT.md §1. STOP for user.AUDIT.md §2. STOP.insights-export.json + DATA_BRIEF.md to the grader — these power Gate 10 (Brand Performance Resonance), which scores each ad's format × persona × angle × emotion against the action plan. Without these, Gate 10 is N/A and gates 0–9 redistribute pro rata.SETUP_NEW_CLIENT.md). Otherwise STOP and run setup first.https://insights.selfmade.co/client/{CODE} shows non-zero ads).INSIGHTS_AUTH_PASS exported in the shell.This file has accumulated several universal patterns the user codifies after each batch — currently includes:
— Name, role. attribution lineDefines Phase 0 → Phase 8 as the universal sequence, independent of which starter prompt invokes it. Each phase has a documented failure mode the phase exists to prevent (most pulled from the BlackMask 2026-04-29 batch and subsequent learnings).
SETUP_NEW_CLIENT.md for the one-time setup flow./Briefing/Asset Types/ has 4–9 styles inside it (Style A, B, C…). Defaulting to Style A in every file produces 14 versions of the same ad. Per-slot variant selection against the brand DNA.AUDIT_TEMPLATE.md. 12-bucket coarse surface taxonomy. Cluster cap of 3 slots per bucket. Adjacent-pair check on 4 dimensions. Pinterest grid test.AUDIT_TEMPLATE.md. Voice register tally, source citation per line, repeated-anchor check, brand-swap test.generate-ads-gpt2.mjs as the artifact that documents what shipped.The starter prompts evolve fast (each batch adds new universal patterns). This file is the durable canonical reference — the failure modes documented here are the seven that have actually shipped at SelfMade and the rules above are the antidote to each. When the starter prompts contradict each other, this is the source of truth.
Generated Assets/{date}/AUDIT.md. Fill in §1 at Phase B; §2 at Phase C. Both are STOP gates the user has to approve before Phase D burns Fal credits.Per-ad rubrics (Phase 4's 9-agent refinement, Phase 6's Agent 10 grader) score each ad independently. They cannot catch slate-level diversity failures:
Surface | Lighting | Format archetype matrix used to label these as "different" — but at thumbnail the cluster is obvious.Both are slate-level failures. This template audits the slate as a whole.
[PODCAST] / [REVIEW] / [META] / [BRAND-EDITORIAL] / [BRAND-PDP] / [BRAND] / [SATIRE-ALLOWED]Diversity is a property of the slate, not of any individual rendered ad. Catching clustering after Fal generation costs $30+ in regen per batch. The audit lives at the briefing stage — STOP gates at Phase B and Phase C — so the cluster gets fixed in the prompt, not in the rendered output.
generate-ads-gpt2.mjs script in any batch reads its prompt blocks from this file.nano_banana_revision_prompt.md, and BATCH_GENERATION_PIPELINE.md.generate-ads-gpt2.mjs template. fal.subscribe("openai/gpt-image-2/edit", ...). Sequential per-ad calls. 4-attempt fetch retry. Save on success.The SAFE_ZONE block in § 3.2 is the difference between an ad that ships and an ad with a headline rendered into Instagram's top status-bar zone. The Tier 1 rules in § 3.6 are the difference between an ad with a real-looking can on a real surface and an ad with paper-inset artifacts that the model invents. Every one of these rules came from a specific failure that shipped — they are not theoretical.
The starter prompts (sales-proposal and existing-client) are orchestration wrappers. They invoke the canonical pipeline, point at the right brand-specific files, and add use-case-specific deliverables (proposal site for sales; nothing extra for existing-client). The pipeline doc is the canonical sequence. The audit template is a STOP gate inside the pipeline. The technical reference (GPT Image 2) is consumed at Phase D.
| Term | What it means |
|---|---|
| Phase A–G | The seven canonical phases of any batch. A=brand setup/data brief · B=concept slate · C=copy refinement · D=generate · E=grade · F=deliver 9:16 · G=resize to 1:1. |
| Phases 0–8 | Same flow, indexed differently in BATCH_GENERATION_PIPELINE.md. 0=brand setup · 1=concept slate · 2=variant selection · 3=visual audit · 3.5=thumbnail one-liners · 4=copy refinement · 4.5=voice audit · 5=generate · 6=grade · 7=iterate · 8=ship. |
| EXTEND / FILL / RETIRE | Slot allocation buckets in the existing-client flow. EXTEND = replicate proven winners. FILL = fill Adlib gaps with untested types. RETIRE = avoid dimensions that have failed. |
| King's Hawaiian quotas | Mandatory archetype quotas in every 12-20 ad batch: ≥ 2 platform-native UGC · ≥ 1 macro extreme close-up · ≥ 1 outdoor/location · ≥ 1 type-only/no-product · ≥ 1 chaotic tablescape. Named after the King's Hawaiian 2026-04-29 batch where their absence produced 9 of 14 monotonous editorial ads. |
| Hard gate 1 | Phase 4 / Phase C — every ad's COPY must score ≥ 90 on each of the 9 ad-pipeline rubrics before Fal generation. |
| Hard gate 2 | Phase 6 / Phase E — every generated ad must score ≥ 90 on Agent 10's 11-gate rubric before delivery. |
| Agent 06 brand-voice override | The brand-specific voice agent at Clients/{Brand}/{SHORTCODE}-brand-voice-agent.md replaces the generic Agent 06 (Brand Compliance) for that brand. 5 weighted scoring dimensions + brand's 8-10 proprietary truths. |
| SAFE_ZONE block | The verbatim hard-pixel-constraint block from GPT_IMAGE_2_PIPELINE.md § 3.2. Every Phase D prompt prefixes this. Top 400 px and bottom 400 px must be text-free. Without it, GPT Image 2 routinely places text in Instagram's top-overlay zone. |
| Tier 1 rules | The 14 hard-fail rules from GPT_IMAGE_2_PIPELINE.md § 3.6 appended to every prompt. Each came from a real shipped failure. |
| Visual cluster failure | Slate ships with 4+ ads reading as the same visual mood at thumbnail despite using "different" format archetypes. Caught by AUDIT_TEMPLATE.md §1. |
| Voice register over-indexing | Slate skews heavily to one voice register (founder-podcast, award-credibility, etc.) even though every ad's copy passes the 9-agent refinement. Caught by AUDIT_TEMPLATE.md §2. |
| Iteration tracker | The internal data warehouse at insights.selfmade.co. Nightly cron syncs Meta ad-grading per client. Powers Phase A in the existing-client flow via pull-insights.mjs. |
| Adlib | The vertical-benchmark service at adlib.getskipper.ai. Compares a brand's ad mix against the rest of its vertical (Beauty, Fashion, F&B, Wellness, Fitness, Pet, Home, Tech) and surfaces format/persona/angle gaps. Powers the FILL bucket in the data brief. |