Как создать свою NFT коллекцию? Подробное руководство

Такие проекты как Cryptopunks и Bored Ape Yacht Club принесли доход в сотни миллионов долларов и сделали несколько своих владельцев миллионерами. Общим для вышеупомянутых проектов (и большинства других успешных проектов NFT в настоящее время) является то, что они являются генеративными. Это означает, что они обычно являются коллекцией из 10000+ аватаров, где каждый аватар уникален и имеет свойственный ему набор характеристик.

В этой статье мы покажем вам, как создать подобную коллекцию с уровнями редкости.

Предварительные условия для создании коллекции

Python и pip установлены на вашем компьютере

Библиотека для создания коллекции написана на Python, так что вам необходимо установить его на ваш компьютер. Вам также понадобится pip, который установит важные пакеты для нас.

Зайдите на этот веб-сайт и скачайте последнюю версию Python. Вам не нужно знать, как программировать (на Python или как-то еще), чтобы выполнить все действия.

Художник (желательно, но не обязательно)

Вам также понадобится художник, который разбирается в цифровом искусстве, чтобы создать свою собственную коллекцию. Тем не менее, это не требуется, чтобы следовать этому руководству. Мы предоставим вам несколько тестовых изображений, с которыми вы сможете поиграть.

Коллекция белок Скрэппи

В рамках этого руководства мы проведем вас через процесс создания NFT Scrappy Squirrels. Белки были созданы с использованием более 85 признаков. Вот несколько примеров

Процесс генерации

Белки, которые вы видите выше, были сгенерированы путём наложения изображений PNG друг на друга. Хотя ни один из проектов NFT не описывает, как они создают свое искусство, мы уверены, что это то же самое. Почти каждый аватар NFT, который вы видите, является набором PNG изображений.

Начиная с верхнего правого угла, если вы сложите каждое изображение признака по часовой стрелке одно за другим, вы получите изображение в центре. При этом:

  • Каждое изображение (и последний аватар белки) имеет точно такой же размер.
  • Помимо изображения фона, все остальные изображения имеют прозрачный фон.
  • Изображения черт должны быть сложены, чтобы получить правильный аватар белки (то есть по часовой стрелке сверху справа).
  • Образы черт нарисованы таким образом, что их позиционирование имеет смысл по отношению ко всем другим чертам.
  • Мы можем поменять любую черту на другую той же категории (например, красная рубашка вместо голубой рубашки). Поэтому, в данном случае, если бы у нас было 10 черт для каждой категории, мы могли бы теоретически произвести 100 миллионов различных белок.

Таким образом, задача художника состоит в создании нескольких изображений для различных категорий черт. Вы можете иметь столько категорий черт, сколько захотите. Следует помнить, что число возможных комбинаций увеличивается экспоненциально с количеством категорий черт.

В проекте Scrappy Squirrels мы создали 8 категорий черт.

Каждая категория была разной по количеству образов. Например, у нас было 11 разных рубашек.

Теперь ваша очередь. Вам нужно выбрать категории черт, с которыми вы хотите работать, и создать образы черт для каждой категории. Убедитесь в том, что они удовлетворяют вышеупомянутым требованиям (должны иметь одинаковые размеры, должны быть правильно расположены и т.д.). Кроме того, убедитесь, что вы правильно называете образы свойств. То, что вы называете ваше изображение, появится в файле метаданных.

Как только вы закончите с этим, мы готовы использовать библиотеку для создания нашей коллекции автоматически! Если вы не художник (или не имеете доступа к нему), не волнуйтесь! У нас есть несколько образов, с которыми вы можете поиграться.

В настоящее время библиотека способна только обрабатывать изображения PNG. Вскоре мы добавим поддержку для других типов медиа.

Загрузить репозиторий и установить необходимые пакеты

Наша библиотека генеративного типа доступна бесплатно на GitHub. Скачайте ее.

После загрузки репозитория откройте терминал или командную строку и запустите следующую команду:

pip install Pillow pandas progressbar2

Запуск этой команды позволит установить три важных пакета Python, от которых зависит наша библиотека:

  • Pillow: Библиотека обработки изображений, которая поможет нам складывать образы признаков.
  • Pandas: Библиотека анализа данных, которая поможет нам в создании и сохранении наших метаданных изображений.
  • Progressbar: библиотека, которая расскажет нам о прогрессе, когда произойдёт генерация изображения.

Добавить свои пользовательские изображения

В загруженном вами хранилище генеративного арт-нфт вы увидите папку изображений. Если у вас есть собственная художественная работа, вперёд, замените содержимое этой папки вашими активами. В нашем случае, наша папка активов имела 8 подпапок, представляющих категории, названные соответственно, и каждая подпапка имела характерные изображения этой конкретной категории.

Если у вас нет пользовательского оформления, оставьте папку с активами по умолчанию.

Настроить файл config.py

Это последний (и, возможно, самый важный шаг), прежде чем мы сможем создать нашу коллекцию аватаров. Откройте файл config.py и заполните его в соответствии с инструкциями ниже.

Файл конфигурации состоит из одной переменной Python, называемой CONFIG. CONFIG — это список Python (инкапсулированный [ ]). Он содержит список категорий признаков в порядке, в котором они должны быть сложены. Порядок здесь чрезвычайно важен. Вот пример такой конфигурации.

CONFIG = [
    {
        'id': 1,
        'name': 'background',
        'directory': 'Background',
        'required': True,
        'rarity_weights': None,
    },
    {
        'id': 2,
        'name': 'body',
        'directory': 'Body',
        'required': True,
        'rarity_weights': 'random'
    },
    {
        'id': 3,
        'name': 'eyes',
        'directory': 'Expressions',
        'required': True,
        'rarity_weights': None
    },
    {
        'id': 4,
        'name': 'head_gear',
        'directory': 'Head Gear',
        'required': False,
        'rarity_weights': None
    },
    {
        'id': 5,
        'name': 'clothes',
        'directory': 'Shirt',
        'required': False,
        'rarity_weights': None
    },
    {
        'id': 6,
        'name': 'held_item',
        'directory': 'Misc',
        'required': True,
        'rarity_weights': None,
    },
    {
        'id': 7,
        'name': 'hands',
        'directory': 'Hands',
        'required': True,
        'rarity_weights': None,
    },
    {
        'id': 8,
        'name': 'wristband',
        'directory': 'Wristband',
        'required': False,
        'rarity_weights': [100, 5, 5, 15, 5, 5, 15, 15, 5, 1]
    },
]

Каждая категория черт представлена как словарь Python (инкапсулированный {}). Все, что нужно сделать, это определить эти словари категорий свойств в порядке в списке CONFIG.

Словарь категорий черт имеет 5 необходимых ключей. Это идентификатор, имя, каталог, необходимые и rarity_weights. При создании нового слоя (или замене существующего) убедитесь, что все эти ключи определены.

  • Id: номер слоя. Например, если тело является второй категорией черт (или слоем), который должен быть сложен, оно будет иметь идентификатор 2. Обратите внимание, что слои должны быть определены в правильном порядке.
  • Name: имя категории черт. Это может быть что угодно. Оно появится в метаданных.
  • Directory: имя папки внутри активов, которая содержит изображения данной категори черт.
  • Required: если эта категория требуется для каждого изображения. Некоторые категории черт (например, фон, тело и глаза) должны появляться в каждом аватаре, в то время как некоторые другие категории (например, головные уборы, браслеты или одежда) могут быть необязательными. Мы настоятельно рекомендуем вам установить значение первого слоя в значение true.
  • rarity_weights: эта категория определит, насколько распространенными (или редкими) будут ваши черты. Проверьте в следующем разделе для более подробной информации.

Настройка веса редкости

Ключ rarity_weights может принимать три значения: None, «случайный» или список Python. Давайте рассмотрим каждое значение по отдельности.

None

Если вы установите значение rarity_weights равным None, каждому признаку будет присвоен равный вес. Таким образом, если у вас есть 5 черт, каждая черта будет отображаться примерно в 20% аватаров.

В случае, если требуется False, то в равной степени вероятно, что он не будет иметь эту особенность вообще. В предыдущем случае, если требуемое свойство было установлено как ложное, то каждое свойство будет отображаться примерно в 16,6 % аватаров. Другие 16,6% аватар не имели бы такой особенности.

‘random’

Установка для rarity_weights значения ‘random’ (обратите внимание на круглые скобки) будет случайным образом присваивать веса каждой категории. Мы настоятельно рекомендуем вам не использовать эту функцию. Всегда прибегайте к равной или пользовательской редкости.

Python list

Вероятно, это самый распространенный способ присвоения веса редкости.

Первое, что нужно сделать, это перейти в папки категорий черт и отсортировать изображения черт по имени. Например, сортировка папки «Wristbands » даст нам следующее:

Вы видите, что у нас есть 9 различных видов браслетов. Теперь нам нужно определить список Python (инкапсулированный [ ]), где каждое число представляет вес, присвоенный конкретной черте в порядке возрастания.

Если требуется установить True, то число весов должно быть равно числу черт для этой категории. Если требуется значение False, то число весов должно быть равно числу черт плюс один.

В нашем случае, если бы требовались браслеты, мы бы определили девять весов в списке, а если бы это не требовалось, мы бы определили десять весов. В последнем случае первым весом будет вес, связанный с отсутствием браслета.

Давайте взглянем на раритеты, которые мы определили для браслетов.

[100, 5, 5, 15, 5, 5, 15, 15, 5, 1]

Поскольку браслеты не требуются, мы установили десять весов (девять плюс один). Первый вес — это вес, связанный с отсутствием браслета. Второй вес связан с группой Cheetah, третий вес связан с группой Giraffe, и так далее. Обратите внимание на алфавитный порядок.

Чем выше вес, тем более распространённым признаком является. Например, Гепард имеет вес 5, а без полосы вес 100. Это означает, что иметь группу Cheetah в 20 раз реже, чем вообще не иметь группы.

Создание коллекции

После настройки файла config.py пришло время генерировать коллекцию. Откройте Терминал (или Командную строку) и перейдите в папку с генерацией (используя команду cd).

Теперь запустите следующую команду:

python nft.py

Запуск этой команды запустит программу генерации изображения. Сначала убедитесь, что файл config.py является допустимым. Далее, он расскажет вам об общем количестве различных возможных комбинаций.

Затем он спросит вас, сколько аватаров вы хотели бы создать. Мы предлагаем создать на 20% больше того, что вы хотите создать, так что у вас останется достаточно даже после удаления дубликатов. В нашем случае мы решили создать 12000 аватаров, хотя хотели 10000. Затем он попросит вас назвать коллекцию, а затем начнет процесс генерации.

Нам потребовалось около 30 минут, чтобы создать 11957 аватаров (после удаления дубликатов). Изображения и связанные с ними метаданные будут доступны в папке вывода.

Папка с изображениями будет выглядеть примерно так (заметьте, что это только образец, а не окончательные белки, которые мы создали).

Файл метаданных является файлом CSV, который вы можете импортировать в Excel и анализировать (например, какие свойства являются редчайшими, какая комбинация признаков является наиболее распространенной, рейтинг Avatar Rarity и т.д.)

Вывод

И вот оно! Вы создали свою собственную коллекцию аватаров.

Итак, готовы ли мы запустить следующий большой проект NFT? Не совсем. Вам нужно будет загрузить эти изображения в IPFS, и далее создать сообщество и информационный шум вокруг вашего проекта.