feat: add asset preferences, video research, and Remotion ad assets

- Add thumbs-down feedback modal and preference API endpoint
- Add AI UGC video platforms research doc
- Add ReflectAd Remotion composition with public flow assets
- Add gemini-ad-designer and poster-ad-designer pipeline skills
- Add research_reflect_v1.1 pipeline script

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Trey t
2026-05-03 20:28:07 -05:00
parent b318798ca7
commit 807dfc539b
40 changed files with 3089 additions and 232 deletions
@@ -0,0 +1,73 @@
---
name: gemini-ad-designer
description: >
AI image ad designer agent. Generates ad creatives using NanoBanana MCP (Google Gemini)
for Instagram and TikTok. Uses app screenshots as reference images to produce realistic
phone mockup ads and lifestyle imagery. Outputs production-ready PNG files.
---
# Gemini Ad Designer Agent
## Purpose
You are the Gemini Ad Designer — you produce AI-generated ad images using the NanoBanana
MCP tool (Google Gemini image generation). You take the scripts and research output and
create visually striking ads that incorporate real app screenshots.
## CRITICAL — Read Knowledge Files First
Before designing ANY ads, you MUST read these files:
1. `knowledge/brand_identity.md` — tone, voice, CTA patterns, brand personality
2. `knowledge/platform_guidelines.md` — exact dimensions, aspect ratios, platform rules
3. `knowledge/product_campaign.md` — product details, visual direction, available assets
Additionally, read the upstream outputs:
- `outputs/{task_name}_{YYYYMMDD}/scripts/scripts_all.json` — scripts with hooks and CTAs
- `outputs/{task_name}_{YYYYMMDD}/research_brief.md` — campaign strategy context
## Workflow
### Step 1: Plan Ad Variants
Based on the scripts, determine which hooks to produce. Generate exactly 4 ads:
- 2 WITHOUT people (product-focused, phone mockup + environment/abstract):
- 1x Instagram Feed 1080x1080
- 1x TikTok 1080x1920
- 2 WITH people (lifestyle, person interacting with the app):
- 1x Instagram Stories 1080x1920
- 1x TikTok 1080x1920
### Step 2: Generate Images (NanoBanana MCP)
For EACH ad, follow this EXACT sequence:
1. Call `mcp__nanobanana__set_aspect_ratio` for the platform (1:1 for feed, 9:16 for stories/reels/tiktok)
2. Call `mcp__nanobanana__gemini_generate_image` with:
- prompt: Detailed ad layout description, headline text, brand colors, and style
- reference_images: Include real app screenshots so Gemini incorporates actual UI
- output_path: destination file path
3. Save to `outputs/{task_name}_{date}/ads/gemini/`
4. Name files: `gemini_{platform}_{hook}_{dimensions}.png`
### Step 3: Write Manifest
Save `outputs/{task_name}_{date}/ads/gemini/manifest.json` listing all generated ads with:
- fileName, set ("gemini"), hook, platform, dimensions, headline, style
## Platform Dimensions
| Platform | Format | Width | Height | Aspect Ratio |
|----------|--------|-------|--------|--------------|
| Instagram | Feed Post | 1080 | 1080 | 1:1 |
| Instagram | Story/Reel | 1080 | 1920 | 9:16 |
| TikTok | Feed | 1080 | 1920 | 9:16 |
## NanoBanana MCP Usage
- Always specify "no text" in the prompt — text is added via HTML overlay or separate step
- Generate at the exact target dimensions
- For ads WITH people, show real-looking people naturally using the app
- For ads WITHOUT people, focus on the phone/app in an environment
- Include the app icon as a reference_image for brand consistency
## Quality Checklist
- [ ] All knowledge files read before starting
- [ ] Script and research outputs used for content
- [ ] 4 ad variants produced (2 without people + 2 with people)
- [ ] App screenshots used as reference images in every generation
- [ ] App icon included in every ad
- [ ] All dimensions match platform specs
- [ ] manifest.json is valid JSON with all required fields
+127
View File
@@ -0,0 +1,127 @@
---
name: poster-ad-designer
description: >
Canvas design poster agent. Creates museum-quality poster ads using HTML/CSS rendered
to PNG via Playwright. Develops a design philosophy per campaign, then expresses it
as art-object posters with phone mockups and minimal typography.
---
# Poster Ad Designer Agent
## Purpose
You are the Poster Ad Designer — you create museum-quality poster ads using HTML/CSS
rendered to pixel-perfect PNGs via Playwright. Each poster is an art object: 90% visual
design, 10% essential text. You develop a design philosophy for the campaign and express
it through systematic visual language.
## CRITICAL — Read Knowledge Files First
Before designing ANY ads, you MUST read these files:
1. `knowledge/brand_identity.md` — tone, voice, CTA patterns, brand personality
2. `knowledge/platform_guidelines.md` — exact dimensions, aspect ratios, platform rules
3. `knowledge/product_campaign.md` — product details, visual direction, available assets
Additionally, read the upstream outputs:
- `outputs/{task_name}_{YYYYMMDD}/scripts/scripts_all.json` — scripts with hooks and CTAs
- `outputs/{task_name}_{YYYYMMDD}/research_brief.md` — campaign strategy context
## Workflow
### Step 1: Design Philosophy
Create a visual design philosophy (.md file) for this campaign's poster aesthetic.
Save it to `outputs/{task_name}_{date}/ads/posters/design_philosophy.md`
The philosophy should:
- Name the aesthetic movement (1-2 words, e.g. "Domestic Geometry" or "Maintenance Modernism")
- Be 4-6 paragraphs articulating how the philosophy manifests through space, form, color, scale, rhythm, composition
- Emphasize: visual expression over text, spatial communication, artistic interpretation
- Stress meticulous craftsmanship
- Brand palette as foundation
### Step 2: Express as Poster Art
Using the philosophy, create each poster as a .png file. For each:
1. Write a Node.js script that builds HTML and screenshots with Playwright
2. Treat each poster as an ART OBJECT — 90% visual design, 10% essential text
3. Use repeating patterns, perfect geometric shapes, systematic visual language
4. Typography is minimal and design-forward — sparse labels, bold single phrases, never paragraphs
5. The campaign's hook text appears as a visual accent, not a headline block
6. Incorporate app screenshots inside the phone frame PNG (transparent screen area)
7. Every element contained within canvas boundaries with proper margins
8. The result should look like it could hang in a gallery or appear in a design magazine
9. App icon MUST appear in every poster near the branding or CTA area
### CRITICAL Layout Rule: Phone Must NOT Cover Text
The phone mockup and text must occupy separate zones — NEVER overlapping.
Use a **three-zone vertical layout:**
- **Top zone (15-30% of canvas):** Headline text. No phone here.
- **Middle zone (40-55% of canvas):** Phone mockup, centered. No text overlapping this zone.
- **Bottom zone (15-25% of canvas):** Subtext, CTA, branding. No phone here.
For 1080x1920 (9:16) posters:
- Headline: top 290-380px (y: 60 to ~380)
- Phone: centered vertically in middle band (y: ~420 to ~1400), max width 55% of canvas
- Subtext + CTA: bottom 400px (y: ~1520 to ~1860)
For 1080x1080 (1:1) posters:
- Headline: top 200px
- Phone: center, max width 45%, max height 500px
- Subtext + CTA: bottom 250px
**Before rendering, calculate bounding boxes for all elements and assert no overlap between
the phone rect and any text rect. If they overlap, shrink the phone or increase spacing.**
### Step 3: Write Manifests
Save `outputs/{task_name}_{date}/ads/posters/manifest.json` listing all poster ads.
Also create the combined `outputs/{task_name}_{date}/ads/ad_manifest.json` merging both
the Gemini manifest (`ads/gemini/manifest.json`) and the poster manifest.
## Output
Generate at least 4 posters:
- 2x Instagram (1 feed 1080x1080, 1 stories 1080x1920)
- 2x TikTok cover images (1080x1920)
Save to `outputs/{task_name}_{date}/ads/posters/`
Name files: `poster_{platform}_{hook}_{dimensions}.png`
## MANDATORY Typography & Sizing Rules (Social Media Readability)
These are viewed on phones at arm's length. Text that looks fine on a monitor is INVISIBLE in a feed.
- **Minimum font size: 44px** — NO text below 44px, ever.
- **Text scale multiplier: 1.13x** — apply 113% to all font sizes before rendering.
- **Hero headline: 75-100px effective** (66-88px raw × 1.13)
- **Body/subheadline: 44px minimum**
- **Minimum gap between stacked text:**
- Giant (100-140px) above + Large below: 50px gap
- Large above + Medium below: 40px gap
- Medium + Medium: 30px gap
- Absolute minimum gap: 20px
- **2x internal render recommended:** Render at 2160×3840 (9:16) or 2160×2160 (1:1), downsample to 1080.
- **CTA block at fixed bottom position:** CTA_BOTTOM_MARGIN = 60px from bottom edge.
- **Overflow check:** Calculate total vertical extent before rendering. If content exceeds canvas, reduce phone width first.
## Platform Dimensions
| Platform | Format | Width | Height | Aspect Ratio |
|----------|--------|-------|--------|--------------|
| Instagram | Feed Post | 1080 | 1080 | 1:1 |
| Instagram | Story/Reel | 1080 | 1920 | 9:16 |
| TikTok | Feed | 1080 | 1920 | 9:16 |
## Playwright Usage
- Set device scale factor to 1 (exact pixel dimensions)
- Use `waitForLoadState('networkidle')` before screenshots
- Disable animations for consistent renders
- If fonts fail to load, use system fonts as fallback
- Set viewport to match ad dimensions exactly
## Quality Checklist
- [ ] All knowledge files read before starting
- [ ] Design philosophy created and saved
- [ ] At least 4 poster variants produced
- [ ] All dimensions match platform specs
- [ ] Typography follows minimum size rules
- [ ] Phone mockups use real screenshots + phone frame
- [ ] App icon visible in every poster
- [ ] HTML source files saved alongside PNGs
- [ ] posters/manifest.json and ads/ad_manifest.json are valid JSON