Populating a scene with a believable crowd is one of the slowest parts of building historical or period environments. Hand-placing hundreds of characters is tedious, every clone looks identical unless someone manually varies costumes and colors one by one, and rendering that many detailed meshes usually tanks performance long before you hit a scene that actually feels full.
Genji composes, costumes, and simulates a crowd entirely in the browser. Pick a layout, dial in the character mix, and hundreds of NPCs spawn instantly — each with randomized height, garment color, and walking pace so nothing repeats. GPU instancing keeps it running at 60 fps from a handful of characters up to 10,000, with every setting live-tunable and nothing to install.
Character system
Every character shares one 72-joint skeleton — mix and match body, face, and hair independently, no per-outfit rigging.
11 body types × 10 faces × 9 hair/headwear styles, all bound to the same shared skeleton. One GLB download contains every part.
Laborers, merchants, soldiers, court officials, the emperor, Shaolin monks, Daoist sages, and wandering swordsmen — each with authentic costume variation.
8 idle variants plus a walk cycle, already retargeted to the shared skeleton. No animation rigging work on your end.
Garment color (HSL), skin tone, and hair color are set independently per character — no two NPCs in a crowd look identical.
Uniform scale jitter and animation phase offset per character keep a crowd from reading as cloned or lockstepped.
A lower-poly GLB variant ships alongside the full-detail skeleton — swap it in for distant characters with zero extra pipeline work.
Layout & composition
Five boundary shapes, procedural terrain, and deterministic seeding — the same recipe always produces the same crowd.
Circle for plazas, square for courtyards and markets, donut for coliseum and procession crowds with a clear center, road for a continuous linear flow, and spline for a custom path.
Fractal, smooth, or ridge noise generates rolling hills or dramatic peaks — every character automatically follows the ground height beneath them.
Scatter characters naturally within a zone, or lock them to a grid for a parade-ground look — switchable per recipe.
Every crowd is generated from a seed. The same seed always reproduces the exact same characters, positions, and colors — reproducible builds, easy QA, version-controllable scenes.
Crowd behavior
Every recipe carries real steering parameters, not just spawn points — the crowd actually behaves like one.
| Parameter | What it controls |
|---|---|
collisionRadius | NPC body size for avoidance — how close two characters can get before steering apart. |
personalSpace | Centering and path-following strength — how tightly characters stick to their intended route. |
anticipation | How early a character starts steering around an obstacle, from reacting on contact to planning ahead. |
obstacles[] | Static avoidance discs — drop props or terrain features the crowd routes around automatically. |
pace | Fraction of the crowd walking vs. standing idle, tunable from all-static to all-moving. |
walkSpeedMin / walkSpeedMax | Per-character speed range, so walkers don't move in lockstep. |
Performance & rendering
A simple path for a few hundred characters, and a GPU-instanced path that keeps scaling past a thousand.
Standard SkeletonUtils.clone() + one AnimationMixer per character. Simple to integrate, fine up to a few hundred characters on screen.
A single baked bone-matrix texture drives the whole crowd through one InstancedMesh per body/face/hair part — ≤36 draw calls total, regardless of crowd size. Ships with a reference SDK and a live demo.
Pick a boundary shape and size, then dial in the character mix — laborers, soldiers, monks, court officials, and more — as a percentage of the crowd.
Tune movement speed, collision and avoidance, and appearance variation live, watching the crowd update in real time as you drag each slider.
Hit Simulate to watch it walk, save it to your account, or pull the same crowd into Unity, Three.js, or any GLB-compatible engine via the API.
Background NPCs for open worlds and set pieces.
A crowd system without building one from scratch.
Background talent for previs and virtual sets.
Populate recreated cities, markets, and courts.
Eight character classes, each with authentic period costume variation — no other crowd tool starts here.
Workers & commoners
Traders & shopkeepers
Infantry & guards
Bureaucrats & scholars
Imperial dragon robes
Martial & monastic
Robed philosophers
Wandering warriors
Real clips from the live editor — not mockups.
Boundary shape
Circular crowd area — NPCs move freely within a round boundary. Set the boundary radius to size the space, and the spawn radius controls how tightly grouped they start out, so the same shape works for a small huddle or a sprawling plaza crowd. It's the default for a reason: fast to set up and reads naturally in almost any scene.
Boundary shape
Square crowd area — NPCs move freely within a rectangular boundary. Ideal for courtyards, market squares, and any layout where you need hard edges instead of a rounded footprint. Combine it with grid distribution for a parade-ground look, or random for a busy open-air market.
Boundary shape
Ring formation — NPCs orbit in a circular track between an inner and outer radius, leaving the center of the scene clear. Great for coliseum crowds, processions around a monument, or any composition where the focal point needs to stay open while people move around it.
Boundary shape
Linear road — NPCs walk along a corridor end to end and wrap around, so the flow never runs dry. Pair it with Single point distribution and the crowd-rate control to stream a continuous line of pedestrians through a street, hallway, or bridge at whatever pace the scene calls for.
Distribution
Spawn NPCs at random positions within the zone for a natural, scattered look — instead of a uniform grid. This is what sells a crowd as real rather than staged: no two clusters line up the same way twice, and reshuffling the seed instantly gives you a fresh arrangement to compare.
Surface
Procedural terrain with hills and valleys — NPCs automatically follow the height of the ground beneath them, no manual placement required. Choose fractal noise for organic rolling terrain, smooth for gentle slopes, or ridge for dramatic peaks, all tunable live without leaving the browser.
For developers
Every crowd is addressable by ID. Fetch it as JSON — per-character mesh IDs, positions, colors, animation state, and GLB URLs — and drop it straight into your own renderer.
One shared skeleton, 36 modular parts, deterministic seeded generation, and GPU-instanced rendering for crowds of 1000+. No rigging, no per-character animation work, no lock-in to the browser editor.
// One crowd, fetched by ID const res = await fetch('https://your-host/v1/crowd/cr_sample01', { headers: { Authorization: 'Bearer YOUR_KEY' } }); const { characters, assets } = await res.json(); // characters[] — body/face/hair IDs, position, rotation, // garment color, animation clip — every character distinct // assets.bone_tex_bin — GPU-instanced path for 1000+ crowds console.log(characters.length, 'NPCs ready to render');
11 bodies × 10 faces × 9 hair styles, all on a single shared rig. No per-outfit rigging.
Same seed, same crowd, every time — reproducible builds and easy QA.
≤36 draw calls for the whole crowd, regardless of size. Reference SDK included.
Collision avoidance, personal space, early steering, tunable walk-vs-idle pace.
Individual position, scale, garment color, skin tone, and animation phase — no clones.
Circle, square, donut, road, spline — plus procedural terrain height-following.
A lower-poly GLB ships alongside every crowd — swap it in for distant characters.
OpenAPI 3.0 spec, bilingual docs, and a working sample key baked into every response.
MCP server built in — Claude and Cursor can fetch and drive crowds mid-conversation.
Start free. Upgrade when your project grows.
Prices in RMB. Alipay and WeChat Pay accepted. Billed monthly, cancel anytime.