How it works
Searching trading cards by how they feel
Last updated 23 September 2026
Here's one search, start to finish. Click any step to jump to 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.
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.
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” | |
|---|---|---|---|---|---|
![]() | 0.058 | 0.002 | -0.001 | 0.051 | 0.019 |
![]() | -0.006 | 0.071 | 0.013 | 0.064 | 0.002 |
![]() | -0.051 | -0.009 | 0.090 | 0.035 | 0.008 |
![]() | -0.013 | -0.020 | -0.007 | 0.085 | 0.015 |
![]() | 0.032 | 0.001 | -0.019 | 0.027 | 0.066 |
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.
#4,405Mewtwo fighting Charizard. #4,405 on the whole card, #4,061 on the crop alone.
Cropping to the art helps, since it throws away 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.
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:



























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
- Radford et al., Learning Transferable Visual Models From Natural Language Supervision ↗ (CLIP, 2021)
- Zhai et al., Sigmoid Loss for Language Image Pre-Training ↗ (SigLIP, 2023)
- Tschannen et al., SigLIP 2: Multilingual Vision-Language Encoders ↗ (2025)
- Goh et al., Multimodal Neurons in Artificial Neural Networks ↗ (Distill, 2021)





























