Back to Blog

Build an AI Ad Creative Factory with OpenClaw

An autonomous agent that generates 60+ ad creatives overnight - copy, images, and video - organized in Airtable for client review by morning. Sell it as a $3K-$7K setup + $800-$1,500/month creative automation service.

What You'll Build and Sell
  • An overnight creative factory that generates 60+ ad creatives (copy + images + video specs) while you sleep, organized in Airtable for client review by morning
  • Exact pipeline: OpenClaw (brain) + fal.ai/FLUX.2 Pro (images) + Nano Banana 2 (ideation) + Creatomate (video) + Airtable (database + approvals)
  • Copy-paste config files: SOUL.md, AGENTS.md, HEARTBEAT.md, and BRAND_KIT.md for a creative director agent
  • Full Airtable schema: 7 tables (Brands, Campaigns, Personas, Concepts, Assets, QA, Performance) with status flows and approval views
  • Platform spec compliance: Auto-formatting for Meta (1:1, 4:5, 9:16), TikTok (9:16), Google Display (1.91:1), YouTube Shorts (9:16)
  • Model routing that keeps image generation under $5 per batch of 60 creatives
  • A/B test structure: 4 personas x 3 concepts x 3 copy variants x format permutations = 60+ assets
  • Client onboarding questionnaire that feeds directly into SOUL.md brand configuration
  • Pricing: $3K-$7K setup + $800-$1,500/month retainer with 80%+ gross margins
  • 3-layer QA: automated spec checks, vision-model review, human approval
01

Why Creative Factories Are the Biggest Opportunity in 2026

Ad creative is the bottleneck. Brands need 30-60 new creatives per month minimum to avoid ad fatigue on Meta and TikTok. A traditional creative agency charges $3,000-$10,000/month for 8-15 assets. A single static ad from a freelancer costs $50-$200. A short video costs $200-$500. The math doesn't work at scale.

Your AI agent produces 60+ creatives overnight for approximately $15-$40 in compute. That's $17 per creative vs $200-$300 per creative from an agency. 12x cheaper, 3x the volume, refreshed weekly instead of monthly.

12x
Cheaper per creative
60+
Creatives per batch
80%+
Gross margins

Real case studies proving the model:

Salomon - 1,600+ Creatives via Pencil AI
Over an 8-week pilot, Salomon generated 1,600+ creatives, built 13+ modular templates, localized for 3 personas, 6 markets, 6 languages, and 8 channels - with zero physical shoots. This is the exact "creative factory" model your course teaches, just with a different tool stack.
BARK - 3x Revenue Per Click
AI-generated ads produced 3x revenue per click in one comparison test and raised overseas account-average CTR from 0.8% to 1.1%. The improvement came from testing velocity, not individual creative quality.
Chime - 60% Faster Ad Production
Fintech company Chime used AI tools to cut ad production time by 60%, reduce campaign cycles from 10 weeks to 4 weeks, and eliminate outside creative agency retainers entirely.
ZBANX - 80% Drop in Production Costs
Reported an 80% drop in ad production costs using AI creative agents. The savings came from eliminating per-asset freelancer fees and compressing the production timeline from weeks to hours.
Amplifon / EarPros - Saved 80,000 Euros
Used AI to make deliberately plain "ugly ads" for performance campaigns because their agency couldn't produce work that fit the brief. The value wasn't beauty - it was fast iteration and brief compliance.
Diageo - Multi-Brand Seasonal Campaigns
Used AI to create culturally adapted assets including image generation, animation, and copywriting while maintaining brand identity across Johnnie Walker, Captain Morgan, Tanqueray, and Don Julio.
L'Oreal - AI Product Photography
Evaluated whether AI could replace part of product photoshoots while maintaining high standards across multiple divisions. The answer was yes for many product categories.
THE GAP YOU'RE FILLING

SaaS tools like AdCreative.ai ($39-$599/year) solve generation but lack brand nuance, custom workflows, and deep Airtable/Notion integration. Full agencies charge $5K-$15K/month but deliver only 8-15 assets. Your OpenClaw agent sits in the middle: custom, brand-trained, 60+ assets, $800-$1,500/month. That's the gap. You're selling workflow ownership, not image generation.

Full Build Course: Architecture + Schema + Client Templates

The free preview ends here. Unlock the complete build: overnight pipeline architecture, copy-paste SOUL.md/AGENTS.md, full 7-table Airtable schema, image and video generation stack, platform spec tables, client onboarding form, ROI calculator, and QA checklist.

$12.99
One-time purchase. Yours forever. Or included with Full Access ($79.99).
02

The Overnight Pipeline Architecture

This is not "one giant autonomous agent." It's an orchestrated creative factory: OpenClaw holds the brain, scheduling, QA, and delivery logic. Airtable is the system of record. fal.ai and FLUX generate images. Creatomate generates motion. The winning systems in 2026 are workflow stacks, not single-model magic.

Use Scheduled Tasks (Cron), not Heartbeat for the main overnight run. OpenClaw's docs are explicit: cron is for exact timing and isolated execution. Heartbeat is approximate and meant for periodic awareness checks (defaults to every 30 minutes). Heartbeat is for monitoring; cron is for production.

1
01:05 AM - Concept and copy generation. Agent reads BRAND_KIT.md, current campaign briefs from Airtable, product feed. Generates 3-5 personas, 8-12 concepts, messaging angles, hooks, and headlines using GPT-5.5 (approximately $0.03 per 10 copy variations).
2
01:30 AM - Image prompt engineering. For each concept, generates detailed image prompts with brand colors (hex codes), product references, style vocabulary, and platform-specific aspect ratios.
3
02:00 AM - Image generation (parallel batch). Calls fal.ai with FLUX.2 Pro (production statics at $0.03-$0.05/image) and Nano Banana 2 (ideation and text-heavy variants at $0.04-$0.06/image). 60+ images across all platform formats.
4
03:00 AM - Video generation. Top 8-12 static winners get turned into 6-15 second motion ads via Creatomate templates: Ken Burns zoom, text overlay animation, product parallax, CTA end card. Output: MP4, H.264, 1080p.
5
05:00 AM - QA pass. Automated spec checker validates dimensions, file size, format. Vision model checks text legibility, product realism, brand color match, safe-zone compliance. Failed items flagged for human review.
6
05:30 AM - Airtable sync. All assets written to Airtable with full metadata: persona, concept, copy, prompt, image URL, video URL, platform, format, spec check status. Status set to "Pending Review."
7
06:00 AM - Morning summary. Agent sends Slack/email digest: "60 creatives ready for approval. Top 10 recommended starters. 3 items flagged for review."

The agent has four sub-jobs:

Strategist: creates personas, angles, hooks, offers. Art Director: writes image prompts and picks reference frames. Production Coordinator: routes jobs to the right image/video provider and stores outputs. QA/Editor: scores assets for fit, flags broken ones, and assembles approval sets.

STAGGER YOUR CRON JOBS

Don't run everything in one monolithic job. Stagger: concepts at 01:05, images at 02:00, video at 03:00, QA at 05:00, Airtable sync at 05:30. OpenClaw cron persists jobs, tracks run history, and can deliver results to a webhook or channel. This is safer and lets you debug each stage independently.

03

The Config Files (Copy-Paste)

SOUL.md
# Creative Director Agent - {{BRAND_NAME}} ## Role You are the Creative Director Agent for {{BRAND_NAME}}. ## Mission Generate high-performing paid social creative concepts, statics, and short-form motion assets that are on-brand, platform-safe, and ready for testing. ## Priorities 1. Stay within brand voice, color system, and visual style. 2. Generate concepts before variations. 3. Optimize for testing velocity, not one-off perfection. 4. Never invent product claims, pricing, ingredients, certifications, or legal statements. 5. Prefer clear hooks, strong product focus, and direct visual communication. 6. Flag anything that looks off-brand, misleading, unreadable, or policy-risky. ## Creative Rules - Every asset must map to one persona, one angle, one offer, and one platform. - Keep each batch diverse in concept but consistent in brand language. - For each concept, create controlled variations: hook, background/scene, CTA, crop/ratio, headline treatment. - Do not vary all dimensions at once. Change one variable per test cell. - Reuse approved reference images and brand-approved visual patterns. - Every headline must include either a number, a time element, or a sensory word. - Every image prompt must specify lighting, angle, and background context. ## Platform Adaptation - Meta: Bold text overlays, social proof elements. 4:5 takes 20% more vertical space - prefer it. - TikTok: Native, lo-fi, creator-style. 9:16 vertical drives 41% higher engagement than cropped. - Google Display: Clean product focus, clear value prop. 1.91:1 landscape + 1:1 square. - YouTube Shorts: 9:16, 12-20 seconds, sound-on design. ## Quality Standards - Every creative must pass the "3-second test": communicate the offer in 3 seconds with sound off. - Every image prompt must specify lighting, angle, and background context. - Respect platform safe zones (text in center 50% for 9:16; avoid top 14% and bottom 35% on Stories/Reels). - TikTok: top 130px clear, bottom 440px clear. ## Hard Constraints - NEVER generate NSFW, misleading, or policy-violating content. - NEVER use competitor trademarks or copyrighted characters. - NEVER auto-publish to ad platforms. Human approval required for all live campaigns. - NEVER fabricate claims about health, income, or scarcity. - ALWAYS include required disclaimers for regulated products. - If compliance is uncertain, mark HOLD_FOR_REVIEW. ## Brand Protection - Use only approved logos, colors, fonts, claims, and CTA language from BRAND_KIT.md. - If product realism is weak, reject or mark for human review. - If text rendering is poor, regenerate or escalate. ## Output Standard Every creative record must include: campaign, persona, angle, hook, body copy, prompt, model used, aspect ratio, platform, status, and approval notes.
AGENTS.md
# Creative Production Workflow ## Phase 1: Discovery (Run Once Per Client) 1. Read BRAND_KIT.md - guidelines, product catalog, past winners 2. Analyze top 3 competitor ads via Meta Ad Library (if accessible) 3. Define 3-5 core personas with pain points, buying triggers, and objections 4. Run "Voice Analysis" job: extract tone descriptors, recurring phrases, banned phrases 5. Save brand_voice.yaml: tone: "Playful, irreverent, but never rude" must_use_phrases: ["plant-based", "cold-brew", "no jitters"] banned_phrases: ["cheap", "diet", "weight loss"] reading_level: "Grade 7-8" ## Phase 2: Nightly Batch Generation (Cron: 01:05 AM) 1. Load active brands and tomorrow's production queue from Airtable 2. For each brand: a. Generate 5 headline variations per persona (15 total) b. Generate 3 description variations per headline (45 total) c. Generate 4 image prompts per concept (60+ prompts) d. Batch call fal.ai: 60 images prioritized by predicted performance e. Select top 8-12 statics for video generation via Creatomate 3. Upload all assets to client CDN (S3/Cloudinary) 4. Update Airtable: all rows with URLs, status "Pending Review" ## Phase 3: QA and Escalation 1. Auto-check: spec compliance (dimensions, file type, file size) 2. Auto-check: brand rules (primary color present? logo present? banned phrases absent?) 3. Vision model: text legibility, product realism, color match, safe-zone compliance 4. Flag items with confidence below 0.8 for human review queue 5. Never auto-publish. Status must go through human approval. ## Phase 4: Delivery 1. Upon client approval, mark status "Approved" 2. Generate export packages by platform: /Meta/ /TikTok/ /Google/ /YTShorts/ 3. Send notification: Slack/email with Airtable link to approved batch ## Allowed Actions - Read brand assets and Airtable records - Call image generation APIs (fal.ai, Replicate) - Call video generation API (Creatomate) - Write to Airtable (create/update rows) - Send notifications via Slack/email - Upload assets to CDN ## Prohibited Actions - Auto-publish to any ad platform - Override human approvals - Delete Airtable records - Modify brand guidelines without human confirmation - Access client payment or financial systems
BRAND_KIT.md
# Brand Kit - {{BRAND_NAME}} # Generated from client onboarding questionnaire. Update monthly. ## Visual Identity Primary colors: [#123456, #F4F4F4] Secondary colors: [#789ABC] Logo: [CDN URL to logo files - PNG and SVG] Fonts: [Font names or CDN URLs] Photography style: [e.g., "bright, saturated, lifestyle with diverse models"] Style vocabulary: ["clean_product", "lifestyle", "UGC-style"] ## Brand Voice Tone: [e.g., "Playful, irreverent, but never rude"] Must-use phrases: [e.g., "plant-based", "cold-brew"] Banned phrases: [e.g., "cheap", "diet", "weight loss", competitor names] Reading level: [e.g., "Grade 7-8"] CTA style: [e.g., "Action-oriented but not aggressive: 'Shop the drop' not 'BUY NOW!!!'"] ## Products Product catalog URL: [Google Sheet / CSV link] Top 5 bestsellers: [product names with URLs] Price range: [$X to $Y] Unique selling propositions: [3 bullet points] Reference product photos: [CDN folder URL - 10-20 high-res shots] ## Target Audience Demographics: [age, gender, location, interests] Personas: [3-5 personas with pain points, buying triggers, objections] Competitor brands: [3 competitors to analyze] ## Platform Strategy Primary platforms: [Meta, TikTok, Google, YouTube] Current monthly ad spend: [$X] Past winning ads: [Drive folder / Airtable links] Current creative pain point: [e.g., "Creative fatigue after 2 weeks"] ## Compliance Required disclaimers: [shipping, returns, legal] Regulated claims: [anything health/income related] Mandatory disclosures: [e.g., "AI-generated content" if required by platform] ## Approved Reference Images Golden references (3-5 per campaign): [URLs] # Include these in every image prompt for visual consistency
cron-schedule.sh
# OpenClaw Scheduled Tasks for Creative Factory # Use OpenClaw's built-in cron, not OS-level cron where possible ## Production Schedule 01:05 - nightly_batch: Generate concepts + copy + image prompts + statics 03:00 - video_batch: Generate motion variants from shortlisted statics 05:00 - qa_pass: Run automated QA checks on all generated assets 05:30 - airtable_sync: Write all assets + metadata to Airtable 06:00 - morning_summary: Send digest to client/team channels ## Maintenance Schedule Every 60 min - requeue_failed: Retry any failed image/video generations Monday 09:00 - weekly_review: Update brand kit, refresh competitor analysis 1st of month - monthly_report: Generate cost analysis + performance report # Fallback system cron (if OpenClaw cron unavailable): # 5 1 * * * /usr/local/bin/openclaw task run nightly_batch >> /var/log/openclaw_creatives.log 2>&1

Version note (v2026.7.2+): In upcoming releases, HEARTBEAT.md is being migrated to SQLite-backed cron scratch, and TOOLS.md will merge into AGENTS.md. Both still work on current stable (v2026.7.1-2). After upgrading past v2026.7.2, run openclaw doctor --fix to migrate automatically. Always run openclaw doctor --fix after any install or upgrade.

setup.sh
# Project skeleton mkdir -p ~/openclaw-creative-factory cd ~/openclaw-creative-factory mkdir -p workspace memory scripts assets/brands assets/output logs npm init -y npm install airtable axios dotenv openai @fal-ai/client replicate p-limit sharp npm install @creatomate/cli # Alternative: JSON2Video (TTS included in credits, cheaper for voiceover ads) # npm install json2video # Optional: Remotion for custom video (cheapest at scale) npm install remotion @remotion/renderer react react-dom
.env
# OpenAI (copy generation) OPENAI_API_KEY=sk-... # fal.ai (image generation - primary) FAL_KEY=... # Replicate (image generation - backup) REPLICATE_API_TOKEN=... # BFL / FLUX direct (optional) BFL_API_KEY=... # Airtable AIRTABLE_PAT=pat... AIRTABLE_BASE_ID=app... # Creatomate (video generation) CREATOMATE_API_KEY=... # Notifications TELEGRAM_BOT_TOKEN=... TELEGRAM_CHAT_ID=... DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/...

Brand file structure (store per client in workspace/brands/):

workspace/brands/acme/colors.json
{ "primary": "#F05A28", "secondary": "#1E1E1E", "accent": "#FFF5EE", "background": "#FFFFFF" }
workspace/brands/acme/products.json
[ { "name": "GlowSerum Pro", "category": "Skincare", "benefits": ["Visible results in 7 days", "Clean ingredients", "SPF 30 built-in"], "objections": ["Too expensive", "Does it actually work?"], "price_range": "$39-$59" } ]
workspace/brands/acme/winning_ads.md
# Winning Ads Reference # Paste 3-10 examples of historically successful ads # The agent uses these as style references 1. "Glow in 7 days or your money back" - 3.2% CTR, $12 CPA Style: Close-up product shot, warm lighting, beige background Platform: Meta Feed 4:5 2. "Your morning routine, minus the guesswork" - 2.8% CTR Style: Lifestyle, woman at vanity, natural light Platform: TikTok 9:16
04

The Tool Stack: Models, Images, and Video

Model routing for ad creative (August 2026, verified):

ModelBest ForCostUse Case
Nano Banana 2Fast ideation, text-in-image, character consistency$0.04-0.06/image on fal.aiFirst-pass concepts, text-heavy creatives, up to 5-person consistency, 14 reference images
Nano Banana ProPremium quality, semantic accuracy$0.15/image ($0.30 at 4K)Final hero assets where quality matters most. Best reasoning and fidelity.
FLUX.2 ProProduction statics, high-volume$0.03-0.05/imageMost finals. Brand consistency via hex color control and multi-reference. Default production model.
FLUX.2 MaxPremium hero frames, character consistency$0.05-0.07/imageHero assets. Up to 8 reference images, hex color control.
FLUX.2 FlexTypography and text layout$0.03-0.05/imageWhen text placement and legibility matter most.
FLUX.3Keyframe-to-video (NEW)VariesBFL's frontier video model. Generates motion between keyframe anchor points. Consider for video ads.
Seedream V4.5Photorealistic output, built-in editing$0.03-0.04/imageStrong prompt adherence. Good alternative to FLUX.2 Pro for product shots.
GPT Image 2Best overall quality, precise edits~$0.04-0.07/imagePremium edits, strongest instruction-following. Note: DALL-E 2/3 deprecated, Sora discontinued.
Recraft V3Vector graphics, accurate text rendering$0.04/image ($0.08 vector)Logo-heavy designs, branded graphics. #1 on Hugging Face Text-to-Image leaderboard.
Grok ImagineCheapest drafts$0.022/imageQuick draft iterations before upgrading to production models.
Ideogram V3Marketing visuals with textAvailable on falStrong at text rendering in marketing contexts.

Tip: For quick prototyping and testing prompts before coding your pipeline, use Snippt.ai's Image Generator which supports the same models (FLUX.2, Nano Banana 2, Seedream 4.5) through a visual interface. Test your prompts there first, then automate via API.

Brand consistency across 60+ creatives:

1. Multi-reference prompts: Upload 3-10 product/brand shots as references. Include in every prompt. FLUX.2 Pro supports up to 10 reference images with hex color control. 2. Fixed style vocabulary: Every prompt includes a locked style string: "studio product photo, soft light, minimal, high contrast, no text, 1080x1350." 3. Hex colors in prompts: "Use brand colors #123456 and #F5F5F5 in background and accents." 4. LoRA fine-tuning: For major clients, train a LoRA on 10-20 brand images (~$50 one-time), then reference in prompts. 5. Seed control: Use consistent seeds for product-focused images. 6. Negative prompts: Standard exclusion: "blurry, low quality, distorted text, wrong colors, extra limbs."

Video generation (August 2026):

ToolCostBest For
CreatomateFree: 10 renders (watermarked). Starter $29/mo (100 renders), Essential $54/mo (500), Growth $129/mo (2,000)Template-based video. JSON payload in, MP4 out. Best balance of power and simplicity. Note: TTS costs extra on top of rendering credits. Unused credits expire each billing cycle.
JSON2VideoHobby $16.95/mo, Starter $39/mo (120 renders)TTS included in render credits (Azure 120+ voices + ElevenLabs). Cheaper than Creatomate for TTS-heavy workflows.
RemotionOpen source + hosting (~$0.50-2/render self-hosted)React-based, fully custom animations. Cheapest at scale. Remotion Lambda for cloud rendering. Remotion Cloud also available as managed option.
fal.ai video$0.05-$0.40/sec (model-dependent)AI video generation (Kling, Wan 2.5, Veo 3.1). More cinematic but less controllable for template work.

Tip: Use Snippt.ai's Video Studio and Image-to-Video tools to prototype motion concepts before automating with Creatomate or Remotion.

Static-to-video workflow: Pick top 8-12 statics. Turn each into a 6-15 second template-driven motion ad. Animate only: headline reveal, zoom/pan, product parallax, CTA end card, subtle background motion. Avoid "AI movie trailer" workflows. The goal is repeatable, programmatic motion, not cinematic experiments.

Cost Per Batch of 60 Creatives (August 2026)
60 images via FLUX.2 Pro ($0.04 avg)$2.40
10 images via Nano Banana 2 ($0.05 avg)$0.50
12 videos via Creatomate (~$0.50 each)$6.00
LLM costs for copy + prompts (GPT-5.5)$3-$5
Total per nightly batch$12-$14
05

The Airtable Schema (7 Tables)

Airtable is the production system of record. Airtable's official MCP server now lets AI tools read schemas, create records, update records, and respect permissions. Use Notion as the optional brand wiki / client-facing reporting layer, not the primary asset pipeline.

Airtable pricing (August 2026): Free plan allows 1,000 records per base, 1GB attachments, 100 automations/month, and 5 requests/sec API rate limit. At 60 creatives/month, the free tier lasts ~16 months for 1 client. For 2+ clients, upgrade to the Team plan ($20/user/month, 50,000 records/base). Self-hosted alternatives: NocoDB (open-source Airtable clone, free), Baserow (open-source), or Supabase (PostgreSQL-based, for technical users who want SQL). The schema below works in any of these with minor field-type adjustments.

Table 1: Brands - Brand name, logo files, hex colors, fonts, voice notes, banned words/claims, approved CTAs, product catalog links, reference ads, brand-safe prompts, active flag.

Table 2: Campaigns - Campaign name, goal, offer, platforms (multi-select), launch date, KPI target, status.

Table 3: Personas - Persona name, pain points, desired outcomes, buying triggers, objections, channel priority, notes.

Table 4: Concepts - Linked to Campaign + Persona. Angle, hook, offer, visual idea, concept score, status.

Table 5: Assets (main table)

FieldTypePurpose
Creative IDAutonumberCRE-2026-001-001
ConceptLink to ConceptsParent concept this asset belongs to
PlatformSingle selectMeta Feed, TikTok, Google Display, YouTube Shorts
FormatSingle select1:1 (1080x1080), 4:5 (1080x1350), 9:16 (1080x1920), 1.91:1 (1200x628)
HeadlineTextUnder 30 characters
Primary TextLong text50-150 characters ideal for Meta
CTAText"Shop the drop", "Get yours"
Image PromptLong textFull prompt sent to fal.ai (hidden from client view)
Model UsedSingle selectFLUX.2 Pro, Nano Banana 2, GPT Image 2
Image URLURL/AttachmentGenerated static asset
Video URLURL/AttachmentMotion variant (optional)
Spec Check PassCheckboxAuto-validated by QA step
StatusSingle selectDraft, Pending Review, Approved, Rejected, Revise, Live
ReviewerCollaboratorWho approves
Approval NotesLong textClient feedback
Batch IDTextBATCH-2026-0417-A (nightly run grouping)
Test BatchTextWhich A/B test group
Created AtCreated timeGeneration timestamp

Table 6: QA - Linked to Asset. Legibility score, safe-zone check, brand-fit check, claim-risk check, policy-risk check, needs regen flag, final pass flag.

Table 7: Performance Feedback - Linked to Asset. CTR, thumb-stop rate, CPC, CPA, ROAS, spend, winner flag, notes.

Table naming convention: Use exact names "Brands", "Campaigns", "Personas", "Concepts", "Image Assets" (for statics), "Video Assets" (for motion), "QA", and "Performance Feedback". The agent references these table names in Airtable API calls.

Long-term memory: OpenClaw stores long-term brand preferences in MEMORY.md (e.g., "Brand X prefers UGC-style over studio shots", "Warm beige backgrounds consistently outperform white"). Daily notes go in memory/YYYY-MM-DD.md. The agent reads these on every session start to improve over time.

Status flow: Briefed -> In Generation -> QA Review -> Client Review -> Approved -> Exported -> Live -> Performance Logged

Client views: "Pending Approval" (Gallery view, large previews, filtered to Spec Check Pass = true AND Status = Pending Review). "Approved Assets" (grouped by Platform/Format for export). "Performance Tracker" (Status = Live, showing Actual CTR vs Predicted).

The agent populates Airtable by assembling a JSON payload per creative and POSTing to https://api.airtable.com/v0/{base}/{table} via the Airtable MCP server.

06

Platform Specs and A/B Test Structure

PlatformPlacementAspect RatioResolutionNotes
MetaFeed1:1, 4:51080x1080, 1080x13504:5 takes 20% more vertical space. Max 30MB image, 4GB video. Old 20% text rule is gone, but algorithm may reduce delivery for text-heavy creative. Keep headlines to 5-7 words.
MetaStories/Reels9:161080x1920Safe zone: center 51%. Avoid top 14%, bottom 35%.
MetaCarousel1:11080x1080Never use 4:5 (gets cropped). 30MB per card.
TikTokIn-Feed9:16 (strongly)1080x19205-60 sec (9-15 optimal). Top 130px clear, bottom 440px clear. 9:16 drives 41% higher engagement.
TikTokSpark AdsSame as source1080x1920Uses organic post. No restriction on length.
GoogleResponsive - Landscape1.91:11200x628Max 5120 KB (5 MB).
GoogleResponsive - Square1:11200x1200Max 5120 KB.
GoogleMedium Rectangle6:5300x250150 KB limit.
YouTubeShorts Ads9:161080x1920Up to 60 sec. 10-30 sec recommended for action ads.
YouTubeBumper16:9, 9:16, 1:11920x10806 sec max.

Auto-formatting rule: Generate master assets first, then export into 4 default families: 1:1, 4:5, 9:16, 16:9. Do NOT generate each variation from scratch. One approved concept gets resized/recomposed into format families. This is how Salomon's Pencil workflow scaled across Meta, YouTube, Shorts, CRM, and e-commerce.

A/B test structure:

For each persona, define 1 concept family ("Problem-solution," "Before/after," "Social proof"). For each concept, generate 3 image styles (studio, UGC, lifestyle), 3 copy variants (different hooks), and 2-3 formats. This yields: 4 personas x 3 concepts x 3 copy variants = 36 copy variants. Add image style + aspect ratio permutations = easily 60+ assets. Set Airtable fields "Test Batch" and "Variant Group" so the media buyer can turn on 3-5 variants per batch, kill losers quickly, and let winners scale. Your agent's job is to refill the pipeline.

DO NOT VARY EVERYTHING AT ONCE

Current creative-testing guidance emphasizes concept count and structured testing over random asset volume. Vary persona, offer, hook, visual style, and CTA one at a time. Otherwise you learn nothing from testing. 8-12 concepts with controlled variations beats 60 random unrelated assets every time.

07

Client Onboarding Questionnaire

client-onboarding.md
CREATIVE AGENT ONBOARDING - [Client Name] 1. BRAND FOUNDATION - Brand name and tagline - Website URL and product catalog link - Brand story/positioning (2-3 sentences) - Competitors (3 brands you compete with) 2. VISUAL IDENTITY - Logo files (PNG, SVG, EPS) - Primary brand colors (hex codes) - Secondary/accent colors - Typography (font files or names) - Photography style: [ ] Lifestyle [ ] Studio [ ] UGC-style [ ] Mixed - Upload 10-20 reference brand/product photos - 15-20 high-quality product images on white background (for LoRA training) 3. PRODUCT DATA - Product feed (CSV/Google Sheet with names, prices, descriptions, images) - Top 5 bestsellers (prioritize these) - Price range: $____ to $____ - Unique selling propositions (3 bullet points) 4. AUDIENCE AND MESSAGING - Primary target demographic (age, gender, location, interests) - 3 customer personas with pain points - Tone of voice: [ ] Playful [ ] Professional [ ] Luxury [ ] Edgy - Words/phrases to NEVER use - Mandatory disclaimers (shipping, returns, legal) 5. PLATFORM STRATEGY - Primary ad platforms: [ ] Meta [ ] TikTok [ ] Google [ ] YouTube - Current monthly ad spend: $____ - Past winning ads (upload files or links to drive folder) - Past losing ads (what NOT to repeat) - Current creative pain point: _______________ 6. APPROVAL WORKFLOW - Who approves creative? (Name, email) - Required turnaround time: [ ] 24hrs [ ] 48hrs [ ] 1 week - Preferred feedback method: [ ] Airtable comments [ ] Email [ ] Slack 7. NEGATIVE GUIDELINES (Critical) - What do you HATE seeing in your ads? - Competitor names to never mention? - Visual styles to avoid? - Any previous agency work you want to avoid repeating?

Agent training process (4 weeks to full autonomy):

Week 1: Populate SOUL.md and BRAND_KIT.md from questionnaire. Upload assets to CDN. Run "Voice Analysis" to extract brand_voice.yaml. Week 2: Generate 20 test creatives. Get heavy client feedback. Refine prompts, adjust style vocabulary, narrow down what works. Week 3: Full batch (60 creatives). Establish approval workflow in Airtable. Client reviews and approves. Week 4: First campaign launch with client ad account. Begin performance tracking loop.

08

Pricing and ROI Math

ServiceMonthly CostOutput
Traditional Creative Agency$3,000-$10,000+8-15 assets/month
AI-Native Agency (Omneky model)$5,000-$8,00010-18 assets/sprint
Freelance Designer$3,000-$8,000 (for 60 assets)$50-$200 per static, $200-$500 per video
AdCreative.ai (SaaS)$25-$400Templates, limited brand nuance
Your OpenClaw Agent$800-$1,50060+ assets/month, fully brand-trained
ROI Example: DTC Brand Spending $20K/mo on Meta, Using Agency at $6K/mo
Current agency monthly cost$6,000
Current creatives delivered20
Current cost per creative$300
Current A/B tests per week5
Your AI agent monthly cost$1,000
Creatives delivered60+
Cost per creative$17
A/B tests per week15
Savings + 3x creative volume$5,000/mo saved
Your Margins: Single Client (August 2026)
fal.ai image generation (70 images at $0.04-0.06 avg)$3.50
Creatomate video (12 videos, Starter plan shared)$6.00
LLM costs (GPT-5.5 for copy/prompts)$5.00
OpenClaw VPS (shared across clients)$5.00
Airtable (Team plan $20/user/mo, shared across clients)$5.00
CDN storage/bandwidth$3.00
Total infrastructure per client~$28
You charge client$1,000/mo
Gross margin97% ($972/mo profit)

Even accounting for your time (QA review, client communication, prompt refinement), the margins are extraordinary. At 5 clients charging $1,000/month, you're at $5,000/month revenue with approximately $135 in compute costs.

09

QA Process and Failure Modes

3-layer QA process:

Layer 1 - Automated checks: Aspect ratio, resolution, file size, file presence, logo presence, CTA presence, banned-word scan, platform-safe dimensions.

Layer 2 - Vision model review: Text legibility, product realism, color match, safe-zone compliance, caption/image consistency. Items with confidence below 0.8 get flagged.

Layer 3 - Human approval: At launch, review 100%. At scale, review 20-30% randomly. If error rate stays under 5%, maintain sample size. If higher, pause and fix prompts before continuing. Never auto-publish without human sign-off.

FailureCauseFix
Brand inconsistencyPoor prompts, no style referenceMandatory brand image URL in every prompt. LoRA fine-tuning for major clients.
Text rendering errorsAI-generated text garbledUse FLUX.2 Flex or GPT Image 2 for text-heavy images. QA all text.
Unrealistic productsModel hallucinationProduct photo reference in prompt. Strict negative prompts. Reject and regen.
Copyright/trademark riskAI trained on copyrighted materialCustom LoRAs. Avoid generating recognizable IP. Human review flag.
Policy violationsHealth claims, income claims, misleadingSOUL.md hard constraints. Pre-flight policy check. Mandatory disclaimers.
Generic "AI slop"Off-persona messagingTight persona definitions. Concept-first workflow (not random asset spam).
Platform croppingImportant elements in unsafe zonesPre-configured Creatomate templates with safe-zone margins.
Client hates the outputStyle mismatchPilot round: 20 creatives first. Narrow to 3 ads they love, 3 they hate. Recalibrate before full batch.

The trust ladder for client autonomy:

PhasePeriodAgent AuthorityClient Involvement
PilotWeek 1-2Generate 20 samples onlyReview all. Approve none automatically.
AssistedWeek 3-4Auto-generate full batch. Flag 30% for review.Review flagged items only.
AutonomousMonth 2+Full batch. Flag only obvious errors (10%).Weekly check-in. Monthly deep review.
OptimizedMonth 3+Full auto-generation + performance-based optimization.Quarterly strategy sessions.
THE SETUP FEE COVERS CALIBRATION

This is why you charge $3K-$7K upfront. The setup fee covers brand voice modeling, prompt template calibration, LoRA training (if needed), QA tuning, and the pilot round. Weeks 1-2 are heavy feedback loops. Once you hit over 80% "looks like us" approval rate, unlock the full 60+ factory.

10

Monthly Deliverable and Reporting

Never send 60 flat files. Present 8-12 concept families. Each contains: 1 hero static, 3-5 variants, optional motion derivative, recommended platform mapping, and testing hypothesis.

Monthly package:

8 concept families. 40-60 statics. 8-12 motion variants. Export folders by platform (/Brand/2026-04/Meta/, /Brand/2026-04/TikTok/, etc). Airtable review board. Short monthly report.

Report metrics (what justifies the retainer):

Creative testing velocity: "Last month: 18 tested. This month: 54." Volume: creatives generated vs approved vs live. Velocity: days from product launch to live creative. CTR and CPC shifts on new vs old creatives. Cost per creative vs previous agency/freelancer costs. Time saved for internal teams. Top 5 performing creatives with performance metrics. New recommendations for next cycle.

monthly-report-template.md
[BRAND NAME] - Creative Factory Monthly Report Period: [Month Year] ## Summary Concepts generated: [X] Total assets created: [X] Assets approved: [X] ([X]% approval rate) Assets launched: [X] Motion variants: [X] ## Cost AI infrastructure: $[X] Your retainer: $[X] Cost per creative: $[X] vs. previous agency: $[X] per creative ## Performance Avg CTR (new creatives): [X]% Avg CTR (previous month): [X]% Best performer: [Creative ID] - [X]% CTR, [X] ROAS A/B tests run this month: [X] Creative refresh frequency: [weekly/biweekly] ## Top 5 Winners 1. [Creative ID] - [Platform] - [X]% CTR - [Concept description] 2. ... ## Recommendations - [e.g., "UGC-style outperforming studio shots 2:1 - shifting next batch"] - [e.g., "Hook 'Save X hours/week' driving 40% higher thumb-stop rate"] - [e.g., "9:16 video consistently outperforming static on TikTok"]
11

Integration Code (Images + Video + Copy)

fal.ai image generation (exact JS call):

generate-images-fal.mjs
import { fal } from "@fal-ai/client"; import dotenv from "dotenv"; dotenv.config(); fal.config({ credentials: process.env.FAL_KEY }); export async function generateFalImages({ prompt, aspectRatio = "1:1", numImages = 2 }) { const result = await fal.subscribe("fal-ai/nano-banana-2", { input: { prompt, num_images: numImages, aspect_ratio: aspectRatio, output_format: "png", safety_tolerance: 4, resolution: "1K" }, logs: true }); return result.images.map(img => img.url); }

Replicate FLUX.2 Pro (backup):

generate-replicate.sh
curl -s -X POST \ -H "Authorization: Bearer $REPLICATE_API_TOKEN" \ -H "Content-Type: application/json" \ -H "Prefer: wait=60" \ -d '{"input":{"prompt":"Premium skincare bottle, brand color #F05A28, studio lighting, e-commerce ad"}}' \ https://api.replicate.com/v1/models/black-forest-labs/flux-1.1-pro/predictions

Direct BFL FLUX.2 (maximum control):

generate-bfl.sh
# Submit generation request request=$(curl -X POST 'https://api.bfl.ai/v1/flux-2-pro' \ -H "x-key: ${BFL_API_KEY}" -H 'Content-Type: application/json' \ -d '{"prompt":"DTC ad creative, skincare serum, brand color #F05A28, clean studio, no watermark","width":1080,"height":1350,"output_format":"jpeg","safety_tolerance":2}') # Poll for result (BFL returns polling_url) polling_url=$(echo "$request" | jq -r .polling_url) curl -s "$polling_url" -H "x-key: ${BFL_API_KEY}" # Download image from result.sample URL (temporary - re-serve from your CDN)

Batch generation with rate limiting:

batch-generate.mjs
import pLimit from "p-limit"; const limit = pLimit(4); // Safe concurrency cap const jobs = prompts.map(p => limit(() => generateFalImages({ prompt: p, aspectRatio: "4:5", numImages: 2 })) ); const results = await Promise.all(jobs); // Nano Banana 2: up to 4 images per request // Replicate: 600 RPM rate limit // BFL: async submit + poll pattern

Creatomate video render (exact API request):

creatomate-render.sh
curl -X POST https://api.creatomate.com/v1/renders \ -H "Authorization: Bearer $CREATOMATE_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "template_id": "YOUR_TEMPLATE_ID", "modifications": { "product_image.source": "https://cdn.example.com/product.png", "headline.text": "Glow in 7 days", "cta.text": "Shop Now", "logo.source": "https://cdn.example.com/logo.png" } }' # Response includes render ID. Poll status endpoint until "completed". # Output URL in response.url field.

Remotion React component (custom motion):

AdMotion.tsx
import { AbsoluteFill, Img, interpolate, useCurrentFrame, spring } from "remotion"; export const AdMotion = ({ imageUrl, headline, cta, logoUrl }) => { const frame = useCurrentFrame(); const scale = interpolate(frame, [0, 120], [1, 1.08], { extrapolateRight: "clamp" }); const y = spring({ frame, fps: 30, from: 60, to: 0 }); return ( <AbsoluteFill style={{ backgroundColor: "#000" }}> <Img src={imageUrl} style={{ width:"100%", height:"100%", objectFit:"cover", transform: \`scale(\${scale})\` }} /> <div style={{ position:"absolute", top: 80+y, left:60, right:60, color:"white", fontSize:72, fontWeight:700, textShadow:"0 4px 20px rgba(0,0,0,0.35)" }}> {headline} </div> <div style={{ position:"absolute", bottom:90, left:60, padding:"24px 36px", background:"#F05A28", color:"white", borderRadius:16, fontSize:42, fontWeight:700 }}> {cta} </div> <Img src={logoUrl} style={{ position:"absolute", top:40, right:40, width:140 }} /> </AbsoluteFill> ); };

Remotion server-side render:

render-video.mjs
import { bundle } from "@remotion/bundler"; import { getCompositions, renderMedia } from "@remotion/renderer"; const serveUrl = await bundle("src/index.ts"); const comps = await getCompositions(serveUrl, { inputProps: { imageUrl: "https://cdn.example.com/product.png", headline: "Glow in 7 days", cta: "Shop Now", logoUrl: "https://cdn.example.com/logo.png" }}); const comp = comps.find(c => c.id === "AdMotion"); await renderMedia({ composition: comp, serveUrl, codec: "h264", outputLocation: "out/ad-motion.mp4", inputProps: { /* same props */ } });

Spec checker function:

spec-checker.js
function checkSpec(platform, width, height) { const ratio = (width / height).toFixed(2); if (platform === "Meta") return ["0.80", "1.00"].includes(ratio); // 4:5 or 1:1 if (platform === "TikTok") return ratio === "0.56"; // 9:16 if (platform === "Google") return width === 1200 && height === 628; return true; } const PLATFORM_LIMITS = { Meta: { headline: 40, primary: 125, description: 60 }, Google: { headline: 30, primary: 90, description: 90 }, TikTok: { headline: 40, primary: 100, description: 0 } }; function validateCopy(variant, platform) { const lim = PLATFORM_LIMITS[platform]; return { headline_ok: (variant.headline || "").length <= lim.headline, primary_ok: (variant.primary_text || "").length <= lim.primary, description_ok: lim.description === 0 || (variant.description || "").length <= lim.description }; }
12

Copy Generation Prompt Templates

For batch copy generation, use the cheapest model that produces good ad copy. GPT-4.1 mini ($0.40/1M input, $1.60/1M output) is the best value for high-volume copy. GPT-5.4 mini ($0.75/$4.50) is slightly better quality. GPT-5.5 ($2-3/$10-15) is premium but overkill for batch headlines. At 200K input + 50K output tokens per month with GPT-4.1 mini, cost is approximately $0.16/month. Use GPT-5-nano for heartbeats and monitoring tasks.

copy-generation-prompt.md
You are a performance copywriter for paid social. Write 3 ad copy variants for {{brand_name}}. Rules: - Platform: {{platform}} - Objective: {{objective}} - Offer: {{offer}} - Persona: {{persona_name}} - Pain points: {{pain_points}} - Desired outcome: {{desired_outcome}} - Messaging angle / hook_angle: {{messaging_angle}} - Brand voice: {{brand_voice}} - CTA: {{cta}} Hard output rules: - Headline must be <= 40 characters - Primary text must be <= 125 characters - Description must be <= 60 characters - No emojis unless brand-approved - No competitor names - No medical or guaranteed-result claims - Start with a "Pattern Interrupt" hook - Avoid vague hype words Return strict JSON only (no backticks, no comments): { "variants": [ {"hook_angle": "...", "headline": "...", "primary_text": "...", "description": "...", "cta": "{{cta}}"} ] }
image-prompt-template.md
Create a paid social ad image for {{brand_name}}. PERSONA: {{persona_name}} Pain points: {{pain_points}} OFFER: {{offer}} VISUAL RULES: - Show the product clearly - Premium DTC ad photography - Clean composition, no clutter, no watermark - Brand accent color {{primary_hex}} - Brand secondary color {{secondary_hex}} - Background style: {{background_style}} - Product placement: centered hero shot FORMAT: aspect ratio {{aspect_ratio}}, platform {{platform}} NEGATIVE RULES: - No fake before/after - No medical claims - No tiny unreadable text - No celebrity likeness - No copyrighted marks
13

Overnight Orchestrator and Cron

Cron configuration (use OpenClaw cron, not OS-level):

cron-setup.sh
# Pin OpenClaw version for reproducibility # npm install -g openclaw@2026.7.1-2 # Always run after install: openclaw doctor --fix # Main overnight batch (runs at 11 PM) openclaw cron add \ --name overnight-creative-factory \ --cron "0 23 * * *" \ --tz America/New_York \ --timeout-seconds 28800 \ --message "Execute overnight creative factory." \ --announce \ --channel discord # Morning summary fallback (runs at 7 AM) openclaw cron add \ --name morning-creative-summary \ --cron "0 7 * * *" \ --tz America/New_York \ --timeout-seconds 300 \ --message "Read latest overnight run and send morning summary." \ --announce \ --channel telegram

Notification helpers (Telegram + Discord):

send-summary.mjs
import axios from "axios"; import dotenv from "dotenv"; dotenv.config(); export async function sendMorningSummary(text) { if (process.env.TELEGRAM_BOT_TOKEN && process.env.TELEGRAM_CHAT_ID) { await axios.post( \`https://api.telegram.org/bot\${process.env.TELEGRAM_BOT_TOKEN}/sendMessage\`, { chat_id: process.env.TELEGRAM_CHAT_ID, text } ); } if (process.env.DISCORD_WEBHOOK_URL) { await axios.post(process.env.DISCORD_WEBHOOK_URL, { content: text }); } }

Task Brain: All background tasks (cron jobs, subagent runs) are tracked in a unified SQLite-backed ledger. Type /tasks in any chat to see live status, or use openclaw tasks list on CLI. Back up ~/.openclaw/state/openclaw.sqlite before major upgrades.

The orchestrator script (scripts/overnight-run.mjs) follows this flow: (1) Query Airtable for campaigns with Status = "Queued." (2) For each campaign, generate 10 personas. (3) For each persona, generate 3 copy variants per platform. (4) For each copy variant, generate 2 images at platform-correct dimensions. (5) Select top 10-12 statics for video generation via Creatomate. (6) Create Creative Combos linking copy + image + video. (7) Send morning summary. The full orchestrator is 100+ lines of JS that calls the functions shown in Section 12.

14

Creative Combos, Audit Log, and Publishing

Creative Combos table (the final ad unit - one persona + copy + image + video):

Fields: Combo Name (formula), Campaign (link), Persona (link), Copy Variant (link), Image Asset (link), Video Asset (link, optional), Platform, Format (Static/Video), Test Cell (e.g., "P3-H2-I1-V0"), Status (Draft/Review/Approved/Delivered/Published), Client Decision (Approved/Rejected/Revise), Client Comments, Ready for Upload (checkbox - set true only when all linked assets are approved and spec-compliant).

Views: "Client Review Board" (Ready for Upload = true, Client Decision is empty), "Approved For Delivery" (Client Decision = Approved), "Rejected / Revise" (for iteration).

Audit Log table (optional but recommended): Every generated item logged with campaign, persona, prompt, model, seed, dimensions, provider cost estimate, created_at, QA status, approval status. Useful for cost tracking and debugging.

Character count formulas: Add to Copy Variants table: Headline Count = LEN({Headline}), Primary Text Count = LEN({Primary Text}). Create an "Over Character Budget" view filtering Headline Count > 40 OR Primary Text Count > 125.

Publishing options (from most to least practical):

Option 1 - Managed Delivery (recommended for v1): Export approved Creative Combos as CSV + download approved images/videos into platform folders (/Brand/2026-04/Meta/, /Brand/2026-04/TikTok/). The media buyer uploads manually. This reduces your technical support burden.

Option 2 - Zapier automation: When Creative Combos status changes to "Approved," trigger a Zap that uploads media to a storage bucket and optionally creates draft ads in Meta via the Meta Marketing API.

Option 3 - Direct API (advanced): Use the Meta Marketing API (upload via /act_ID/adimages), Google Ads API (upload-image-asset), or TikTok Business API for programmatic publishing. Requires OAuth token management and policy compliance. Not recommended for v1 of your service.

15

Deploy This Weekend

Step 1: Copy the config files above. Customize SOUL.md and BRAND_KIT.md for a real e-commerce brand (or use a fictional coffee brand to test).

Step 2: Set up a fal.ai account (free tier gives you credits to start). Generate 10 test images with FLUX.2 Pro using your brand prompts.

Step 3: Create the Airtable base with the 7-table schema above. Connect via Airtable MCP.

Step 4: Set up a Creatomate account ($54/month). Create one vertical (9:16) and one square (1:1) video template. Test with 3 static images.

Step 5: Configure the cron schedule on your OpenClaw instance. Run one overnight batch. Review the output in Airtable by morning.

Step 6: Capture screenshots of the Airtable gallery view. That's your portfolio/demo for client conversations.

Step 7: Find one e-commerce brand owner. Offer to run a free 20-creative pilot. After the pilot, show them the Airtable gallery, the cost breakdown ($17 per creative vs $200+ from their agency), and the 3x testing velocity. Then pitch the retainer.

The first client takes 2-3 weeks (including calibration). The second takes 1 week. By client three, you're running the same pipeline with different brand configs.

Ready to build the next one?

The Lead Response Agent course teaches you how to build and sell 24/7 AI receptionists to service businesses.