nemosyne
v1.1.0
Published
Data-native VR visualization framework for WebXR
Maintainers
Readme
Nemosyne
Data-Native VR Visualization Framework
"The data is the scene"
🌟 Overview
Nemosyne is a revolutionary data-native visualization system that automatically generates VR scenes from data topology. Instead of manually positioning elements, you provide data—and Nemosyne builds the optimal visualization.
Key Features
- 🎮 WebXR Ready - Runs in any VR headset via browser
- 🧠 Intelligent Layout - Automatic topology detection (9 types)
- ⚡ High Performance - 10,000+ nodes with Ammo.js physics
- 🔗 MemPalace Integration - Walk through your memories in VR
- 🎬 Time Animation - Scrub through temporal data
- 🎨 14 Visualizations - Graphs, timelines, globes, heatmaps, and more
🚀 Quick Start
# Clone the repository
git clone https://github.com/TsatsuAmable/nemosyne.git
cd nemosyne
# Serve with any static server
python3 -m http.server 8080
# Open in browser
open http://localhost:8080/examples/nemosyne-ecosystem-demo.htmlUsing with MemPalace
# Start MemPalace API
cd ~/.openclaw/workspace-main/mempalace-api
./start.sh
# Open Memory Explorer
open http://localhost:8080/examples/animated-memory-explorer.html📦 Installation
Via CDN
<script src="https://aframe.io/releases/1.4.0/aframe.min.js"></script>
<script src="https://cdn.jsdmirror.com/npm/[email protected]/ammo.js"></script>
<script src="path/to/nemosyne.min.js"></script>Via npm
npm install nemosyneimport 'nemosyne';🎯 Components
Core Visualizations (14 Components)
| Component | Topology | Best For |
|-----------|----------|----------|
| nemosyne-graph-force 🕸️ | Network | Social graphs, links |
| nemosyne-timeline-spiral 🌀 | Temporal | Event sequences, history |
| nemosyne-scatter-semantic 📊 | 2D/3D | Embeddings, clusters |
| nemosyne-tree-hierarchical 🌳 | Hierarchy | Org charts, taxonomies |
| nemosyne-geo-globe 🌍 | Geographic | Locations, routes |
| nemosyne-grid-categorical 📁 | Categorical | File systems, categories |
| nemosyne-heatmap-matrix 🔥 | Matrix | Correlations, intensity |
| nemosyne-crystal-field 💎 | Field | Scalar fields, heatmaps |
| nemosyne-tree-radial 🌞 | Sunburst | Hierarchical, proportions |
| nemosyne-stream-graph 🌊 | Temporal | Flow over time |
| nemosyne-circle-pack ⭕ | Hierarchy | Nested proportions |
| nemosyne-network-globe 🌐 | Geo-Network | Global connections |
Usage
<script src="src/artefacts/nemosyne-graph-force.js"></script>
<a-scene>
<a-entity nemosyne-graph-force="data: [...]; chargeStrength: -50"></a-entity>
</a-scene>🧠 Data-Native Architecture
Raw Data
↓
NemosyneDataPacket (identity + value + semantics + relations)
↓
TopologyDetector (score 9 topology types)
↓
LayoutEngine (position calculation)
↓
PropertyMapper (color, size, opacity)
↓
A-Frame Entity (rendered in VR)Example
// Your data
const data = {
nodes: [
{ id: 1, name: "AI Research", value: 100, category: "research" },
{ id: 2, name: "VR Project", value: 80, category: "project" }
],
links: [{ source: 1, target: 2, strength: 0.8 }]
};
// Auto-selects best visualization
const engine = new DataNativeEngine();
engine.loadData(data).render('#scene');🎮 Animation System
Temporal Scrubbing
Navigate through time in your data:
const scrubber = new TemporalScrubber({
playbackSpeed: 7, // days per second
loop: true
});
scrubber.loadFromMemPalace(connector);
scrubber.play(); // Watch your memories evolveUncertainty Visualization
Show confidence levels:
const viz = new UncertaintyVisualizer(scene);
viz.visualizeUncertainty(entity, {
confidence: 0.7,
type: 'pulse' // or 'flicker', 'ghost', 'cloud'
});🔗 MemPalace Integration
Connect to your memory palace:
const connector = new MemPalaceVRConnector({
baseUrl: 'http://localhost:8765',
wsUrl: 'ws://localhost:8766'
});
connector.connect();
connector.addEventListener('data-update', (e) => {
// Live updates when MemPalace changes
});Features:
- Real-time sync via WebSocket
- Spatial queries ("find memories near me")
- Time navigation ("jump to March 15th")
- Memory trails through time
⚡ Performance
Optimized for 10,000+ nodes:
- Ammo.js (Bullet Physics) WASM
- InstancedMesh rendering
- LOD (Level of Detail) system
- Sleep/wake physics optimization
- Frustum culling
| Metric | Target | Achieved | |--------|--------|----------| | Nodes | 10,000+ | ✅ 10,000 @ 30fps | | Memory | < 500MB | ✅ ~300MB @ 10k nodes | | Load Time | < 3s | ✅ ~2s for 5k nodes | | Physics | Real-time | ✅ 60hz simulation |
📚 Examples
Basic Graph
<a-entity nemosyne-graph-force="data: [...]"></a-entity>Timeline
<a-entity nemosyne-timeline-spiral="
data: [...]
timeField: timestamp
valueField: value
"></a-entity>Animated Memory Explorer
<a-scene>
<a-entity id="memory-viz"
position="0 1.6 -5">
</a-entity>
<!-- Time controls -->
<div id="scrubber-ui">
<input type="range" id="scrubber" min="0" max="100">
</div>
</a-scene>
<script>
const connector = new MemPalaceVRConnector();
const scrubber = new TemporalScrubber();
connector.connect().then(() => {
scrubber.loadFromMemPalace(connector);
});
</script>See examples/ for complete demos.
🛠️ Development
# Install dependencies
npm install
# Run dev server
npm run dev
# Build for production
npm run build
# Run tests
npm test🗺️ Roadmap
✅ Complete
- [x] Core data-native engine
- [x] 12+ visualization components
- [x] Ammo.js physics integration
- [x] Time animation system
- [x] MemPalace connector
🚧 In Progress
- [ ] npm package release
- [ ] Documentation site
- [ ] Mobile VR optimization
📋 Planned
- [ ] AR mode (WebXR hit-test)
- [ ] Voice control integration
- [ ] Collaborative sessions
- [ ] More visualizations (voronoi, beeswarm)
🤝 Contributing
Contributions welcome! Please read CONTRIBUTING.md.
# Fork and clone
git clone https://github.com/YOUR_USERNAME/nemosyne.git
# Create feature branch
git checkout -b feature/amazing-feature
# Commit changes
git commit -m "Add amazing feature"
# Push and open PR
git push origin feature/amazing-feature📝 License
MIT © Tsatsu Amable
🙏 Acknowledgments
Built with 💚 for data exploration in VR
