🧬 Nexus AI Command Center

Creative Asset Pipeline:
The Weapon

The scientific system that transforms Audrey's photos into revenue-generating Google Ads assets. Seven automated phases. Zero guesswork. Every image measured, optimized, and evolved by real performance data.

📥 Ingest
➡️
Validate
➡️
Optimize
➡️
👁️ Review
➡️
🚀 Deploy
➡️
📊 Measure
➡️
🧬 Evolve

nexus_creative_asset_pipeline.py — Fully automated. Science-driven. Revenue-tied.

🗺️ Navigation

01

🔬 The Scientific Method for Creative Assets

Most plumbing companies throw photos at Google Ads and pray. We do not pray. We apply the scientific method to every single image. This is the unfair advantage that lets a $3M company market like a $30M one.

👀 Observe
💡 Hypothesize
🧪 Experiment
♾️
🔄 Evolve
📏 Measure
🎯 Conclude
📝 Document
🚀 Deploy

🧠 How It Applies to Photo Selection

Phase What Happens Example
Observe Review current ad performance data. Which images get clicks? Which get conversions? "Technician portrait ads have 2.3% CTR vs. 0.8% for vehicle shots."
Hypothesize Form a testable prediction about what will perform better. "Technician photos with the customer visible will outperform solo portraits by 20%."
Experiment Deploy competing assets in the same ad group. Control variables (same copy, same audience). Upload 3 solo portraits + 3 customer interaction shots to the same RSA.
Measure Pull performance data after 500+ impressions per asset. Pipeline Phase 6 auto-pulls CTR, conversions, cost per asset.
Conclude Determine statistical significance. Did the hypothesis hold? "Customer interaction photos: 3.1% CTR. Solo portraits: 2.3%. Hypothesis confirmed."
Evolve Auto-adjust suitability scores. Winners get priority. Losers get demoted. Pipeline Phase 7 promotes customer interaction photos to S-tier.

🔍 Variables We Test

👤
Subject Type
Technician solo vs. technician + customer vs. service work vs. equipment close-up vs. before/after
🎨
Visual Tone
Warm/bright vs. dramatic lighting vs. natural daylight vs. studio-clean backgrounds
📐
Composition
Rule of thirds vs. centered vs. environmental context vs. tight crop vs. wide establishing shot
📱
Format Fit
Landscape (RSA) vs. square (Display) vs. portrait (PMax mobile) performance by placement
😊
Emotional Signal
Smiling vs. action shot vs. problem/solution framing vs. team unity
🏗️
Context/Setting
Indoor residential vs. outdoor excavation vs. branded vehicle vs. office/showroom
02

📸 Audrey's Photo Production Guide

📷 Camera Settings by Format

Setting 🖼️ Landscape (1.91:1) 🟦 Square (1:1) 📱 Portrait (4:5)
Orientation Horizontal Horizontal (crop later) Vertical
Resolution Shoot wide; min 1200x628 output 1200x1200 output 960x1200 output
Aperture f/2.8 to f/4 (subject isolation) f/4 to f/5.6 (balanced) f/2.8 (bokeh for mobile)
Shutter 1/125s min (freeze motion) 1/125s min 1/125s min
ISO 100-400 outdoors, up to 1600 indoors Same Same
White Balance Daylight or Auto (consistent warmth) Same Same
Format RAW + JPEG (RAW for editing, JPEG for quick use) Same Same
💡 Pro Tip: Always shoot wider than you need. The pipeline auto-crops three variants (landscape, square, portrait) from every source image. More context = more crop options = more winning variations.

💡 Lighting Guidelines

  • Golden hour (first/last hour of daylight): Best for outdoor vehicle shots, team photos, and any "heroic" imagery. Warm, soft, professional.
  • Overcast daylight: Perfect for before/after shots. Even light eliminates harsh shadows that hide detail.
  • Indoor work photos: Use a portable LED panel or bounce flash. Avoid overhead fluorescents alone (green cast, unflattering shadows).
  • Emergency scenes: Use whatever light is available, but aim for at least one well-lit hero shot with the LED panel.
  • Technician portraits: Position the technician facing natural window light or use a reflector. Fill shadows on the face.
⚠️ Avoid: Direct midday sun (harsh shadows on faces), backlighting without fill (silhouettes), mixed color temperatures (fluorescent + daylight = green/orange cast).

🎯 Composition Rules

🖼️
Landscape (1.91:1)
Subject on left or right third. Leave space for text overlay on the opposite side. Environmental context visible. Great for: vehicles, job sites, team groups.
🟦
Square (1:1)
Subject centered or slightly off-center. Tight framing. Minimal dead space. Great for: technician portraits, equipment close-ups, before/after splits.
📱
Portrait (4:5)
Subject fills the vertical frame. Background bokeh for mobile impact. Leave headroom for logo overlay. Great for: hero technician shots, customer interactions.

📋 Shot List by Category

Category Target Shots Priority Notes
👷 Technicians Solo portrait, action shot (working), customer handshake Critical Every tech needs 3 poses minimum. Clean uniform, visible logo.
🚚 Vehicles 3/4 angle branded side, parked in neighborhood, at job site High Clean vehicle. Shoot in residential neighborhoods. Show the brand.
🛠️ Service Work Sewer camera, pipe repair, water heater install, drain cleaning Critical Hands-on action. Show the expertise. Sewer work = #1 revenue.
🔄 Before/After Same angle, same framing. Problem visible then solved. Critical Pair naming: bsp_photo_before-after-sewer-repair_20260315.jpg
🙏 Customers Happy customer with technician, thumbs up, relieved expression High GET SIGNED RELEASE. Genuine emotion beats posed.
🔧 Equipment Sewer camera, jetters, pipe relining gear, water heaters Medium Clean backgrounds. Show scale (hand or person nearby).
🚨 Emergency Night call, flooded basement, burst pipe, emergency vehicle High Dramatic lighting OK. Show urgency and response speed.
🤝 Team/Office Team group, office front, dispatch area, training sessions Medium Show culture, professionalism, and the 5th-generation heritage.

🚨 CRITICAL: Current Asset Gaps (Updated Mar 12, 2026)

The pipeline has processed 16 photos and generated 78 variants. But we're running ads with only 2 out of 8 critical categories covered. The categories below are what actually DRIVE clicks and conversions. Fill these gaps = more leads = more revenue.

✅ What We Have (5 Categories Covered)

Category Count Status Examples in System
👷 Technician Portraits 6 Covered Matthew, Anthony, Dan, Ricardo, Izac, Scott
🚚 Vehicle/Branding 4 Covered Van neighborhood, upscale home, driveway, open door
🛠️ Service Work (Sewer) 4 Covered Sewer camera, excavation, pipe fusing (x2)
🤝 Team/Group 1 Needs More Team van LSA
🏢 Office/Staff 1 Needs More Office staff shot

❌ What We're MISSING (Critical Revenue Gaps)

These categories have ZERO photos in the pipeline. Each one directly impacts ad performance and lead generation.

Category Why It Matters Revenue Impact Quantity Needed Priority
📸 Before/After Sewer Work The MONEY SHOTS. Shows transformation. Proves expertise. Highest CTR of any photo type in home services ads. Sewer = #1 revenue ($3K-$15K/job, 30-40% close rate). These photos directly sell the highest-ticket service. 5-10 pairs minimum 🔥 #1 PRIORITY
🚨 Emergency Response Creates URGENCY. Night calls, water damage, burst pipes. Emergency Eric is 50-60% of revenue. Emergency persona drives majority of revenue. Urgency-based ads with real emergency photos convert 2-3x higher. 3-5 shots 🔥 Critical
😊 Happy Customer Interactions Social proof. Handshakes, thumbs up, relieved faces. People trust people, not logos. Customer photos in Display/PMax ads increase conversion rates 25-40%. Trust = bookings. 3-5 shots High
🔧 Equipment Close-Ups Shows expertise and investment. Sewer cameras, jetters, pipe relining gear. "These guys have serious tools." Equipment photos score 85+ suitability for Display and PMax. Builds trust with Renovation Rachel persona. 3-5 shots High
🏠 Exterior at Customer Homes BSP van parked at nice homes, techs walking to door. "They serve MY neighborhood." Local trust photos boost LSA performance. Homeowners searching for plumbers want to see service in their type of neighborhood. 3-5 shots High
🔥 Water Heater Work #3 revenue service. Installs, repairs, old vs new units side by side. ZERO representation currently. Water heater is a core service with dedicated ad campaigns. Having zero photos means we're running text-only or generic stock for this service. 2-3 shots Medium-High
🚿 Drain Cleaning in Action Techs using drain equipment, clogged vs clear drains. High-volume search category. Drain cleaning is the gateway service (Maintenance Mike, highest LTV $5K-$25K lifetime). Photos of real work outsell stock 3:1. 2-3 shots Medium
💨 Gas Line Work Gas line repair/install. Safety-focused imagery. Smaller volume but high ticket and zero competition on visuals. Niche service with high margins. Most competitors have zero gas line photos in their ads. 1-2 shots Medium

💡 How to Get These Photos

  1. Before/After: Ask techs to snap the BEFORE photo as soon as they assess the problem, AFTER photo when job is complete. Same angle, same framing. This should become standard on every sewer job.
  2. Emergency: Night calls are gold. Even a phone camera shot of the van's lights at a dark house, or water damage being addressed, tells a powerful story.
  3. Customer Interactions: Ask the customer: "Mind if we grab a quick photo?" Most happy customers say yes. A signed release is ideal but verbal consent works for ads.
  4. Equipment: These can be shot anytime. Clean the equipment, good lighting, dark or neutral background. Show scale with a hand or person nearby.
  5. Exterior/Residential: Every service call is a photo opportunity. Van in the driveway of a nice home. Tech walking up the path. Takes 10 seconds.
  6. Water Heater/Drain/Gas: Coordinate with techs on the next scheduled jobs for these services. One photo day covers multiple categories.

🔬 The Science Behind These Priorities

The pipeline scores every photo for ad suitability across 4 channels: RSA (search), Display, PMax, and LSA. Here's what the data shows across the home services industry:

Photo TypeAvg CTR LiftConversion ImpactPipeline Suitability Score
Before/After pairs+45-65%+30-50% conversion rate95-100 across all channels
Emergency/urgency shots+25-40%+20-35% for emergency keywords90+ for urgency campaigns
Customer interactions+20-30%+25-40% (social proof)85-95 for Display/PMax
Equipment close-ups+10-20%+15-25% for research-phase queries85+ for Display/PMax
Solo technician portraitsbaselinebaseline70-85 (good but limited)
Vehicle/brand shotsbaselinebaseline80-90 (strong for LSA)

Right now we're running ads with mostly portraits and vehicle shots (baseline performance). Adding before/after and emergency photos alone could increase ad CTR by 30-50%. That's the difference between $383 spent with zero leads and $383 spent with 3-5 booked jobs.

🎯 Minimum Viable Photo Set (Get These FIRST)

If you can only do ONE photo shoot this week, focus on these 5 shots:

  1. 📸 1 before/after sewer pair (before the dig + after the repair, same angle)
  2. 🚨 1 emergency response shot (van arriving, dramatic lighting, urgency)
  3. 😊 1 happy customer handshake (tech + homeowner, genuine smile)
  4. 🔧 1 sewer camera close-up (equipment in use, shows expertise)
  5. 🏠 1 van at nice home (exterior residential, neighborhood trust)

These 5 photos unlock 5 new ad categories and fill every critical gap. Upload them to Google Drive using the naming convention below and the pipeline handles everything else automatically.

📁 Naming Convention

bsp_photo_[category]-[subject]_[YYYYMMDD].jpg

Examples:
  bsp_photo_technician-anthony-portrait_20260315.jpg
  bsp_photo_vehicle-van-neighborhood_20260315.jpg
  bsp_photo_sewer-repair-camera-inspect_20260315.jpg
  bsp_photo_before-after-sewer-line_20260315.jpg
  bsp_photo_customer-happy-handshake_20260315.jpg
  bsp_photo_equipment-sewer-camera_20260315.jpg
  bsp_photo_emergency-night-call_20260315.jpg
  bsp_photo_team-group-office_20260315.jpg

☁️ Upload to Google Drive Process

  1. Transfer from camera: Import RAW + JPEG to your computer
  2. Quick cull: Delete obvious duds (blurry, eyes closed, bad framing)
  3. Rename: Apply naming convention above
  4. Light edit: Exposure, white balance, crop to leave room for all 3 formats
  5. Export: JPEG, quality 90-95%, sRGB color space
  6. Upload to Drive: Bright Side Plumbing/Photos/2026/[Month]/
  7. Ping Robert on Slack: "New photos uploaded: [count] images, [categories]"
  8. Pipeline takes over: nexus_drive_intelligence.py --pull syncs to VM, then nexus_creative_asset_pipeline.py --full runs Phases 1 through 4 automatically
04

⚙️ Pipeline Flow Walkthrough

📥 Phase 1: INGEST

What Happens

  1. nexus_drive_intelligence.py --pull syncs new photos from Google Drive to output/drive_imports/photos_2026/
  2. Pipeline scans the directory for new images (JPEG, PNG, WebP)
  3. Calculates SHA-256 hash for deduplication (skips already-ingested files)
  4. Extracts metadata via Pillow: dimensions, format, color mode, dominant color
  5. Auto-tags category from filename prefix (e.g., plumber- = technician_portrait)
  6. Computes aspect ratio and flags which Google Ads formats it can serve
  7. Writes record to SQLite database (output/asset_pipeline.db)

What Audrey Does

Upload photos to Google Drive using the naming convention. Ping Robert on Slack.

What Robert Does

Run python nexus_creative_asset_pipeline.py --ingest (or --full for all phases). Review console output for new asset count.

Output

Database records in asset_pipeline.db with status = PENDING. Log file updated at output/asset_pipeline_log.txt.

$ python nexus_creative_asset_pipeline.py --ingest
09:15:02 | INFO    | [INGEST] Scanning output/drive_imports/photos_2026/...
09:15:02 | INFO    | [INGEST] Found 12 new images (3 duplicates skipped)
09:15:03 | INFO    | [INGEST] bsp_photo_technician-anthony-portrait_20260315.jpg -> 3024x4032, JPEG, technician_portrait
09:15:03 | INFO    | [INGEST] bsp_photo_sewer-repair-camera-inspect_20260315.jpg -> 4032x3024, JPEG, service_work
09:15:04 | INFO    | [INGEST] Phase complete: 12 assets cataloged

✅ Phase 2: VALIDATE

What Happens

  1. Loads all PENDING assets from database
  2. Checks each image against Google Ads dimension requirements for all 5 formats (landscape, square, portrait, logo, logo_wide)
  3. Computes suitability scores (0 to 100) for RSA, Display, PMax, and LSA placements
  4. Flags images needing compression (over 5MB for ads, over 150KB for display)
  5. Detects quality issues: too dark, too blurry, too small resolution
  6. Updates database with validation results

Suitability Scoring

ScoreMeaningAction
90-100Excellent. Meets all requirements, high resolution, proper aspect ratio.Auto-approve candidate
70-89Good. Meets minimum, may need cropping or compression.Optimize and review
50-69Marginal. Meets some formats, may fail others.Optimize, flag for Robert
Below 50Poor. Resolution too low or format issues.Flag for re-shoot

⚡ Phase 3: OPTIMIZE

What Happens

  1. Takes each validated asset and generates up to 5 variants:
    • Landscape 1200x628 (1.91:1) for RSA and PMax
    • Square 1200x1200 (1:1) for Display, PMax, and logo
    • Portrait 960x1200 (4:5) for PMax mobile
    • Compressed JPEG (quality 85, under 150KB for Display)
    • WebP (modern format, 30-50% smaller files)
  2. Smart cropping: centers on the subject area, avoids cutting faces
  3. Saves variants to output/creative_assets/variants/
  4. Links variants to parent asset in database

Output Structure

output/creative_assets/
  optimized/                       # Compressed originals
  variants/
    bsp_photo_technician-anthony-portrait_20260315/
      landscape_1200x628.jpg       # RSA / PMax landscape
      square_1200x1200.jpg         # Display / PMax square
      portrait_960x1200.jpg        # PMax mobile portrait
      compressed_display.jpg       # Under 150KB for Display Network
      optimized.webp               # WebP for modern placements

👁️ Phase 4: REVIEW

What Happens

  1. Generates a dark glassmorphism HTML review gallery (output/creative_asset_review.html)
  2. Shows each asset with all variants side-by-side
  3. Displays suitability scores, dimensions, file size, category, and tags
  4. Robert opens the HTML file in a browser and reviews
  5. Marks assets as APPROVED or REJECTED (updates database)

What Robert Does

Open creative_asset_review.html. For each asset: check framing, brand alignment, quality. Approve the winners. Reject anything that does not represent Bright Side at its best.

💡 Approval Criteria: Is the image sharp? Is the lighting professional? Does it show expertise? Would Emergency Eric trust this company from this photo? If yes to all, approve.

🚀 Phase 5: DEPLOY

What Happens

  1. Loads all APPROVED assets from database
  2. Authenticates to Google Ads API (Account: 7269555791, MCC: 8449092450, API v23)
  3. Uploads each approved variant as an image asset to Google Ads
  4. Records the Google Ads asset ID and resource name in database
  5. Updates status to DEPLOYED
  6. Rate-limited: 2-second minimum between API calls, max 20/minute
🚨 DRY RUN by default. Running --deploy alone only simulates the upload and logs what would happen. To actually upload to Google Ads, you must run --deploy --execute. This is a safety mechanism.
$ python nexus_creative_asset_pipeline.py --deploy
09:30:01 | INFO    | [DEPLOY] DRY RUN mode (use --execute for live upload)
09:30:01 | INFO    | [DEPLOY] Would upload: landscape_1200x628.jpg (234 KB) -> RSA asset
09:30:01 | INFO    | [DEPLOY] Would upload: square_1200x1200.jpg (312 KB) -> PMax asset
09:30:01 | INFO    | [DEPLOY] DRY RUN complete: 8 assets would be uploaded

$ python nexus_creative_asset_pipeline.py --deploy --execute
09:31:01 | INFO    | [DEPLOY] LIVE MODE - uploading to Google Ads account 7269555791
09:31:03 | INFO    | [DEPLOY] Uploaded landscape_1200x628.jpg -> asset ID: 12345678
09:31:05 | INFO    | [DEPLOY] Uploaded square_1200x1200.jpg -> asset ID: 12345679
09:31:07 | INFO    | [DEPLOY] LIVE deploy complete: 8 assets uploaded

📊 Phase 6: MEASURE

What Happens

  1. Queries Google Ads API for performance data on all deployed assets
  2. Pulls: impressions, clicks, CTR, conversions, cost
  3. Stores performance data in database, linked to each asset
  4. Generates performance comparison reports
  5. Identifies top performers and underperformers

Performance Tiers

TierCTR RangeAction
S-Tier3.0%+Keep running. Use as template for future shoots.
A-Tier2.0 to 2.99%Keep running. Monitor for fatigue.
B-Tier1.5 to 1.99%Keep but test replacements.
C-Tier1.0 to 1.49%Schedule for replacement.
D-Tier0.5 to 0.99%Pause. Analyze what went wrong.
F-TierBelow 0.5%Remove immediately. Do not re-use.

🧬 Phase 7: EVOLVE

What Happens

  1. Analyzes performance data across all assets
  2. Auto-adjusts suitability scores based on real-world performance
  3. Identifies patterns: which categories, compositions, and subjects perform best
  4. Generates evolution recommendations for the next photo shoot
  5. Updates the evolution_score field in the database
  6. Feeds insights back into Phase 2 scoring (the scientific loop closes)

Evolution Intelligence

The pipeline learns from every deployed image. Over time, it builds a statistical model of what works for Bright Side's specific audience in the KC metro. This is the compounding advantage that competitors cannot replicate, because they are not measuring at this granularity.

💡 The Flywheel: Better photos lead to better ads, which generate more data, which train better scoring, which prioritize better photos. Every cycle compounds the advantage.
05

🎨 Asset Categories Deep Dive

👷

Technician Portraits

What makes great photos: Clean, branded uniform with visible logo. Genuine smile. Confident posture. Clean background (not cluttered garage). Well-lit face with no harsh shadows.

Composition tips: Head and shoulders for square crops. Waist-up with environment for landscape. Full body with truck for wide establishing shots.

Persona alignment: Emergency Eric needs to see a trustworthy face at the door. Maintenance Mike needs to see a professional he would invite back. The technician portrait is often the first visual impression.

🚚

Vehicle / Fleet

What makes great photos: Clean, washed vehicle. 3/4 angle showing brand wrap. Parked in an attractive residential neighborhood (shows "we serve your area"). Golden hour light for warmth.

Composition tips: Low angle for heroic feel. Include house/neighborhood context. Ensure full brand text is readable. No clutter in background.

Persona alignment: Emergency Eric sees "they are on the way." Renovation Rachel sees "established, professional fleet." Business Bob sees "real company with real assets."

🛠️

Sewer Repair (Service Work)

What makes great photos: Action shots. Technician operating the sewer camera. Excavation in progress with safety measures visible. Camera screen showing pipe interior. Clean, organized job site.

Composition tips: Show scale (person next to equipment). Include the problem being solved. Wide shots for context, tight shots for expertise. Lead with sewer content (it is the #1 revenue driver).

Persona alignment: Emergency Eric sees "they know what they are doing." Renovation Rachel sees "modern equipment, professional process." This category should be the largest in the library.

🔄

Before / After

What makes great photos: EXACT same camera angle and distance for both shots. Clear problem visible in "before" (cracked pipe, flooded area, corroded fitting). Clean result in "after." Good lighting in both.

Composition tips: Mark camera position with tape on first visit. Use same lens and focal length. Include a reference object for scale. Shoot "after" at the same time of day for matching light.

Persona alignment: The most powerful conversion driver. Every persona responds to visible proof of transformation. Before/after pairs outperform single images in ad testing consistently.

🤝

Customer Interaction

What makes great photos: Genuine moments. Technician explaining findings to homeowner. Customer smiling after job completion. Handshake at the door. Natural expressions beat posed shots.

Composition tips: Shoot from slightly to the side (not dead-on). Include both faces. Ensure good light on the customer's face. Background should show residential setting.

Persona alignment: Emergency Eric sees "they care." Maintenance Mike sees "I could be that happy customer." This category builds trust faster than any other.

🚨 ALWAYS get a signed photo release from customers before publishing. Keep releases on file. No exceptions.
🔧

Equipment Close-Ups

What makes great photos: Clean equipment on neutral background. Show scale with a hand or person nearby. Detailed texture and build quality visible. Good lighting with no harsh reflections.

Composition tips: 45-degree angle for 3D depth. Include identifying text/brand if relevant. Macro lens for small parts. Wide enough to show full equipment in context.

Persona alignment: Renovation Rachel sees "state-of-the-art tools." Business Bob sees "they invest in the right equipment." Establishes technical credibility.

🚨

Emergency Scenes

What makes great photos: Dramatic but not chaotic. Technician arriving on scene (headlights, work lights). Flooded space being resolved. Urgency balanced with professionalism. Night and adverse conditions add authenticity.

Composition tips: LED work light creates dramatic key light. Silhouette of technician against lit van = powerful. Show response speed (dark sky + bright work lights). Avoid photos that look unsafe.

Persona alignment: Emergency Eric sees "they come at 2 AM." This category directly targets the highest-revenue persona. Worth scheduling a mock emergency photo shoot.

👥

Office / Team

What makes great photos: Full team group shot (uniforms, branded backdrop). Office front exterior. Dispatch area. Training in progress. Holiday/event moments. Show culture and heritage.

Composition tips: Group photos: stagger heights (some standing, some kneeling). Office exterior: clean, well-lit, signage visible. Action shots of team meetings are more engaging than posed lineups.

Persona alignment: All personas. Team photos build trust and show "real people." Particularly effective for the "5th-generation master plumber" heritage story that differentiates Bright Side.

06

🎨 Brand Consistency Standards

🌈 Color Palette

Bright Side Blue
#1A73E8
Primary brand color. Used in logo, headers, CTAs.
Bright Side Gold
#FBBF24
Accent color. Highlights, badges, stars.
Clean White
#FFFFFF
Backgrounds, text on dark. Trust and cleanliness.
Professional Dark
#1F2937
Text, headers on light backgrounds.

⭐ Logo Overlay Rules

  • Position: Bottom-right corner OR top-left corner. Never centered (blocks the subject).
  • Size: Logo should be 10 to 15% of the image width. Large enough to be recognizable, small enough to not dominate.
  • Opacity: 80 to 100% on dark/busy backgrounds. 100% on clean areas.
  • Safe zone: Keep 5% margin from all edges. Do not let the logo bleed off the image.
  • When NOT to use: LSA images (Google rejects logos). Images specifically for Google Ads asset library (Google already shows your brand name). When the image is already branded (van wrap, uniform logo visible).

📝 Text Overlay Guidelines

  • 20% rule: Google penalizes ad images with text covering more than 20% of the area. Aim for under 10%.
  • Font: Use the brand font (or a clean sans-serif like Inter, Nunito, or Open Sans). Never script fonts. Never comic sans. Never more than 2 font weights per image.
  • Contrast: White text on dark overlay, or dark text on light area. Always ensure WCAG AA contrast minimum (4.5:1 ratio).
  • Content: Phone number, tagline, or one short CTA only. Never paragraphs. Never pricing (changes too fast). Never competitor mentions.
  • Preferred approach: Let the photo speak. Use text overlays sparingly. Google Ads provides headline and description fields, so the image should complement the copy, not repeat it.

🖌️ Photo Editing Style Guide

SettingDirectionWhy
ExposureSlightly bright, well-litConveys positivity, professionalism, "bright side"
White BalanceSlightly warm (5500 to 6500K)Warm = trustworthy, friendly, approachable
Saturation+5 to +15% (subtle boost)Colors pop without looking artificial
ContrastMedium-highProfessional, crisp. Avoid flat/washed-out look.
ShadowsOpen slightly (+10 to +20)Show detail in dark areas. No crushed blacks.
HighlightsPull back slightly (-5 to -15)Recover detail in bright areas (sky, white vans).
SharpeningLight (40 to 60, radius 1.0)Crisp without halos or artifacts.
VignetteNone or very subtle (-5)Heavy vignette looks amateur.
Filters/PresetsNoneConsistency requires manual adjustment, not presets that drift.

🚩 Red Flags Checklist

Reject immediately if any of these are present:

❌ Red FlagWhy It Fails
Blurry or out of focusLooks unprofessional. Signals "we do not care about quality."
Dirty uniform or messy vehicleDirectly undermines trust. Customers expect clean = competent.
Visible competitor logos/brandsLegal risk and brand confusion.
Customer faces without releaseLegal liability. Privacy violation.
Safety violations visibleNo hard hat at excavation, no gloves at sewer work = liability magnet.
Cluttered, messy backgroundsDistracts from subject. Makes the company look disorganized.
Watermarks from stock photo sitesCopyright infringement. Google will reject.
Over-filtered or heavy HDRLooks fake. Erodes trust immediately.
Wrong address or phone number visibleNAP inconsistency kills local SEO. Only 12022 Blue Valley Pkwy.
Text covering more than 20% of imageGoogle will suppress the ad or reject the asset entirely.
07

📅 Seasonal Photo Priority Calendar

Photo priorities shift with the seasons because customer needs shift. This calendar ensures we always have fresh, relevant imagery ready BEFORE the seasonal demand spike hits.

❄️ January

Priority: Frozen pipe emergencies, water heater failures, indoor repair work

Shoot: Emergency response at night, burst pipe repair, water heater installs. Cold weather = high emergency volume.

❄️ February

Priority: Sewer backups (freeze/thaw cycle), indoor plumbing maintenance

Shoot: Sewer camera inspections, drain cleaning. Slow season = invest in studio-quality technician portraits.

🌱 March

Priority: Spring thaw sewer damage, sump pump installs, outdoor plumbing prep

Shoot: Excavation work begins. Sewer line replacement. Before/after pairs for spring repairs.

🌷 April

Priority: Sewer line inspections, outdoor faucet repairs, spring renovation projects

Shoot: Green lawns + branded vans = beautiful fleet photos. Customer interactions in nice weather.

☀️ May

Priority: Water heater maintenance, gas line work, renovation season begins

Shoot: Long golden hours. Team group photos outdoors. Equipment in use on large projects.

☀️ June

Priority: Sewer replacements (ground is soft), bathroom/kitchen renovations

Shoot: Major excavation projects. Before/after transformations. Happy customers with completed renovations.

🔥 July

Priority: Peak renovation, commercial projects, water line work

Shoot: Large-scale projects. Commercial work for Business Bob persona. Action shots in summer light.

🔥 August

Priority: Back-to-school plumbing prep, water heater season approaching

Shoot: Begin stockpiling fall/winter imagery. Water heater installations. Preventive maintenance visits.

🍂 September

Priority: Fall maintenance push, furnace + water heater combos, drain cleaning

Shoot: Fall colors + branded van = seasonal fleet photos. Maintenance Mike persona content.

🍂 October

Priority: Winterization, heating system prep, sewer inspections before freeze

Shoot: Technicians doing inspections. Before/after of winterization work. Last good outdoor light.

🥶 November

Priority: Emergency preparedness content, frozen pipe prevention, heating

Shoot: Holiday-themed team photo. Emergency response staging. Indoor work documentation.

🥶 December

Priority: Emergency services, holiday plumbing disasters, frozen pipes

Shoot: Night emergency responses (dramatic). Holiday team photos. Year-in-review compilation imagery.

08

⚡ Quick Reference Cards

📐 Photo Specs Cheat Sheet

RSA Landscape1200x6281.91:1
RSA/PMax Square1200x12001:1
PMax Portrait960x12004:5
Logo Square1200x12001:1
Logo Wide1200x3004:1
LSA Min720px min sideAny
YouTube Thumb1280x72016:9
Display Max150 KBVaries
Ads Max5,120 KBVaries

📁 Naming Cheat Sheet

bsp_photo_[cat]-[subject]_[date].jpg

  • technician: portraits, action
  • vehicle: van, truck, fleet
  • sewer-repair: camera, excavation
  • before-after: paired shots
  • customer: interactions
  • equipment: tools, gear
  • emergency: night, urgent
  • team: group, office

☁️ Upload Workflow

  1. Import RAW + JPEG from camera
  2. Cull bad shots
  3. Rename with convention
  4. Light edit (exposure, WB, crop)
  5. Export JPEG 90-95% sRGB
  6. Upload to Drive: Photos/2026/[Month]/
  7. Slack Robert: "X new photos, [categories]"
  8. Robert runs pipeline
  9. Robert reviews gallery HTML
  10. Approved assets auto-deploy

✅ Approval Criteria

  • ✅ Sharp and in focus
  • ✅ Good lighting (no harsh shadows)
  • ✅ Clean uniform, visible branding
  • ✅ Professional composition
  • ✅ Shows expertise or trust
  • ✅ No safety violations
  • ✅ No competitor logos
  • ✅ Customer release on file
  • ✅ Correct address (12022 Blue Valley)
  • ✅ Under 20% text coverage
  • ✅ sRGB color space
  • ✅ Meets resolution minimums
09

💻 CLI Command Reference

⚙️ Pipeline Commands

CommandPhaseDescription
python nexus_creative_asset_pipeline.py --ingest Phase 1 Scan Drive imports, extract metadata, catalog to SQLite
python nexus_creative_asset_pipeline.py --validate Phase 2 Check specs, score suitability, flag quality issues
python nexus_creative_asset_pipeline.py --optimize Phase 3 Auto-crop variants, compress, convert to WebP
python nexus_creative_asset_pipeline.py --review Phase 4 Generate HTML review gallery for Robert
python nexus_creative_asset_pipeline.py --deploy Phase 5 DRY RUN: simulate Google Ads upload
python nexus_creative_asset_pipeline.py --deploy --execute Phase 5 LIVE LIVE upload approved assets to Google Ads
python nexus_creative_asset_pipeline.py --measure Phase 6 Pull performance data from Google Ads API
python nexus_creative_asset_pipeline.py --evolve Phase 7 Analyze patterns, adjust scores, generate recommendations
python nexus_creative_asset_pipeline.py --full Phases 1-4 Run ingest through review in one pass
python nexus_creative_asset_pipeline.py --status Report Show pipeline status summary
python nexus_creative_asset_pipeline.py --slack Notify Send pipeline summary to Slack

🌐 Supporting Commands

CommandPurpose
python nexus_drive_intelligence.py --pull Sync photos from Google Drive to VM (runs before --ingest)
gcloud compute ssh nexus-vm SSH into the Nexus VM (34.55.179.122, us-central1-a)
⚠️ Rate Limiting: All API calls enforce a mandatory 2-second delay and a maximum of 20 calls per minute. Robert's IP (136.32.235.230) has been blocked twice. These delays are non-negotiable. Do not remove them.
Nexus AI Command Center
Bright Side Plumbing & Heating
callbrightside.com | 12022 Blue Valley Pkwy, Overland Park, KS 66213
Built by Robert Dove | Dove Web Consulting | Generated March 2026
🧬 Science-driven creative. Every photo measured. Every asset evolved. Zero guesswork.