PFP Drops — an NFTHive exclusive

Hive Digital
10 min readApr 6, 2023


After we went over basic NFT drops in our last article, we will now come back to the PFP drops briefly mentioned therein. PFP (profile picture) drops were developed to give creators an easy way to mint and sell PFPs or PFP-like NFTs — typically images generated from multiple layers based on traits of the NFT. Check out some collections from our PFP collections page for some examples.

The way these PFPs are usually created is that the creator has to sit down, combine the layers in an image editor, and mint each of those manually. We’re aiming to automate this part of the job, by minting randomized combinations on demand, each time a user claims a drop. The randomization happens 100% on-chain, by leveraging the official WAX random number generator. The whole process is transparent and guaranteed to be fair. We’re aiming to make the technical part as easy as possible, so creators can focus on what they’re doing best: creating art!

Note: If you’re interested in creating a PFP drop, but you’ve never created a drop on NFTHive before, we recommend that you check out our basic drops article first, as it covers a lot of the fundamentals that apply to both basic as well as PFP drops - these fundamentals will not be covered again in this article.

Once again the starting point is — from there click on your collection, then “Drop NFTs” and then find “New PFP Drop” at the top of the page. You will be taken to an editor that should seem familiar to you. The fields “Purchase Limits and Restrictions”, “Drop Details”, “Start and End Date / Time”, “Price and Payment details”, and “Restrict Drop to Specific Accounts” behave the same way as basic drops.

The first new field is the attributes field. This is the heart and soul of the drop. This is where you can upload image layers and define their order. Take WAX Ape for example:

The image associated with the NFT doesn’t just exist on its own, the metadata which defines how the image is constructed is part of the NFT as well. Going forward we’ll refer to the traits (Backdrop, Headwear, Fur Pattern, … ) as attributes and their characteristics (Sky Blue, Baseball Cap WAX, Cheetah, ….) as values. This is what we’re setting up in the attribute editor.

The attribute editor at the beginning of the process

You have two options here. “Add Attribute” adds a new attribute to the NFT. Using the example above, that would correspond to “Backdrop”, “Headwear”, “Fur Pattern”, etc. The “Save” and “Load” buttons allow you to save your progress locally, in a file. These will not write to or read from the blockchain. We added this feature as we realized that adding potentially hundreds of layers can still be time-consuming and not be done within a single session. You can save your progress at any time and come back later.

In this tutorial, we’ll check step by step how one of the most popular drops on NFTHive have been created: WAX Apes.
We’ll start by adding a new attribute called Backdrop:

Immediately some changes become visible: A preview of the (still empty) layers appears at the top, we are informed that this is “A valid combination according to the rules” (more on that in a bit) and the new attribute appeared with some further options.

What stands out immediately is the ‘Chance’ value of 0, which is flagged as “invalid”. As we were informed on the Popup before, new Attributes are being initialized with a special “none” value. This represents a completely empty layer. In some PFPs or just in certain attributes this makes sense (the WAX Apes for example, might have no Headwear), but in our case, we definitely want to have a layer here. There are two ways to achieve this: Either click on the yellow “none” value to update it or click on “Add Value…”. If we instead would have wanted to keep the “none” value, we would have needed to give it a valid “Chance” value (more on Chances further below). For now, let’s click on “Add Value…”

All we have to do here is to give the layer a descriptive name (in this case “Olive” for the color) and upload an image (or provide an IPFS hash). Clicking the Button right to the Upload button will open a preview of the uploaded file in a new tab, so you can double-check if you uploaded the correct one. We will ignore the “Advanced — Multi-Layer Attributes” section for now. Clicking “Add Value” will update the attributes.

Our first value has been added, the preview has been updated

Apart from the preview, the “Chance” value has been updated to the valid value of “1”. It is now guaranteed that this layer will appear on all NFTs.

We will now add three new attributes “Fur Color”, “Fur Pattern”, and “Base”, and add some values.

The body of our Ape is slowly coming together

If you want to try this for yourself and play around with it, you can download the state shown in the above picture here. Use the “LOAD” button on an empty PFP project to upload the file.

We can tell a few things from the picture:

  • The leftmost column “Z-Index” defines the order (from back to front) in which the layers are rendered. If we were to assign a Z-Index of 4 to the “Backdrop” attribute, the eyes and mouth would no longer be visible.
  • There is one possible value for the attribute “Backdrop”, two for the attributes “Fur Color” and “Fur Pattern” and one for “Base”. For the Fur Color and Fur Pattern, the values “Panther” and “Zebra” are currently rendered in the preview window above respectively.
  • The chance for any of these values to be randomly picked goes down with the total amount of values within an attribute.

If we wanted to increase the probability of a certain value being picked, we can do so by manipulating the “chance” value. In the example above, there are two possible values for the “Fur Color” attribute: “Panther” and “Yeti”. Each of these has been initialized with a chance factor of 1. That means, that each of these values will be picked with a chance of [factor] / [sum of all factors] = 1/2. Let’s say we increase the factor of “Panther” to 4, and leave the factors for the other two values at 1. That means “Panther” has an 4/5 chance of getting picked, and the other two of 1/5. This is also displayed in the Editor:

The chance of “Panther” getting picked has increased to 80%

Once we’re done with editing all the layers, our preview window might look like this:

Now you can set up the rest of the drop as mentioned in the basic drop tutorial.

Block Rules

Before we end the PFP drop tutorial though, there are two optional features we want to discuss, block rules and multi layer attributes. For that, we want to take a look at a different drop, that utilized these features: ACK Aliens

This drop has a large amount of values per attribute and some of them conflict with each other

In this drop, the white headphones clash with any type of glasses, eg:

You can see that the glasses overlap with the headphones there. This is because the headphones have to be in front of the glasses on one side and behind the glasses on the other side.

What we don’t want to happen, is that this particular combination will be picked during minting. Fortunately for us, we can set up a rule that will prevent this. In the “Head Wear” attribute row, we click on the “Block Attributes Icon” (second button from the right) and a new popup will open.

Making sure undesired combinations don’t make it to the possible outcomes is easy

In the screenshot above, we set up a simple rule that will prevent this from happening. If the Head Wear “White Headphones” is randomly picked by the generator, the attribute “Glasses” must not be “Galactic Black A”, “Galactic Black C” or “Galactic White K”. That leaves only the “none” value to be possible for the “Glasses” attribute. We could add further values or attributes here. Also, we only have to set this up in one direction: We don’t have to go to the “Glasses -> Galactic Black C” attribute / value and set up a corresponding block rule for Headphones there, one rule is enough already. The smart contract will remove every impossible combination during the minting process.

Multi Layer Attributes

The final feature we want to mention is multi-layer attributes. Up until now, any value has had exactly one layer. Multi-layer attributes enable you to add more layers to individual attribute values. In the example above, we ran into the problem of headphones having to be simultaneously in front of glasses and behind of the glasses. You don’t necessarily need to block these traits from occurring together. You can create one trait with a layer at z-Index A and another layer at z-Index B. To demonstrate how this works, let’s have a look at the current single layered Headphones attribute:

If we click on the button “Add Additional Layer”, we can upload another image to this trait. We’re going to edit the “White Headphones” image in Photoshop and split it into two pieces: Front and Back

We replace the main image with the new Front image and add the back as an additional layer:

The Back layer is at z-Index 2, which places the back of the Headphones in front of the Background layer, but behind of the Glasses layer. The result fixes our previous conflict and would allow us to proceed without a block rule for Glasses and Headphone traits:

The right side of the headphones covers the temple of the glasses and the left side of the headphones is behind the glasses now.

Pre-Minting PFPs to Packs or to your Wallet

With this new Feature, you can now premint PFPs from a drop to a chosen wallet or the pack creator. For that, finish the drop first and then go to your drop overview. From here you can choose “Instant Mint and Send” or “Premint to nfthivepacks”:

This allows you to create Pack drops for your PFPs. Your community will then be able to see all PFPs in existence and speculate on ripping them from packs.

If you mint to your wallet, you can give some of them away for promotions or put them in raffles.

Thanks to our community for demanding those features!

Guaranteeing certain Outcomes

Another much demanded Feature has been added to our Tool recently! Many creators have been asking: “Having random and unique outcomes is great, but what if we want a special outcome to be included somewhere in the results?”

For this, we have added a simple button to the preview tool under the drops. That means, after you create the drop, can go to the drop page and play with the preview tool to get the result you want, and then you, as the drop creator, can add that result to the pool of guaranteed results:

The drop contract will now choose randomly if it’s going to generate a random new outcome or pick one of the pre-determined results. Before the drop sells out, it is ensured that all pre-determined results will be minted.

This concludes our introduction to the PFP creator. As always, if you have any further questions, feel free to reach out to us on our discord. We can’t wait to see what you will create with this!

Check out some of the PFP Drops Created with our tool (as far as they still exist [sold out drops might be deleted to restore collection RAM]):