Grafy Blog
All postsTry Grafy free
← All posts

Six hundred models, and one list to pick from

The Grafy team · Sep 1, 2026 · 11 min read
ai model pickerllm model selectionopenrouter modelsmodel catalogchoose an ai model
Six hundred models, and one list to pick from

Two years ago choosing a model meant choosing a company. Now a single aggregator lists several hundred of them, three of them shipped this week, and four of the ones you know have a mini, a flash and a preview variant with nearly the same name. The hard part of using AI stopped being access and became which one, and how would you know.

That problem lands in a dropdown. Grafy shows the same model panel on every surface — chat, image, video, code, the agent — and it is a real panel rather than a <select>: it searches, it groups five ways, it remembers what you used, and it puts a model released this week at the top rather than wherever alphabetical order happens to drop it.

1Filter by job2Search3Group4Pick
Filter by job → Search → Group → Pick
Search modelsGroup: NewestRECENTLY USEDClaude Sonnet 5Anthropic · 2026-02-11 · 200kVisionPremiumPOPULARGemini 3.7 FlashGoogle · 2026-01-28 · 1MVisionValueGPT-5.6 SolOpenAI · 2026-02-03 · 400kVisionPremiumDeepSeek V4 ProDeepSeek · 2026-01-19 · 164kFreeNano BananaGoogle · 2025-08-26 · takes 1 referenceFiltered outTwo reference images are attached, so a model that takes one is filtered out rather than offered and then refused.
One panel, mounted the same way by six surfaces. The dimmed row is not a styling choice — it is a model that cannot do the job currently composed.

Six surfaces had grown six pickers

The honest origin of this is not a design sprint. Chat, Code and Operator each had a React model component; /graph and /creator shared a native <select>; Film and Game did their own thing again. Six implementations meant six orderings, none of them could search, and the release date the catalogue receives on every model was being dropped before it ever reached a browser — so a model published three days ago sat wherever a popularity score happened to put it.

The replacement is one custom element, <grafy-model-list>, rather than one React component, because two of those surfaces are not React and the vanilla ones needed their <select> replaced by a panel anyway. It renders into a shadow root, so the same panel dropped into a Mantine dialog and into hand-written CSS looks identical in both and inherits from neither. React mounts it in three lines: assign the array, listen for select.

It is deliberately not a second implementation in TSX. A port is how six surfaces got six orderings the first time.

Newest first, and two dates to mean it

The default order is newest first, which sounds trivial until you ask what newest means across providers that know different things. Only the aggregated cloud list publishes a real publication date, on all 491 of its models. The other 146 — the curated Vertex, fal, Replicate, ComfyUI, 3D and local entries — publish nothing, so their date is the day they reached the catalogue, generated from this repository’s own history.

They are kept as two separate fields on purpose, released and added, and the sort prefers the first. A model published in March and wired up here in July is a March model, and ordering it above one published in June would misreport what is actually new. A model with no date at all sorts after every dated one rather than being guessed into a position it did not earn, and the hover says which of the two you are looking at: Released 2026-01-28 or Added to Grafy 2026-01-28. Same text, different meaning — worth one tooltip rather than two date columns.

Five ways to group, one button

The grouping control is a single button that cycles rather than a menu, because there are five modes, the label always says which one is on, and a menu would cost a click to reach any of them.

Newest is the flat list above. Popular splits the famous shelf out and leaves everything else still in date order — one list re-sorted whole would bury what is new under what is known. Maker groups by the company that built the model rather than the platform serving it, and orders those groups by their newest model, so grouping by organisation does not quietly become alphabetical and hide whoever shipped yesterday. Price splits Free, Value and Premium. Context splits at the two thresholds that change what a model can be used for: 200k and above reads a codebase, 32k to 200k reads a long document, and below that is a conversation.

Capability is a filter, never a group

The rule that keeps the panel short is that each surface declares the kinds of output it can actually use, and the list is filtered to those before anything else happens. Creator asking for an image offers text-to-image models, and only starts offering image-edit models once there is an image to edit.

That is a filter and never a grouping, which is a deliberate line: a group you must not choose from is a group that should not be on screen. A picker that shows you twelve video models under a heading and then rejects all of them has wasted the scroll and taught you nothing.

One subtlety is worth stating because it caused a real bug. The chat endpoint returns text models only and does not label them, so a kind filter there has nothing to match and must be a no-op rather than emptying the panel. But once any row in a payload declares its kind, a row that does not is no longer a wildcard — it is a row of unknown kind, and letting it through is exactly how a text model turned up in an image picker.

Reference images narrow the list too

Image models disagree about how many reference pictures they accept, and the disagreement is invisible until a run fails. So the panel is told how many you have attached right now, and any model declaring a smaller limit is removed from the list rather than offered and then refused.

This is the same principle as the kind filter, applied to a number instead of a category, and it is why the dimmed bottom row in the figure above is not simply styled differently — with two references attached, a model that takes one cannot serve the run you are composing. If you are working the way multi-reference editing describes, the list shortens as you add sources, which is the correct direction for it to move.

Free, Value, Premium — and what dimming means

Every row carries its tier. Free is exactly that. Value is the cheapest band of that model’s own kind, computed as a share of the catalogue rather than a fixed price ceiling, so it keeps meaning something when providers re-price. Premium is everything else.

An account set to lowest-cost-only does not lose the premium rows — they are greyed, not removed and not disabled. That distinction is the whole design: picking one is what triggers the one-off confirmation the mode exists to produce. A hidden option cannot be consciously overridden, and a disabled one tells assistive technology the opposite of still selectable. The spend gate behind that behaviour is described in lowest-cost model routing.

The name is the model, not the vendor

One aggregator embeds the maker in the model name — Anthropic: Claude Sonnet 5 — while every other source in the catalogue says plainly Veo 3.1 or Nano Banana. Since the panel already prints the maker on its own line under the name, that prefix was the same word twice, and the second copy was what pushed the actual model name into an ellipsis in a narrow column.

It is now stripped when it really is that model’s maker, matched against the model id ignoring case and punctuation, so Mistral against mistralai and xAI against x-ai both resolve. A prefix that names something else — a fine-tune house rather than the lab — is information the maker line does not carry, and it stays. The full name also rides in the row’s tooltip, because a long name can still run out of room.

A shelf of five you actually used

Above the catalogue sits a Recently used shelf of up to five models, drawn from what the server has recorded for your account. It is filtered by the same pre-filter and the same search as the list below it, and that is not a detail: a recent model this surface cannot use is not a shortcut, it is a trap.

Below the shelf, surfaces that have one show a door to the full model browser on your account page. It opens in the same tab and stays visible even when the list below is empty — which is precisely when it is needed.

A worked example

You are in Creator with two product photos attached and you want a model that can edit them together, cheaply, and that you have used before.

The panel opens already filtered to models that produce an edited image, with the two-reference limit applied, so anything accepting a single reference is gone before you look. The shelf shows the one image-edit model you used last week. You press the grouping button twice to reach Price, and the Free and Value sections are now the top two headings on screen. Typing flash narrows on name, id and maker at once. Four rows remain, each showing the maker, the release date and the context window. You pick one, and the panel closes.

No tab was opened to compare pricing pages, and no model was offered that would have failed the run.

Compared with a dropdown

A native <select> is not a bad control; it is the wrong size of control for this list. It cannot search, so at six hundred entries the only way to find anything is to already know its exact position. It cannot show a second line, so the maker, the date, the price tier and the context window all have to be crammed into the label or dropped — and they get dropped. It cannot group by more than one dimension at a time. And on a phone it becomes a native wheel, which is the worst possible presentation of a long alphabetical list.

The other common answer is to curate: pick eight models, hide the rest, update the list on a release cadence nobody sustains. That reads well for a month. Then a lab ships the model everyone is talking about and your product does not have it, because the list is in a source file. The catalogue underneath this panel refreshes itself instead — the mechanics of that are their own post, a model catalogue that updates itself.

Where you will meet it

The same panel is in Chat, Creator, the graph editor, Code and Operator, and the surfaces that were still on a native control are being moved onto it. If you want the tour of what each of those apps actually makes, every Grafy app and what it makes is the map; if you would rather not choose at all, the council runs your prompt across several models at once and fuses the answers.

Frequently asked questions

How many models are actually in the list?

Around 640 today: roughly 491 from the aggregated cloud catalogue plus 146 curated entries across Vertex, fal, Replicate, ComfyUI, 3D and local runtimes. The number moves on its own, because the cloud half is fetched live rather than written into a source file. Any single picker shows far fewer than that, because it is pre-filtered to the kinds that surface can use.

Why is a model I can see in chat missing from Creator?

Because Creator asks for models that produce images, and a text model cannot. Each surface declares the output kinds it can use and the list is filtered to those before search or grouping runs. If the panel is empty it says so in words — no model here can do this job — rather than showing an empty box.

What does a greyed-out row mean?

That your account is set to lowest-cost-only and this model is premium. It is greyed rather than hidden or disabled, because selecting it is what raises the one-off confirmation that lets you spend on it deliberately. Rows marked Added in a compare party are a different thing: those are already in use and genuinely not selectable.

Does the search look at anything besides the name?

It matches the model name, the full model id and the maker, all case-insensitively and at once. So anthropic, sonnet and claude-sonnet-5 all find the same row, and searching a company name finds everything that company built regardless of who is serving it.

Why is a brand-new model sometimes not on the Popular shelf?

The shelf holds one flagship per family people already recognise, resolved live from the catalogue rather than pinned to ids. A model whose name does not match a known family lands in the main list instead — which is what happened to a new Claude line until its family was added. Newest-first ordering still puts it near the top of that list on the day it appears.

Open Chat and press the model name to see the panel.

Read next

More from the Grafy blog.

← Back to all posts