FluxSpace turns raw field captures into interactive 3D visualizations you can explore in the browser. The pipeline is simple: upload a zip, let the worker process it, then view the results.
.zip fileA run represents a single zipped capture folder exported from the FluxSpace capture rig (Raspberry Pi + OAK-D RGBD camera + optional magnetometer). The zip typically contains raw sensor data, images, and metadata from a field session.
run_20260115_1430.zip
├── metadata.json # session info, timestamps, sensor config
├── images/ # RGBD frames from OAK-D
│ ├── 000001_rgb.png
│ ├── 000001_depth.png
│ └── ...
├── imu/ # IMU readings (optional)
│ └── imu.csv
└── mag/ # magnetometer readings (optional)
└── mag.csvNavigate to /dashboard/runs/new and drag your .zip file onto the dropzone. Maximum file size is 1 GB.
Supabase Free plan limits individual objects to 50 MB. FluxSpace handles this automatically: files larger than 50 MB are split into <49 MB binary chunks, uploaded as separate parts, and tracked by a manifest. The worker reassembles the original zip before processing.
runs-raw bucketruns/<runId>/upload/
├── manifest.json # part list, sizes, original filename
└── parts/
├── part_00001.bin # raw byte chunk 1
├── part_00002.bin # raw byte chunk 2
└── ...Resume support: If your browser disconnects mid-upload, re-select the same file. FluxSpace detects the partial upload and offers to resume, skipping completed parts.
Cancel & retry: You can cancel at any time. Completed parts are preserved for when you retry.
After upload, a background Python worker picks up the run and executes the fluxspace-core pipeline. Heavy compute runs outside of the web server on a dedicated worker instance.
The worker downloads the manifest and all parts from private storage, reassembles them into the original zip, extracts it, and validates the contents.
RGBD frames are fused into a 3D surface mesh. If magnetometer data is present, a magnetic heatmap mesh is generated and aligned to the surface.
The worker writes viewer assets (manifest.json, scene.glb, optional heatmap.glb) and any additional export files back to private storage, then marks the run as done.
When processing completes, the following assets are available:
manifest.json, scene.glb, and optional heatmap.glb loaded by the in-browser 3D viewerpipeline.log with timestamped processing detailsThe viewer is a Three.js scene that loads GLB models via short-lived signed URLs. No plugins or desktop software required.
Each run progresses through a well-defined set of states:
uploaded → queued → processing → exporting → done
↘ ↘
failed failedAll data is stored in three private Supabase Storage buckets:
Buckets are private. All browser access uses short-lived signed URLs generated server-side after ownership verification.
Maximum 1 GB per zip upload. Supabase Free plan limits individual objects to 50 MB, so FluxSpace automatically splits larger files into <49 MB parts. Contact support for larger datasets.
Re-select the same file and FluxSpace will detect the partial upload. Click “Resume” to continue from where you left off — completed parts are skipped.
Typical processing time is 2–10 minutes depending on the number of frames and sensor data included in the run.
No. The magnetometer is optional. Without it, you still get a 3D surface mesh from the RGBD data; the heatmap overlay will simply be absent.
Yes. GLB files, export artifacts, and the pipeline log are all downloadable from the run detail page once processing completes.
To test the chunked upload pipeline locally:
npm run devruns/<runId>/upload/parts/manifest.json exists at runs/<runId>/upload/manifest.json