NFTに参入してみて、大量の作品を作って販売することが出来るジェネラティブ(ジェネレーティブ)アートに魅力を感じたコトありませんか?
あるいは既に運営しているコレクションが、同じキャラクターの「色違い」「パーツ違い」だけのほぼ同じイラストを手書きで増やし続けていることに虚しさを感じていませんか?
- ジェネラティブ(ジェネレーティブ)NFTの作り方
- ジェネラティブ(ジェネレーティブ)NFTのmint(発行)方法
このページではこれらの疑問を解決します
この手順なら、一人でジェネラティブ(ジェネレーティブ)NFTを作れます
今回作成したコレクションはこちらです
背景

NFT始めたぞ!
バリエーション違いで大量にイラスを作成するジェネラティブ(ジェネレーティブ)NFTが熱いらしい!!
自分もやってみたい!!!
しかし、いざ調べて見ると周囲の成功者やインフルエンサー達は口を揃えてこんな事を言ってきます。
- NFTはコミュニティだ!仲間を見つけてチームアップするべきだ
- 分業が必要!「イラストを準備するアーティスト」「スマートコントラクトをコーディングする技術者」「マーケティング担当」etc
100%その通り、その方が良いのはわかってます
理解した上であえて言います
「うるせぇ」と
「こっちはコミュ障なんだ」と
「他の人とチームアップ出来る程の実績がまだ無いんだ」と
そんな僕が全ての工程を一人でこなして総数4600点のジェネラティブ(ジェネレーティブ)アートを作成するに至った手順を共有させていただきます
- 絵、イラスト制作をメインに活動している
- 自分一人でやり切りたい
- 今後チームアップする為にも、まずは実績を作りたい
こんな人に向けた記事です
作業の全体像

まず初めに作業の進め方、工程の全体像をお伝えします
コンセプトとしてSolidity等のスマートコントラクト系技術は勉強しません!
それでいて、根性で手動リスト・mintする様な事はせず可能な限り自動化します!
その為に、信頼できる既存のサービスや一般公開されているツールを使い倒します
NFTのミント
ポイント
- thirdweb(@thirdweb_)のサービス利用
NFTをミントする、ブロックチェーン上にデータを配置するなどのスマートコントラクトに係る作業はweb3.0系事業のスタートアップ企業thirdwebを利用します
このサービスのおかげでプログラムを読み書きせずにNFTをmintすることができます
大量の画像生成
ポイント
- プログラミング言語Pythonを利用(YouTubeなど日本語教材豊富)
- LAGを成功に導いたHayattiさんが一般公開しているプログラムを利用
- 自分でイラストパーツを作成する
日本国内で初めて(?)海外にまでジェネラティブ(ジェネレーティブ)アートNFTの魅力を届け、成功を収めたプロジェクトLAG(@SoudanNFT_LAG)のプロジェクトオーナー、はやっちさん(@HayattiQ)が一般に公開してくれているPythonプログラムを使います
Pythonは深く理解しなくても、パソコン上で動作できる様にすればOK
YouTubeや書籍で日本語教材が沢山あります
このプログラムと、作成したイラストを組み合わせてジェネラティブ(ジェネレーティブ)アートを生成します
OpenSea上で大量にlist(販売設定)する
ポイント
- MiniMouseMacroを使って作業を自動化する
大量のNFTをmintするところまで自動化しても、list作業が手動なのはキツイ。
プログラミングを覚えることなく、作業を自動化できるMiniMouseMacroを利用して課題を解決します
参考になるYouTube動画がいくつかあります
▷How to Upload 10,000+ NFT’s on OpenSea at Once (Easy Method)
▷Easy Macros with Mini Mouse Macro
どちらも英語ですが、日本語字幕を表示して確認しました
※2022年3月現在、MiniMouseMacroを利用して自動化Listしたのは10点程度です
自動化が出来る手ごたえはあるものの、コレクション運営方針として、まだ大量にListするフェーズにない事が原因です。御了承ください。
利用するサービス・ツールを選んだ理由
thirdwebを使ってNFTをmintする理由

thirdwebが良いと感じた点は下記の通り
- Polygon(ポリゴン)チェーンに対応している
- mintサイト(ガチャサイト)作成までプログラム知識ゼロでいける
- 報酬が後払い
thirdweb(サードウェブ)とは何なのか?信頼できる組織なのか?
まずはそこから確認していきます
thridwebはWeb3プロジェクト向けのソフトウェアスタートアップ企業です
Twitterフォロワー1000万人を超えるニュースメディアtech crunchの紹介記事を参照、引用します
thirdwebの特徴
- 2021年12月、500万ドル(約5億7000万円)の資金調達を完了
- ロンドンとサンフランシスコにオフィスを構える
- ユーザーが「一行もコードを書かずに」web3プロジェクトを構築、立ち上げ、管理できる無料ツールを提供
- NFT、ソーシャルトークンや通貨、マーケットプレイスなどの機能を、数クリックで追加することを可能にする
- Social Chainの創業者であるSteven Bartlett(スティーブン・バートレット)氏と、BeboやAppLovinの創業CTOを務めたFurqan Rydhan(フルカン・ライダン)氏によって設立
Twitter:フォロワー2.9万人(2022年3月現在)
Discord:登録3.1万人(2022年3月現在)
「無料ツール」と聞くと怪しい印象を持つ人がいるかもしれませんが、厳密には「利用無料」です
ロイヤリティが発生した場合に、そのうちの5%を同社が持っていくことになっています
例えばロイヤリティ設定を10%にした場合、10%のうちの5%
つまり、売上金全体の0.5%がthirdweb(サードウェブ)のものに、9.5%はユーザー(サービス利用者)のものになるような契約となります
契約といっても、契約書に目を通して印鑑を押す様な作業はなく、スマートコントラクト上でその様にプログラミングされたサービスを利用するということになります
V2改版情報(2022年4月追記)
本記事で紹介しているコレクションの立上げ直後、thirdwebの仕様変更がありました。
V2では現在、手数料無料となっています。
V2の操作手順は別記事で紹介しているので、こちらも参考にしてください
「thirdwebへの報酬は顧客(ユーザー)の成功に直接比例する」となると、お互いが事業として成り立つ、win-winが成立するサービスだなと感じられませんか
しかもロイヤリティが発生してからの支払い、つまりは後払いなのでツール利用だけをする場合はリスクゼロ、厳密に言えばガス代の支払いリスクくらいです
個人的にはこれらの点が気に入り同社のサービスを利用させてもらいました。
実際にthirdwebサービスを使って、実現したい機能の挙動確認、報酬の取り扱いに関する検証作業などを実施しましたが不明瞭だと感じる点はありませんでした
使い勝手も簡単だし、不明点はDiscordで質問すれば親切に教えてもらえました
イラストなど、アーティストの領域を主に活動しているクリエイターにとってweb3系の知識、Solidityなどのプログラムスキルを丸投げできるサービスは凄くありがたいものだと感じました
今後もこのようなサービスは発展を続けるだろうと確信します!
超便利!超楽しい!!ありがとう!!!
thirdwebの挙動確認、機能検証についてはボリュームが大きいので別ページで解説します。
Pythonスクリプトを使って画像生成をする理由
大量の画像を生成する手段としてHayattiさんが公開してくれているPythonスクリプトを利用しました
理由は下記の通り
- プロパティの設定ファイルをセットで作ってくれる
- アイテム毎の確立・レアリティ設定が出来る
- しかもthirdweb対応のcsv形式
- Hayattiさんは日本を代表するNFTコミュニティSoudanNFTの創設者
- SoudanNFT主導のLAGプロジェクトは日本国内から海外にまでリーチした実績あり
- プログラムをGitHubで一般公開してくれている
- 操作が簡単
- Phthonは日本語の教材が豊富
ジェネラティブ(ジェネレーティブ)アートを作成する、イコール、大量の画像データをプロパティ設定ファイルと一緒に生成したいという目的はこれで叶う印象でした
しかも完全無料で。Hayattiさんの懐の深さに感謝しかないです。
MiniMouseMacroを利用してList作業を自動化する理由
今回のルートで作業をすると、NFTのmintは専用のmintサイト(ガチャサイト)経由になります
「何が当たるか分からない」状態のものを有償で販売すると、日本では「賭博法違反」になる可能性があります(詳細要確認、DYORです)
これを解決する為にどうしたら良いのか?考えて僕が到達した方法は・・・
- thirdwebで作ったmintサイトにて、購入金額をゼロ設定して、自分で大量にmint
- 上記をOpenSea上でlist(販売設定)する
このルートだと手動でパラメータ設定をする様な膨大な作業量を回避しつつ、
販売形式はイラストを開示した状態なのでギャンブル性が無い状態になります。
ただし、OpenSeaでlist(販売)する作業が手動
数千点を出品するとなるとさすがにキツイので、これを自動化できる、かつ、小難しいプログラミングを覚える必要のないツールとしてMiniMouseMacroに辿り着きました
- 無料で使える
- マウス、キーボードの操作を操作を記憶、繰り返しさせるだけのシンプルなツール
MiniMouseMacroを利用した理由はこんなところです
ジェネラティブNFTを作成する具体的な手順

ここからは具体的な手順の話をします
ジェネラティブ(ジェネレーティブ)NFTをどうやって作っていくのか
全体の流れを説明して、その後に個々の詳細を紹介します
ジェネラティブ(ジェネレーティブ)NFT作り作業手順
- thirdwebで何が出来るのかを試してみる
- 自分が思っている通りのことが出来るのか?
- テストネットで試すのがオススメ
- 画像素材の準備
- 画像を重ね合わせてイラストを作る
- 組み合わせパターンは「掛け算」で増えていく
- 画像ファイル(透過png)の出力
- Pythonスクリプトでジェネラティブ(ジェネレーティブ)イラストの生成
- Hayattiさんのプロジェクトを使用
- つまずきポイントを補足
- gitコマンドを使う為の準備
- assetsフォルダとパーツフォルダの準備
- thirdwebで本番のコレクション制作(メインネット)
- コレクション名についての失敗談
- 作業手順
- 時間、GAS代など参考情報
thirdwebお試し「何が出来るのか?」
まず最初の手順としてオススメなのはthirdwebを触ってみることです
「何が出来るのか?」のイメージがつきます
この時点で自分のやりたい事と違ったらこの先の手順が無駄になるので、一回試しておきましょう
テストネットを利用して動作を確認する
初めはテストネットの利用がオススメです
無料でテスト用のコインをもらえるので、操作ミスで無駄がGAS代がかかる事も気になりません。
以下、Polygon(ポリゴン)チェーンのテストネットMumbaiでのテスト方法です
■thirdwebにアクセス
V2改版情報(2022年4月追記)
本記事で紹介しているコレクションの立上げ直後、thirdwebの仕様変更がありました。
UI改善、手数料無料、GASコスト低減などユーザーメリットが大きい改善だと思います。
手順は良く似ているのでベースはこの後の記事を参考にしてもらって大丈夫ですが、細かい仕様が異なります
V2の操作手順は別記事で紹介しているので、こちらも参考にしてください
■Get Early Accessクリック

■Let’s get…クリック

■Connect Walletクリックで、ウォレットをthirdwebに接続します

■Create Projectクリック
まずは「プロジェクト」という階層(ハコ)の準備をします
「プロジェクト」という大きい箱の中に「モジュール」という機能を実装していく様なイメージになります

■ネットワーク選択
テストネット(Testnet)での動作確認をします
今回僕は最終的にPolygon(ポリゴン)での実装を目指します
なのでテストネットもPolygonのテストネットであるMumbaiを選択

■ネットワーク選択(Mumbai利用が初めての場合の手順)
Metamaskのネットワーク設定がMumbaiになっていない場合に警告が出ます
Switch wallet to MumbaiクリックでMetamaskの設定変更画面が出ます

■MetaMaskにネットワークを追加(Mumbai利用が初めての場合の手順)
MumbaiネットワークをMetaMaskに登録していない場合に登録を促されます
登録して先に進みます

■資金不足の警告(Mumbai利用が初めての場合の手順)
Mumbaiで利用する為のMaticが不足している場合に警告が出ます
Get MATIC from faucetクリックでテストネット用のMatciが貰えるサイトにアクセスできます
警告が出ない、無視してしまった場合の為にリンクを貼っておきます

■資金を受け取るアドレス設定
Network = Mumbai、Select Token = MATIC Token
となっていることを確認
Wallet Addressに自身のアドレスを設定してSubmit

■Confirmクリック
リクエストが成功すると0.5MATICが自身のウォレットに送られてきました
(Amount = 量 = 1 となっているのに送られてくるのが0.5なのは謎)

■プロジェクト作成
プロジェクトの情報を入力します
これはthirdweb上で管理する大きな箱の情報です
プロジェクトという箱の中に、モジュールという機能を入れていきます
プロジェクト ≒ 取り扱うブロックチェーン銘柄の選択
モジュール ≒ NFTコレクションの実態
の様に考えると、一旦わかりやすいかなと思います
ということで、ここで入力する名前(Name)と説明(Description)は、後にOpenSea等で見えるものではなくてthirdwebの管理画面で見ることになる情報です
【※デプロイされる情報】この設定は後から修正・変更できないので注意
Name、Descriptionを記入してCreateをクリック

■Add Moduleクリック
続いてモジュールの作成です
モジュールは今から作るNFTコレクション及びミントサイトなどの本体です

■Release Dropを選択
- 大量の画像データと、プロパティファイルを連携してNFT化する
- 画像データは一点もの(同じものの発行枚数を増やすのでは無い)
- Mintサイト(ガチャサイト)を立ち上げる
といった方針で作業を進めたいので、Release Dropを選択します

■NFT Dropを選択してSetup Moduleをクリック

■モジュールの設定
運営するNFTコレクションの説明や、ロイヤリティの設定をします
重要なブロックです
以降、少し詳細に解説します

■Customize領域の設定(モジュール設定/Customize )
ここでは、自身が運営するNFTコレクションのアイコン、コレクション名称、説明文の設定を行います
下図は、thirdwebで設定するとOpenSeaでこの様に見えるよ、という比較です
これらの情報は、OpenSea側でも後から編集可能です
コレクション名(Name)については注意が必要です
OpenSeaに既に登録があるコレクション名を設定した場合にthirdweb上では警告が出ません
既存のコレクションと名前が被ったままOpenSeaに表示すると、コレクション名の末尾に” Vn”(nは数字)の様なバージョンを示す文字列が自動的に付与されます
コレクション名についてはこだわりや、思い入れが強くなると思いますので、主な出品先となるNFTマーケットプレイスでコレクション名が重複していないかを確認することをお勧めします。

■Configure領域の設定(モジュール設定/Configure )
【※デプロイされる情報】Configureで設定する内容(シンボル、報酬)は後から変更できませんので、注意してください
■シンボル設定(モジュール設定/Configure /Symbol)
まずはSymbolの設定です
いわゆる独自コントラクトという扱いになるので、コントラクトを指すシンボルを決定する必要があります
文字数制限以内で好きな文字列でOKですが、既存の仮想通貨(暗号資産)等と同じだとSCAM感が待出るかもしれません
thirdwebで設定したシンボルが、Polygonscanで表示されている様子を示します

■報酬設定(モジュール設定/Configure /PrimarySale…. , Royality )
Primary Sale Recipient Addressには報酬を受け取るアドレスを記載します
多くの人の場合には、自身のウォレットアドレスでOKと思われます
Royalityには二次流通時にクリエイターに発生する報酬の割合を設定します
OpenSeaでは10%上限になっていますが、thirdwebではより大きい値も設定可能です
thirdwebへの報酬はこのロイヤリティの5%ですので、ロイヤリティ設定が20%の場合、
20% * 5% = 1%
売上全体の1%がthridwebに、
19%がクリエイター報酬に、
残りが売主の報酬となります
thridwebの編集画面と、OpenSeaでの見え方に着目します
Royalityについては自身で設定した20%が問題なく反映されています
しかしながらOpenSea上で表示される支払い先のアドレスは先ほど設定したものと異なってます
これは、OpenSeaなどでの売上は一度Project Royality Treasuryに送金された後に、thirdwebの取り分を差し引いた額を受け取る仕組みになっている為です
報酬の支払いフローを検証した件は別の記事にまとめますが、違和感なく動作していました

■Delpoy NFT Drop Moduleクリックでモジュール編集作業を完了させます
【※デプロイされる情報】Configureで設定する内容(シンボル、報酬)は後から変更できませんので、注意してください

■権限、管理者の管理
作成したコレクション、コントラクトの管理者を変更、追加するページです
チームアップして作業するのに役立つ設定ですが、強い権限を与えるとサイトごと乗っ取られるリスクもあるので注意しましょう
一人でやる場合は、Admin, Minterは自身のアドレスのみでOK
持ち主の制限をする必要がなければ、TransferもEveryoneでOK
Confirm Configurationクリックで設定を完了します

■NFTデータのアップロード
いよいよNFT化するデータのアップロード作業に移ります
- 多数のデータをNFT化する
- パラメータ設定をCSVファイルを用いて一括設定する
これらを目指すのでBatch Uploadをクリック

■NFTデータをアップロードする(Upload your NFTs)
NFT化したいデータはIPFSサーバーにアップロードされることになります
画面左側の四角、Drag & Drop file…に画像データと、CSVファイルが入ったフォルダをフォルダごとドラッグ&ドロップします
画像データは”数字.png”の様なファイル名にします。小さい数字から順に登録されます。
CSVファイルは書き方のルールがあります。Download example.csvをクリックしてサンプルを入手してそれを編集しましょう
「CSVファイルの上の行に書いたパラメータが、画像データ名の小さい数字に対応する」感じです

■フォルダの中身(Upload your NFTs詳細)
ドラッグ&ドロップするフォルダの構成内容です
画像ファイルは数字の0~5までのファイル名で6つ準備しました

■CSVファイルの中身(Upload your NFTs詳細)
準備したCSVファイルがこちらです
1行目はパラメータの名称
2行目以降が各画像ファイルに対して設定されるパラメータの内容です
0.jpgに対して名前を”TestMan001″に設定
パラメータとして背景 = 青、頭 = 赤、顔 = 黄色、目 = オレンジ、口 = 紫、体 = 緑
とする指示を設定しています

■OpenSeaでの見え方(Upload your NFTsの反映イメージ)
設定を完了した後にOpenSeaではこんな感じで見えるよ、という紹介がこちら
Propartiesの設定がちゃんとされていることが確認できます

■設定内容の確認(Upload your NFTs詳細)
フォルダごとデータをドロップすると以下の様な画面になります
設定したい内容と、画像データの紐づけが意図した通りに出来ているか確認しましょう
内容に問題なければNextをクリック

~~途中省略~~

■リビール設定
リビールとは、mintサイトでNFTを取得した後、一定期間ロゴマークやガチャガチャのカプセル画像などを表示して「開けるまで何が出たのか分からない」演出をするやつです
ガチャ開封動作という感じですね
Reveal upon mintを選択すればリビールされた状態、すぐにNFTが見える状態での排出に
Delayed Revealを選択すれば一定期間別画像が表示される状態での排出になります
今回の目的に合うのは前者なのでReveal upon mintを選択
Upload n NFTs(nはアップロードしたデータの個数)をクリックしてデータをIPFSサーバーに送ります

■セッティング
ダッシュボードに戻ってくると「設定が完了していないよ」的な警告が出てくるかと思いますので
Set Claim Conditionをクリック
警告が出てこない、スキップしてしまった場合はSettingsタブをクリックでも同じです

■mintサイトの設定
Claim Conditionを設定していきます
- Currency(通貨)・・・Polygonチェーンでの実装を目指すのでMATICを選択
- Price Per Token(1つの値段)・・・価格設定。ゼロ設定だとフリーミントになります
- Maximum Claimable Supply(クレーム可能な最大供給量)・・・供給数量に制限をつけることができます。NFTを100個作成したけど、そのうちの20個だけ排出したい、の様なケースで利用します
- Wait Time(待ち時間)・・・mintした後に再度mintするまでに必要な待ち時間。秒で設定します。1時間に一回、1日に一回、の様な制限を付けるときに利用します
- Claim Limit Per Transaction(一回の取引における請求限度数)・・・一回の操作で同時にmint出来る数量を設定します
設定が完了したらSaveをクリック

■Mintサイトの確認
ダッシュボードのEmbedタブを開きます
Mintサイトを一般公開する場合は、自身のサーバー等にコードをコピペします
Copy to clipboardで取得したコードをコピペすればOKです
Preview画面では、作成されるMintサイトのイメージが表示されます
Mintサイトを一般公開せず、自分でMintするだけの場合はこのプレビュー画面で操作が可能です
大量のNFTを作成してプロパティを一括設定する目的で利用する場合、この操作が可能なのはとてもありがたいですね

■OpenSeaに登録されたのか確認
1つでも作品をMintすると自動的にOpenSeaでもコレクションが見られる様になります
テストネットでMintした作品は、テストネット版のOpenSeaで確認します

■My Collections
先ほど作ってmintした作品のコレクションがOpenSeaに表示されました
おつかれさまです、これで今回thirdwebを使って出来ることの一連の流れです

画像素材の準備

画像を重ね合わせてイラストを作る
最終的に作りたい作品をイメージしつつ、イラストはパーツ毎に分割しながら作成します
描画したい部分以外は透明になる「透過png」形式でパーツを準備して、それを順番に重ね合わせる形で一枚のイラストにします
お絵描きソフトで「レイヤー」を使いこなしている人はイメージつきやすいかと思います

上の図の例だと、「顔.png」の上に「髪の毛.png」その上に「目.png」を重ねるイメージです
髪の毛と顔の配置順番を間違えると下の例の様に残念な仕上がりになります

ここでは説明上分かりやすい様に「顔.png」の様な日本語でファイル名を付けましたが、ファイル名は全て半角アルファベット、数字、記号の組み合わせが良いと思われます
後述しますが、ジェネラティブ(ジェネレーティブ)作成の際にプログラムを通すことになるので、日本語ファイル名が処理できないと厄介です
また、「ファイル名を参照して名前順に処理する」様な挙動をするので数字の0~1、アルファベットのa~zの様な「名前順が明確」になるファイル名の付け方が推奨されます
このあたりのプログラムを通すとどうなるか挙動を把握する工程は先に体感しておいたほうが良いかもしれません
イラストの準備は程々に、あるいは、テスト様な適当なイラストだけを準備して後述するPythonスクリプトでジェネラティブ(ジェネレーティブ)イラストの生成をする手順を先に試してみることをおすすめします
組み合わせパターンは「掛け算」で増えていく
最終的に出来上がるイラストが何パターンになるのかは、部位ごとに準備するパーツの枚数の掛け算で決まります
顔 = 2種類
目 = 2種類
髪の毛 = 2種類
を作成して、全通りの組み合わせを出力すると、2×2×2 = 8通りのイラストが作成できます
ちなみに今回僕が作成したのは・・・
背景 = 6
前髪 = 28
後髪 = 28
身体 = 29
顔 = 6
口 = 8
右まつ毛 = 16
左まつ毛 = 16
目 = 7
アイテム = 28(27種類 + 「なし」)
用意した画像合計171枚
最大組み合わせパターン328,550,842,368通り
最終的に出力する4,600枚に対して過剰な感じもありますが、一点一点が個性的な仕上がりになる為に重要なパーツは力を入れて枚数を増やしたいところです
そうは言っても、パーツ作り作業は楽しいので「掛け算で増える」ことを意識しない作り過ぎてしまうのも事実、そのあたりは各自作品のコンセプトや楽しみ方に応じて設計しましょう
画像ファイル(透過png)の出力
準備したパーツはそれぞれ個別の画像ファイルとして出力します
書きたい部分以外透明になる透過png等のファイル形式にしましょう!
ファイル出力の際に「白背景」を残したまま作ってしまうのはあるあるの作業ミスです、気をつけましょう
準備するパーツの画像ファイルサイズは同じにしましょう
ちなみに、僕のお絵かきソフト(クリップスタジオ)の管理画面はこんな感じ
パーツ毎にフォルダ分けをしてパーツ単体の出力をしやすくしています

出力するファイルのイメージはこんな感じ
画像は前髪パーツの一部です

Pythonスクリプトでジェネラティブ(ジェネレーティブ)イラストの生成

Hayattiさんのプロジェクトを使用
プログラミング言語のPython(パイソン)を利用します
利用するプロジェクトは既に作ってもらっているものです
▷リンク:Generative NFT コレクションの作り方
イラストレーターさん、絵描きさんからすると、この工程が一番ゲロですよね
ただ安心してください。自分でプログラムを書く必要はほとんどありません。
それにPythonは「使いやすさ」から、世界中で流行している比較的わかりやすいプログラミング言語とされています
また、流行しているだけあってYouTube等での日本語教材も豊富です
Pythonを言語として理解する必要はない・動かせればそれで良いと考えたら少し気が楽になりませんか?
基本的には上記リンクの通りに作業を進めればOKです
一部つまずいたポイントの解説を後述します
Hayattiさんの紹介
そうは言っても、得体のしれないプログラムを自分の大切なPCで動かすのは不安です
実際問題、自己判断、自己責任での利用となります
判断材料の一つとして重要になってくるのが「作成者が信用できる人なのか?」問題
ということで、作成者のHayattiさんが何者なのか判断するべく、功績を御紹介します
Hayattiさんご本人の情報
Hayattiさんのツイッターアカウントがこちらです
フォロワー7,242人(2022年3月現在)
日頃の発言からすると、仮想通貨(暗号資産)投資、NFT投資に詳しく、御自身でかなり手広く投資をされている印象です
コミュニティSoudanNFT創設者
SoudanNFTというコミュニティのファウンダー、創始者の方です
SoudanNFTは国内アーティストの発掘、海外展開支援、有力なクリプト系プロジェクトとの連携を行っている日本国内のNFT系コミュニティとしては最も人数が多いと言われることもあるコミュニティです
国産ジェネラティブ(ジェネレーティブ)NFTプロジェクトLove Addicted Girls(LAG)
上記Hayattiさん率いるSoudanNFTチームが手掛けた大仕事として挙げられるのがLAGプロジェクトです
本格的なミントサイト付きのジェネラティブ(ジェネレーティブ)NFTプロジェクトを、日本国内から海外にまでリーチさせて成功を収めた最初のNFTプロジェクトだと思われます
これらの内容を踏まえて、権威性、実績共に「信頼に足る人だ」と僕は判断
プログラムを使わせていただくことにしました
操作手順(つまずきポイントの補足)
基本的にはHayattiさんの説明資料を順番にいていけばOKです
ただし、Hayattiさんよりもスペックの低い僕が見ると、悩んでしまったり操作方法を迷ったりした部分があったのでその部分だけ補足させていただきます
■metadata(メタデータ)
手順紹介文に度々出てくるmetadata(メタデータ)という単語、プログラムが分からないと意味わからん過ぎてアレルギー出ますよね
先にthirdwebの操作方法に出てきたCSVファイル、各画像ファイルに対するパラメータファイルのことだ思ってもらって大丈夫です
■2つ紹介されているプロジェクトのうちHayattiさん改造版の入手だけでOKです

■gitコマンドを使う為の準備
紹介されている手順で、「git clone https://・・・・」
を実行する手順が紹介されておりますが、私はこれが動かずに悩んでしまいました
原因はgitを操作する為のライブラリがインストールされていないことでした
ですので、GitPythonというライブラリを下記コマンドでインストールしました
$ pip install GitPython
インストールが済むと、下記の様にgitのverが読める様になるので御確認ください
$ git --version
git version 2.35.1.windows.2
■assetsフォルダを作成
「画像を assets/ フォルダの中に、パーツごとにフォルダ分けして入れてください」の一文があるのですが
僕の場合はassetsフォルダが無くて困りました
下図右側の様に、generative-art-nftフォルダの直下に”assets”フォルダを新規作成するだけでその後問題なく動作しました
フォルダ作成はいつも通りパソコンを使う手順で大丈夫です(windowsなら右クリック→新規作成→フォルダ)

■assetsフォルダの中身
assetsフォルダの中にはパーツ毎のフォルダを作成します
その際、後の手順で準備するconfig.pyの記載内容とフォルダ名称をを合わせる様に注意しましょう
config.pyのdirectoryに記載する名称と、フォルダ名が同じになる様にします

■パーツフォルダ内のファイル名について工夫、オススメ
後に動かすPythonプログラム(ジェネラティブ(ジェネレーティブ)を作ってくれるやつ)は、各パーツファイルを名前順に参照する様な作りになっています
なので、プログラムが参照する順番、つまりファイルの名前順をコントロールする為に下図のように記号と番号を頭につけました
番号が若いファイルほどレアリティが低くて、番号が大きいファイルごどレアリティが高い、といった感じに管理したい場合はこの方法はオススメです

ただし、パラメータファイルに、”[00]_”の部分も出力されてきてしまうので、後で削除する手間が発生します
名前順に参照されることさえ把握しておけば、その通りにconfig.pyを編集すれば良いだけなので、どちらでも、お好みの手順で大丈夫です
■レアリティの設定 / Python List について
「レアリティ設定なし」を示す「None」は例にも、config.pyの中にも記載があるのでわかるのですが、「Python List」という文字列が出てこなくて悩みました
PythonでList表現とは[1, 2]の様なカッコの中に複数の数字をカンマで区切って記述したものの事を言います
なので「Python List」という文字列は出てこなくて、[1, 2, ・・・・]の様なカッコで区切られた数字のブロックを記述することになります
数字の並べ方にはポイントがあって、上で紹介した通り名前順であることを意識する必要があります
下の図だと、Config.pyの一番上に記載のある400は、名前順で一番上にくる[00]_Cream.pngを採用する確率を示す数値です。
同様に一番下の30は[05]_Cola.pngの確立です
「# [00]_Cream」の様なシャープ(#)の後の記載している部分はコメントです
人間が読んだときに読みやすい様に書くもので、コンピュータ・Pythonは読み込んでいません
ここに名前を書いたからと言って、そのパラメータ、その画像ファイルを参照するわけではないので注意しましょう
次に数字の意味合いですが、
数字が大きいほど採用確立が高い = 良く出る = レアリティが低い
ということになります
個人的には1グループの数字の合計が1000になる様にするとわかりやすいかなと思います
全体の合計を1000にしておくと、
1000が100%、
100が10%、
10が1%、
1が0.1%
の重みづけになります
下の図だと、[00]_Creamと、[01]_Chocolateは400なので、40%の確立で採用される
[05]_Colaは3%の確立で採用される、ということになります

■画像の生成_容量確認をオススメします
準備が出来たら指示の通り、nft.pyを実行して画像生成を開始するわけですが、数百、数千、数万の画像をいきなり出力させるのはオススメしません
出力されるファイルの容量と、PCの残容量の確認をしておくことをオススメします
ですので、まずは2,3枚出力してみて、作成される画像ファイルの容量が想定通りなのか
そのファイルが数百、数千、数万枚出力されても大丈夫なのかを確認しましょう
■処理時間
処理時間のイメージです、こちらはPCのスペックや処理する画像の重さによって挙動が異なるかもしれませんので参考程度に
僕の場合、出力される画像の容量が400~750kB程度、出力枚数が4600枚で
22時36分に作業を開始して23時22分に作業が終了しました
50分弱、なので1分に100枚程度が作られた計算でしょうか
■パラメータファイル(meta data)
パラメータファイルはこんな感じで出力されます
config.pyで”name”に記述したパラメータ群に対して、採用されたファイル名の拡張子を覗いた文字列が列挙されます

先ほどファイル名を名前順になる様に付けた記号([数字]_)は不要なので削除します
エクセルを使って”[*]_”を”何もなし”に置換すればOKです

A列のnameや、B列のdescriptionもこの工程で修正・編集するのが良いと思われます
生成された画像ファイルがまともか、パラメータファイルと画像ファイルの関係性は正しいか、パラメータのレアリティが意図した通りの確立で排出されているかなどはこの時点で確認しておきましょう
■レアリティ(確率)の出力結果
レアリティ設定したパーツについては、その他の条件を満たしながら可能な限り指定された確率に近づく様に出力されます
出力枚数の兼ね合いなどから、ピッタリ同じ確率で出てこないことは意識しておきましょう
確率をすごく低く設定して、全体の出力枚数を少なく設定すると一枚も出てこないなんてこともあり得るので注意してください
参考までに、今回僕が設定したとあるパラメータの指示値と、出力結果の分布がこちらです
ほぼ指示通りですが、指示した値を中心に多少上下しているのがわかりますね

thirdwebで本番のコレクション制作(メインネット)
いよいよメインネットを利用して本番のコレクション立上げをしていきます
ジェネラティブ(ジェネレーティブ)は数量が多いので、今回はGAS代が安いPolygon(ポリゴン)での挑戦になります
コレクション名についての失敗談
コレクションの名前の付け方について失敗談を共有します
thirdwebでのNFT制作は独自コントラクトで進めます
OpenSeaの上で作業をしないのでコレクション名の重複に警告が出ません
思い入れのあるコレクション名を付けたとしても、他のコレクションと名前が競合している場合、OpenSea上ではコレクション名の重複を許してくれません
僕はコレクションにBonBonと名づけました
しかしながらOpenSeaではBonBon V3と表示されます
思い入れのある名前なのでショックだし、この仕組みを知らなかったことをOpenSeaユーザに見られるのも恥ずかしいです。。。
OpenSeaで販売予定の人はコレクション名を決める前に、他のコレクションと名前カブりが無いか確認する事をオススメします
作業手順(差分紹介)
具体的な作業手順ですが、本記事にて「テストネット」でthirdwebの使い方を確認した方法と同じなのでそちらを参照ください
一部差分と、本番コレクションならではの気になる情報を共有します
■(手順差分)CreateProject / Choosenetwork
ネットワーク選択でMainnetを利用します
ここではPolygonを選択します

■4600枚の画像データ、パラメータ(meta data)アップロードにかかる時間
Upload 4600 NFTsをクリックしたのが19:40
その後Metamaskに承認を求めてきたのが21:30でした
通信環境依存する可能性が高いので、参考程度に紹介させていただきました

■メインネットでここまでの作業にかかったGAS代
こちらもタイミングによって変動があると思うので参考データです
メインネットでの作業開始前にwalletの残高を30Maticにして4600枚アップロード後の残高と比較しました
0.2Matic程度で済みました
想定より安いぃぃぃ!!!
ただし、今後MintにかかるGAS代もあるので、あまり楽観視もできません。

List作業を自動化するツール

プログラミングを覚えることなく、作業を自動化できるMiniMouseMacroの利用を検討しています
自身のマウス、キーボード操作を記録してリピートする為のツールです
参考になるYouTube動画がいくつかあります
▷How to Upload 10,000+ NFT’s on OpenSea at Once (Easy Method)
▷Easy Macros with Mini Mouse Macro
実際に10個のNFTをこのツールを使ってListすることが出来ました
ただ、2022年3月現在、数百~数千の様なオーダーでのList作業は実施出来ておりません
これはコレクション運営の方向性の問題で、「まだそのフェーズではない」というだけのことです
ツールとしては上記の様な使い方に対してもある程度有効に使えそうな雰囲気です
あとがき
ジェネラティブ(ジェネレーティブ)アートNFTの作成
超楽しかったです
イラスト好きな僕としては、今まで無条件に
「画力系イラスト > ジェネラティブ」といった価値のイメージ、
ジェネラティブ(ジェネレーティブ)は少し劣る様なイメージを持っていました
しかしながら実際に取り組んでみると、知識がある程度無いと作れない「クリプト系のスキル」や、どんなパーツとも組み合わせが出来て、違和感ない、魅力的になる「イラストレータスキル」が必要である事を痛感しました
好みの絵師様の絵でジェネラティブ(ジェネレーティブ)が本気で欲しいです♪
この記事が少しでも役に立った絵師様!
是非あなたのジェネラティブ(ジェネレーティブ)を一点ください(笑)
今回作成したコレクションはこちら。頑張ったので雰囲気だけでも見ていっていただけると嬉しいです
技術的にはこの記事の内容で作れるはず!
作ったNFTの出品先は世界最大のNFTマーケットプレイスOpneSeaがオススメです
初めて利用する、という方にオススメの記事があります
画像を沢山つかってわかりやすく解説してあります
▷【簡単5ステップ】OpenSeaアカウントの作り方を「画像つきで解説」
そもそも暗号資産(仮想通貨)とか、ブロックチェーンが「よく分からない、不安だ」という心配を解消する為の記事もあります
準備を整えて行動あるのみ!僕も色々やってみています♪
一緒に楽しみましょう!
以上です。最後まで読んでいただきありがとうございました。
コメント