NFT Marker Creator
The NFT Marker Creator turns a JPG or PNG into the three files of an NFT marker — .iset (image set), .fset (feature set) and .fset3 — used by jsartoolkitNFT, ARnft, jsartoolkit5 and AR.js. It runs entirely in your browser: the image is not uploaded.
The same marker generator is also available for the command line, with threads, as a Node.js app, a Python package and a Docker image: see Command-line versions.
- Upload image and wait for the preview.
- Read the confidence stars (an estimate based on the image’s detail).
- If the image has no colour information you are asked for the number of channels: 1 for black and white, 3 for colour.
- Generate. When it’s done the three files download automatically.
The browser version runs on a single thread, so large images (over about 1000 px per side) can take 20 minutes or more. For those, or for batch work, use one of the command-line versions.
See also: Make a good NFT marker.
Command-line versions
Section titled “Command-line versions”All three live in webarkit/Nft-Marker-Creator-App, are built on the same WebARKitLib code as the browser tool, and write the same three files. They can use several threads, which is what makes large images fast.
| Version | You need | Threads |
|---|---|---|
| Node.js app | Node.js 22 | --threaded <n> |
| Python package | Python 3.8 or later and pip |
--threads <n> |
| Docker image | Docker | --threaded <n>, same app inside the container |
Node.js app
Section titled “Node.js app”Get the code (or the prebuilt NFTMarkerCreator.js and build/ bundle from the releases), install it, and run it on an image placed in the src folder:
git clone https://github.com/webarkit/Nft-Marker-Creator-App.gitcd Nft-Marker-Creator-Appnpm installcd srcnode NFTMarkerCreator.js -i pinball.jpg --threaded 4The files are written to src/output. Start --threaded with the number of physical CPU cores and adjust from there: laptops may peak at 4 threads, workstations can go higher.
Useful options: -level=0 to -level=4 sets the feature density (default 2), -zft creates only the compressed .zft file, and -o <folder> sets the output folder. The README lists all of them.
Python package
Section titled “Python package”A native Python package, published on PyPI, with a command-line tool and a Python API:
pip install nft-marker-creatornft-marker-creator -i pinball.jpg -o ./markers --threads 4import nft_marker_creator as nmc
paths = nmc.create("pinball.jpg", output_dir="markers", threads=4)print(paths) # ['markers/pinball.iset', 'markers/pinball.fset', 'markers/pinball.fset3']Prebuilt wheels are available for Linux (x86_64) and Windows (64-bit), CPython 3.8–3.13, so you don’t need a compiler. The output is identical whatever the number of threads. See the Python README for the full API and for building from source.
Docker image
Section titled “Docker image”If you’d rather not install Node.js, the webarkit/nft-marker-creator-app image on Docker Hub has the app ready. From the folder that holds your image:
docker run -dit --name nft-app -v "$(pwd):/src" webarkit/nft-marker-creator-app:0.4.0 bashdocker exec nft-app node ../Nft-Marker-Creator-App/src/NFTMarkerCreator.js -i /src/pinball.jpg -o /src/markersOn Windows PowerShell use "${PWD}:/src" for the volume. Your folder is mounted at /src inside the container, so paths start with /src/; with -o /src/markers the files are written to a markers folder next to your image. Check Docker Hub for newer tags.