Illudex

How it works

Searching trading cards by how they feel

I collect Pokémon cards and like building binder pages around a theme: cards at night, tiny Pokémon in huge landscapes, that kind of thing. Card sites let you search by name, set and number. None of them can find you “a lonely Pokémon in the rain”. Illudex can, and most of the reason is a model called SigLIP 2. This is how that model works, and where it trips up on trading cards.

Last updated 23 September 2026

Here's one search, start to finish. Click any step to jump to it.

Page one
SpiritombMarshadowArbokHop's TrevenantHaunterToedscruel
A real search, replayed. The tokens and the cards are real; the vector and the dots are drawings. The encoder is part of what ranks the page, not all of it.

Two encoders, one space

SigLIP is a pair of networks trained together. One reads images: a vision transformer that cuts the picture into 16×16-pixel patches and treats them like words. The other reads text. Both output a vector, and training pulls a picture and a caption that describes it toward the same spot. After enough pairs, “a haunted house” and a picture of a haunted house land close together, even for a card the model never saw.

512 px
image size the model reads
1,024
16×16 patches per card
768
numbers per vector
27,093
cards in the space

Searching is then just geometry. Every card goes through the image encoder once. A query goes through the text encoder, and the results are the cards whose vectors point the same way.

deep underwater, light from above
Lumineon VClamperlTirtougaEelektrikWattrelTynamo
Mostly the encoder on its own. Top six, live.

Softmax vs sigmoid

The interesting part is how it's trained. CLIP takes a batch of N images and N captions and, for each image, runs a softmax over all N captions: pick yours out of the lineup. Every score depends on every other pair in the batch, so the whole N×N matrix has to be computed and normalized together, which gets expensive as batches grow.

SigLIP swaps that for a sigmoid. Every image–caption pair is its own yes/no question: is this the right caption or not? There's a learned temperature and a learned bias, and the bias starts at −10 because almost every pair in a batch is a no. No pair needs to know about any other, so it's cheaper, it trains well at small batch sizes, and it scaled to batches of a million (the gains flatten out around 32k).

SigLIP 2 keeps that loss and adds more on top: a small decoder that learns to caption and locate things, self-distillation and masked prediction so the features hold up patch by patch, and multilingual data. Here are its real scores for five cards and five descriptions:

“a coral reef under the sea”“a construction site”“a haunted house”“a frozen, icy world”“a sunset sky”
Wailord0.0580.002-0.0010.0510.019
Metang-0.0060.0710.0130.0640.002
Litwick-0.051-0.0090.0900.0350.008
Articuno-0.013-0.020-0.0070.0850.015
Latios0.0320.001-0.0190.0270.066
Cosine between the card's image vector and each description's text vector. Tiny numbers; only the order matters.

Two things stand out. The raw similarities are tiny (the best on this grid is 0.09), but the order is right: every card's best score is its own description. And the sigmoid, read literally, says no to everything. Its bias is tuned for web captions, not four-word descriptions, so for search you use the order, not the probability.

It reads the text

CLIP-style models read words in images. OpenAI showed this in 2021: stick a note saying “iPod” on an apple and CLIP calls it an iPod. Trading cards are covered in text. Searching “battle” by similarity to the whole card returns cards named Battle City and Battle Reporter. The Crown Zenith Mewtwo VSTAR, which is Mewtwo fighting Charizard, comes in at #4,405.

battle
Mewtwo VSTAR#4,405

Mewtwo fighting Charizard. #4,405 on the whole card, #4,061 on the crop alone.

Similarity to the whole cardreads the printed names
Battle CityBattle ReporterBattle FrontierBattle CageBattle FrontierOctillery
The live search todayactual fights
Single Strike Urshifu VBlaziken VLance's Charizard VEthan's TyphlosionBlastoise EXBisharp
Top six for “battle”. Top row: nearest whole cards in SigLIP 2's space. Bottom row: the site today.

Cropping to the art helps, since it throws away most of the printed text:

LitwickFramed card: the art box
Mewtwo VSTARFull art: the top of the picture, without the attack text
Two fixed boxes, one for framed cards and one for full arts. Cropping to the art drops most of the printed text.

It isn't enough on its own, though. That Mewtwo is still around #4,061 on the crop. Similarity is good at what a picture looks like and weak at what's happening in it, and a fight is something happening. The encoder is part of the picture there, not all of it.

“Similar” means “same Pokémon”

Text-to-image works well, so I assumed image-to-image would too. It doesn't. Take an illustration rare and look at its nearest cards: 14 or 15 of the top 15 are the same species, whatever the scene. My guess at why: the captions it learned from mostly say what is in a picture, not where, so “what is it” dominates the image vector.

The fix uses the text side again. Score every picture against a list of places (a coral reef, a construction site, a snowy mountain) the same way zero-shot classification works, and compare cards by those scores instead. Neighbors in the same kind of place went from 0.225 to 0.385, where chance is 0.10.

Wailord
Wailord, illustration rare
Nearest by the image embeddingsame Pokémon, whatever the picture
WailordWailordWailordWailordWailordWailord
Wailord’s best-matching places
the underwater world, a coral reef beneath the sea2.31
the open ocean with waves and a wide horizon2.12
a harbour with boats and docks2.10
a calm lake with still water1.96
Real neighbors. A place score is how well the picture matches that description, relative to every other card: Metang's 3.80 is far above average for a construction site.

Why: binder pages

All of this is for binder pages. Collectors keep cards in nine-pocket pages and care how a page reads, and the best ones share a place or a light rather than a set. The binder builder cuts a collection into pages like these:

Moonlit
Underwater
Sunset
Nine-pocket pages, each one kind of place.

Try it

Some searches to try: “something scary in the woods at night”, “tiny pokémon in huge landscapes”, “a moonlit winter night”, “the whole sky on fire”. You can also paste a painting and get cards with the same mood. If a result is wrong I want to know, tell me.

Reading

← Back to Illudex