J-한솔넷

기록 보관 : NFT 발행을 위한 이미지 제작 본문

프로그래밍/Node.js

기록 보관 : NFT 발행을 위한 이미지 제작

jhansol 2024. 1. 22. 23:40

저의 개인 홈페이지에 있던 내용을 옮겨 기록하고자 합니다. 제가 게으른 탓에 활용하기 힘들고 유지를 하기에 금전적으로도 낭비다 생각되어 님길 것은 남기고, 버릴 것은 버리고 사이트를 없에기 위함입니다. 기존 내용 그대로 아래와 같이 옮겼습니다.


스마트 컨트렉트가 어느 정도 준비가 되었다. 이재 NFT 이미지를 제작해야 한다. 여기에는 이미지 제작을 위해 내가 시행착오를 겪었던 것과 NFT 이미지에 대한 내 개인적인 생각을 기록하려고 한다.

제작전 탐색

이 부분도 조코딩님의 유투브 체널을 참조했다. 여기선 소개된 HashLips / hashlips_art_engine 을 이용하여 이미지를 제작하려고 했다. 하지만 버전문제와 의도치 않은 구문오류가 발생한다. 그래서 대안은 없는지 인터넷을 검색해보니 이미지를 제작해주는 온라인 사이트가 여럿 있다. 그러나 이들 사이트의 경우 이미지 숫자, 기타 제한이 있었다. 그 외 응용프로그램(Windows, Mac, Linux)도 다수 존재했으나 앞에 소개한 NodeJs 기반으로 운영체제 독립적인 도구가 나오는 상황에서 사용하기 꺼려졌다.

검색하다 마지막으로 찾은 것이 nft-art-maker 패키지이다. 이 패키지는 NodeJs 전역에서 사용 가능한 패키지로 HashLips / hashlips_art_engine 를 기반으로 제작되었다고 한다. 약간의 시행착오를 거쳤지만 매우 만족할 만큼 이미지 제작이 되었다.

제작 환경

nft-art-maker 패키지는 버전의 영향을 많이 받는다. 공식 홈페이지를 보면 최소 NodeJs 14.14.0 이상에서 동작하지만 버전 18에서는 아직 동작하지 않는다고 되어 있다. 요즘 NodeJs 버전 때문에 스트레스가 이만저만이 아니었다. 그래서 아에 NVM 체제로 변경하였다. 이 프로젝트도 NVM 환경에서 버전을 선택한 후 작업하였다.

우선 NVM을 설치해야 한다.

Mac 환경에서 NVM 설치

우선 Homebrew가 설치되어 있어야 한다. 설치되어 있지 않다면 설치 후 아래 과정을 진행한다.

brew uninstall node
brew install nvm

혹시 문제가 발생할까봐 현재의 시스템에 설치되어 있는 NodeJs를 삭제하고 설치했다.

Windows 환경에 NVM 설치

Windows 에서는 coreybutler / nvm-windows 에서 설치버전을 다운받아 설치한다. 설치 마법사 형태로 설치가 되므로 매우 간단하게 설치할 수 있다. 사용방법은 같다.

NVM에서 14.14.0 설치 및 사용

특정 벚전의 설치와 사용은 아래와 같다.

nvm install 14.14.0
nvm use 14.14.0

이재 NodeJs 버전을 확인하면 "v14.14.0" 이라고 표시될 것이다. 한 가지 주의할 점은 버전 사용은 위 명령을 실행한 터미널 세션 안에서만 유효하다. 다른 터미널을 실행한 후 버전을 확인하면 결과가 다르게 나올 것이다.

% node -v
v19.1.0

% nvm use 14.14.0
Now using node v14.14.0 (npm v6.14.8)

% node -v
v14.14.0

nft-art-maker 패키지 설치

이 패키지는 전역으로 설치하여 이용한다. 아래와 같이 설치한다. 설치하기 전에 위와 같이 NodeJs 버전을 14.14.0 으로 변경한 다음 설치해야한다.

npm install nft-art-maker@latest -g

NFT 이미지 소스 준비 및 환경설정

이미지 소스 준비

이미지는 조합 대상 분류에 따라 폴더 단위로 구성한다. 각 폴드 안에는 조합 대상의 이미지(특히 PNG)를 준비한다. 참고로 이미지 이름에 "#확률" 형태로 확률을 백분율로 지정하여 조합 확률을 지정할 수 있다. 여기서는 확률을 지정하지 않았다.

이미지 폴더는 아래와 같이 준비하였다.

layers
├── arrow
├── background
├── character
├── check
├── fx
└── home

각 폴더에는 이미지가 10개씩 준비되어 있다. 이들을 조합하면 최대 1,000,000개의 이미지를 생성할 수 있다

이미지 조합 환경 설정

이재 제작을 위한 마지막 일만 남았다. 이미지 제작에 대한 설정을 해주어야 하는데, layers 폴더가 보이는 곳에 ".nftartmakerrc" 파일을 생성하여 아래와 같은 설정 내용을 저장한다.

{
  "description": "SOHOCODE Test NFT",
  "layerConfigurations": [
    {
      "growEditionSizeTo": 1000,
      "layersOrder": [
        {"name": "background"},
        {"name": "arrow"},
        {"name": "fx"},
        {"name": "check"},
        {"name": "home"},
        {"name": "character"}
      ]
    }
  ],
  "format": {
    "width": 500,
    "height": 173
  }
}

위 설정 내용은 아래와 같다.

  • 본 NFT 이미지 설명은 "SOHOCODE Test NFT"으로 추 후 콜렉션 제목으로 이용된다.
  • 이미지 제작 개수는 1000개로한다.
  • 이미지 레어 조합 순서는 "background"를 제일 아래에 배치하고, 순서데로 "arrow", "fx", "check", "home", "character" 등의 폴더를 쌓아 올려 조합한다.
  • 이미지의 크기는 가래 500픽셀, 세로 173픽셀로 한다.

이미지 제작

모든 준비가 다 되었다. 아래의 명령으로 위에서 설정한 데로 이미지를 제작하도록 한다.

nft-art-maker generate

환경설정 파일에 문제가 없다면 아래와 같이 output 폴더가 생성되고 이미지와 메타데이터가 생성된다.

.
├── layers
│   ├── arrow
│   ├── background
│   ├── character
│   ├── check
│   ├── fx
│   └── home
└── output
    ├── images
    ├── json
    └── metadata.json

아래 그림처럼 이미지가 조합되어 100개가 만들어 졌다. 이재 이것을 ipfs나 자체 서버에 보관하고 NFT 발행에 활용하면 된다.

실행 후 검토 사항

이 글을 적기 전에 내가 예상한 이미지 수(1,000,000개)를 생성을 시도했다. 이미지 저장 용량이 상당히 크다. 앞으로 서버시의 활용에 따라 그 이상의 NFT가 발행될 것이다. 그렇게 되면 저장 욜량으로 인한 문제가 크게 대두될 것이다. 위와 같이 이미지를 제작하는 것은 소량으로 발행하고, 유지를 위한 지속적인 수익이 나올 때 적합하다.
NFT에서 사용되는 이미지, 비디오 등은 미디어 소유 자체를 의미하지 않는다면 굳이 각 NFT 별로 유일한 이미지를 가질 필요는 없다. 그리고 메타데이터 역시 마찬가지이다. 오픈씨나 NFT 마켓을 통해 유통하지 않는다면 메타데이터 역시 필요하지 않다. 필요하더라도 별도의 Json 파일을 만들지 않고 요청 시 서버에서 동적으로 생성하여 전송하는 것도 가능하다.
이를 바탕으로 초 대량으로 NFT를 발행하고 각족 서비스를 제공하는 경우 각 NFT 발행 시 하나의 독특한 이미지를 사용하고 메타데이터는 배경시스틈(Backend System)에서 동적으로 생성하여 전송하는 것이 좋겠다는 생각이 든다.

참고자료

HashLips / hashlips_art_engine
조코딩 JoCoding
coreybutler / nvm-windows
coreybutler / nvm-windows