
AllYouNeedIsNFT: Image Uniqueness Checks and a Generative NFT Editor
- Published on
- • 4 mins read•--- views
In 2021 and 2022 I co-founded AllYouNeedIsNFT, an NFT marketplace. One problem kept coming up in conversations with artists: images from one collection kept reappearing in others under new names. A buyer had no quick way to tell a copy from an original.
So alongside the marketplace we built two tools. The first checks whether an NFT image already exists in other collections. The second is an editor that lets an artist generate a whole collection from assets they drew themselves. This post covers both.
Checking an image against the market
A third-party developer wrote the uniqueness service against a specification we agreed on, and I supervised the delivery and integrated it into the main site. The video below is an early build, still being debugged.
The service starts from the collections that already exist. It pulls a collection, downloads every image in it and indexes them. The database was collected from OpenSea and other sites.
Indexing is where the work happens. An image analysis algorithm processes each picture and links it to the images already in the index. For every pair it produces a similarity score. The index therefore holds the images and the relationships between them, so a lookup does not have to scan raw pixels.
When a new collection arrives, the service takes a sample of the already indexed collections and compares every image from the new one against them. Each image gets a uniqueness index, a single number that says how close it is to something already on the market.
The same path works for a single picture. A visitor uploads an image, the service runs it against the index and returns the closest match. The screenshot shows the result for one image from one of the analyzed collections: the service found it was not unique and pointed to comfy-apes-club #100 on blur.io as the original.

Generating a collection from one artist's assets
The second tool is the NFT editor. Generative collections at the time were usually assembled from layers drawn by different people, so the result rarely looked like anyone's work in particular. The editor was built so that one artist could define the whole thing.
The artist starts with a canvas, 800x600 in the screenshots, and splits it into arbitrary areas. Areas can be nested inside other areas. For each area the artist uploads their own set of images, and a separate set for backgrounds.

Each area carries probability distribution coefficients. During generation the editor picks an image for every area at random, weighted by those coefficients, from the set the artist prepared. Since every input came from the same person, every element of the final asset is drawn and chosen by one artist.

The result is a collage in the style the artist defined when setting up the workspace. The preview toggle shows a sample before anything is saved, and the Published checkbox controls when the collection becomes visible on the marketplace. The wallet in the header is connected to Fantom, which the marketplace supported at the time.

The editor also worked on a phone. The same controls stack vertically, and the canvas keeps its proportions.

Where to find the rest
The uniqueness service went live at unique.allyouneedisnft.com and I integrated it into the marketplace. The project page has the presentation video I recorded for our English-speaking audience and the full specification the service was built against.
If you are building a marketplace today, the lesson still holds. Index the market you compete with before you accept uploads, and give the buyer a similarity score instead of a promise.
Related
Projects

AllYouNeedIsNft - NFT Marketplace Startup
Before: idea on paper, 0 users, 0 code. After: live NFT marketplace with wallet auth, listings, and buying flow. Result: MVP in 3 months, onboarded first creators at Web3 market peak.
Posts
Project Structure and Testing in .NET Core 6 vs .NET Core 5: Unit Tests, GraphQL, and Test Server Fixtures
A practical comparison of .NET Core 5 and 6 project structures, with real-world examples for unit testing, GraphQL integration, and test server fixture setup.
Interview with Chainlink Labs
I went through the first stage of the Chainlink Labs hiring process. Everything went well, but the role required the candidate to be based in the USA.
OpenZeppelin Pausable: The Kill Switch for Your Smart Contract
When the mechanisms you designed into a contract fail, one is left: the switch. OpenZeppelin gives you Pausable for that, and you should never skip it.
Open for contract collaboration
I am available for contract-based collaboration. If you have an interesting project idea, schedule a call via Calendly.
Schedule a 30-min call