この記事について
NFT関連のワードを真面目にググりはじめて3日目の私自身が経験した、Generative NFT作成から、OpenSea販売(List)までの流れを、できるだけ詳細に記しています。自分用の備忘録も兼ねているので、とりあえず思いついたことは大体書いてます。多分とっても読みづらいですwすみませんww
今回のプロジェクトの要点
- Polygon(MATIC)のブロックチェーンで出す。
- ノーコードツールthirdwebを使って標準トークンで一括アップロード、自分でMint(NFT発行)する。
- マーケットはOpenSea。
- 各サービス(メタマスク、OpenSea、thirdweb)へのサインアップ手順等は省きます。
- 説明が難しい各用語の説明も省きます。
- もし不備や私の認識間違いがありましたら、コメント欄やTwitter等でご連絡いただけると嬉しいです…
Generative NFT画像生成プログラムに関すること
- 自動生成には既存のPythonプログラムを修正して使う。
- 作業環境はmacOS。
ここからは実際のプロジェクトの流れを説明していきます。
必要な資金の調達
ガス代(Gas fee)用に、仮想通貨「Polygon(MATIC)」を少し用意しておきます。
ガス代(Gas fee)とは、ブロックチェーンを使用する際に発生する手数料。
Ethereum(ETH)だとバカ高くなるので、Polygon(MATIC)にしました。処理速度も速いらしい。
Polygon(MATIC)の購入方法は、いろんな方のブログで紹介されているので、ここではざっくり流れだけ触れます。
ちなみに、9つのNFTのコレクションを全Mint(NFT発行)&販売開始(List)した際にかかった費用は、合計で 0.07110972MATIC (その時のレートでおよそ9.65314449円) でした。(Deployから初Listまででかかったガス代の合計)
土曜日の夕方だったので空いていたのか、取引スピードは平均でも低速でも値段は変わらなかったです。(土日の午後はガス代が安くなりやすいらしい)
この時にかかったガス代の内訳は、この記事の各ガス代発生点で記します。
私はEthereum(ETH)の情報とごっちゃになっていたので、とりあえず1万円をcoincheckに入金したんですが、全然そんなに必要なかったですww
Generative NFTに使うパーツの作成
私の場合、パーツはPhotoshopで作成します。Photoshopで複数の組み合わせができる絵を描いて、各パーツ(背景、身体、髪、アクセサリ等)ごとにPNGで書き出します。レイヤーの表示/非表示を切り替えながら、書き出し > PNGとしてクイック書き出し
か書き出し > 書き出し形式...
。
書き出しが一番大変な作業だったかもしれない
Photoshopの書き出し > 書き出し形式...
へのショートカットはcommand + option + shift + W
しかもショートカットが非常に押しにくい
パーツは種類ごとにディレクトリを分けておく。ディレクトリ名はプログラムで使用する。
ファイル名は、OpenSeaのプロパティ(Properties)に表示されるので、誰が見ても他ファイルとの違いがわかる名前が良い。
パーツ作成のついでに、OpenSeaのコレクションに表示される各種画像も用意しておくと、Photoshopでの作業が一度で片付くので楽です。
- ロゴ(Logo image): 350 x 350 推奨
- アイキャッチ(Featured image): 600 x 400 推奨
- バナー(Banner image): 1400 x 350 推奨
私はアイキャッチにはバナー画像を転用してます。
画像を作りながら、コレクションの名前とURL、説明文を考えておこう。
Generative NFT画像生成
Pythonの開発環境を用意
Progateがまとめてくれていた手順で進めました。
Pythonの開発環境を用意しよう!(Mac) | プログラミングの入門なら基礎から学べるProgate[プロゲート]
私はPython 3.10.6を入れました。Pythonの開発経験は無くてもできちゃいますが、あった方が理解度が深まります。私はほぼ無し!
画像生成プログラムのインストール
エディタ、Visual Studio Codeを開き、表示 > ターミナル
からターミナルを表示させ、適当な作業ディレクトリに入っておきます。
下記サイトの「プログラムのインストール方法」のgit 〜
とpip 〜
のコマンドをターミナルで実行。プログラム自体の詳細やライセンス等は下記サイトで確認してください。
Generative NFT コレクションの作り方 | NFT Media | NFTに関する最新情報をお届けするメディア
git clone https://github.com/gurujowa/generative-art-nft
pip install Pillow pandas progressbar2
プログラムの修正
Visual Studio Codeで、先ほどインストールしたgenerative-art-nft/
のフォルダーを開きます。その中の、assets/
の中身を全て消して、先ほど作成したパーツのPNGファイルを各ディレクトリごと入れます。
assets/
の中に、[背景ディレクトリ]、[身体ディレクトリ]… が並ぶように。
パーツを入れたら、config.py
の内容を修正していきます。
name
は、この記事の最終段階の、OpenSeaに新規コレクションが追加される場面で、既存のタイトルだとコレクション名が変わってしまうので、名前を統一したい場合は、OpenSeaで事前に使われていないタイトルか確認して設定すべし。
の内容と変更する箇所は先ほどのサイト↓で確認してください。ここではパーツを重ねる順序の指定や、各パーツディレクトリの呼び出し等をしています。
Generative NFT コレクションの作り方 | NFT Media | NFTに関する最新情報をお届けするメディア
内の
name
は、OpenSeaのプロパティ(Properties)にレイヤーの種類として表示されるので、誰が見ても種類がわかる名前が良い。
内の
directory
には、パーツを入れたディレクトリ名を入力。スペルを間違えるとプログラムを動かした時に「ディレクトリが見つからない」とエラーが出ます。
↓METADATA
と部分は結局こんな感じに仕上がりました。
METADATA = {
"name": "BCBA#_ID_",
"description": "black cat in the back alley",
"external_url": "https://hp.kbnt.xyz/",
"background_color": "#000000",
"youtube_url": ""
}
CONFIG = [
{
"id": 1,
"name": "Background",
"directory": "BG",
"required": True,
"rarity_weights": None,
},
{
"id": 2,
"name": "Body",
"directory": "BD",
"required": True,
"rarity_weights": None,
},
{
"id": 3,
"name": "Eye",
"directory": "EY",
"required": True,
"rarity_weights": None,
},
]
ディレクトリ名適当すぎですねすみません…
で、内容変更後はちゃんと保存!
いよいよGenerative NFT画像の生成
ターミナルで、nft.pyというファイルがあるディレクトリに入り、画像を生成するプログラム、nft.pyを走らせます!!
python nft.py
↑これを打ってエンター。
すると、Generative NFT画像を作る個数と、今回の処理のエディション(版)の名前(生成されるディレクトリ名になるだけ)を聞かれるので、適当に入力しエンター。生成が始まります!
kobunata@KonBook-Pro-16 generative-art-nft % python nft.py
Checking assets...
Assets look great! We are good to go!
You can create a total of 9 distinct avatars
How many avatars would you like to create? Enter a number greater than 0:
50
What would you like to call this edition?:
go
Starting task...
100% (50 of 50) |#########################################| Elapsed Time: 0:00:06 Time: 0:00:06
Generated 50 images, 9 are distinct
Removing 41 images...
Saving metadata...
Task complete!
kobunata@KonBook-Pro-16 generative-art-nft %
上記の処理では、9通りしかできないパーツの量だけど、雑に50個って指定してしまったので、余計な処理が入ってます。
処理が終わると、output/[エディション名がついたディレクトリ]/
の中に、生成されたGenerative NFT画像とCSVが入っているはず。す、、、すげー!!!(一番テンションが上がる瞬間)
CSVには、各NFTに割り振られるメタデータが入ってます。一括アップロード時に自動的に割り振られます。一括アップロードじゃないと一つ一つ手入力する必要がありました。
これでGenerative NFTの材料(画像とCSV)は用意できました!
thirdwebにてアップロードからMint(NFT発行)まで
ここからはthirdwebというノーコードツールを使っていきます。2022年いっぱいは無料で登録できるとかだっけ?
コントラクトを選択しDeploy
thirdwebにアクセスして、Deploy new contract > NFT Drop
NFT DropのContract Metadataという画面で、コントラクト(契約)の内容を入力していきます。
- コレクションのロゴ画像、名前、説明文、シンボル(略称?)を指定します。
- Payout Settingsの受取人アドレスが自分のものになっているか確認。
- Royaltiesのパーセンテージは二次流通時に入る収益。
- NetworkからPolygon(MATIC)を選択。
ロゴ画像はそのままOpenSeaのコレクションのロゴ画像になります。名前と説明文も引き継がれます。
入力が終わったら、Deploy
します。
Claim Phasesの設定
Deployが終わったら、Claim Phases(請求内容制御)を設定します。
今回選択したNFT Dropコントラクトは、埋め込み機能で誰でもMint(発行)できて、Mint時のガス代はMintした人が払うというものなので、自分のサイトにMintモジュールを埋め込み、ファンにMintしてもらうということもできます。ファンはどのNFTが自分の手でMintされマーケット(OpenSea等)に並ぶのかわからないから面白いのかな?
ファンにMintしてもらう際に、このClaim Phasesのフェーズで設定できる項目が役立つみたいです。…って事で合ってますよね…?
フェーズは複数設定可能なので、「最初は少量しかMintできない」「いつからはMint費用が高くなる」「最初は友達限定でMint可能」等の設定も可能です。
私は自分でMintするので、特別なことをしない限り初期値でいいかなと思ってます。
Mint行為で日本の賭博罪が成立する可能性があるらしいので、Mint費用の設定項目は基本0
が望ましいかと。参考: NFTガチャは賭博罪に当たらない(ようにできる)
入力が終わったら、Save claim phases
で保存します。
NFT一括アップロード
Generative NFT画像とCSVファイルの、Batch Upload(一括アップロード)をしていきます。thirdwebのコントラクト内でBatch Upload
をクリックし、先ほど生成された画像が入ったディレクトリimages
と、各NFTに割り振られるメタデータが書かれたmetadata.csv
をまとめて選択し、枠内にドラッグ&ドロップ。
途中、Reveal upon mint
(Mintしたら即NFT内容が明らかになる)を選択、MintされるNFTの順序をシャッフルしたい場合はShuffle 〜
のチェックボックスにチェックを入れて、いざUpload
。
ここでボタンが機能しなかったり、エラーが起きたり、処理が終わらなかったりする場合は、生成されたCSVファイルの内容=config.py
のMETADATA
の内容がおかしいかも。その場合は、CSVファイルを直接修正するか、Generative NFT画像をもう一度生成するか(生成画像は変わってしまうけど)で回避できます。
NFTのMint(発行)でOpenSea公開
thirdwebのコントラクト内の、Embed
(埋め込みコード)のページ下方に、MintモジュールのPreview
が表示されているはず。
自分のサイトにMintモジュールを置きたい人は、ここの埋め込みコード(Embed Code)を使用します。
そのプレビューで、OpenSeaに公開させたい個数を選択し、Mint
。
プレビューが表示されなかったり、Mint時にエラーが出たりしたら、iframeの埋め込みコード内のURLへアクセスして試すか、自分のサイトに埋め込みコードを貼り付けて試すかで回避できるかもしれません。
MintされるNFTの順序は、一括アップロード時にシャッフルしていない場合は、生成順(#1から)になります。
モジュールを使って自分でMintする方法が正規のやり方なのかは不明… 教えて詳しい人…
↓アップロードしたNFTが全部Mintされたら、MintモジュールにSold out
と表記されます。
OpenSeaにてNFTの販売(List)まで
OpenSeaにてコレクションの内容編集
モジュールでMintされたNFTは、OpenSeaに新規作成された自分のコレクションに並びます。
OpenSeaのコレクションの編集機能で、パーツと一緒に作った画像(コレクションのアイキャッチ、バナー)を設定、URL編集、カテゴリー設定、Twitter連携(連携で記入がリセットされるので別でやるべし)、外部リンク入力、収益の割合等を設定し、保存。
説明文はMarkdownが使えるらしい… が、私の場合なぜか反映されず…
そして遂に販売
各NFTの商品ページのSell
から、販売金額、販売期間を入力し、List(Complete listing)
これで、自作のGenerative NFTが、OpenSeaで販売されている状態になるかと思います。
まだ売れたことがないので、ここから先のことはわかりません!
買ってくれ誰か〜〜!!
コメント