System overview
Scenaven uses a hybrid architecture: native VTK simulation data lives on the server, lightweight USD surfaces stream to the browser, and Three.js renders the interactive viewport.
┌─────────────────────────────────────────────────────────────┐
│ Browser (Scenaven viewer) │
│ Three.js · scene tree · HUD · filters UI │
└───────────────────────────┬─────────────────────────────────┘
│ HTTPS (geometry, compile, upload)
┌───────────────────────────▼─────────────────────────────────┐
│ mesh-api (Python + VTK) │
│ Convert · filter · timeline · Python REPL │
└───────────────────────────┬─────────────────────────────────┘
│
┌─────────────┴─────────────┐
▼ ▼
Google Cloud (GCS) Local Docker volume
Why this split?
| Concern | Where it runs |
|---|---|
| VTK/HDF parsing, clip, warp, extract | mesh-api (server) |
| USD scene packaging for the client | mesh-api (server) |
| Camera, picking, colormaps, HUD | Browser (client) |
| Long-term storage of session assets | GCS or local volume |
The browser never loads full volumetric grids into WebGL. It requests renderable surface geometry and field metadata, keeping the viewport responsive even for large simulations.
Why Three.js and not WASM? See Why Three.js? for the comparison with Vu-Verse-style WebAssembly viewers.
Main components
Viewer (embed)
The production UI you interact with:
- Full-screen WebGL viewport
- Floating sidebar cards (Scene, Rendering, Filters, Viewport)
- Top HUD for alignment, tools, time, and file actions
- Agent rail for Python and amAIra (when enabled)
This bundle is served by viewer-ui — the same static app in cloud and on-prem Docker.
mesh-api
The simulation backend:
- Accepts uploads and converts VTK/HDF to session assets
- Serves geometry, timelines, and scene metadata
- Compiles clip, warp, and extract operations on the canonical VTK source
- Hosts a sandboxed Python REPL on the active session
Auth shell (optional)
A local sign-in page that embeds the viewer in an iframe and passes your AntiNode session to the embed. Most cloud users see this once at login; the embed itself handles visualization.
AntiNode
Provides identity and tenant orchestration for cloud deployments. Your session token authorizes upload, compile, and REPL calls to mesh-api.
One image, two runtimes
The same Docker image runs in:
| Mode | Storage | Typical user |
|---|---|---|
| Cloud | Google Cloud Storage per tenant | Hosted SaaS |
| On-prem | Bind-mounted /data/storage |
Isolated customer network |
Only environment variables and storage backends change — not the viewer or conversion logic.
Related topics
- Why Three.js? — WebGL vs WASM (Vu-Verse style)
- Data flow — what happens when you load, filter, or open an example
- Shell vs embed — sign-in host vs production viewer
- Cloud connection / On-prem connection