NFT Ranks & Rarity: Calculations Explained by CNFT Jungle

10 min readMar 5, 2022

Many factors go into the value that individuals (and communities) place on their NFTs. These include the quality of the artwork, the transparency and trustworthiness of the development team, and the roadmap. However, in the world of collectibles, one factor has always stood out as one of the strongest markers of value: rarity.

While some communities have tried to shift focus away from rarity by not “officially” recognizing rankings, in general, the more sought-after traits tend to be the rarest ones, making rarity an inherent part of how communities value their NFTs. With thousands of unique NFTs within a collection and with each NFT having several randomly assigned traits, determining a rarity rank can become a pretty complex math problem (specifically, statistics).

As you can imagine, there are many ways to solve a math problem, and the popular sites that offer CNFT rankings (CNFT Jungle, CNFT Tools, Tokenref, NFT Jam) each seem to use different methods. While most people appreciate having multiple opinions, they are understandably hesitant to purchase an NFT that ranks well on one site and poorly on another. This leads many communities to decide on one site to promote as the “official” rank source.

Unfortunately, this also leads to a lowering of trust in the other ranking sites. We are members of several discords and have seen many comments like this:

“I don’t trust CNFT Jungle…just compare them with [the ‘official’ site]

With this article, we aim to provide more transparency into our calculation methods to help build community trust. We want to be the tool of choice to determine CNFT ranks and ultimately be your one-stop shop to research, build, and manage your CNFT collections.

Initial Approach

Our initial rarity calculations were heavily inspired by an in-depth article from the respected NFT rarity database, They wrote about the difference between Trait Rarity, Rarity Score, and Statistical Rarity and listed all of the pros and cons of each approach. Their basic formula for Rarity Score (for an individual trait) is the following:'s rarity score formula

The total Rarity Score for an NFT is the sum of the Rarity Score of all of its trait values.

Then they add up all of the individual Rarity Scores for each trait of an NFT to get the Total Rarity Score. While this is one of the ways to calculate the collection rarities, it did spark a discussion in the original article’s comments section. After doing more research we decided to go further and apply trait normalization to the above Rarity Score calculation approach.

Trait Rarity and Rarity Score with Trait Normalization

We use Jungle Trait Rarity (JTR) and Jungle Rarity Score (JRS) as a shorthand in the future sections.

Suppose you have a 2000-item collection with two distinct trait categories, “Background” and “Hat” and there are 5 possible traits in “Background” and 10 possible traits in “Hat”. Let’s take a look at rarity score in action using the example of some background, let’s call it "Background 1" for short and some hat "Hat 1".

Assume Background 1 and Hat 1 each have a 1% rarity (they each occur in only 20 of the 2000 NFTs).The less trait options there are, the more unlikely that one of them will be so much rarer than the others. E.g. it is way more common for a trait to be 1% when there are 100 trait options rather than 5. Hence, it is more impressive that Background 1 was able to achieve this, because there were only 5 backgrounds to choose from. However, using the calculation discussed above, both Background 1 and Hat 1 would have the same Rarity Score, as shown in the table below.

Background trait distribution
Hat trait distribution

One way to account for this situation is to recalculate the Rarity Score of each trait using normalization, which involves taking values measured on different scales and adjusting them to a common scale. For convenience, let's call this method Jungle Trait Rarity or JTR.

Trait normalization formula

Let’s look at our previous spreadsheet to see JTR in action:

“Background” trait distribution with JTR
“Hat” trait distribution with JTR

As you can see, Background 1’s JTR is more than twice the value of Hat 1’s JTR, even though both traits have the same rarity. (JTR is rounded here for simplicity)

To calculate the Jungle Rarity Score (JRS), we add up all of the JTRs for each trait of a particular NFT. In this example case with only 2 traits "Background" and "Hat", that would look like this:

Jungle Rarity Score

By default, CNFT Jungle will use this method for all future collections.

Jungle Statistical Distance (JSD)

The statistical rarity approach accounts for the trait imbalance mentioned above in a different, but very straightforward manner. If one of the NFT attributes is 100 times more unique than the other, you can compute this by dividing the overall probability, but you could also do it separately for each attribute. The end outcome is the same.

For example if an NFT has 2 traits with 1 trait at 10% and the other trait at 50%, the ‘statistical rarity’ for that NFT would be (10% * 50%) = 5%. The probability of not having the trait is also counted in the calculations.

Example of a statistical rarity calculation

In the example above the #1 would be considered the rarest, having 0.001 statistical probability, or 0.1%. This can be applied to each of the NFTs to get their ranks.

Using statistical rarity in terms of distance between two NFTs is reasonable, provides a relative insight into rarity on the existing number of NFTs, and avoids over-representation of specific traits based on the flawed assumption that twins are more likely to exist in a 10,000 sample drawn from the collection supply.

We think that statistical rarity can be used as an effective and reliable alternative and will be keeping this as an alternative method of rarity calculations. We were also inspired by the discussion in the article’s comment section and like the name “Jungle Statistical Distance” (credits to @RuudSneep on Medium) better so will be renaming “Statistical Rarity” to that in the future.

Methods Comparison

Let's use the latest mint on Cardano "Radioactive Crocs Club" as an example for method comparison, to simplify, let's take only 3 traits for each category, "Back", "Eyes" and Skins" and use #19, #21, #350, #8819 and #9980 for visual comparison.

Radioactive crocs

The trait distribution percentages were rounded for easier calculation display. "Back" trait had only 5 options and the least rare of them was "None" with 90% chance. "Eyes" trait had 27 total options with "None" being the least rare at 20%. "Skins" had 26 total options with "Blue Scales" being the least rare at 20%. The above NFTs had the trait distribution as follows:

NFTs trait distribution

Now let's calculate rarity using rarity score, statistical rarity and JRS.

NFTs rarity calculations
NFT ranking

The NFTs were ranked as follows using different approaches:

Rarity score ranking
Statistical ranking
JRS ranking

The only similar rank between the three approaches is the #8819 which is the rarest using all three of them. Out of those three methods we think the Rarity Score with Trait Normalization (JRS) is the most intuitive and will be using it as CNFT Jungle’s default rarity sort. However, other methods will still be available by using the ‘Advanced’ toggle switch.

Notes & Features

Real-Time Ranking (during minting)

CNFT Jungle maintains a database of every NFT project on the Cardano blockchain (search by PolicyID if your project isn’t verified yet). We process all of the on-chain trait data automatically then provide a filter to help you find the traits you are interested in. This also allows us to automatically calculate rarity and rank, even as the project is minting.

Nearly every project waits until a mint is complete before releasing its rarity chart. The real-time rarity feature of CNFT Jungle gives you a competitive edge as the secondary market fills with deals from uninformed sellers. It also allows you to recognize if the NFTs you minted aren’t likely to be rare so you can recoup some costs before the mint-day hype fades away.

As mentioned in the sections above, the rarity score depends on how many assets are minted. As additional NFTs are minted, what started as a very rare trait might become more common, which will affect the overall rank. However, most projects randomize trait distribution and also randomize which NFTs are sent out, which should help ranks from changing drastically during a mint.

Rarity Injection to marketplaces

Using CNFT Predator Extension developed by us you can populate the supported marketplaces(currently only with additional listing information. Currently, using it you can view the rank and rarest trait on the listings.

Rarity population example on

Other Trait Normalization Benefits

Another benefit of trait normalizing the Rarity Score calculation is that more evenly distributed traits within a category contribute less to the overall score. See what happens when we set each background value in our example to 400 NFTs.

Equal background trait distribution

The JTR for each background option is now 1, so the background category will now contribute less to the overall score.

This is even more important for categories that have many traits. Imagine there was also an “Eyes” category with 100 different trait options. If the distribution of each trait was evenly set to 20, 20, 20, …, 20, and so on, then each trait would have a Rarity Score of 1/(20/2000) or 100 which using the simple Rarity Score would be a significant weight in rankings, however using trait normalization it wouldn’t have any weight as the added Rarity Score is just 1.

Other methods of calculations

Many project developers design their collections so that some of the NFTs have different numbers of traits. For example, if a project has three trait categories (head, body, legs), the highest trait count possible is three. But if some of the NFTs have “None” (or equivalent) listed under the head category, then those NFTs will have a trait count of 2. Either by design or by coincidence, some trait counts will end up being rare. While CNFT Jungle will include the Trait Count into the default Rarity Score, we will also provide an option of excluding Trait Count in the overall rarity and rank calculation. We do this by treating “Trait Count” as an additional category, so trait normalization still balances its impact to the total score and we could exclude it if so required by the project.

Communities also tend to agree on specific trait counts that better showcase the artwork. Spacebudz enthusiasts seem to appreciate a higher number of traits (or “gadgets”). Smooth Mountain Yeti Club has only 92 5-trait NFTs and these are desirable not only because of their rarity but because the artist’s work is more visible on these “naked” or “clean” NFTs.

As more games and other NFT interactions are introduced, trait count might also bring added utility. Imagine a trading card game that offers several spells, with higher spell count cards required to defeat a tough boss. A Decentralized Autonomous Organization (DAO) could use trait count to determine the weight of an NFT’s vote.

Some collections don’t work well with trait counts. Take for example a project that has 7 trait categories, including “earring.” If all NFTs in the collection have traits in each of the 6 other categories, with only a few NFTs having an earring, then the rarity of having an earring is already built-in. If you introduce trait count to the rarity calculation, then you run the risk of double-counting the earring trait which could reduce the impact of other rare traits.

There’s also a possibility that the overall “number of traits” value that goes into trait normalization could change enough that ranks are affected, say if the amount of “Backgrounds” increases from 5 to a 100 during the mint it will have a big impact on ranks.

Finally, some collections choose creative ways of tagging missing traits in their metadata, such as “clean” or “basic”. CNFT Jungle will continue to add these values to our filter to automatically assign trait counts, but we also can manually adjust individual projects if needed.

What’s Next?

We hope this has provided some more insight into how rarity and ranks are calculated and more importantly, we hope this answers the questions of why these values can differ across sites.

There is no one-size-fits-all approach and we don’t want to limit the methods available for you to determine NFT rarity and rank. We’ll be keeping Jungle Rarity Score (JRS) as the default calculation method, but will provide an “advanced” toggle to enable additional calculations. We’ll also be adding more tools to help manage your NFT collection and give you more intuitive market statistics to help make better decisions. If you have any features you’d like to see implemented feel free to reach out to us. All feedback is welcome!

Special thank you to @Fedora for helping us make this article.




Dex Aggregator, Market Alerts, and more - claw your way to the top.