What is Rarity?

At Curio, we’re big fans of open standards, which is why we partnered with, PROOF, and OpenSea to create OpenRarity, the first open-source rarity standard for the NFT ecosystem.
Prior to OpenRarity, every NFT tool used their own closed-source algorithm to determine rarity. Most tools, including Curio, developed their rarity algorithm based on Ranking Rarity article on Medium, which introduced the concept of a rarity score based on summing normalized trait probabilities. Unfortunately, never open-sourced their algorithm or provided an API, which meant each NFT tool had to develop their own algorithm.
This led to conflicting rarity ranks for the same collections across various platforms, causing confusion for NFT buyers and sellers. This was just one of the reasons we chose to pursue an open rarity standard. To learn more about OpenRarity and what motivated the initiative, check out the announcement on Mirror:

Rarity on Curio

On Curio, you’ll see two types of rarity: OpenRarity and Legacy Rarity. Moving forward, most collections will show OpenRarity. For collections that were created before OpenRarity was released and have yet to opt-in to OpenRarity, we show Legacy Rarity.


To learn more about OpenRarity and how it is calculated, check out the official OpenRarity website or GitHub repository.

Legacy Rarity

Legacy Rarity is Curio’s previous rarity formula that is based on the formula mentioned above. Stated briefly, this formula sums the normalized inverse probabilities of an NFT’s traits to determine the rarity score of an NFT in a collection. A trait’s inverse probability is normalized by the number of trait values available in a trait’s category.
Below is a breakdown of how we calculate the Legacy Rarity score that is presented on Curio.
Step 1: Calculate the Trait Probability Score for every trait in the collection
Trait Probability Score=(1 ÷ number of items with trait valuenumber of items in collection)Trait \space Probability \space Score = \bigg(1 \space \div \space \dfrac{number\space of\space items \space with \space trait \space value}{number \space of \space items \space in \space collection}\bigg)
Step 2: Calculate the Trait Normalization Factor for every trait category in the collection
Trait Normalization Factor=avg number of options in all trait categoriesnumber of options in trait categoryTrait \space Normalization \space Factor = \dfrac{avg \space number \space of \space options \space in \space all \space trait \space categories}{number \space of \space options \space in \space trait \space category}
Step 3: Calculate the Trait Rarity Score for every trait in the collection
Trait Rarity Score=Trait Probability Score × Trait Normalization FactorTrait \space Rarity \space Score = Trait \space Probability \space Score \space \times \space Trait \space Normalization \space Factor
Step 4: Calculate the Legacy Rarity Score for every NFT in the collection
Legacy Rarity Score=∑ Trait Rarity Scores for NFTLegacy \space Rarity \space Score = \sum \space Trait \space Rarity \space Scores \space for \space NFT