Files
roam/trmn.org
T
2026-06-17 07:36:46 +03:00

3.6 KiB

trmn

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 → trmn/life
  • NPC people: family tree + tracked friends/children, each with deterministic PersonRecord → trmn/people
  • Daily schedule: schedule.js — 96-slot day, 68 scenes, deterministic from (masterSeed, currentDay) → 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/trmn/llm
  • Assets: SVG face sprites + GLB objects → 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 → 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

  • trmn/llm — ONNX build pipeline, in-browser inference, TinyStories-8M gotchas
  • trmn/life — life simulation: PRNG, state schema, event catalog, packed buffer layout
  • trmn/assets — SVG sprite pipeline, GLB generation, face compositing
  • trmn/people — NPC system: family tree, PersonRecord, PRNG isolation, post-apply hooks
  • trmn/schedule — daily schedule: slot layout, scene catalog, life stages, forced events, debug CLI