Skip to content
Projects

codepawl/crucible has 661 GitHub stars and 51 forks. GitHot measured +32 stars in 24 hours. Last checked 2026-11-15 14:46 UTC. Last push 2026-11-15.

How these counts are measured

Measured star growth

in 24h
+32
in 7 days
Collecting history
in 15 days
Collecting history
in 1 month
Collecting history

Net star changes over overlapping periods, not daily totals. Missing measurements are left blank. Stars measure attention, not software quality.

About

3D engine that AI agents drive

Creative & Media

README.md

Original

67js: 3D engine that AI agents drive, over a Bistro street rendered by it

npm version License: MIT Node.js 20.19 or later MCP server for agents

67js is a WebGL2 renderer with addons for terrain, vegetation, characters, liquid, vehicles and media export. A scene is plain data: each part has a geometry, a matrix and a material. An agent builds and changes a scene through an MCP server, looks at PNG previews and renders stills or MP4 video. The goal is to be as capable as Blender and as light as three.js. docs/goal.md defines each part. See the showcase, the documentation, the guide for agents and the changelog. The FAQ answers common questions.

Showcase

Each picture below is a 67js render. The linked ones open live in the browser.

Airport ramp AI data center Container port
An airport ramp with an airliner at its stand and the turnaround crew A cutaway AI data center hall A container port with cranes and stacked containers
Bistro cafe corner Bistro plaza
A green corner restaurant with red awnings and a blue scooter in the Bistro scene A large plane tree in a hedged circle on a Bistro plaza

Install

Let your agent do it. Paste this prompt into Claude Code, Codex, Cursor, Gemini CLI or OpenCode. The agent installs the package, reads the guide and connects the MCP server.

Install 67js from npm as `67js@npm:@codepawlhq/67js` and connect its MCP server with `npx 67js-mcp`. Read
https://67js.codepawl.com/llms.txt first and follow it.

Claude Code plugin. One command adds the MCP server and both skills. The server starts from the published npm package with npx, so nothing is built locally.

/plugin marketplace add codepawl/67.js
/plugin install 67js@67js

By hand

npm install 67js@npm:@codepawlhq/67js

The registry name is @codepawlhq/67js. The command installs it under the alias 67js, so imports stay short. The package is ESM. The tools need Node.js 20.19 or later, and rendering needs a WebGL2 browser.

Quick start

import { Renderer67, box, sphere } from '67js';

// Column-major 4x4 matrix: scale, then move.
const placed = ([x, y, z], [width, height, depth] = [1, 1, 1]) =>
  new Float32Array([width, 0, 0, 0, 0, height, 0, 0, 0, 0, depth, 0, x, y, z, 1]);

const parts = [
  {
    name: 'Floor',
    geometry: box(),
    matrix: placed([0, 0, 0], [8, 0.1, 8]),
    material: { color: [0.4, 0.42, 0.45], metallic: 0, roughness: 0.9, emission: 0 },
  },
  {
    name: 'Ball',
    geometry: sphere(48, 24),
    matrix: placed([0, 1, 0]),
    material: { color: [0.8, 0.3, 0.2], metallic: 0, roughness: 0.35, emission: 0 },
  },
];

const canvas = document.querySelector('canvas');
const renderer = new Renderer67(canvas, parts, { samples: 4, memoryBudgetMiB: 256 });
renderer.render({ eye: [4, 3, 6], target: [0, 1, 0] });

Call renderer.updateParts(parts) to move or recolour parts without a new upload. Call renderer.resize() after the canvas changes size, and renderer.dispose() before you replace the renderer. The guide covers cameras, lights, effects and every material field. To save a PNG from a script, use the render-from-a-script recipe.

For agents

The package includes an MCP server that connects an agent to a persistent browser renderer. The server needs a local Chrome installation.

npx 67js-mcp --backend gpu --memory 192

Use --backend cpu on a machine without a GPU. With bun, bunx 67js-mcp takes the same flags; CI runs the packaged server under bun on every pull request. An agent authors a JSON recipe, sets lights and fog, imports GLB assets and adds motion. It gets PNG previews back, compares up to four views in a review grid and runs render jobs for stills and MP4 video. The server accepts no arbitrary code and no remote asset URLs. The MCP reference lists its tools.

Two skills teach an agent to drive the MCP tools: build-67js-scene for scenes and materials, and render-67js-media for image and video export. For a plain-text guide, give the agent llms.txt.

viz3d uses 67js. It is a skill that turns places, systems and events into 3D apps and films, and it renders its films and stills in 67js. To add it in Claude Code, run /plugin marketplace add codepawl/viz3d, then /plugin install visualize-in-3d@codepawl.

Addons

Each addon is a separate import, so a page loads only what it uses.

Area Import Guide
Lighting 67js/addons/hdri Image-based lighting from .hdr files
Terrain 67js/addons/terrain, 67js/addons/texture-set Chunked terrain with scanned ground layers
Vegetation 67js/addons/vegetation, 67js/addons/grass, 67js/addons/clutter Trees, grass and ground clutter with wind and level of detail
Characters 67js/addons/gltf, 67js/addons/retarget, 67js/addons/skeleton-pose glTF import, clip retargeting and pose layers with IK
Liquid 67js/addons/spume Baked liquid playback with refraction and spray
Vehicles 67js/addons/vehicle Wheeled vehicles on a path
Physics 67js/addons/physics Rapier contacts and joints recorded into a timeline
Live games 67js/addons/runtime Game loop with fixed or variable steps and pluggable systems
Live games 67js/addons/input Input: keyboard, mouse, gamepad, touch, device motion, replay and custom sources mapped to named actions and axes
Live games 67js/addons/streaming Streaming: loader plugins, distance and request loading, a byte budget with LRU eviction and LOD with hysteresis
Live games 67js/addons/netcode Netcode: server or host authority, pluggable transports, delta snapshots, client prediction with reconciliation and remote interpolation
Live games 67js/addons/physics-runtime Live physics: a physics world stepped in the game loop, contact and sensor events, ray, shape and overlap queries
Live games 67js/addons/physics-jolt Jolt engine: a second engine for live physics, with the same events and queries; needs the optional jolt-physics package
Live games 67js/addons/audio Spatial audio: sounds on nodes, played from contacts, markers and input, with buses and a limiter
Live games 67js/addons/animation-graph Animation graph: states, 1D and 2D blend spaces, parameter transitions with crossfades and masked layers for any rig
Live games 67js/addons/player Player: character, vehicle and flight controllers, follow, first-person, top-down, orbit, chase and side-scroller camera rigs with wall pull-in, custom kinds, swappable at runtime
Live games 67js/addons/game-rules Game rules: a JSON rule document of variables, triggers and actions, played as a runtime system
Live games 67js/addons/game Game: a scene recipe with a game section played in a page, and the scene_export_web MCP tool that writes it as a static web build
Modeling 67js/addons/mesh, 67js/addons/modeling, 67js/addons/sculpt Mesh editing, modeling and sculpt brushes
Offline light 67js/addons/path-tracer, 67js/addons/light-bake Path-traced stills and baked lightmaps
Post passes 67js/addons/user-pass Your own full-screen GLSL passes: dither, pixel downscale, quantise
Agents 67js/addons/agent-scene, 67js/addons/agent-asset Scene sessions with revisions and checkpoints

The documentation page lists every guide.

Render images and video

The render command exports a scene to PNG or MP4 through headless Chrome, on the GPU or on the CPU.

npm run render -- --kind image --scene nature --backend gpu --preset high --output artifacts/nature.png

Video export streams one frame at a time, so a film never sits in memory. The render skill lists every preset and flag.

Run the site locally

  1. Install Node.js 22.12 or later.
  2. Run npm ci.
  3. Run npm run dev. Vite prints the local URL.

Performance claims

verification.md has the measured results and their limits. They compare matching scenes on the same hardware. They do not show a general speed advantage over three.js or visual parity with Blender.

Contributing

Read CONTRIBUTING.md before you open a pull request. It covers setup, checks, code style and the release flow. Coding agents start with AGENTS.md, and npm run preflight runs the pull request checks locally. Questions and bug reports: SUPPORT.md.

Credits

  • gl-matrix supplies the matrix math.
  • The glTF addon has its own parser. The Draco, meshopt and KTX2 decoders are three.js loaders that you pass in.
  • The textures and the HDRI on the site are CC0 scans from Poly Haven and ambientCG. See the texture credits.
  • The Bistro renders use Amazon Lumberyard Bistro (CC BY 4.0, from the NVIDIA ORCA library) under a CC0 Poly Haven sky.
  • The showcase models and their sources are listed in each world's scene.json under public/showcase/.
  • The banner wordmark uses Sora (SIL Open Font License).

License

MIT © CodePawl