A free API by Mike Jones. Because the internet used to be fun. Drop in a script, get a little pixel village of traders, chefs, DJs, wizards, and one Mike Jones — all walking around, arguing about coffee, refusing to explain themselves.
An honest answer, for once.
Three ways in. Pick your power level.
<!-- paste this. that's it. go touch grass. --> <div id="village" style="position:relative;height:120px"></div> <script src="./js/addpeople.js" data-mount="#village" data-count="12" data-context="morning"></script>
const r = await fetch( `${window.__APBASE}/api/scene?people=9&context=morning` ); const scene = await r.json(); // scene.environment — sky, ground, accent, time // scene.people[] — id, archetype, outfit, activity // render however you want. we're not the boss of you.
const village = AddPeople.mount({ target: '#village', count: 12, context: 'night', tags: ['dj', 'dancer'] }); // the village reacts to live state village.setState({ busy: true, mood: 'high' });
All endpoints are GET, return JSON, send
Access-Control-Allow-Origin: *, and cache for 5 minutes.
Pass seed=N for deterministic output. Rate-limited because
even pixel people have dignity.
Turn the knobs. Watch the village rebuild. Same API calls you'd make from your own code.
A brief, unauthorized lineup.
Every archetype ships with its own animation. Chefs steam. Farmers wave. Traders check prices. Wizards do a thing that we can't describe without a lawyer.
Runs on one of Mike's boxes. Free, MIT-licensed, CORS-open. If you want to fork it, determinism-test it, or host your own copy on a Raspberry Pi in your closet — go nuts.
# the renderer curl ./js/addpeople.js > addpeople.js # catalogs (500 of each, free, unencumbered) curl ./data/people.json > people.json curl ./data/activities.json > activities.json curl ./data/environments.json > environments.json
# any static server works; routes are: # GET /api/scene?people=9&context=morning # GET /api/people?count=12&tags=chef # GET /api/activities # GET /api/environments # GET /api/vibe # GET /api/catalog # Express handlers in dashboard/server.js # ~100 lines. copy. paste. done.
☆ Privacy, plainly.