$npx -y skills add heymegabyte/claude-skills --skill 12-media-orchestrationSection-by-section media planning and generation. Image generation (GPT Image 1.5 primary, built-in fallback), logo/icon generation (Ideogram v3 → favicon set), video generation (Sora), social preview images (OG 1200x630 + AI search optimization), stock photo curation (Pexels, Pi
| 1 | # 12 — Media Orchestration |
| 2 | |
| 3 | Plan and generate all site media section-by-section: images (GPT Image 1.5), logos (Ideogram v3), video (Sora), OG cards, and compression pipeline. |
| 4 | |
| 5 | > **Model migration note (pass-77, 2026-06-09)**: `DALL-E` → **GPT Image 1.5** + `GPT-4o` → **GPT Image 2 vision**. Per `platform.openai.com/docs/deprecations`. |
| 6 | |
| 7 | ## Submodules |
| 8 | |
| 9 | - **media-prompts** — prompt templates, Ideogram v3 API |
| 10 | - **compression-pipeline** — Python code, format tables, CF Image Transforms, CLS, broken image detection |
| 11 | - **og-image-generation** — Satori edge-rendered OG, KV / R2 cache, meta-tag helper |
| 12 | - **image-optimization** — Sharp processing, responsive srcset, WebP/AVIF, blur placeholders, R2 pipeline |
| 13 | - **image-profiling** — GPT Image 2 vision batch profiling |
| 14 | - **lightbox-classifier** — per-image eligibility: `kind!=logo` + ≥1024×768 + score≥7 |
| 15 | - **social-brand-hex** — canonical brand-color map per social platform |
| 16 | - **notebooklm-pipeline** — per-site podcast via ElevenLabs Studio + infographic via Vega-Lite/Recraft/GPT-Image-2 + HeyGen video + CF Stream + RSS + JSON-LD + cost ceiling $3.50/site |
| 17 | |
| 18 | ## Strategy by Section |
| 19 | |
| 20 | Hero → GPT Image 1.5 / Sora · Features → GPT Image 1.5 / SVG · How It Works → GPT Image 1.5 · Testimonials → stock · About → stock/real · Blog → GPT Image 1.5 · Social → Satori OG 1200×630 · Icons → Ideogram v3 |
| 21 | |
| 22 | Pre-gen checklist: communication goal? Brand style? Dimensions? Format? Budget? Stock or generated? |
| 23 | |
| 24 | ## Visual Inspection (MANDATORY) |
| 25 | |
| 26 | Read every image before deploy. Check: blur, artifacts, watermarks, wrong colors, AI hallucinations, gibberish text. Fail = regenerate w/ improved prompt. Quality bar: 2× retina, no artifacts, brand palette, consistent style, no uncanny valley. |
| 27 | |
| 28 | ## Brian's Style |
| 29 | |
| 30 | - Space/cosmic — `#00E5FF` + `#7C3AED`, deep black (`#060610`); connections/dots — quantum, neural, constellation |
| 31 | - "Ultra realistic" scenes; transparent logos; simpler always; motifs — squirrels, turtles |
| 32 | |
| 33 | ## Image Generation |
| 34 | |
| 35 | - **GPT Image 1.5** preferred (best quality); **GPT Image 1** for speed; **GPT Image 1-mini** for bulk/drafts |
| 36 | - Fallback: `scripts/image_gen.py`; product screenshots: Playwright on live URL |
| 37 | - Be specific: include colors, specify avoidances |
| 38 | |
| 39 | ## GPT Image 1.5 First Slot-Fill (CANONICAL — UNIVERSAL) |
| 40 | |
| 41 | PRIMARY originator for every slot real-entity sources (Places / uploads / scrape) didn't fill. GPT Image 1.5 invoked BEFORE generic stock; stock APIs run parallel speed-pass fallback (instant return if GPT Image 1.5 hangs >15s). See skill 15 `media-acquisition` + Fail-CLOSED auto-regenerate (5 attempts, $0.40 worst-case ceiling per slot). |
| 42 | |
| 43 | ## Per-Slot Prompt Mandatory Fields (BUILD-BREAKING — `validate-image-prompts.mjs` + `validate-dalle-slot-fill.mjs`) |
| 44 | |
| 45 | Every GPT Image 1.5 call MUST encode 6 fields from `_media_slots.json`: |
| 46 | |
| 47 | 1. Page topic + intent verbatim from `topic_intent` |
| 48 | 2. Brand palette tokens from `_brand.json.colors` (inline hex) |
| 49 | 3. Composition + aspect ratio matching `aspect` |
| 50 | 4. Subject specificity (NEVER "people" — always "octogenarian volunteer plating soup, soft window light, documentary style") |
| 51 | 5. Photographic technical specs (camera, lens, lighting, DoF — "shot on Hasselblad, 85mm prime, golden hour, shallow DoF") |
| 52 | 6. Negative prompt block ("no text, no watermarks, no logos, no extra fingers, no AI artifacts, no stock-photo cliches") |
| 53 | |
| 54 | Generic prompts FAIL validator. Same template applies to FLUX, Recraft, Stability. |
| 55 | |
| 56 | ## Fail-CLOSED Auto-Regenerate (BUILD-BREAKING — `validate-no-empty-slots.mjs`) |
| 57 | |
| 58 | Every slot MUST end build w/ `filled_url != null AND filled_score >= relevance_floor` (default 8/10 via GPT Image 2 vision). Failure modes (Pexels empty, NSFW-flagged, broken scrape, vision below floor) → immediate re-gen w/ REFINED prompt — NEVER silent skip, NEVER substitute brand-gradient unless 5 attempts exhausted. `media_pipeline_orchestrator` sub-agent owns this loop. See `media-acquisition.md` § Fail-CLOSED chain. |
| 59 | |
| 60 | ## Logo / Ico |