NFTs, Generative NFT Sets, Development
How Generative NFT Reveals Work — Options and Strategies for a Smooth, Secure, and Profitable Reveal Process
A bit of an “NFT 101” article, but important nonetheless!

When hopeful NFT teams come to me asking for generative NFT programming and web3 development services, they typically have not thought ahead to the reveal process. And that’s okay, of course. But, once the projects get going, having a solid reveal plan is really important, and can directly affect an NFT drop’s success and even its profitability. So, I wanted to put a piece up about that — what a reveal is, what your options are, and various considerations. (I’ll be keeping this article listed in my main resource compendium for NFT teams: “Generative NFT Programming Articles — How to Prep for Doing Your Own NFT Drops.”)
What Is “The Reveal”?
Typically, in generative NFT sets, the way the sales work is as follows:
- NFT buyers go to a minting page and mint NFTs from a set. Let’s say they’re buying “I’m a Kitty Cat” NFTs, for example (because, hey, who wouldn’t want to buy into a set of 3D meme cats?!).
- At the beginning of the sale, the NFT teams usually do NOT show buyers their actual NFTs. Instead, they display a placeholder NFT. For the Kitty Cats, that means that, for every single buyer, all they saw in their wallet (if they went to OpenSea, for example) would be the “pre-reveal” image, like so:

- This would show for every single cat they bought. If they bought one, it would show this. If they bought 20, it would show this for all 20. And the same would be true for all buyers.
- And then, at some point post-sale — could be 24 hours, could be a week or more — the NFT team reveals the NFTs. We do this by changing the base URI, in the smart contract, that points to the metadata for the set.
- Once we flip that switch, all of the minted NFTs are then revealed. When people go to their wallets, they can then see what cats they own (though it sometimes takes a bit of time — will explain below). For example, when my Kitty Cat was revealed, I then saw the actual cat:
Why Are There Reveals at All?
When the concept first emerged, I suspect the idea came about mainly so that minters would not know what all had been minted already. After all, a big part of the generative NFT “game” is that there’s a whole rarity aspect to it — the hierarchy of value within a set. And thus, if it was known that there are 20 super-rares in a set, and if anyone could see that those super-rares were already minted, then others would be less incentivized to purchase, as they would have zero chance of getting a rare. Keep things hidden, and the possibilities are exciting from #1 through #10,000.
Over time, though, market dynamics came into play. As NFT drops became more popular, NFT teams quickly noted a phenomenon that occurred in the period between minting out all 10,000 NFTs (a typical generative set size) and the “reveal event.” This particular period had evolved into a rather wild market.
Obviously, if all 10,000 NFTs sold, then that set clearly enjoyed immediate popularity and, in all likelihood, many did not get the chance to buy in (or buy in to the extent that they wished they would have). And thus, each NFT naturally rose in value to meet this demand. There’s a whole psychology here that I won’t cover in-depth, but it’s a combination of FOMO, speculation, gambling, and simple supply/demand economics.
Noticing all of that, though, NFT teams began taking action to optimize this. They found, for example, that the hotter a set is, the more active trading happens in this frenzied pre-reveal secondary market. I’ve written a bunch about this and have documented some of the sale spikes in various higher-profile drops I watched (the Mekaverse comes to mind, but there were many).
And so, aside from the practical side of things in the initial world of NFTs, the reveal is now more linked with profitability than anything else. Remember that NFT teams typically get a percentage of secondary sales. So, if you have a popular set with a few thousand ETH in pre-reveal trading, that could amount to significant additional revenue for the drop. (And, by the way, that percent is NOT a part of the smart contract. It’s set on the marketplace. And now with more marketplace options emerging, setting royalty levels on multiple marketplaces will become an important to-do for teams.)
And this is why we’re seeing longer and longer pre-reveal periods in higher-profile NFT drops. The popular Hape Prime NFT drop, for example, minted on Jan 19, 2022, and revealed February 4, 2022. That’s the longest pre-reveal period I think I’ve ever heard of (and, in my opinion, pushing the boundary of propriety a bit. But, to each their own…).
What Are the Options for the Reveal?
Looking at options is interesting because most NFT teams don’t know for sure if they’ll sell out. They all hope for a sellout, of course. But being assured of one is pretty rare unless you’ve got one of those drops with like 50k or 100k (or more) Discord members. I’ve even been on some fairly major sellout NFT drop teams for which the owners were absolutely doubtful beforehand about whether they’d sell out.
What To Do If You Fully Expect to Sell Out:
If you know for sure you’re going to sell out, then you simply need the usual — a single pre-reveal image (or animation — will discuss below) that will be posted as a placeholder. In addition, I recommend that you also plan out a time for the official reveal.
While it’s tempting for some to just plan on winging it and revealing whenever you feel like the secondary market is slowing down, I think it’s better to avoid that, as it paints a rather unsavory “cash-grab” picture of the team’s intentions. It’s much more preferable to set expectations in advance, communicate them clearly to your community (via a Discord announcement and via Twitter posts), and execute on them as promised. This helps build holder confidence in the team, which is always a positive thing.
As for how long you should wait, that’s your call. I wasn’t a Hape Prime minter myself, and I don’t like to talk negatively about others, but waiting 17 days for a reveal strikes me as far too long. Most of the larger drops I’ve been on revealed considerably sooner — usually within a few days of the sellout. Many say 24 hours, some 48, some 72.
And, as I said, I got into being on NFT teams very early on, so we didn’t have much thought or knowledge about the secondary market phenomenon. We were usually just super-excited, right along with the community — and in a few cases we just revealed almost immediately post-sale. And, the communities went nuts for that, and loved every minute of it.
What to Do if You (a) Don’t Know if You’ll Sell Out or (b) Fully Know that You Will NOT Sell Out
In either case, I recommend having a pre-reveal image planned, at least for the initial minting day. It’s simply a nice tradition in the generative NFT world to do a reveal of some sort, even if you won’t be celebrating 10,000 sales in 15 minutes. Yes, we all know and love the big sellout stories, but in reality NFT drops are in a giant competition with thousands of other drops, and with more coming onto various blockchains daily. So, not everyone can sell out!
So, in this case, put together a pre-reveal placeholder, decide on a span of time (maybe just 24 hours?), and do the reveal in the same way that the big sell out sets do them — by having your dev flip the switch at the given time. And that’s all well and good, except there’s now one other consideration.
The Reveal API — A Consideration for Sets That Need Time to Sell Out, But Also Want to Show Current Holder NFTs
And so, for many, you’re now in the same boat: Your mint has begun, and you’ve got somewhere between 1 and 9,999 sold, and you have no idea how long it’ll take to get to that magic 10,000 Sold Out number.
This part can be a bit tricky because, if you have a sellout, there’s no complexity to the image storage aspect of NFTs. You simply pop them onto IPFS (the Inter Planetary File System, pretty much a standard for NFT image storage), code them into your metadata files, pop those metadata files onto IPFS, and then point your smart contract to that URI.
The way metadata works, though, makes it tougher for sets that haven’t sold out. That’s because you usually have a base URI in your smart contract that points to the metadata for your NFTs. It would often look like this:
ipfs://[some-IPFS-CID]/And, in order for, say, OpenSea to find the metadata, it appends the token ID onto that string. For example, let’s say I am looking for the metadata for a Boss Beauty NFT. Let’s say it’s #1026, which is this one:
So, what I would do to find the metadata link would be:
- I’d click on the “Details” area on OpenSea to find the contract for Boss Beauties:

- Next, once I’m on the smart contract on Etherscan, I’d click on Contract:

- Then “Read Contract”:

- Then, I’d pop “1026” (the ID from above) into the box that comes up when I click the “tokenURI” section, and hit the “Query” button:

- And so now I know that Boss Beauties currently gets the metadata for ID #1026 from this link:
https://d12j0h14jp4og2.cloudfront.net/json/1026And that’s how metadata works, basically. If you were to go to that link in a browser, you’d see the actual metadata for Boss Beauties #1026. It would look like this:

And so you can now see how OpenSea and other platforms gather everything about each NFT — the traits, the description, and even the link to the image itself. (OpenSea caches all of that info, btw. I’ll talk about that more, below.)
Anyway, I just wanted to show a bit more about how this works, as it’ll help me discuss the problem, which is that, once you know the metadata link for one, you pretty much know the metadata link for them all. And so, if you’re using IPFS to store everything, you run into an issue if you have a set that hasn’t minted out yet — because if the above link worked for #1026, then we could look ahead in the set by changing the link to #1027, right?
Why allowing People to Look Ahead is Problematic
Basically, the issue here is that, if people can look ahead, then (1) they can find out where the rares are, (2) they can then cheat by sniping hose rares, and (3) if they’re really evil, they could even pretty easily download your entire set and do many awful things with it.
I believe it was the Lil Baby Ape Club, for example, who exposed their actual IPFS metadata link on the Rinkeby testnet (the place where we test Ethereum smart contracts). And some malicious hackers saw it, snagged it, created a fake web site, and minted out the apes’ entire set — using the apes own images and metadata. It was a real mess, as I’ve read.
So, you generally don’t want people to be able to look ahead in your set. It’s not the absolute worst thing ever, as plenty of sets have allowed this and not fallen victim to the same fate as the Lil Baby Ape Club. But, in general, you should not allow this as a possibility.
The Fix That Prevents People from Looking Ahead
The solution is move away from a decentralized server and move to a private API to serve up the metadata. What I like to do is to pop the metadata onto an API, and have that API call out to Etherscan for the total supply any time a marketplace or dApp requests the metadata. That way, if the token ID is minted already, we know the request is legit, and so we show the metadata. If not (if someone is looking ahead), we return an error. Pretty simple stuff, really, though the entire setup is a little more complex, of course.
The (Temporary) Problem with the Fix
Of course, the problem I see with this is that it’s not decentralized. You’re not on the IPFS here; you’re on a private API. And that’s antithetical to the NFT space (even though, as shown above with the Boss Beauties metadata link, it’s actually fairly common — much more common that most people think).
What I like to do is to plan out a transition. When we do an API for metadata, the idea is that this will serve the dual purpose of serving minted metadata and protecting non-minted metadata. But, once the entire set is minted out, the plan is always to pop that metadata back onto IPFS and let it live on in a decentralized way.
Sorry that took so long to explain, but I hope it helps NFT drop teams as they consider this issue. And there are yet a few tangential items I’d like to cover here.
MetaData Caching Issues
On large marketplaces like OpenSea, you’ll typically see some strange behavior related to metadata changes. This happens quite a bit with reveals. What’ll happen is that your dev will do the reveal (by changing the metadata URI), and then … nothing. OpenSea will continue to show the pre-reveal image for many (or most) of the NFTs.
If this happens, don’t panic. More than 99% of the time, the issue is caching. OpenSea can’t make calls to every single metadata URI every single time it shows an NFT. That just wouldn’t be practical. So, they cache images and metadata on their own servers and serve that instead.
This is why on the NFT page, there is a button like the one shown below. If a reveal has happened, but your NFT hasn’t shown up yet (and is still displaying the prereveal image), the fix is to click that button, which will queue up your NFT for a metadata refresh.

It’d be super cool if marketplaces would have some function to refresh the metadata of an entire collection, perhaps a function available to collection owners. But, to my knowledge, this doesn’t exist, so you have to either just wait for the marketplace to recache (which it should do on its own periodically), or manually click that button and refresh.
In the old days (months ago), this process was massively buggy and unreliable on OpenSea. But, thankfully, it’s now usually pretty quick and metadata usually refreshes in just a minute or less.
What Kind of Pre-Reveal Image Should You Use?
Finally, I wanted to answer one other question I get a lot, which is: What should the pre-reveal image look like? There are no rules, of course. But, there are a few things to keep in mind.
First, you want it to be something different from the main NFTs that are coming — meaning, don’t make it look like something from the set, or people might become confused. Remember that, even now (perhaps nearly a year into the world’s new love affair with NFTs) it’s still early for NFTs and a lot of people aren’t familiar with how things work. It’s super common to see people on Discords announcing their very first NFT purchase.
Quite typically, you see things like grayed-out characters resembling those from the set — dark, mysterious, perhaps with a big question mark or something to instill wonder and excitement in the holders.
Other times you see video content — animated GIFs of something from the same artist, or small animated videos.
Again, there are no rules. So, be creative!
I like to also have fun with the metadata properties on pre-reveals, as that will show as well. When we did the Kitty Cat one shown atop this article, for all of the properties shown (“Background,” “Ears,” “Expression,” etc.), I just had it say “CATS!”.
Another time, in one of my very first drops last summer, there was a rare character called “Glitch” in the set and I decided it might be humorously appropriate to include a video on the NFT page (at least initially). So, looking at OpenSea’s metadata specs, I found a way to embed that — and had decided that the video should be a link to Rick Astley’s “Never Gonna Give You Up.” Well, when the reveal came, it turned out that OpenSea popped that video right where the NFT image should have appeared, and didn’t show the image! The buyer posted it on the drop’s Discord in (thankfully) hilarious disbelief, stating that the drop literally rickrolled him. (Of course, with metadata being fixable, I quickly corrected that, and he was very happy to see his super-rare item. And I never did that again! lol)
Kind of a funny-weird story there, but it does show you that metadata is changeable. And I think a stepped reveal where you do some kind of partial reveal one day, followed by a full the next (or something similarly nutty) could be really fun for some drop.
Bottom Line
The reveal can, and should, be made into something fun and memorable. It definitely improves the overall buyer experience, even if it’s not always going to be seen by 10,000 people, and even if it’s a short-lived thing. So, use your imagination when thinking up your reveal and have fun with it!
