Skip to content

Share a collection with somebody

A cook writes your copy and holds everything. Export writes somebody else's, and who that somebody is decides what goes in it.

Open the Set and press Export…, or run nfty export. Four presets cover the usual reasons:

Preset Art Marketplace metadata nfty metadata CookBook Sealed
Marketplace ✓ ✓ -- -- --
Asset pack ✓ ✓ ✓ -- --
Full project ✓ ✓ ✓ ✓ --
Sealed critique ✓ ✓ ✓ -- ✓

A preset is a starting point, not a mode. Every box stays yours to change afterwards, and sealing is a switch you can put on any of the four.

nfty export ./collection --out ./dist --preset marketplace
nfty export ./collection --out ./dist --preset assetpack
nfty export ./collection --out ./dist --preset fullproject --book mybook.cbk

The one you are most likely to get wrong

nfty/NNNN.json records, for every asset, the seed and the exact color rolled on every layer. A buyer wants it. A public listing has no use for it, which is the whole reason the Marketplace preset leaves it out.

Whatever you choose, the panel at the bottom of the dialog names every file that is going -- and the terminal prints the same list. Read it. It is generated by the code that does the writing, so it cannot promise one thing and ship another.

Publishing to a site

nfty export ./collection --out ./dist --preset marketplace

You get Chest Demo.set holding images/, metadata/ and set.json. The export is named after the collection, not the folder you happened to cook into.

Prefer loose files for an uploader? Add --folder.

Selling an asset pack

nfty export ./collection --out ./dist --preset assetpack

Everything the Marketplace preset ships, plus nfty/ -- so the buyer gets per-asset DNA and the rarity of every trait. They do not get the CookBook, so they cannot mint a second edition of what they just bought.

Handing over the whole project

nfty export ./collection --out ./dist --preset fullproject --book mybook.cbk

For a collaborator, or for your own backup. A Set records only its book's hash, never the book, so you have to say which .cbk -- nfty cannot go and find it, and shipping the wrong one is worse than shipping none.

Whoever holds this can regenerate the collection and cook a different one from your art. The dialog says so, in those words, before you press the button.

Sending it for critique

NFTY_KEY='a passphrase you chose' \
nfty export ./collection --out ./dist --preset sealedcritique \
    --key env:NFTY_KEY --note "Draft for review"

You get Chest Demo.tin: the whole Set encrypted, marked view-only. Your reviewer opens it in nfty with the passphrase, browses the art, reads the rarity table -- and every Save and Export is refused.

Read What sealing does and does not do before you rely on it. The short version: the encryption is real against anyone without the passphrase, and the refusal is nfty declining rather than arithmetic forbidding.

Send the passphrase by a different route than the file. There is no unseal command and no recovery if you lose it -- sealing copies your Set, it never consumes it, so keep the original.

There is no --passphrase flag, on purpose

An argument on a command line is visible to every process on the machine while it runs, lands in your shell history, and is captured verbatim by CI logs. --key names a source instead -- env:NAME, file:PATH, stdin or prompt -- and an unprefixed value is refused rather than taken as the passphrase. Omit it and nfty asks at the terminal, echoing nothing. See the CLI reference.

Opening what somebody sent you

Drop a .set or a .tin on the opening screen, or use Open Set… -- it takes both. A sealed export asks for the passphrase, but first it tells you what it is: the collection's name, how many assets, and the note the sender wrote. That much is readable without any key.

From the terminal:

nfty inspect ./ChestDemo.tin                      # what it is, no key needed
nfty inspect ./ChestDemo.tin --key prompt         # ...and what is inside it