LoginSignup
0
0

HashLipsのビルド結果をマージする機能を作った

Posted at

ジェネラティブNFTでは、複数のパーツをランダムに合成して画像を生成します。
ランダムに合成する面白さがある反面、イマイチな組み合わせも出てきてしまうので、選別しつつ繰り返し合成作業を行います。
HashLipsでは、ランダムに合成することはできますが、その都度全部作り直しになるため、選別結果との重複などの問題が出てきます。
このため、HashLipsのビルド結果をマージする機能を作りました。

インストール

機能追加したリポジトリのブランチは以下になるので、インストールします。
https://github.com/two-pack/hashlips_art_engine/tree/features

$ git clone -b features https://github.com/two-pack/hashlips_art_engine.git
$ cd hashlips_art_engine
$ npm install

使い方

以下のようなコマンドを実行します。

npm run merge -- -o build build_a build_b build_c -s

-oオプションは出力先フォルダの指定(上ではbuild)、それ以降のマージ元となるフォルダ名(上ではbuild_a~build_c)を指定します。
-sオプションを指定すると、マージ後に順番をシャッフルします。

使用例

この記事でも使った棒人間ブランチを使って、使用例を説明します。ブランチには今回の修正を追加済みです。
最終的には50個の画像が欲しい、ということで進めます。

まず、普通にビルドします。

$ npm run build

> hashlips_art_engine@1.1.1 build /home/foo/bar
> node index.js

Created edition: 1, with DNA: 12107f9ddeaa56e9738b73b5e1cbdf41efb72257
Created edition: 2, with DNA: b9fe6ffefbf85a81823278258c75e901fb28d1f0
Created edition: 3, with DNA: e7dfca565bd4b6a40bc0d30f4498ecf3fb345f50
Created edition: 4, with DNA: b11f11bea4ab2cfa4dcd2e2865b944a0f7add35a
<snip>
Created edition: 48, with DNA: 80c3dedec33b86dcdfddde6a0bdc237b56b4263d
DNA exists!
Created edition: 49, with DNA: 00c04a53023b1636050faad38af943add6a2338b
Created edition: 50, with DNA: 73291eaeb155324048d706e9ebd05ec009508df0

50個の結果ができます。
preview.png
ここで選別作業を行います。imagesフォルダ内の画像ファイルと、jsonフォルダ内のメタデータの両方を消していきます。
今回は 1.png~20.pngまでの20個を削除 しました。
削除後にフォルダをリネームします。今回は、 build → build_a と変更します。

次に再度ビルドします。そうするとまた50個できます。ランダムに生成されるので先程とは違う結果になりました。
preview.png

先程と同様にこちらも選別します。今回も20個消します。
削除後にフォルダをリネームします。今回は、 build → build_b と変更します。

これで2つのビルド結果 build_a、build_b ができたのでマージします。

$ npm run merge -- -o build build_a build_b

> hashlips_art_engine@1.1.1 merge /home/foo/bar
> node utils/merge.js "-o" "build" "build_a" "build_b"

Duplicated data:  /home/foo/bar/build_b/json/25.json
Duplicated data:  /home/foo/bar/build_b/json/29.json
Duplicated data:  /home/foo/bar/build_b/json/34.json
Duplicated data:  /home/foo/bar/build_b/json/46.json
Duplicated data:  /home/foo/bar/build_b/json/49.json
Merge done.

Duplicated data で表示された5つの画像が、1回目と2回目で重複していたものです。
このため、それを除いたものが結果となるため、
 build_aの30個 + build_bの30個 - 重複5個 = 55個
がbuildフォルダに入っています。
preview.png

目標の50個よりも多いので更に5個選別します。 1.png~5.pngを削除 することにします。
削除したら build → build_o とフォルダをリネームします。
今回は複数のフォルダではないですが、 同じ機能を使って番号を振り直しを行います。 また、ついでに -sオプションを付けて順番もシャッフル します。

$ npm run merge -- -o build build_o -s

> hashlips_art_engine@1.1.1 merge /home/foo/bar
> node utils/merge.js "-o" "build" "build_o" "-s"

Merge done.

結果は以下のように50個になりました。メタデータや画像を確認するとわかりますが、1~50に番号が振り直されています。
preview.png

プルリクエスト

本家へのプルリクエストは以下です。
https://github.com/HashLips/hashlips_art_engine/pull/1561

最後に

こんな感じで何度も試したビルドの結果から、決めた数に選別していくことができそうです。
よかった😁

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0