52 lines
3.6 KiB
Org Mode
52 lines
3.6 KiB
Org Mode
:PROPERTIES:
|
|
:ID: 6293baa2-c8a8-4c49-9284-1fa2eed75032
|
|
:END:
|
|
|
|
#+title: trmn
|
|
#+filetags: :project: :knowledge:
|
|
|
|
** Architecture
|
|
Static site (no backend). ~index.html~ + ~life.js~ + ~schedule.js~ as ES modules. Three.js + onnxruntime-web from CDN.
|
|
Served by Caddy via ~nix run~ on port 8080. Built by ~nix build~ (includes model weights in ~$out/model/~).
|
|
|
|
Domains:
|
|
- *Life generation*: ~life.js~ — deterministic 36,500-day procedural simulation → [[id:9465af82-4383-466c-bf09-5be19c328f0b][trmn/life]]
|
|
- *NPC people*: family tree + tracked friends/children, each with deterministic PersonRecord → [[id:423cac95-a80d-4db6-8bef-14297fb38437][trmn/people]]
|
|
- *Daily schedule*: ~schedule.js~ — 96-slot day, 68 scenes, deterministic from (masterSeed, currentDay) → [[id:ff8aa6b7-61ff-444c-9301-c0b666b0b573][trmn/schedule]]
|
|
- *Rendering*: Three.js low-poly 3D scenes, flat shading, cinematic 2.39:1 viewport
|
|
- *LLM dialogue*: TinyStories-8M ONNX INT8 bundled in ~/model/TinyStories-8M/~ → [[id:4b44cf43-6106-4498-81a3-b23ebb25dabf][trmn/llm]]
|
|
- *Assets*: SVG face sprites + GLB objects → [[id:4d5e6bc8-32eb-469f-a69f-84b14458c55b][trmn/assets]]
|
|
|
|
~window.__life~ exposes ~{traits, buf, eventLog, people, today, currentDay, masterSeed, schedule}~.
|
|
|
|
** Conventions
|
|
- Determinism: ALL randomness seeded from absolute time, never ~Math.random()~; use ~makeRng(masterSeed, day)~
|
|
- Low-poly aesthetic: ~MeshLambertMaterial~ with ~flatShading: true~, BoxGeometry for characters
|
|
- Cinematic viewport: ~aspect-ratio: 2.39/1~, FOV 26°, vignette via CSS ~::after~
|
|
- Scene background via CSS gradient on ~#stage~ div; canvas is ~alpha: true~
|
|
- Static assets: copy to ~$out/assets/~ in flake installPhase; generated assets built via Node.js in buildPhase
|
|
|
|
** Gotchas
|
|
- ~header Content-Type text/html~ in Caddyfile is wrong for multi-asset setups — omit it
|
|
- ~MeshFlatMaterial~ does not exist; use ~MeshLambertMaterial { flatShading: true }~
|
|
- ~onnxruntime-web~ must be a ~<script>~ tag (global), NOT an ES module importmap entry
|
|
- Never spread ~buf~ (Float32Array) in a loop — hangs browser; index directly with ~buf[d * FIELDS + F.X]~
|
|
- Nix flake ~src = ./.~ only includes git-tracked files → ~git add~ new dirs before ~nix build~
|
|
- eventLog entries are ~{id, personId?, attended?}~ objects, not plain strings — use ~e.id~ not ~e~
|
|
- All ONNX build/inference gotchas → [[id:4b44cf43-6106-4498-81a3-b23ebb25dabf][trmn/llm]]
|
|
|
|
** Key Files
|
|
- ~index.html~ — Three.js scene + LLM inference + life simulation bootstrap (three inline module scripts)
|
|
- ~life.js~ — full life simulation: PRNG, 31 events, 36,501-day loop, NPC people system
|
|
- ~schedule.js~ — daily schedule: 68-scene catalog, 10 life stages, forced-event overrides
|
|
- ~schedule-debug.mjs~ — CLI debug tool; ~nix run .#schedule -- [flags]~
|
|
- ~stats.mjs~ — aggregate stats across 1000 lives; ~nix run .#stats~
|
|
- ~flake.nix~ — build + Caddy server + ~tinyStoriesOnnx~ sub-derivation + ~stats~ + ~schedule~ apps
|
|
|
|
** Subnodes
|
|
- [[id:4b44cf43-6106-4498-81a3-b23ebb25dabf][trmn/llm]] — ONNX build pipeline, in-browser inference, TinyStories-8M gotchas
|
|
- [[id:9465af82-4383-466c-bf09-5be19c328f0b][trmn/life]] — life simulation: PRNG, state schema, event catalog, packed buffer layout
|
|
- [[id:4d5e6bc8-32eb-469f-a69f-84b14458c55b][trmn/assets]] — SVG sprite pipeline, GLB generation, face compositing
|
|
- [[id:423cac95-a80d-4db6-8bef-14297fb38437][trmn/people]] — NPC system: family tree, PersonRecord, PRNG isolation, post-apply hooks
|
|
- [[id:ff8aa6b7-61ff-444c-9301-c0b666b0b573][trmn/schedule]] — daily schedule: slot layout, scene catalog, life stages, forced events, debug CLI
|