Copia

Winning ads.

You can't ship enough of them.

Neither could we. We could make a thousand a day. We couldn't tell which ten to run.

So we built an employee that can. And we made it prove it.

Meet it.

It does not do moodboards. It does the week.

# creative

Thread · a whitening brand

  1. DR

    Dana Ruiz9:02

    Can you get next week's statics going? The strips are the push. Same rules as last week.

This is how it works.

Copia's real contact-sheet pipeline, drawn from the definition Copia runs when you ask it for statics. The run lighting it up is illustrative.

reference ads, product photos
per-sheet briefs
first-pass-sheet-<row id>
one per brief index
cell lenses
mirror sheets
eligible
nothing to cut: one more render
crop rectangles
raw takes
one per cell
best-first order
picked
not picked: banked
photo in the drawn colour
first image
each judged image
obvious defects
accuracy and text passed
findings
findings
passed
until it passes or repair_passes is spent
passed
budget spent: blocked
sheet result
render lost to a worker shutdown
render once more
every sheet settled
no Multiplier set
one completion per card and ratio

Copia: dispatch (work-first-pass)

Worker: contactSheetFirstPassWorkflow

Copia: callback and settle

One sheet per brief

One cell per grid square

Tick (every 5 min)Complete

work-first-pass

reads 2

Complete
Pick tasksComplete

work-first-pass › runDispatchPass

reads 2

Complete
Task referencesComplete

_shared/workFirstPassSheet.ts › loadTaskReferences

reads 3

Complete
Plan sheetsComplete

_shared/workFirstPassSheetPlan.ts › planTaskSheets

Sonnet

reads 2

Complete
Run rowComplete

work-first-pass › buildFirstPassSheetParameters

reads 4

Complete
Start the passComplete

work-first-pass › postStartWorkflow

reads 1

Complete
Sheets (one per brief)Complete
1 sheet
BrandComplete

runContactSheetForBriefsV2 › load_brief

reads 4

Complete
ProductComplete

runContactSheetForBriefsV2 › load_brief

reads 3

Complete
Reference adComplete

runContactSheetForBriefsV2 › build_prompt

reads 4

Complete
Creative rolesComplete

runContactSheetForBriefsV2 › build_prompt

reads 3

Complete
Load the briefComplete

runContactSheetForBriefsV2 › load_brief

reads 2 · params 1

Complete
Build the promptComplete

runContactSheetForBriefsV2 › build_prompt

reads 1 · params 3

Complete
Product into the referenceComplete

runContactSheetForBriefsV2 › reference_swap

muse-image-edit (AD_EXAMPLE_SWAP_IMAGE_MODEL) · ad_example_product_swap

reads 1

Complete
Write the reference's lookComplete

runContactSheetForBriefsV2 › reference_description

gemini-3.1-pro-preview · contact_sheet_reference_description

Complete
Reference geometryComplete

runContactSheetForBriefsV2 › reference_geometry

Complete
EligibilityComplete

runContactSheetForBriefsV2 › eligibility

params 2

Complete
Render the sheetRunning

runContactSheetForBriefsV2 › sheet_generation

gpt-image-2.5 (sheet_model) · contact_sheet:sheet_generation

params 3

Running
Find the gridRunning

runContactSheetForBriefsV2 › validate_grid

params 1

Running
Split into cells
The sheet appears with a run
16 cells
Rank by request fit

runContactSheetForBriefsV2 › finish_rank

gemini-3.1-flash-lite · contact_sheet:finish_rank

params 1 · per cell

Gate
Pick cells to finish

runContactSheetForBriefsV2 › judge

contact_sheet:judgment

params 4 · per cell

Gate
Colour the cell drew

runContactSheetForBriefsV2 › polish_anchor

gemini-3.1-flash-lite · contact_sheet:polish_anchor_check

reads 1 · params 1 · per cell

Stage
Finish

runContactSheetForBriefsV2 › muse_finish

polish (finish_mode) · contact_sheet:polish_finish

params 1 · per cell

Stage
QA: accuracy and product text

runContactSheetForBriefsV2 › finish_qa

gemini-3.1-flash-lite · contact_sheet:finish_qa

reads 1 · params 3 · per cell

Gate
QA: product identity

runContactSheetForBriefsV2 › identity_qa

gemini-3.1-pro-preview · contact_sheet:identity_qa

per cell

Gate
Brand rules (record only)

runContactSheetForBriefsV2 › brand_rules

gemini-3.1-flash-lite + gemini-3.1-pro-preview · contact_sheet:brand_rule_qa

reads 1 · per cell

Gate
Anatomy (record only)

runContactSheetForBriefsV2 › anatomy

gemini-2.5-flash · contact_sheet:anatomy_qa

per cell

Gate
Repair

runContactSheetForBriefsV2 › repair

openai/gpt-image-2.5/sunburst/edit · contact_sheet:image_repair

params 2 · per cell

Stage
QA after repair

runContactSheetForBriefsV2 › repair_qa

gemini-3.1-flash-lite · contact_sheet:repair_qa

per cell

Gate
Delivery ratios

runContactSheetForBriefsV2 › ratio_variants

params 3 · per cell

Stage
Cell outcome

runContactSheetForBriefsV2 › cell_outcome

reads 1 · params 1 · per cell

Decision
Render again after a shutdown

contactSheetFirstPassWorkflow

Decision
Judged-delivery ledger

reportJudgedDeliveryLedger

App step
Multiplier take selection

selectDistinctVariantTakes

gemini-3.1-pro-preview · contact_sheet_variant_selection

reads 1 · params 1

Decision
Deliver

deliverContactSheetFirstPass

reads 1 · params 3

Delivery
Workflow callback

n8n-workflow-callback

reads 3

App step
Settle the task

work-first-pass › runOutcomePass

reads 1

App step

1 of 7The sheet

One render, sixteen takes on one sheet, each cell its own idea for your brief.

Then it goes into the account.

Copia's ads are matched to the ads in your Meta account by library name and image hash, and each one is counted from the day it is linked. Not before.

Ad account · September 2026

Illustrative

Copia's ads
$744
Everything else in the account
$3,522
Copia's share
17.4%
Sep 1Copia's adsEverything elseSep 30
Copia's adLinkedSpend
strips_14day_c06Sep 1$744
strips_sensitivity_c02Sep 6Not linked yet
strips_14day_c09Sep 12Not linked yet
kit_morning_c01Sep 19Not linked yet

And this is what happened.

We claim the share of spend we can prove. We do not claim a ROAS edge over the rest of the account; on this account the two ran within noise of each other.

Statement

A whitening brand · September 2026

Spent in the account
$159K
Spent on Copia's ads
$51K
Copia's share of spend
31.9%
Resolved by
Library name
Coverage
Complete

How an ad counts as Copia's, strongest evidence first

  1. 1Launch id. Copia launched the ad.
  2. 2Identical file. The ad's image is the file Copia delivered.
  3. 3Library name. The image in the ad carries the name Copia gave it.
  4. 4The brand's own label. The brand marked the ad as Copia's. Shown as self-certified.

Never counted. The brand's own uploads: its references, product photos and ad examples, even when a file matches.

Coverage. The statement bills nothing unless the ad-level spend ties out to the account's own daily total within 2%, the Meta connection held through the period, and the account's structure had synced.

Hire it.

It makes the week, holds it for your look, and proves its share in your own account.

Illustrative shapes, real mechanism. Numbers from one connected account, September 2026, anonymised.