Open3DMap - Mapping the World, Together
Open3DMap is a community-driven initiative to build an open, GPS-anchored 3D mapping infrastructure for spatial computing. Our mission is to let anyone with a smartphone and a browser capture, process, train, share, and reuse high-fidelity 3D scans (Gaussian Splats) of the physical worldβstreets, parks, buildings, public spacesβwithout relying on closed platforms or proprietary ecosystems.
Every scan becomes part of a living digital twin: anchored with transparent metadata using our open SplatJSON format, freely exportable, and interoperable with tools like Unity, WebXR, and Cesium. From education and research to public art and civic planning, Open3DMap is designed to support open participation, long-term accessibility, and real-world utility.
We believe spatial computing should be public infrastructure. Open3DMap is how we build itβtogether.
This repository now includes the web portal and cloud processing we built:
- Web dashboard for scan management, conversion, and training
- COLMAP cloud pipeline via Firebase Functions with real-time streaming progress and health checks
- In-browser training powered by WebAssembly (Brush) and WebGPU
- Export and upload of trained Gaussian Splat results to cloud storage
We are continuing to support mobile capture and open standards alongside the web platform.
Legend: β = Available now, π = In active development, (unmarked) = Planned for future
1. Mobile Capture App
- β Real-time camera tracking using ARCore
- β GPS location tracking for outdoor scans
- π Open SplatJSON metadata export for every scan (in development)
- Integrated Gaussian splat rendering and real-time feedback
- Manual scan upload and contributor login flow
- Incremental scan extension to grow existing scenes
- Offline-first capture with later sync to cloud
- On-device suggestions for scan alignment and rescan prompts
- iOS version and cross-device consistency tooling
2. Cloud Processing & Metadata
- β User authentication and login system
- β Web-based scan upload and management
- β Reconstruction pipeline using COLMAP in Firebase Functions (16GiB RAM, 4 CPU, 60m timeout)
- β Parallel image downloads with retries; stage-by-stage streaming logs
- β Health check endpoint verifying COLMAP and dependencies
- Automatic SplatJSON generation with GPS anchoring and composability metadata
- Scene composability: support for merging overlapping scans into larger environments
- Privacy filtering (PII blurring, licensing tags)
- Incremental scan integration to extend and refine existing scans collaboratively
3. Web Portal and Dashboard
- β Dashboard with scan cards and contributor views
- β
Training modal integrated directly in
dashboard.html
- β βConvert with COLMAPβ then βTrain with Brushβ workflow
- β Real-time progress updates and final export (PLY)
- Map-based scan viewer and explorer
- Export options: .splat, .splatjson, .glb, .ply, .usdz, .obj
- Contributor-defined license controls (e.g., CC-BY, CC0)
- Spatial querying, filtering, and version history
4. Open Standards and Developer Access
- Public API for scan retrieval, query, and integration
- SDKs for Unity, WebXR, Cesium
- β SplatJSON specification (standardized, georeferenced scan metadata)
- GeoPose and OGC-aligned anchoring support for global interoperability
5. Governance and Community Tools
- Role-based contributor system (novice β steward)
- Transparent moderation tools (flag, audit, review)
- Reputation system and scan attribution
- Opt-in visibility and ethical scanning defaults
6. Import and Federation
- Import pipeline from Polycam, Luma, and Scaniverse
- Open adapters to convert proprietary formats into
.splatjson
- Federated hosting (museums, cities, collectives)
- Contributor-driven metadata overlays (annotations, stories, tours)
7. Discovery and Social Layer
- Public feed and scan activity heatmaps
- Followable mappers and region-based community hubs
- AR "Moments" from OpenStreetMap-style interface
- Collaborative collections and spatial storytelling layers
8. Temporal Maintenance
- Versioning and time-indexing for rescan comparison
- Change detection tooling (construction, decay, updates)
- Scheduled re-scan requests and community-driven update tasks
- Incremental scanning support to grow scenes over time while maintaining spatial consistency
At this stage, the repository includes the web portal for upload, conversion, and training, along with the cloud COLMAP pipeline and in-browser training. Mobile capture and standards continue to evolve in parallel.
Prerequisites
- Node.js 18+ (20+ recommended)
- Chrome 113+ with WebGPU/hardware acceleration enabled
- Rust +
wasm-pack
if you want to rebuild Brush WASM (prebuilt artifacts included)
Development
# From repo root
cd open3dmap-web
npm install
# Build Brush WASM (optional if using prebuilt)
node build-brush-wasm.js
# Start local server
node start-dev.js
Open:
- App:
http://localhost:3000/
- Dashboard:
http://localhost:3000/dashboard.html
- Brush Trainer:
http://localhost:3000/brush-trainer.html
Notes:
- If
js/firebase-config.js
is missing, the dev script will generate it viabuild-config.js
. - Prebuilt WASM artifacts are included:
brush_wasm.js
,brush_wasm_bg.wasm
(andbrush-wasm/pkg/
).
Training runs directly in the browser using WebGPU and a WebAssembly module (Brush).
Workflow
- Go to
dashboard.html
and select a scan - Click the magic wand (πͺ) to open the training modal
- If COLMAP results are missing, use βConvert with COLMAPβ first
- Start βTrain with Brushβ and watch live progress
- Download/export the trained PLY; results are uploaded to cloud storage
- Callable function
processCOLMAP
executes: download β feature extraction β matching β sparse reconstruction β upload - Enhanced parameters improve image registration rates across datasets
- Parallel downloads with retries; structured logging with timestamps
- Health check function validates COLMAP, cmake, python3, gcc
We are actively building out contributor workflows across web and mobile to:
- Log in via email-based authentication (mobile-first)
- Upload scans automatically to the cloud
- View and manage uploaded scans on the web
- Generate and maintain standardized SplatJSON metadata for integration
These features lay the groundwork for a seamless end-to-end contributor experienceβfrom capture to upload to public sharing.
The Open3DMap Android app allows capturing georeferenced image sequences and sensor data for downstream reconstruction, anchoring, and sharing.
- Real-time camera tracking using ARCore
- Automatic frame capture with quality assessment
- GPS location tracking for outdoor scans
- IMU data capture (accelerometer and gyroscope)
- Export functionality
- Scan management (rename, delete, export)
- Quality metrics for optimal capture
- Android device with ARCore support
- Android 8.0 (API level 26) or higher
- Google Play Services
- Camera and location permissions
- Storage permissions for exporting data
Option 1: Download APK (Recommended)
- Download the latest APK: Open3DMap APK
- Enable "Install from unknown sources" in your Android settings
- Install the downloaded APK
- Launch the app and grant necessary permissions
Option 2: Build from Source
- Clone the repository:
git clone https://github.com/x4dqn/Open3DMap.git
cd Open3DMap
-
Open the project in Android Studio:
- Open Android Studio
- Select "Open an existing project"
- Navigate to the
AndroidApp/Scanner
directory - Click "OK"
-
Build and run:
- Connect your Android device
- Select your device from the device list
- Click the "Run" button (green play icon)
- Wait for the app to install and launch
- Launch the app and grant the necessary permissions
- Press "Start Scan" to begin a new capture session
- Move your device slowly through the space:
- Keep the camera pointed at textured surfaces
- Capture several overlapping angles
- Maintain good lighting conditions
- Move at a walking pace
- Avoid rapid movements or rotations
- Press "Stop Scan" when finished
Open3DMaps/Exports/
βββ ScanName_YYYY-MM-DD_HH-mm/
βββ images/
β βββ frame_000.jpg
β βββ frame_001.jpg
β βββ ...
βββ metadata/
βββ transforms.json
βββ session_[ID].json
βββ scan_id.splatjson
- Export your scan from the app
- Copy the exported folder to your computer
- Convert your scan with COLMAP:
- Download COLMAP
- Follow their instructions for binary or CLI conversion
After converting, download the Brush binary Brush Releases Locate and extract the binary
- Run brush_app.exe
- Zip your COLMAP converted files
- Load the zipped file into Brush
The trainer supports interactive camera controls, splat rendering, and training metrics display.
After completing training, press the Export button below the splat renderer
Contributions are welcome! Please feel free to submit a Pull Request.
This project is licensed under CC BY-NC 4.0 - see the LICENSE file for details.
- ARCore team for the excellent tracking capabilities
- INRIA team for their work on 3D Gaussian Splatting
- ArthurBrussee for the incredible Brush
- All contributors and users of the project