Core Infrastructure

Vision-Powered
Asset Intelligence

AI automatically analyzes every image and video. The system knows what you have, what worked, and what to use next—without manual tagging. Your creative library becomes searchable, LLM-navigable, and performance-aware.

Creative Assets Are Chaos

Thousands of images scattered across Google Drive, Dropbox, and local folders. No way to find what performed well. No memory of which creative resonated with which audience.

No Discoverability

Files named "IMG_1234.jpg" or "final_v2_FINAL.png". Impossible to search. Requires manual browsing of hundreds of assets.

No Performance Tracking

Which image drove 3% CTR? Which video got shared 500 times? That knowledge died with the campaign spreadsheet.

No Cross-Product Reuse

Product A's winning hero image could work for Product B. But nobody remembers it exists. Assets aren't discoverable across products.

Automatic Analysis.
Zero Manual Work.

// Upload Workflow
1. Upload: product_hero_v2.jpg
2. Type Detection: MIME type → image/jpeg
3. Spec Extraction:
- Dimensions: 1920x1080
- File Size: 487 KB
- Aspect Ratio: 16:9
4. S3 Upload: s3://brand-xyz/assets/image/AST-ABC123.jpg
5. Vision Analysis (Gemini 2.5 Flash):
- Short Description: "Modern fitness tracker on wrist, outdoor setting, morning light"
- Long Description: "Professional product shot featuring a black fitness tracker..."
- Tags: [product-shot, lifestyle, outdoor, minimalist, health, wearable]
- Detected Objects: [wrist, watch, person, trees, sky]
- Dominant Colors: ["#2C5F8D" (blue), "#F5E6D3" (beige)]
- Mood: aspirational
- Style: photographic
- Content Category: product
- Has People: true
- Has Product: true
- Confidence: 0.94
6. Metadata Storage: session/brands/BRD-123/assets.json
Asset ready for LLM discovery

LLM-Native Discovery

When the Creative Agent needs an image, it receives asset descriptions directly in context:

"AST-ABC123: Modern fitness tracker on wrist, outdoor setting, morning light | Tags: product-shot, lifestyle, outdoor | Mood: aspirational | Has People: yes | 1920x1080"

The agent reads descriptions like a human would, then selects the perfect asset. No embeddings, no RAG—just context injection.

Complete Asset Lifecycle

📥

Upload Methods

From File: Local path upload
From Bytes: Direct data upload
Generated: AI-generated assets (DALL-E, Midjourney)
Imported: External URLs

🏷️

Asset Types

Images: JPG, PNG, GIF, WebP, SVG, BMP, TIFF
Videos: MP4, MOV, AVI, WebM, MKV, M4V
Audio: MP3, WAV, OGG, M4A, FLAC, AAC
Documents: PDF, DOC, XLS, PPT, TXT, CSV

🔍

Search Methods

By Tags: Keyword matching
By Text: Natural language queries
By Product/Campaign: Association filters
By Properties: Dimensions, colors, mood, style

🎨

Thumbnail Generation

Videos: ffmpeg extracts frame at 3s
Documents: PyMuPDF renders first page
Auto-upload: Thumbnails stored in S3
CDN URLs: Fast delivery via presigned URLs

Lifecycle Management

Auto-expire: 700 days after last use
Usage Tracking: Record when assets are used
Soft Delete: Mark deleted, not removed
Cleanup Jobs: Remove expired assets

🔒

Brand Isolation

Strict Boundaries: Assets scoped to brands
No Cross-Brand: Assets never leak between brands
Multi-Brand Safe: Agencies manage portfolios
Separate Storage: S3 paths per brand

Production Infrastructure

Component Technology Purpose
Storage AWS S3 All files stored in S3 bucket (mandatory, no local fallback)
Vision Analysis Gemini 2.5 Flash / OpenAI Vision Automatic image/video analysis with descriptions, tags, mood
Metadata Store Session Folder (JSON) Asset metadata in brands/{brand_id}/assets.json
Video Thumbnails ffmpeg Extract frame at 3s, upload to S3
Document Thumbnails PyMuPDF / pdf2image Render first page as image
Image Processing Pillow Resize, format conversion, optimization

Storage Architecture

{bucket}/ └── {brand_id}/ └── assets/ ├── image/ │ ├── AST-12345678.png │ └── AST-12345678_thumb.jpg ├── video/ │ ├── AST-ABCDEF12.mp4 │ └── AST-ABCDEF12_thumb.jpg ├── audio/ │ └── AST-98765432.mp3 └── document/ ├── AST-FEDCBA98.pdf └── AST-FEDCBA98_thumb.jpg

Performance-Aware Selection

The system tracks which assets performed well. When generating new variants, successful creative elements are prioritized. Winning imagery compounds like winning insights.

// Example: Performance Tracking
Experiment EXP-001:
├─ Variant A uses AST-ABC123
├─ Variant B uses AST-DEF456
└─ Winner: Variant A (+34% CTR)
Asset Update:
├─ AST-ABC123.total_experiments = 1
├─ AST-ABC123.win_count = 1
├─ AST-ABC123.avg_performance = 3.4% CTR
└─ AST-ABC123.last_used_at = 2025-01-13
Next Experiment:
Creative Agent queries: "Find product shots with high CTR"
AST-ABC123 prioritized (proven winner)

Why This Matters

Traditional asset management has no memory of performance. You might reuse an image that performed poorly or ignore one that drove exceptional results. With performance tracking, the system automatically biases toward creative that has proven effectiveness—compounding your wins over time.

Works With Your Workflow

CREATIVE AGENT INTEGRATION

When generating ad variants, the Creative Agent receives rich asset context:

Available Assets:
AST-001: Product shot, minimalist
Mood: professional | CTR: 2.8%
AST-002: Lifestyle, outdoor
Mood: aspirational | CTR: 3.4%
Agent selects AST-002

EXPORT & DELIVERY

Assets are delivered via presigned S3 URLs with configurable expiration:

// Get download URL
url = manager.get_download_url(
asset_id="AST-ABC123",
brand_id="BRD-001",
expires_in=3600 # 1 hour
)
→ Secure CDN URL