All Stories
2026-09-173 min read

Advertising · CLIP · Visual Search · TableModel · Multimodal AI · Pixeltable Cloud · Creative

AdRadar: Creative Fatigue and Copycat Search Without a Tagging Farm

Ingest ad images (and optional video), read the copy, transcribe the voiceover, score fatigue from spend and days. CLIP finds lookalikes. Not a trained fatigue model.

Pierre Brunelle

Pierre Brunelle

Pixeltable Team

Summary: AdRadar is the media-buying loop: a creative image (and optional video) becomes readable copy, a voiceover transcript, a fatigue flag from spend and age, and a CLIP index for lookalikes. You do not run OCR, Whisper, a scoring spreadsheet, and Pinecone as four products. You declare Ads. pip install pixeltable.

The Product#

  • Ingest creative_image with optional creative_video
  • Store spend, impressions, conversions, active_days
  • Read on-image copy with Gemini — not a fake OCR product
  • Flag creatives that have been live too long with a weak conversion rate
  • Drop a competitor screenshot; return nearest ads

SKU shop-the-look is SnapCatalog. This post is the same CLIP-on-image index with campaign telemetry on the row.

The Stitch You Delete#

A folder of exports from the ad account. A VLM batch for copy. Whisper for video ads. A sheet that divides conversions by impressions. Embeddings in a sidecar keyed by ad_id. Pixeltable is the creative row those joints were reconciling in ops.

The Receipt#

python

fatigue_risk is arithmetic on columns you already store — days live and conversion rate — not a trained fatigue model we pretend to ship. Gemini reads the pixels for copy. CLIP on the image is the copycat path, same embedding= form as SnapCatalog. Same file on Cloud: db → schema → service.

What This Is Not#

Not Meta Ads Manager. Not a bid optimizer. Spend truth stays in the ad account. Not an OCR vendor. Not PixelSearch as a hosted consumer UI.

People Also Ask#

Image-only ads? Leave creative_video null. Voiceover is empty; the image path still runs.

Why not a second MiniLM index on copy? You can add one. This receipt keeps CLIP on the pixels so lookalikes do not depend on OCR quality.

How do I go to Cloud? Same app.py. PIXELTABLE_API_KEY, pxt://org:db, then pxt db updatepxt schema updatepxt service update.

Score the Row, Search the Pixels#

Declare the creative. Apply the file. Insert the JPEG. Query HIGH and lookalikes. Keep the catalog. Delete the tagging farm.

Declarative. Multimodal. Incremental.

Focus on innovation, not infrastructure.

10-minute tutorial · Join community