Models · For designers

Twenty Thousand Files Nobody Named Properly

A loose heap of mixed ivory ceramic tiles beside a charcoal tray holding the same tiles in ordered rows, one of them amber
Original abstract editorial artwork inspired by a heap becoming an order.

Every studio has the folder. Ten years of work, filenames like final_v3_REAL_use_this, three different naming conventions from three different account managers, and one person who knows where the 2023 packaging shots are.

Nobody fixes it because fixing it is twenty thousand small judgements, and twenty thousand small judgements is a fortnight. That arithmetic is what changed on September 15, 2026, when TypeSafe AI released a model that answers a declared question in about a third of a second for a fraction of a cent. Ciyo cannot run Jev — it makes no image and no video and is in neither of our model registries — but the shape of this job is worth understanding whichever tool eventually does it.

What it can actually read

Start with the boundary, because it decides the whole design. This kind of model reads text: TypeSafe's documentation states that what you send must be a string, a JSON object or an array of text values, and that images are not supported yet.

So it never opens your JPEG. What it reads is the text record around the file: the filename, the folder path, the caption, any alt text, the client name, the date, the notes in your asset manager, the brief it came from.

That sounds like a fatal limitation until you look at a real library. Most of what you need to know is already written down somewhere, badly. The problem was never that the information was missing. It was that reading twenty thousand scraps of it is a fortnight of somebody's life.

The question set

Do not ask one big question. Ask several small ones against the same record, each with its answers declared in advance. They are evaluated together, so asking five is close to free once the text is on the wire.

A table of five typed questions to ask about each asset, their type, and what comes back
Five questions worth asking of every file. Diagram by Ciyo.

The trap, and the one line that avoids it

Here is the finding that should change how you write the questions. A pre-registered independent evaluation published on September 20, 2026 tested what happens when a file does not belong to any of the categories you declared.

In thirty such cases, with no escape option available, it flagged none of them. It returned the nearest declared answer, with a confidence value attached, every time. Nothing failed. Nothing looked wrong.

That is not a defect, it is the type system doing what it promises: you said the answer would be one of these five, so it was. But in a library that means your 2019 recruitment photos get filed under a campaign that did not exist yet, quietly, and nobody finds out until somebody goes looking.

The fix is one option. Declare `none_of_these`, or `needs_a_human`, and write criteria for it as carefully as for the real categories. Then route it in your own code.

What the whole library costs

The published price is $0.042 per million input tokens, with output free. The arithmetic below assumes about 300 tokens of filename, caption and metadata per asset, which is our assumption rather than a measurement — change it if your records are longer.

Twenty thousand assets at 300 tokens is six million tokens, which is about twenty-five cents to ask one question of every file in the library.

The part that surprises people: asking five questions costs the same twenty-five cents, because you pay for the text you send rather than for the answers you get back.

A table working out the cost of asking one and five questions of a twenty thousand asset library
Illustrative arithmetic from the published price. The 300-token assumption is visible so you can change it.

How to actually run it, without wrecking anything

Do not let anything write to your library on the first pass. Output a spreadsheet: one row per file, one column per question, plus the confidence for each.

Sort that spreadsheet by confidence and read the bottom two hundred rows. That is where the genuinely ambiguous files live, and it is also where you discover that your own categories overlap.

Then apply only the high-confidence answers, and send the rest to a person. TypeSafe publishes a routing pattern that ties the threshold to the cost of being wrong: below 0.6 to a human, above 0.6 for cheap and reversible actions, and a higher bar for anything expensive. Adding a tag is about as reversible as an action gets, so a low bar is defensible here in a way it would not be for deleting files.

A first pass that cannot do damage
StepWhat you doWhy in this order
1. ExportPull filename, path, caption and notes into one text record per assetYou cannot judge what you have not gathered
2. Label by handTag 100 files yourself, and keep themThis is the only measure of whether any of it worked
3. AskRun the question set over everything, writing to a spreadsheetNothing touches the library yet
4. CheckCompare against your 100, and read the lowest-confidence rowsAgreement on your own data, not somebody's benchmark
5. ApplyWrite back only the answers above your thresholdThe rest is a queue for a person, not a failure

What you get at the end

Not a tidy library. A searchable one, which is better, because tidy decays and search does not.

The realistic outcome is that eighty per cent of files get a campaign, a channel and a state, a few hundred land in a review queue, and somebody can finally answer “do we have a photo of the blue packaging” without opening folders.

And you end up with something more durable than the tags: a written definition of what your categories mean, argued over by the people who use them. That document outlives whichever model you used to apply it.

Library sorting questions

Does it look at the images themselves?

No. TypeSafe's documentation says the input must be text. It reads the filename, path, caption, notes and any other written record around the file.

What if a file fits none of my categories?

It will pick the closest one anyway. A pre-registered evaluation found 0 of 30 out-of-scope cases flagged when no escape option was declared. Always declare none_of_these.

What does sorting a whole library cost?

At the published $0.042 per million input tokens, twenty thousand assets at an assumed 300 tokens each is about 25 cents for one question, and about the same for five.

Can Ciyo do this?

No. Ciyo does not run Jev, and Ciyo is a canvas for making work rather than an asset manager. This article is about a job worth understanding, not a Ciyo feature.

Keep reading

Ciyo writes about the models behind creative and agent tooling, and tests the ones it can run.