Today on the Internet you can find many guides on how to create and mint your own collection of NFTs. But everything is not so easy when you have to create everything yourself, especially if you are an artist. This guide is prepared for those who do not have a developer in the team, but who still want to launch an NFT project using their own smart contract, which is more reliable and flexible than mining directly through the marketplace or using ready-made solutions.


First of all, you need an image. If you are an artist or designer, then you know how to create a picture. If you are not an artist, use Photoshop, Figma or Procreate. All you need is to draw some number of layers. The more layers you have, the more unique your collection will be.

NFT generation

One of the best tools for generating NFTs is the Hashlips Art Engine by Hashlips. It's open source, so you can download and install it from the Hashlips Github repository. Just copy it or download the ZIP file and open the project from the root folder with any code editor. For example, using VS Code.

Also install the recommended Node.js package and run npm install in your project's terminal. Take your layers sorted into folders by type (for example - Background, Face, Glasses, etc.). Replace everything inside the project's layers folder C:\Users\User\Documents\hashlips_art_engine\layers with your own layers.

Then go to the file C:\hashlips_art_engine\src\config.js and change all the data inside this file to your collection data.

Change the following lines:

const namePrefix = "Your Collection"; const description = "Remember to replace this description";

For now, skip this line:

const baseUri = "ipfs://NewUriToReplace";

Notice the correct order of the layers inside the layerConfigurations array. They should be distributed in the same order that your NFTs are displayed on the canvas. Starting from the farthest Background layer and ending with the nearest Glasses layer, for example. GrowEditionSizeTo is the number of images in the collection. You can set it to 1000 or even 10000 if you have enough layers.

const layerConfigurations = [ { growEditionSizeTo: 5, layersOrder: [ { name: "Background" }, { name: "Eyeball" }, { name: "Eye color" }, { name: "Iris" }, { name: "Shine " }, { name: "Bottom lid" }, { name: "Top lid" }, ], }, ];

Additionally, you can increase the rarity of your collection by adding #50 to the .png filenames. For example, Background Black #50 will be twice as rare as Background Red #100. Now open a VS Code terminal and run npm run generate. This will create your collection and place it in the build folder. Here you will find the images and json folders. Next, you need to deploy them to IPFS.

Implementation in IPFS.

IPFS is a system for storing and accessing files, websites, applications, and data. The main advantage of IPFS over a centralized data store is the ability to download a file from many locations that are not controlled by a single organization. Go to and download the IPFS desktop app.

Go to the Files tab and click the Import button. This will upload your images folder to IPFS. Copy the CID and go to your imaging application.

Go to the Files tab and click the Import button. This will upload your images folder to IPFS. Copy the CID and go to your imaging application.
Replace this line inside config.json with the new CID you got for the images folder.

const baseUri = "ipfs://QmRXh4mEZ1uKaPLGzjhrk1zTMCWJJb9UjXcE7qDrmGFxGx";

Then go to the VS Code terminal and run the npm run update_info script. This will regenerate the metadata files and update the image URL for each of your JSON files. This will be needed in the future for marketplaces like OpenSea to properly display your NFTs. After we've updated our metadata, let's go back to the IPFS application and upload the json folder to IPFS.

We are now ready to start creating our first smart contract!

Smart contract ERC-721

Go to the Hashlips git repository and copy the smart contract code -

Go to Remix IDE and create a new file in contracts folder.

Copy the smart contract code and paste it into the .sol file.

Change these variables to suit your collection's requirements. You will no longer be able to change maxSupply, but you will be able to change the NFT cost.

uint256 public cost = 0.05 ether; // Cost of your NFTs
uint256 public maxSupply = 10000; // Collection Amount
uint256 public maxMintAmount = 20; // Max mint amount for 1 wallet

Go to the Solidity Compiler tab and click the Compile button. This will prepare your contract for implementation.

Enable testnet in your Metamask wallet. We use the Rinkbey network.

Before deploying a smart contract to the main network, it is necessary to deploy the contract to the test network, for example, in Rinkeby. This is to make sure that everything is working properly - you will see NFT on the marketplace, you can mint NFT and you can withdraw your money from the smart contract.

Go to the Deploy & Run Transactions tab of the Remix Editor and do the following:

Select the environment - Injected Provide Metamask.
The Metamask account should be selected by default. This wallet will be the owner of the contract. To be able to deploy it on the Rinkeby blockchain, you will need money. You can test Rinkeby ETH here -

Select your contract from the Contract list.

Go to the Deploy section and open it. You will see 3 fields: _NAME, _SYMBOL and _INTBASEURI - you must fill them with your collection data, as in the screenshot above. Name is the name of your collection, Symbol is the symbol of your token in the blockchain, BaseUri is a link to your JSON folder in IPFS.

It is very important that you add the link in this format with a closing slash - ipfs://QmesV16RcsKWcizau67y5FpwPJcHFBNAarC8KD25Ci8eik/.

Click the Transact button, after which your Metamask wallet will open and you must confirm the transaction.

Congratulations! Your first blockchain smart contract.
To deploy a smart contract to the main blockchain network, you just need to change the Metamask wallet network to Ethereum or Polygon.