ジェネラティブNFTの発行方法
先日、DOKU-TOKUさんの個展に行くとジェネラティブNFTが展示されていました。
そこで興味を持ち、自分でも発行してみたいと思いチャレンジしてみました!
発行方法を残しておきます。
まずパーツ毎のデザインを用意する必要があります。
今回は、商用可能な動物の画像と背景を用意しました。
別方法として、hashlips_art_engineという公開されたGithubからできます。
node.jsのバージョンを「v10.18.0」にする必要がありますが、
READMEに沿って進めれば、簡単に生成した画像ができました。
pythonのスクリプトから、用意した画像を掛け合わせます。
※google colaboratoryを使うと環境構築せずに実行できます。
from PIL import Image
import random
import os
# 各パーツのディレクトリを指定
animals = ["animals/cat.png", "animals/doc.png", "animals/pengin.png", "animals/risu.png"]
backgrounds = ["backgrounds/05.jpg", "backgrounds/06.jpg", "backgrounds/21.jpg", "backgrounds/23.jpg"]
def create_nft(output_path, token_id):
animal = Image.open(random.choice(animals)).convert("RGBA")
background = Image.open(random.choice(backgrounds)).convert("RGBA")
# 背景のサイズに動物の画像をリサイズ
animal = animal.resize(background.size, Image.ANTIALIAS)
# レイヤーを合成
combined = Image.alpha_composite(background, animal)
# 保存
combined.save(os.path.join(output_path, f"nft_{token_id}.png"))
# ジェネレートする数
num_nfts = 10
output_dir = "output_nfts"
os.makedirs(output_dir, exist_ok=True)
for i in range(num_nfts):
create_nft(output_dir, i)
animalsには、動物の画像パスを設定し、backgroundsには背景のパスを設定します。
Image.openでパーツ毎の変数を用意します。
今回は、動物と背景の2つになります。
画像のサイズは統一する必要があるため、コードでリサイズしています。
スクリプトを実行すると、output_nftsにそれぞれのパーツをランダムに組み合わせた画像が出力されます。
次にメタデータを作成していきます。
metadataにはopenseaに表示するためのパラメーターとtraitsには各パーツの名称を設定します。
スクリプトを実行します。
import json
import os
# メタデータを保存するディレクトリ
metadata_dir = "metadata"
os.makedirs(metadata_dir, exist_ok=True)
# メタデータのテンプレート
def generate_metadata(token_id, image_url, traits):
metadata = {
"name": f"Generative Animals #{token_id}",
"description": "This is a unique animal generative NFT",
"image": image_url,
"attributes": traits
}
return metadata
# 各NFTのメタデータを生成
for i in range(10):
image_url = f"https://purple-gentle-elephant-417.mypinata.cloud/ipfs/QmSvzaCUk117Z5Ax44JEPaupbVFjT4WKomJMBXLiXnKEdy/nft_{i}.png" # 実際にはIPFSなどのURL
traits = [
{"trait_type": "background", "value": "Blue"},
{"trait_type": "animal", "value": "Sword"}
]
metadata = generate_metadata(i, image_url, traits)
# JSONファイルとして保存
with open(os.path.join(metadata_dir, f"nft_{i}.json"), "w") as f:
json.dump(metadata, f, indent=4)
metadataのフォルダーが出力されました。
それぞれのメタデータのimageとattributesを紐づける画像パスとパーツ名称に変更します。
ここからは以前に作成した記事とやり方は同じなので割愛します。
下記の記事に沿って進めれば、OpenSeaに表示することができます。
流れとしては、
・画像とメタデータをIFPSにアップロード
おすすめは、pinataです。
・openzeppelin wizardでコードを作成し、Remixで実行
・OpenSeaで確認
もし表示されなければ、メタデータを更新を押します。
表示に最大24時間かかる場合があります。
以上です!
この記事が気に入ったらサポートをしてみませんか?