Docs

How Lunauts works.

Every number on this site comes from one deterministic pipeline: a seed produces the art, the art produces the rarity table, and the rarity table is written into the metadata. Nothing is assigned by hand, so anyone can rebuild the collection and check it.

Art & generator

DeterministicSeed lunauts-genesis-v1 drives a seeded PRNG, so token #1,337 always gets the same layers on any machine.
Layered vectors13 trait types are drawn as original flat-vector SVG layers, then rasterised to 1024px PNG. No traced or borrowed art.
No duplicatesTrait combinations are hashed while generating; a collision is rerolled, so all 2,000 tokens are unique.

Rarity method

sum of supply / trait count across all traits; rank 1 = highest score. Scores come from realised trait frequency after generation, so a rare value stays rare even if the weights drift. Each token gets a tier and a numeric rank, both written into its metadata.

Tiers

Mythic · top 1%20 tokens
Legendary · top 5%80 tokens
Epic · top 15%200 tokens
Rare · top 40%500 tokens
Uncommon · top 70%600 tokens
Common · top 100%600 tokens

Full trait distribution →

Metadata

Token metadata follows the OpenSea standard, with rarity exposed as attributes so marketplaces can sort on it. Pre-reveal, every id serves the same placeholder document.

{
  "name": "Lunaut #1",
  "description": "One of 2,000 Lunauts...",
  "image": "ipfs://<art-cid>/1.png",
  "external_url": "https://lunauts.com/lunaut/1",
  "attributes": [
    { "trait_type": "Background", "value": "Dawn Haze" },
    { "trait_type": "Headgear", "value": "Crater Crown" },
    { "trait_type": "Rarity Tier", "value": "Mythic" },
    { "trait_type": "Rarity Rank", "value": 1, "display_type": "number" }
  ]
}

Contract

StandardERC-721 + ERC-2981 royalties
Supply cap2,000, immutable
PhasesClosed → Public, owner-controlled, no allowlist
Mint price0.0001 ETH, max 5 per wallet
RevealPlaceholder URI, then a one-way switch to the final base URI
WithdrawOwner-only pull to the payout address
Drop variantLunautsSeaDrop, for an OpenSea Drop on the same chain

Chain settings

Ethereum

Chain id1
Gas tokenETH
RPChttps://ethereum-rpc.publicnode.com
ExplorerEtherscan

Sepolia

Chain id11155111
Gas tokenETH
RPChttps://ethereum-sepolia-rpc.publicnode.com
ExplorerEtherscan

Add the active network (Ethereum) to your wallet with the values above. Public RPCs are rate limited — a dedicated RPC is recommended for heavy use.

Verify it yourself

The generator, rarity script and contracts ship in the project archive. Run these to reproduce every claim on this site.

npm run generate --workspace packages/artre-render all 2,000 SVG + PNG from the seed
npm run rarity --workspace packages/artrecompute trait distribution, tiers and ranks
npm run placeholder --workspace packages/artbuild the pre-reveal metadata and image
npm test --workspace packages/contractsrun the mint contract test suite
forge testrun the SeaDrop variant tests in packages/seadrop

Raw data: rarity-traits.csv · rarity-tokens.csv