BETTER!Agentic DAMCome learn more at somuchbetter.io

We did the
homework.

One image. One prompt. Ten runs. Then the same image, the same model, ten more runs, asked properly.

BETTER! Technical Staff · 2 September 2026 · 10 minute read

This week a webinar for DAM managers reported that only 43% of them have any AI in their DAM, and sent the room home with an exercise: take an image and a prompt, run it ten times, and look at the results. The message was that, left alone, AI will throw a party in your DAM and not invite you.

We did the exercise. Then we did the half they didn't hand out.

A large dark brindle Cane Corso lying on a gray rug with two fawn pug puppies, one nose to nose with it, in a living room with a lit lamp.
The test image. AI-generated on 22 May 2026, with full embedded metadata and a signed content credential.

1Method one: just ask

How it was run

Ten runs, done by hand, on a Claude subscription. Same image, same prompt, pasted from the clipboard each time. A fresh session before every run so nothing carried over. Sonnet 5 with reasoning effort set to xhigh. The prompt asked for a description, the main colors, the subject, and "a 10 field metadata model" for an agency DAM, returned as JSON. Each run's output was saved as it came back.

Here is the prompt, exactly as it was pasted, typos and all. The pasted text also told the model where to save its answer, which is left out here.

Please describe this image, what it in it ? What are the main colors ?
What is the subject ? Once that is done please create a 10 field metadata
model with Field Names and the responses for those fields, this is for a
dam system within an advertising agency.

Return your entire response as a single valid JSON object and nothing
else. No markdown, no code fences, no text before or after.

The model saw the picture the same way every time. One adult Cane Corso, two fawn pug puppies, a rug, a lamp, an armchair, a rope toy and a plush toy. Ten out of ten. Valid JSON, ten out of ten.

Everything else moved.

That is the scare. It is real. Run an open question ten times and you get ten answers, and a model with nothing to go on fills the silence with something plausible. Plausible is the worst thing a rights field can be.

It is also not how anyone would build it.

2Method two: ask with structure

How it was run

Ten runs through the API, one at a time, no caching, nothing carried between calls. Same image, same model, same effort setting. This time the model was handed a system prompt with twelve named fields, allowed values for the ones that have them, and one permitted word for an unknown: NO ANSWER. It was also handed a context block built by reading the file's own embedded metadata. The output shape was enforced by a schema. One field, the agency job number, had no source anywhere. That was the trap.

Here is the entire instruction. This is what "control" looks like. It fits on a page.

You are cataloguing one image for a Digital Asset Management (DAM) system
at an advertising agency.

You will receive the image and a short block of context about the file.
Fill in the 12 fields below and return them as a single JSON object.
Nothing else.

Rules
1. Fill a field only if the answer is visible in the image or stated in
   the context.
2. If it is not, write exactly NO ANSWER. Do not guess, estimate or infer.
3. Where a field has a list of allowed values, use only those values,
   spelled exactly as shown.
4. Copy values from the context exactly as written. Do not reformat them.
5. Field 11 is the one exception to rule 1. There you use your judgment.

Fields
1.  title            A short title, 8 words or fewer. From the image.
2.  description      1 to 3 sentences on what is in the image. From the image.
3.  keywords         8 to 12 lowercase keywords. From the image.
4.  category         One of: People, Animals, Products, Food & Drink, Places,
                     Vehicles, Nature, Abstract. From the image.
5.  dominant_colors  Up to 4 of: Black, White, Gray, Brown, Tan, Beige, Red,
                     Orange, Yellow, Green, Blue, Purple, Pink. From the image.
6.  creator          Who or what created the image. From the context.
7.  date_created     YYYY-MM-DD. From the context.
8.  ai_generated     Yes or No. From the context.
9.  asset_id         The asset's identifier. From the context.
10. usage_rights     The usage rights or license. From the context.
11. campaign         The one campaign this image best fits, from:
                     Purina Dog Chow, Purina Cat Chow, Summer Equestrian,
                     Gatorade, Campbell's Soup. Choose exactly one.
12. job_number       The agency job number this image is assigned to.
                     From the context.

And the context, read out of the file by a script and pasted under the image:

Context for this image
File name: dogs-codex-handoff-003.png
Asset ID: 97224f6c-acd5-5169-8cc3-c45abb79183e
Creator: OpenAI Codex
Date created: 2026-05-22
AI generated: Yes
Usage rights: Internal testing and DAM validation use.

Catalogue this image.

Ten runs. Every run came back with the same twelve fields in the same order. The creator, the date, the asset ID, the AI flag and the license came back exactly as the file stated them, ten out of ten. The category was Animals ten times. The colors were the same four ten times. Asked to pick a campaign from five, it picked Purina Dog Chow ten times. The title and description varied in wording and agreed on the facts.

And the job number, the field with no source, came back NO ANSWER. Ten out of ten.

3Side by side

Method one, just askedMethod two, asked with structure
Control
Who names the fieldsThe modelYou
Output shapeWhatever came backEnforced by a schema
Allowed valuesNoneYour lists, spelled your way
Creator, date, ID, rightsGuessedRead from the file
When it doesn't knowFills something inWrites NO ANSWER, which you can filter on
Consistency
Field names across ten runs6412, same order every run
Container shapes31
Usage rights10 different values, all inventedCopied from the file, 10 of 10
Asset ID6 invented, 6 formatsThe real one, 10 of 10
Date createdThe test date, or "Unknown"2026-05-22, 10 of 10
Creator"Unknown," or a file pathOpenAI Codex, 10 of 10
Field with no sourceFilled in every timeNO ANSWER, 10 of 10
Wrongly left blankn/a0 of 50 descriptive slots
Cost
Seconds per record19 to 845 to 8
Model calls per record10 or 111
Tokens written per record4,300 to 12,000, average 6,534283 to 306, average 293
Cost of what the model wrote, at published rate6.5 cents per record0.3 cents per record
Per 10,000 assetsabout $650about $30
Per 100,000 assetsabout $6,500about $300

A note on the money rows. Method one ran on a subscription, so nothing was metered. The figures price only what the model wrote, at Sonnet 5's published rate at the time of writing, $10 per million output tokens, with no volume, batch or caching discounts. Reading the image and the prompt is left out on both sides, and so is any re-read context. Method two writes twenty-two times less to answer the same question, and what it writes is a record you can use.

Method onejust asked

Field12345678910Returned
Title10/10
Description10/10
Keywords9/10
Category9/10
Dominant colors10/10
Creator3/10
Date created7/10
AI generated0/10
Asset ID6/10
Usage rights10/10
Campaign4/10
Job number0/10
Fields outside the schema411332422123

Method twoasked with structure

Field12345678910Returned
Title10/10
Description10/10
Keywords10/10
Category10/10
Dominant colors10/10
Creator10/10
Date created10/10
AI generated10/10
Asset ID10/10
Usage rights10/10
Campaign10/10
Job number10/10
From the imageFrom the file's metadataModel's choice from a controlled vocabularyLabelled unknown, in free textNo source, filled anywayNO ANSWER, flagged for reviewNot returned

Twelve fields, ten runs, each method. Every cell is one field in one record. The left grid is holes and red. The right grid is solid, with one outlined row where the model said it didn't know.

4The model was always smart enough to say "I don't know"

10of 10
Runs that wrote NO ANSWER for the field with no source
0of 50
Descriptive fields wrongly left as NO ANSWER

Those two numbers are the point. Given one word for "I don't know," the model used it exactly where it should and nowhere else. In method one it invented a rights value ten times out of ten. Not because it was dumb. Nobody had given it the word.

Two things to say plainly. First, Sonnet 5 has no temperature setting. The API rejects temperature for this model. There is no knob that makes it repeat itself, so every run in both methods is the model sampling as it ships, and whatever consistency method two shows comes from the structure, not a setting. Some models do expose that knob. Turn temperature down on one of those and the free-text fields, the title and the description, will come back tighter and more alike from run to run. Structure does the rest either way. Temperature narrows the wording; it has never stopped a model from inventing a rights value. Second, in method two the model never used a thinking step. Given a schema and a context block, it had nothing to reason about, and each run took five seconds instead of up to eighty.

The AI didn't need to be smarter.
It needed direction, like any new employee.

5 · The part you should actually click

See it happen
in a DAM.

We loaded all twenty records into a BETTER! asset page. Same file, open in the DAM, ten ingests each way. Click through the runs and watch the record wobble, then watch it hold.

Open the demo two minutes, no login
1Pick a methodTop right, two buttons: Just asked and Asked with structure. Same asset, same model.
2Click runs 1 to 10In the metadata panel. On Method 1 the record reshuffles every click. Red chips mark values with no source. The review queue stays at zero. Nothing asked to be checked.
3Switch and click againOn Method 2 nothing moves but the wording of the title and description. Green chips are values copied from the file. Job number is flagged NO ANSWER and the review queue reads one.
4Scroll downEither page ends with the ten-run grid. Left is holes and red. Right is solid.

6What control actually is

The webinar was right that AI will hurt you unless you control it. Where we part ways is on what control means. It is not a governance program and it is not an engagement. It is the page above: a field list, a few allowed-value lists, the metadata your files already carry, and a rule for what to write when the answer isn't there. That is cataloguing. If you manage a DAM, you already know how to do it, and nothing in method two happens without someone who does.

This is the core of how a serious deployment works, not the whole of it. A production DAM adds a review queue, versioned prompts and a pinned model. But the core is what closes the gap the exercise opens, and the core is one page.

BETTER! is built this way, and it is fully functional today. It is C2PA compliant. It tracks provenance from the moment an asset arrives to the moment it leaves, and every action along the way, no matter how small, is recorded for audit. The model's answer is one entry in that record. It is never the record itself.

The question isn't whether your DAM has AI. It's whether your DAM has a brain, and thinks.

BETTER! is the agentic DAM. Humans set the strategy, agents do the work. Visit somuchbetter.io