This repository contains the "final" assets to be deployed during the first Occulta Novellia collectible sale.
Using the formal PR process will ensure the assets are exactly how they need to be, especially for deployment to static
serving.
Since Novellia resources must be linked directly in on-chain metadata, the complete URL must be less than 64 characters.
We use nanoid
IDs to create unique 12 character paths for each Novellia resource. This way, we can name each Novellia resource generically as "nvla.json".
Using Nanoid. Generate nanoid
ID.
npx nanoid-cli -s 12 -a "0123456789abcdefghijklmnopqrstuvwxyz"
Example on-chain URL to Novellia resources:
https://api.rektangularstudios/static/ffoxfe1dq4yu/nvla.json
This will always be exactly 60 characters.
Note that each Novellia resource must be uploaded separately from any folder containing the token resources. There is a cyclic dependency in that the Novellia resource resource must contain the hashes of the token resources.
Note that you need to know the token policy_id (hash of Multisig script) prior to hosting the Novellia resource
There's also a metadata.json
beside the nvla.json
, this is a reference for the on-chain metadata to use for minting the token.
For sanity, we store token assets as subdirectories of the nanoid
ID enumerated folder. This folder is called resource
.
Each Occulta Novelia collectible character token may have the following assets:
- card_low.jpg
- 1240x1500px (JPG 90%)
- card.png
- 2480x3000px (PNG lossless)
- artwork_low.jpg
- 1920x1080px (JPG 90%)
- artwork.png
- 3840x2160px (PNG lossless)
- video.mp4
- 1920x1080px @ 24HZ (MP4)
- character.json
- generated from
card-tool
(JSON)
- generated from
The character JSON is defined as follows (as generated by card-tool
):
This file is the ground-truth definition for "occulta_novellia_version": 1
.
{
"occulta_novellia_version": 1,
"name": "Iscara the Ten Thousand Guns",
"card": {
"number": 2,
"release_set": "Presale 1",
"rarity": "Kinda Rare"
},
"progression": {
"class": "Iscara of Grevania",
"stage": 1
},
"stats": {
"health": 8,
"attack": 6,
"move": 1,
"slots": 2
},
"attributes": [
"Operator's Guild",
"Human",
"Tainted",
"Rifle",
"Sure Shot",
"Operator",
"Ten Thousand Guns"
],
"description": "Rumors say the leader of the Operator's Guild is possessed by a demonic entity that lets her morph into monsters and spit in the face of death itself. The Grevans refuse to acknowledge her humanity, referring to her as Ten Thousand Guns. They hide their children at dawn, hoping that the pretty woman, usually seen in a dress, won't take them."
}
All database rows are populated using CSV files.
IDs are generated using CLI ulid
. Prefixes are added manually.
- Manually input into CSV
- Use
card-tool
to generate static assets. - Generate database entries from static assets using
./src/generate_database.py
- This still requires the
cards.csv
file so that we can generate commissions, resource URLs, etc.
- Manually input into CSV