# antics models 3D assets built in code with antics-modelkit. Every model ships the RECIPE that generates it, so you can change the numbers and rebuild rather than editing a mesh. ## Finding one GET https://antics.gg/api/models?q=&limit=<1-100>&cursor= Returns { models: [...], nextCursor }. Pass nextCursor back as cursor for the next page; null means the end. q matches names, summaries and PART names (e.g. "coil_r1c2"). This is the enumeration endpoint — this file never lists models, so it stays the same size however many there are. ## Using one Every model has the same four URLs, where comes from the search above: https://antics.gg/m/ the page, for a human https://antics.gg/m//llms.txt these instructions, for you https://antics.gg/m//model.glb the asset https://antics.gg/m//recipe.mjs the code that generates it (MIT) Fetch /llms.txt and follow it. The one rule that matters: load the .glb at runtime, never rebuild the geometry on the page. ## Building one Models are built in code, not modelled by hand. You write a module that exports one function per asset; each returns its parts, already named. npm i antics-modelkit three // models.mjs import { box, sit } from "antics-modelkit"; export function crate(w = 0.6) { return { category: "prop", parts: [ { name: "body", geometry: sit(box(w, w, w)), color: 0x8a6b45 }, ] }; } `box`, `sit`, `lathe`, `sweep`, `extrude`, `merge` and the rest COME WITH THE PACKAGE — do not reimplement them. The full vocabulary is the package's own README, and `src/loft.js` carries the traps in its comments; read both before writing anything. Most objects are a profile spun about an axis (`lathe`) or a section swept along a curve (`sweep`/`ribbon`) rather than a pile of boxes. npx modelkit build # check it, write dist/*.glb npx modelkit preview # a PNG in half a second — LOOK at it npx modelkit preview --card # the 1200x630 share card The build refuses inverted winding and invalid glTF, strips degenerate triangles and reports holes, floating parts and z-fighting. The .glb it writes is plain glTF: it opens in Godot, Unity, Unreal or three.js, and nothing from the kit ships with your game. ## Publishing one Then POST https://antics.gg/api/models with a bearer token: { name, summary, glb, recipe, licence, sources, kitVersion, image } glb and image are base64; recipe is the models module as text, published under MIT so the numbers can be changed. sources is what the asset was DERIVED from — [] only if it is genuinely original, which is a claim a human cannot see in a mesh. A human reviews every submission; nothing is public or indexed until then. GET https://antics.gg/api/models/mine what you published, and its status PUT https://antics.gg/api/models/ replace the asset, KEEPING the URL POST https://antics.gg/api/models//demo attach an interactive demo Replace, never republish: a second publish mints a second URL and the link you already shared goes stale. ## Licences The recipe is always MIT. The asset is CC0-1.0, CC-BY-4.0 or CC-BY-SA-4.0, stated per model on its page and in its llms.txt. Nothing here re-runs a recipe to confirm it produces its asset — that pairing is the publisher's word.