DevLog250326

> Log Date: 250326

NFT Metadata & Image Mapping

Each NFT in the TopSecurityNFT collection maps to a metadata file and a corresponding image stored on IPFS.

Token ID Metadata File Image File Display Name (in metadata)
1 metadata1.json painting_01.png “Untitled Piece 1”
2 metadata2.json painting_02.png “Untitled Piece 2”
3 metadata3.json painting_03.png “Untitled Piece 3”
4 metadata4.json painting_04.png “Untitled Piece 4”
5 metadata5.json painting_05.png “Untitled Piece 5”
6 metadata6.json painting_06.png “Untitled Piece 6”
7 metadata7.json painting_07.png “Untitled Piece 7”
8 metadata8.json painting_08.png “Untitled Piece 8”
9 metadata9.json painting_09.png “Untitled Piece 9”
10 metadata10.json painting_10.png “Untitled Piece 10”

Each tokenURI(tokenId) is automatically constructed by the contract using:

string public baseURI;
string memory uri = string(abi.encodePacked(baseURI, "metadata", Strings.toString(tokenId), ".json"));

Metadata Generator Script (Python)

Save this as generate_metadata.py and run it in the same folder as your painting_01.png, painting_02.png, etc. Update the base_ipfs_cid as needed.

import json
import os

base_ipfs_cid = "bafybeic2f7dtbhcph4q72ja4avhesovmhmbdmpjtc45brtwbqyfroqsr3y"
output_dir = "metadata"
num_tokens = 10

os.makedirs(output_dir, exist_ok=True)

for i in range(1, num_tokens + 1):
    metadata = {
        "name": f"Untitled Piece {i}",
        "description": "A digital work in the TopSecurityNFT collection.",
        "image": f"ipfs://{base_ipfs_cid}/painting_{str(i).zfill(2)}.png"
    }

    filename = os.path.join(output_dir, f"metadata{i}.json")
    with open(filename, "w") as f:
        json.dump(metadata, f, indent=4)

print(f"Created {num_tokens} metadata files in '{output_dir}/'")

This will generate: - metadata/metadata1.json - metadata/metadata2.json - … - metadata/metadata10.json