user5589: Projects like jpg store or cnft tools collect information from blockchain about minted NFTs (collectables to be exact) and present that information for users to filter, buy, sell and similar.
Most of projects use cip25 which defines a standard way how to represent NFT metadata. With this standard, services like jpg.store and cnft.tools can find NFTs on blockchain (via 721 label) and render NFT metadata as described in cip25 (there are required and optional fields like description or name that can be expected in metadata).
Collectables like The Ape Society or SpaceBudz usually have set of traits and sites like jpg.store or cnft.tools render them, filter them, or they calculate rarity score or rank as shown:

What I noticed on pool.pm is that there is no unique format or specification how trait data should look. For example this nft defines traits as body of attribues field:
        "attributes": {
          "Creature": "Jambo",
          "Skin": "Silver",
          "Special": "None",
          "Type 1": "Beast",
          "Type 2": "Normal"
        },

and jpg.store correctly renders traits:

Note that in the example above jpg.store didn't take other fields like:
        "Twitter": "https://twitter.com/summoners_guild",
        "Website": "https://summonersguild.io",

and use them as traits.
So far I would think there is a rule: All fields within attributes will be used as traits.
But then these two examples don't use any attributes field as a set of traits but instead it looks like they collect every field within metadata and their traits are still rendered correctly :


As there is no specification on how trait data should be represented in NFT metadata (at least not within cip25) I wonder how sites like the ones mentioned above (jpg.store, cnft.tools, cnftjungle.io) decide what is a trait and what isn't? It seems they have reached some sort of consensus because they render NFT traits correctly but the rules are not obvious to me.

user1142: There is no standard and they have to check manually how each collection has set up the traits.
In practice, the different sites most likely have some code to check for common patterns. E.g. is there an array of "traits" or "attributes"? Or they exclude common non-trait values like "Twitter" or "Website" automatically.

5589: <p>Projects like <a href="https://www.jpg.store/" rel="nofollow noreferrer">jpg store</a> or <a href="https://cnft.tools/" rel="nofollow noreferrer">cnft tools</a> collect information from blockchain about minted NFTs (collectables to be exact) and present that information for users to filter, buy, sell and similar.</p>
<p>Most of projects use <a href="https://cips.cardano.org/cips/cip25/" rel="nofollow noreferrer">cip25</a> which defines a standard way how to represent NFT metadata. With this standard, services like jpg.store and cnft.tools can find NFTs on blockchain (<a href="https://cips.cardano.org/cips/cip25/#specification" rel="nofollow noreferrer">via 721 label</a>) and render NFT metadata as described in cip25 (there are required and optional fields like <code>description</code> or <code>name</code> that can be expected in metadata).</p>
<p>Collectables like <a href="https://www.jpg.store/asset/dac355946b4317530d9ec0cb142c63a4b624610786c2a32137d78e256164617065456c696163696e64654d6564696369" rel="nofollow noreferrer">The Ape Society</a> or <a href="https://cnft.tools/spacebudz" rel="nofollow noreferrer">SpaceBudz</a> usually have set of traits and sites like jpg.store or cnft.tools render them, filter them, or they calculate rarity score or rank as shown:</p>
<p><a href="https://i.stack.imgur.com/oIR86.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/oIR86.png" alt="The Ape Society on jpg.store" /></a></p>
<p>What I noticed on pool.pm is that there is no unique format or specification how trait data should look. For example this <a href="https://pool.pm/test/metadata?metadata=%257B%2522721%2522%253A%257B%2522ae5e686e2d25262d14e69ec0b828b6db8970e653506993bba26e05b4%2522%253A%257B%2522SummonersGuild0554%2522%253A%257B%2522Collection%2522%253A%2522The%2520Summoner%27s%2520Guild%253A%2520Creatures%2522%252C%2522Twitter%2522%253A%2522https%253A%252F%252Ftwitter.com%252Fsummoners_guild%2522%252C%2522Website%2522%253A%2522https%253A%252F%252Fsummonersguild.io%2522%252C%2522attributes%2522%253A%257B%2522Creature%2522%253A%2522Jambo%2522%252C%2522Skin%2522%253A%2522Silver%2522%252C%2522Special%2522%253A%2522None%2522%252C%2522Type%25201%2522%253A%2522Beast%2522%252C%2522Type%25202%2522%253A%2522Normal%2522%257D%252C%2522files%2522%253A%255B%257B%2522mediaType%2522%253A%2522video%252Fmp4%2522%252C%2522src%2522%253A%2522ipfs%253A%252F%252FQmUWpCkRbe1ny3F1jDk8JuzivcA1EXiz1P98Nr5jrFms9D%2522%257D%252C%257B%2522mediaType%2522%253A%2522model%252Fgltf-binary%2522%252C%2522src%2522%253A%2522ipfs%253A%252F%252FQmP1PcM1SrptTxCUJzzEgN8PsY27T3norXxWgf6CCXXRGP%2522%257D%255D%252C%2522image%2522%253A%2522ipfs%253A%252F%252FQmaQVCdsMRF8qpDwWWNeVC1hBivyZuaV887DZWe38d36Uf%2522%252C%2522name%2522%253A%2522Jambo%2520%25230554%2522%257D%257D%257D%257D" rel="nofollow noreferrer">nft</a> defines traits as body of <code>attribues</code> field:</p>
<pre><code>        &quot;attributes&quot;: {
          &quot;Creature&quot;: &quot;Jambo&quot;,
          &quot;Skin&quot;: &quot;Silver&quot;,
          &quot;Special&quot;: &quot;None&quot;,
          &quot;Type 1&quot;: &quot;Beast&quot;,
          &quot;Type 2&quot;: &quot;Normal&quot;
        },
</code></pre>
<p>and <a href="https://www.jpg.store/asset/ae5e686e2d25262d14e69ec0b828b6db8970e653506993bba26e05b453756d6d6f6e6572734775696c6430353534" rel="nofollow noreferrer">jpg.store correctly renders traits</a>:</p>
<p><a href="https://i.stack.imgur.com/0pxIr.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/0pxIr.png" alt="enter image description here" /></a></p>
<p>Note that in the example above jpg.store didn't take other fields like:</p>
<pre><code>        &quot;Twitter&quot;: &quot;https://twitter.com/summoners_guild&quot;,
        &quot;Website&quot;: &quot;https://summonersguild.io&quot;,
</code></pre>
<p>and use them as traits.</p>
<p>So far I would think there is a rule: All fields within <code>attributes</code> will be used as traits.</p>
<p>But then these <a href="https://pool.pm/test/metadata?metadata=%257B%2522721%2522%253A%257B%2522dac355946b4317530d9ec0cb142c63a4b624610786c2a32137d78e25%2522%253A%257B%2522adapeSanforddelaCruz%2522%253A%257B%2522Accessory%2522%253A%2522None%2522%252C%2522Background%2522%253A%2522Blue%2522%252C%2522Body%2522%253A%2522Gold%2520Linen%2522%252C%2522Class%2522%253A%2522Explorers%2522%252C%2522Ears%2522%253A%2522Plain%2522%252C%2522Eyes%2522%253A%2522Aviators%2522%252C%2522Facial%2520Hair%2522%253A%2522Normal%2522%252C%2522Family%2522%253A%2522de%2520la%2520Cruz%2522%252C%2522Hat%2522%253A%2522None%2522%252C%2522Head%2522%253A%2522Orange%2522%252C%2522Weapon%2522%253A%2522None%2522%252C%2522description%2522%253A%2522A%2520distinguished%2520member%2520of%2520the%2520de%2520la%2520Cruz%2520family%2522%252C%2522files%2522%253A%255B%257B%2522mediaType%2522%253A%2522image%252Fjpeg%2522%252C%2522name%2522%253A%2522Sanford%2520de%2520la%2520Cruz%2522%252C%2522src%2522%253A%2522ipfs%253A%252F%252FQmZKeKCZhjrHhwZUcewKEVcDgNjdunBCT4xRQ2BKsfFDmZ%2522%257D%255D%252C%2522image%2522%253A%2522ipfs%253A%252F%252FQmZKeKCZhjrHhwZUcewKEVcDgNjdunBCT4xRQ2BKsfFDmZ%2522%252C%2522mediaType%2522%253A%2522image%252Fjpeg%2522%252C%2522name%2522%253A%2522Sanford%2520de%2520la%2520Cruz%2522%252C%2522rate%2522%253A%25220.05%2522%257D%257D%257D%257D" rel="nofollow noreferrer">two</a> <a href="https://pool.pm/test/metadata?metadata=%257B%2522721%2522%253A%257B%2522dac355946b4317530d9ec0cb142c63a4b624610786c2a32137d78e25%2522%253A%257B%2522adape%253FlienChiesa%2522%253A%257B%2522Accessory%2522%253A%2522Paint%2520Brush%2522%252C%2522Background%2522%253A%2522Neutral%2522%252C%2522Body%2522%253A%2522Prisoner%2520Uniform%2522%252C%2522Class%2522%253A%2522Merchants%2522%252C%2522Ears%2522%253A%2522Plain%2522%252C%2522Eyes%2522%253A%2522Sunglasses%2522%252C%2522Facial%2520Hair%2522%253A%2522Normal%2522%252C%2522Family%2522%253A%2522Chiesa%2522%252C%2522Hat%2522%253A%2522Fruit%2520Basket%2522%252C%2522Head%2522%253A%2522Ape%2522%252C%2522Weapon%2522%253A%2522None%2522%252C%2522description%2522%253A%2522A%2520distinguished%2520member%2520of%2520the%2520Chiesa%2520family%2522%252C%2522files%2522%253A%255B%257B%2522mediaType%2522%253A%2522image%252Fjpeg%2522%252C%2522name%2522%253A%2522%25C3%2589lien%2520Chiesa%2522%252C%2522src%2522%253A%2522ipfs%253A%252F%252FQmeTZtMVTGZ9mn7M9sGsdc44SEfpxDyHLwP35Asac2Gzf7%2522%257D%255D%252C%2522image%2522%253A%2522ipfs%253A%252F%252FQmeTZtMVTGZ9mn7M9sGsdc44SEfpxDyHLwP35Asac2Gzf7%2522%252C%2522mediaType%2522%253A%2522image%252Fjpeg%2522%252C%2522name%2522%253A%2522%25C3%2589lien%2520Chiesa%2522%252C%2522rate%2522%253A%25220.05%2522%257D%257D%257D%257D" rel="nofollow noreferrer">examples</a> don't use any <code>attributes</code> field as a set of traits but instead it looks like they collect every field within metadata and their traits are still <a href="https://www.jpg.store/asset/dac355946b4317530d9ec0cb142c63a4b624610786c2a32137d78e25616461706553616e666f726464656c614372757a" rel="nofollow noreferrer">rendered</a> <a href="https://www.cnftjungle.io/collections/dac355946b4317530d9ec0cb142c63a4b624610786c2a32137d78e25?assetId=dac355946b4317530d9ec0cb142c63a4b624610786c2a32137d78e25.adape%253FlienChiesa" rel="nofollow noreferrer">correctly</a> :</p>
<p><a href="https://i.stack.imgur.com/lwJZd.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/lwJZd.png" alt="enter image description here" /></a></p>
<p><a href="https://i.stack.imgur.com/PxARH.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/PxARH.png" alt="enter image description here" /></a></p>
<p>As there is no specification on how trait data should be represented in NFT metadata (at least not within cip25) I wonder <strong>how sites like the ones mentioned above (jpg.store, cnft.tools, cnftjungle.io) decide what is a trait and what isn't?</strong> It seems they have reached some sort of consensus because they render NFT traits correctly but the rules are not obvious to me.</p>
 1142: <p>There is no standard and they have to check manually how each collection has set up the traits.</p>
<p>In practice, the different sites most likely have some code to check for common patterns. E.g. is there an array of &quot;traits&quot; or &quot;attributes&quot;? Or they exclude common non-trait values like &quot;Twitter&quot; or &quot;Website&quot; automatically.</p>
