Models · For designers
Twenty Thousand Files Nobody Named Properly

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.

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.

Posted 2026-09-21, part of a thread written after watching the model in use. The list — “Classify this. Route this. Score this. Choose this tool. Verify this output.” — is the clearest short statement of the job we have seen, and sorting a library is the first item on it. The poster is writing about software decisions rather than about creative work.
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.
| Step | What you do | Why in this order |
|---|---|---|
| 1. Export | Pull filename, path, caption and notes into one text record per asset | You cannot judge what you have not gathered |
| 2. Label by hand | Tag 100 files yourself, and keep them | This is the only measure of whether any of it worked |
| 3. Ask | Run the question set over everything, writing to a spreadsheet | Nothing touches the library yet |
| 4. Check | Compare against your 100, and read the lowest-confidence rows | Agreement on your own data, not somebody's benchmark |
| 5. Apply | Write back only the answers above your threshold | The 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.