-
Notifications
You must be signed in to change notification settings - Fork 0
Architecture Overview
tsatsuamable edited this page Apr 10, 2026
·
1 revision
Nemosyne transforms data into immersive VR experiences through a sophisticated pipeline.
βββββββββββββββ βββββββββββββββ βββββββββββββββ βββββββββββββββ
β Raw Data ββββββΆβ Nemosyne ββββββΆβ A-Frame ββββββΆβ Display β
β (JSON/CSV) β β Core β β Scene β β (VR/2D) β
βββββββββββββββ ββββββββ¬βββββββ βββββββββββββββ βββββββββββββββ
β
ββββββββΌβββββββ
β Datumplane β
β (3D Space) β
ββββββββ¬βββββββ
β
ββββββββββββββΌβββββββββββββ
β β β
βΌ βΌ βΌ
βββββββββββ ββββββββββββ ββββββββββββ
β Layout β β Transformβ β Behaviourβ
β Engine β β Engine β β Engine β
ββββββ¬βββββ ββββββ¬ββββββ ββββββ¬ββββββ
ββββββββββββββΌβββββββββββββ
βΌ
ββββββββββββββββ
β Three.js/ β
β WebGL β
ββββββββββββββββ
The central orchestrator that manages the VR scene and component lifecycle.
Responsibilities:
- Initialize and configure the VR environment
- Register and manage artefacts
- Handle data updates and synchronization
- Coordinate between layout, transform, and behaviour engines
Calculates spatial positions for data elements using 7 algorithms:
- Grid (O(n))
- Radial (O(n))
- Timeline (O(n log n))
- Spiral (O(n))
- Tree (O(n))
- Force (O(nΒ²))
- Scatter (O(n))
Maps data values to visual properties using a declarative DSL:
- Scale transforms (linear, log)
- Color transforms (ordinal, threshold)
- Position transforms (time, custom functions)
Manages interactivity and animations:
- Hover/click handlers
- Idle animations
- Data-update reactions
- Custom behaviour registration
Ammo.js integration for realistic dynamics:
- Rigid body simulation
- Collision detection
- Force fields
[Data Source]
β
[Validation] β Schema enforcement
β
[Transformation] β Scale, normalize, map
β
[Layout] β Calculate positions
β
[Rendering] β Create Three.js meshes
β
[Interaction] β Events, behaviours, physics
β
[Update] β Live data sync
Artefact (abstract base)
βββ PrimitiveArtefact
β βββ Crystal
β βββ Sphere
β βββ Pillar
β βββ Ring
βββ CompositeArtefact
β βββ Node (with connections)
β βββ Cluster
βββ SpecialArtefact
βββ Shrike
βββ Farcaster
βββ TemplarTree
- Instanced Mesh Rendering - Batch identical geometries
- LOD System - Reduce detail with distance
- Frustum Culling - Skip off-screen objects
- Object Pooling - Reuse DOM/WebGL objects
- Batch Updates - Group transforms into single render call
- Physics Sleeping - Pause simulation for static objects
| Metric | Target | Achieved |
|---|---|---|
| Nodes | 10,000+ | β @ 60fps |
| Memory | < 500MB | β ~300MB |
| Load Time | < 3s | β ~2s |
Nemosyne is designed for extensibility:
class MyArtefact extends Artefact {
createMesh() {
// Custom Three.js geometry
}
}
Nemosyne.registerArtefact('my-custom', MyArtefact);Nemosyne.registerLayout('my-layout', {
calculate: (records, options) => {
// Return position array
}
});Nemosyne.registerTransform('my-transform', {
apply: (value, options) => {
// Return transformed value
}
});| Layer | Technology |
|---|---|
| Rendering | Three.js, WebGL 2.0 |
| VR Framework | A-Frame |
| Physics | Ammo.js (Bullet) |
| Layout | D3.js algorithms |
| Build | Vite, Rollup |
| Testing | Vitest |
| Docs | VitePress |