NFTier logo, rarity engine and nft explorer.
NFTier logo, rarity engine and nft explorer.



The NFTier Rarity Algorithmn.

In this guide we will walk through how the algorithmn determines an NFT's rarity.

The short story.

At the end of the day, our ranks mostly come down to math, with a little bit of augmentation that feels specific for NFTs. All of our calculations are based on a few core tenets that we find important to determining rarity:

  • A single rare trait should not (in most cases) determine rank.
  • Missing traits are just as important as present traits.
  • Certain kinds of traits, like numeric values, should not always be considered.

How do we determine a "rank"

A rank is determined by the tier score of each NFT in a collection. The lower the tier score, the lower the rank will be, which you can see in the table below as an example.


What is a tier score?

A tier score is a score set on an NFT which is determined by our algorithmn.

How do we determine a "tier score" ?

Let's take Roostr #5 from the Roostr collection. Roostr is an interesting collection, because, the collection has 8 different traits, and each NFT has anywhere between 2, to 8 of those traits. Roostr #5 is one of those tokens which has all 8, and ranks #13, with a tier score of 234.2242.

Attribute TypeAttribute ValuePercent OwnedTrait Score
trimSpace Trim0.342%41
necka little rag3.506%420
feetGreen Feet6.736%807
bodySnow White36.959%4428

Each trait has a "Trait Occurrence" field and is determined by the number of other NFTs that have this same trait. By default, we take this value and add it to a total score. However, we also have a set number of weights that are used for all collections. Each weight matches a specific rank, and if a trait falls into that rank, then the entire score of the NFT is modified. For Roostr #5, this applies for 4 of its 8 traits. The formula for the new score is:

NFTRarityScore = NFTCurrentScore * FoundWeight

If we had not used weighting for Roostr #5, then its actual score would have been 7319, as opposed to 234.2242 . The actual score would have placed too much attention on overall occurences of traits and not taken into account some of the more rare traits that an NFT might have.

What are the current weights?

You can find all the weights below (subject to change), that we use for every collection. A weight is used when a a particular trait fits matches a specific rank. The impact is expressed in the third column, "Score reduced by".

Weight RankWeightScore reduced by

What if an NFT has a different number of traits from others in a collection?

Let's take a look at Roostr #44 which has a rank of 83, and score of 1532.8925

Attribute TypeAttribute ValuePercent OwnedTrait Score
headPlague Doctor0.576%69
tailBig Mama Fat Pipes0.601%72
trimBlue Trim2.846%341
bodyPassion Red12.319%1476

Unlike Roostr #5, Roostr #44, has 6 traits. When we come across a Roostr that is missing traits, we set the value of those traits to "None", and we record how many other Roostrs, also lack that value. This levels the playing field -- having less attributes does not provide a direct advantedge. That said, like Roostr #5, 3 of trait's Roostr #44 has, are weighted traits. Because of these 3 weighted traits, this NFT still ranks quite high.

Is every NFT Collection calculated the same?

Not quite. For example, some projects have a GameFi element to them, like Wyndblast with a number of numeric traits like "Attack", and "Armor". For these collections, we know the numeric stats, will eventually have an impact on the game. However, we also know, some collectors are only interested in the "physical" traits. So, we offer two different ranks, that can be toggled through our Advanced Filters.

Alternate scores