Getting started
celworld is a procedural, cel-shaded world engine. Every model and scene is a short script that Claude writes and your browser compiles from a seed. This is the path from nothing to your own game.
What you write
Everything in celworld is a script. There are three kinds:
| Kind | What it is | How it's written |
|---|---|---|
| Models | Critters, machines, furniture, landmarks, vehicles: anything in the library | A .cel script, usually 20 to 70 lines |
| Scenes | Living dioramas: towns, carnivals, harbours, offices, dungeons | A .scene script that names models and lays them out by structure |
| Generators | People, trees, bushes, rocks, props, buildings | Hand-coded TypeScript in the engine; scenes use them as built-ins |
Claude writes the models and scenes. A Claude Code session follows these docs, drives the cel command line, looks at its own screenshots and keeps going until the thing is right. You can write them by hand too: the language is small and the Playground compiles as you type. To read a script someone else wrote, paste it into Explain: every line gets a plain-English card linked to the live render, with any error pinned to its line and what to change.
One art style, for free
Every script compiles to the same primitives (lathes with superellipse sections, balls, limbs, rounded boxes, cones, tori), the same toon materials (three hard light bands and a thin rim) and the same plum ink outlines. There is no shader to pick and no texture to paint. A model that compiles is already on-style, and it sits next to every other model in the library without looking borrowed.
The look is a switch, not a rewrite. Cel is the default; Diorama and Papercraft draw the same seeds, models and scenes as soft daylight on a floating island, or as cut and folded card in a pop-up book.
Seed, spec, geometry, instance
Every thing in celworld is built one way:
| Stage | What it is | Touches the GPU |
|---|---|---|
| Seed | A 32-bit number. Same seed, same thing, forever | No |
| Spec | Versioned pure data: compileCel(src, seed), resolveScene(prog, …), generateCharacter(seed) | No |
| Geometry | One merged, vertex-coloured mesh per ink class | Yes |
| Instance | Shared toon materials, ink outlines, procedural motion | Yes |
A .cel script is a family, not a single model. Every seed grows a different, equally good variant: a..b draws a number, red:3|teal|cobalt picks a colour by weight, chance(.4) decides whether a part exists. Pin a model version and a seed, and you get the same thing back years later.
A model, start to finish
This is the fox cub from the reference set: a body, four legs, a face, a chained tail, idle motion and a walk state, in 32 lines with comments.
Open it in the Playground and press the grid button: seeds 1 to 9 grow nine different cubs from the same lines.
The loop
Write, check, look, save. Each step is one command, run from the repo root with the site up on its dev port:
bun run dev # the site; cel shot and cel thumb render through it bun run cel catalogue # what already exists: library models and built-ins bun run cel agent start --label "Tiny Harbor: 3 models + scene" # opens a run; prints its id bun run cel scene new tiny_harbor --template beach # a scene skeleton that checks clean as written bun run cel check path/to/model.cel # until 0 must-fix bun run cel shot model --file path/to/model.cel --out shots/model.png # look at it, fix, repeat bun run cel save path/to/model.cel --agent <run> --new --prompt "<the brief>" bun run cel scene check packages/engine/src/scene/scripts/tiny_harbor.scene bun run cel scene save packages/engine/src/scene/scripts/tiny_harbor.scene --agent <run> --prompt "<the brief>" bun run cel shot scene tiny_harbor --out shots/tiny_harbor.png
Reuse beats making. Built-in generators and existing library models are approved and ready; search the catalogue for your scene's nouns before you write anything new.
Where to next
- Writing a .cel model: the anatomy, kinds, budgets, motion, faces and the mistakes everyone makes once
- Writing a .scene: templates, layout by footprint, life, lights, interiors
- The cel CLI: every command, in the order you use them
- Build a game: the renderer, the art table, saves, and Fold-Up Factory as the worked example
- Engine laws: the rules that keep saved seeds stable and pages fast
- Language reference: every kind, key, preset and palette name, generated from the compiler
Access
celworld is proprietary. The engine, the model and scene library, the cel tools and these docs live in a private repository, and nothing here is open source. Access is by arrangement. The guide on these pages is the same one the models, scenes and games on this site were built with.