Creating a collection
Publishing a collection happens in the studio at /create: write or generate a shader, declare which values the seed is allowed to touch, preview it across a few sample seeds, then sign and publish.
The studio walkthrough
Publishing costs a signature, not gas. Minting is the on-chain step.
The studio holds three panels. On the left: a prompt box for the AI shader author, the WGSL source itself in an editable text area, and the list of seeded parameters (WGSL field name, a human label, and a min/max range, up to eight). On the right: a live preview of the current shader rendered at three fixed sample seeds side by side, so you can see the range of variation before anyone mints, plus the collection's name, description, creator name, supply, and price.
The AI shader author
Instead of writing WGSL by hand, you can describe the artwork in plain language ("a slow magnetic storm of violet filaments around a dark core") and a language model writes a candidate shader that follows the pons convention: the exact Params field order, the fs_main signature, aspect correction, meaningful use of seed and time, and WGSL's stricter syntax rules.
The candidate is validated exactly the way a hand-written submission is: the structural check first, then a real server-side compile and render. If it fails, the validator's error is fed back to the model for one more attempt before giving up and reporting the failure. A generated shader that reaches you has already passed the same bar a pasted-in one has to clear.
Validation, twice
Every collection is checked before it can publish, in two passes:
- Structural. The shader declares
struct Params, contains an@fragmententry, includestime,seed, andtexel, and every declared param key is actually a member of the struct. - Compile and render. The shader is rendered for one small frame server-side with realistic sample parameters, proving it actually compiles and runs rather than just looking structurally plausible. If no render backend is available on the host, this check doesn't block publishing, since the browser preview already proved the shader compiles.
Field limits enforced alongside those checks: name 2 to 80 characters, description up to 2000, shader source 40 to 50,000 characters, up to 8 declared params, supply from 1 to 10,000 (default 256), and a price given as a decimal ETH string (default "0").
Publishing is a signature, not a transaction
Publishing costs no gas. Your wallet signs a short message binding your address to a timestamp, the server verifies that signature, and the collection is recorded as owned by the address that signed. The signature has to be recent (within ten minutes) or the server rejects it and asks you to sign again. Gas only enters the picture later, when someone mints a token from the collection.
Rate limits
Publishing a collection and generating a shader are both capped at 5 requests per minute per client; minting is capped at 20 per minute. Hitting a limit returns a 429 with a short wait-and-retry message rather than a hard failure.