広告

Generative NFT作成からOpenSea販売(List)までのNFT初心者のメモ

※この記事は広告およびアフィリエイトプログラムによる収益をぼちぼち得ています。
私が作ったNFT
広告

この記事について

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)の購入方法は、いろんな方のブログで紹介されているので、ここではざっくり流れだけ触れます。

Polygon(MATIC)の購入の方法
  • coincheck(日本取引所)にて、円でビットコインを購入
  • Binance(海外取引所)に送金(ネットワークはBTC)
  • Binanceにて、ビットコインでPolygon(MATIC)を購入
  • メタマスクに送金(メタマスクのアカウントのネットワークはPolygonにしておく)

ちなみに、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)に表示されるので、誰が見ても他ファイルとの違いがわかる名前が良い。

「Green」「Default」「Pink」がファイル名。

パーツ作成のついでに、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を開き、表示 > ターミナルからターミナルを表示させ、適当な作業ディレクトリに入っておきます。

以下、ターミナル=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の内容を修正していきます。

config.pyMETADATA内容
  • METADATAnameは、Generative NFT1つ1つの名前になる部分で、OpenSeaの作品のタイトルにもなる部分。#_ID_の部分には生成順に番号が振られます。
  • descriptionには説明文、external_urlには外部URL、youtube_urlにはYouTubeのURLを入力。Generative NFT1つ1つに割り振られます。入力する内容が無かったらコメントアウトではなく空欄""で。
  • background_colorは背景色。背景パーツを用意している場合でも、プログラム自体に枠が設けられているので、エラー回避のためテキトーな色を16進数で入れておきます。
わし
わし

nameは、この記事の最終段階の、OpenSeaに新規コレクションが追加される場面で、既存のタイトルだとコレクション名が変わってしまうので、名前を統一したい場合は、OpenSeaで事前に使われていないタイトルか確認して設定すべし。

CONFIGの内容と変更する箇所は先ほどのサイト↓で確認してください。ここではパーツを重ねる順序の指定や、各パーツディレクトリの呼び出し等をしています。

Generative NFT コレクションの作り方 | NFT Media | NFTに関する最新情報をお届けするメディア

CONFIG内のnameは、OpenSeaのプロパティ(Properties)にレイヤーの種類として表示されるので、誰が見ても種類がわかる名前が良い。

「Background」「Body」「Eye」がCONFIG > name。OpenSea上では全部大文字になる。

CONFIG内のdirectoryには、パーツを入れたディレクトリ名を入力。スペルを間違えるとプログラムを動かした時に「ディレクトリが見つからない」とエラーが出ます。

以下、config.pyMETADATAに独自に加えた変更点。

  • background_colorの16進数の手前に#をつける。
  • youtube_urlのコメントアウトを消す。

これをしていないと、Generative NFT材料の一括アップロード時に、ボタンが機能しなかったり、エラーが起きたり、処理が終わらなかったりしました。

METADATACONFIG部分は結局こんな感じに仕上がりました。

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コントラクトの大きな特徴
  • Batch Upload(一括アップロード)ができる。
  • 1つのNFTは、一人しか所有できない。
  • 標準のERC721トークン。
  • 埋め込み機能で誰でもMint(発行)でき、Mint時のガス代はMintした人が払う。

NFT DropのContract Metadataという画面で、コントラクト(契約)の内容を入力していきます。

  • コレクションのロゴ画像、名前、説明文、シンボル(略称?)を指定します。
  • Payout Settingsの受取人アドレスが自分のものになっているか確認。
  • Royaltiesのパーセンテージは二次流通時に入る収益。
  • NetworkからPolygon(MATIC)を選択。
わし
わし

ロゴ画像はそのままOpenSeaのコレクションのロゴ画像になります。名前と説明文も引き継がれます。

入力が終わったら、Deployします。

Deployで初めてガス代発生。他の発生点と比べて少し高め。(直近の処理で 0.024MATIC かかりました)

ここからちょくちょく(といっても5回)ガス代が発生します。

Claim Phasesの設定

Deployが終わったら、Claim Phases(請求内容制御)を設定します。

今回選択したNFT Dropコントラクトは、埋め込み機能で誰でもMint(発行)できてMint時のガス代はMintした人が払うというものなので、自分のサイトにMintモジュールを埋め込み、ファンにMintしてもらうということもできます。ファンはどのNFTが自分の手でMintされマーケット(OpenSea等)に並ぶのかわからないから面白いのかな?

ファンにMintしてもらう際に、このClaim Phasesのフェーズで設定できる項目が役立つみたいです。…って事で合ってますよね…?

1つのフェーズで設定できる内容
  • いつからMint可能か
    (=When will this phase start?)
  • この画面(モジュール)でNFTをいくつまでMintできるか
    (=How many NFTs will you drop in this phase?)
  • Mintする際にガス代に上乗せされてかかる費用
    (=How much do you want to charge to claim the NFTs?)
  • 誰(指定したウォレットアドレス)がMint可能か
    (=Who can claim NFTs during this phase?)
  • 一度でいくつMintできるか
    (=How many NFTs can be claimed per transaction?)
  • Mintした後、次に再Mintできるまでの待ち時間
    (=How many seconds do wallets have to wait in-between claiming?)
    (無制限にすることで、一人一度しかMintできないという設定も可能)

フェーズは複数設定可能なので、「最初は少量しかMintできない」「いつからはMint費用が高くなる」「最初は友達限定でMint可能」等の設定も可能です。

わし
わし

私は自分でMintするので、特別なことをしない限り初期値でいいかなと思ってます。

Mint行為で日本の賭博罪が成立する可能性があるらしいので、Mint費用の設定項目は基本0が望ましいかと。参考: NFTガチャは賭博罪に当たらない(ようにできる)

入力が終わったら、Save claim phasesで保存します。

Save claim phasesで二度目のガス代発生。(直近の処理で 0.005MATIC)

NFT一括アップロード

Generative NFT画像とCSVファイルの、Batch Upload(一括アップロード)をしていきます。thirdwebのコントラクト内でBatch Uploadをクリックし、先ほど生成された画像が入ったディレクトリimagesと、各NFTに割り振られるメタデータが書かれたmetadata.csvをまとめて選択し、枠内にドラッグ&ドロップ。

途中、Reveal upon mint(Mintしたら即NFT内容が明らかになる)を選択、MintされるNFTの順序をシャッフルしたい場合はShuffle 〜のチェックボックスにチェックを入れて、いざUpload

Upload 0 NFTsで三度目のガス代発生。(直近の処理で 0.005MATIC)

ここでボタンが機能しなかったり、エラーが起きたり、処理が終わらなかったりする場合は、生成されたCSVファイルの内容=config.pyMETADATAの内容がおかしいかも。その場合は、CSVファイルを直接修正するか、Generative NFT画像をもう一度生成するか(生成画像は変わってしまうけど)で回避できます。

NFTのMint(発行)でOpenSea公開

thirdwebのコントラクト内の、Embed(埋め込みコード)のページ下方に、MintモジュールのPreviewが表示されているはず。

自分のサイトにMintモジュールを置きたい人は、ここの埋め込みコード(Embed Code)を使用します。

そのプレビューで、OpenSeaに公開させたい個数を選択し、Mint

Mint (Free)で四度目のガス代発生。他の発生点と比べて高め。(直近の処理で 0.035MATIC)
Claim Phases > How much do you want to charge to claim the NFTs?で上乗せ費用を設定している場合、Freeじゃなくなり、費用が上乗せされます。

プレビューが表示されなかったり、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)

コレクションのNFTを最初にListする際の、Approve collection(コレクションの承認)でガス代が発生。他の発生点と比べて安め。(直近の処理で 0.001MATIC)

同コレクションの2つ目以降のNFTのListの際は、署名処理のみでガス代はかからない。

これがこの記事最後のガス代。あとはthirdwebの設定を変える際等でガス代が必要になってくる。

これで、自作のGenerative NFTが、OpenSeaで販売されている状態になるかと思います。

わし
わし

まだ売れたことがないので、ここから先のことはわかりません!

買ってくれ誰か〜〜!!

私が作ったNFT

コメント

タイトルとURLをコピーしました