BeamNG.Earth
A 1:1 scale streamed Earth for BeamNG.drive: real elevation and satellite imagery, floating origin, LOD streaming from a companion server
PLAYBOUND — Prove the greybox. Then dress it. AI (Hyper3D Rodin) dresses designer-locked greybox levels without breaking gameplay. Tencent x Arcade AI Hackathon, Game Tech track.
Translation pending
GamesTypeScript · CSSGitHub @francescococciaOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
Prove the greybox. Then dress it.
AI that cannot break your level design.
Live: https://playbound-eta.vercel.app · Built for the Tencent × Arcade AI Hackathon (Cambridge, Oct 2026), Game Tech track.
Level designers block out levels with grey boxes to test gameplay, then wait weeks for art. Text-to-3D tools make one object at a time with no idea of the level. World generators invent a layout the designer never approved.
PLAYBOUND keeps the designer's layout as a contract, and puts AI at every step, always as a proposal the designer accepts or rejects:Read the full README ↗Prove the greybox. Then dress it. AI that cannot break your level design.
Live: https://playbound-eta.vercel.app · Built for the Tencent × Arcade AI Hackathon (Cambridge, Oct 2026), Game Tech track.
Level designers block out levels with grey boxes to test gameplay, then wait weeks for art. Text-to-3D tools make one object at a time with no idea of the level. World generators invent a layout the designer never approved.
PLAYBOUND keeps the designer's layout as a contract, and puts AI at every step, always as a proposal the designer accepts or rejects:
level.json + GLB models) for Unity, Unreal or Godot.src/core/prove/constants.ts.fitToVolume scales each one uniformly (plus at most 25% sideways stretch) to sit inside its box. Odd-shaped models leave some empty space in the box (fill 37–100% on the hero level).Requires Node 22+.
npm install
npm run dev # http://localhost:5173
npm test # Prove, line of sight, fit, dress, store, share and export tests (no network, no credits)
npm run build # typecheck + production build
Create a free key at https://aistudio.google.com and put it in .env (copy .env.example):
GEMINI_API_KEY=...
The dev server exposes /api/ai/* (sketch, style, command, fix). On Vercel the same handler runs as a function (api/ai/[action].ts); set GEMINI_API_KEY in the project's environment variables. The key never reaches the browser.
npm install --global @hyper3d/cli
hyper3d auth login # browser login; uses your account credits (~0.5 per model)
npm run dev # the dev server now exposes /api/rodin
With the dev server running, Dress generates any box that isn't prebaked (about 2 minutes each, 3 at a time), and Regenerate makes a new variant. Each model is downloaded, shrunk (~28 MB → ~1 MB with meshopt and WebP) and cached in public/assets/gen/ by a hash of (prompt, size, variant). The same request never spends credits twice.
npm run dev
npx tsx scripts/prebake.ts http://localhost:5173 # generate every dressable box of the presets
npx tsx scripts/prebake.ts --prune # remove models no preset uses
Then open /dev-viewer.html to see every model fitted inside its wireframe box.
| Part | Where |
|---|---|
| Level contract (types, coordinates) | src/core/types.ts |
| Market Square presets (fail / pass) | src/presets/marketSquare.ts |
| Prove: A* on a 0.5 m grid, line of sight + exposure heatmap, cover check | src/core/prove/ |
| Editing, AI proposals (accept / reject) | src/core/store.ts |
| AI co-designer: Gemini client, validation, suggest-fix agent loop | server/ai/, src/core/ai/, api/ai/ |
| Share links + local saves | src/core/share.ts |
| Shared collision (player and bot use the same boxes) | src/core/geometry.ts |
| Dress: prompt builder, queue, prebaked → live → error | src/core/dress/ |
| Fit any model inside its box | src/core/dress/fit.ts |
| Hyper3D CLI route, incl. image-to-3D (dev only) | server/rodinDevPlugin.ts |
| Export zip | src/core/export/exportLevel.ts |
| UI: three.js / react-three-fiber scene and panels | src/ui/ |
Stack: Vite, React 19, TypeScript, three.js, @react-three/fiber, drei, zustand, vitest, Gemini (REST), Hyper3D Rodin (CLI). Deployed on Vercel.
This was built by one person with two AI coding agents working in parallel: Claude Code on src/core, the server and deploy, and Cursor on src/ui. They coordinated through PLAN.md (task board and human feedback per milestone) and HANDOFF.md (append-only log).
| Time | Beat |
|---|---|
| 0:00 | A paper sketch of a market square → Sketch → level → ghost greybox → Accept |
| 0:20 | Prove → fails: death corridor, red route, heatmap of what the defenders see |
| 0:35 | Suggest fix → AI proposes a cart, Prove re-checks it → Accept → pass → Lock |
| 0:55 | Style image → AI style notes → Dress → Rodin models fill the boxes (each ~2 min live; prebaked here) |
| 1:25 | FPS walk; Show colliders: collision still matches the greybox; regenerate one prop live |
| 1:45 | Share link + Export zip. "AI that cannot break your level design." |