How to verify an OpenSplat build/change actually works. This is the developer view (verify the software).
Current state (honest):
test/is a starter scaffold (unit tests fortensor_math, off by default). The authoritative checks today are CI (.github/workflows/, builds across backends) + a smoke run. Growing the harness + benchmark baselines is ongoing.
flowchart LR
B["1. Build green<br/>cmake + make"] --> U["2. Unit tests<br/>test/ (ctest)"]
U --> S["3. Smoke<br/>train tiny dataset"]
S --> O["4. Output valid<br/>.ply/.splat produced"]
O --> CI["5. CI<br/>all backends build"]
CI --> P["6. Benchmark ladder<br/>2→64 imgs (Phase 2)"]
scripts/build.sh --libtorch /path/to/libtorch --backend CPU # or MPS/CUDA/HIPBinaries land in output/ when built via scripts/build.sh (raw cmake uses build/). A
clean configure + build is the first bar after any structural change. After moving files, confirm build references stay consistent — see the verification
snippet in repo_organization.md.
scripts/build.sh --libtorch /path/to/libtorch --backend CPU -- -DOPENSPLAT_BUILD_TESTS=ON
ctest --test-dir build --output-on-failureOff by default (OPENSPLAT_BUILD_TESTS=OFF). Levels and conventions: ../test/README.md.
scripts/fetch_test_data.sh db/drjohnson # -> data/db/drjohnson
scripts/smoke.sh data/db/drjohnson 50Trains a few iterations and fails if no .ply/.splat output is produced. Trained splats
go to splat_output/ (run opensplat with -o splat_output/<name>.ply).
.github/workflows/ builds OpenSplat on Ubuntu (CPU/CUDA), macOS, Windows, and ROCm, plus a
Docker build. CI is the source of truth for "does it build everywhere" — a full multi-backend
build is not runnable on a single 16 GB dev machine.
The test suite runs in CI on a single matrix cell per OS (GitHub runners are
capacity-limited, so we don't test every torch version): ubuntu-cpu.yml builds and runs all
suites incl. integration; macos.yml runs the unit + regression suites on macOS 14
(Apple Silicon) and skips the heavier integration target. Both reuse the cell's already-built
LibTorch + ccache rather than spawning new jobs.
Test data comes from the project's Hugging Face dataset (COLMAP scenes). Because
OpenSplat trains on all images referenced by a scene's sparse model, valid N-image chunks
are generated with scripts/make_chunks.py (pycolmap) — not by copying files:
scripts/make_chunks.py data/db/drjohnson # -> data/chunks/drjohnson_{2,4,8,16,32,64}
for d in data/chunks/drjohnson_{2,4,8,16,32,64}; do scripts/benchmark.sh "$d" 2000; donebenchmark.sh writes runtime / peak RAM / backend to a local profiles/ dir. Runtime targets:
peak RAM ≤ 8 GB (ideal 4–6 GB), no thermal throttling, quality ≥ baseline, all backends green.
| Change | Minimum verification |
|---|---|
| Pure logic (math, parsing) | Add/extend a unit test in test/unit/ |
A dataset loader (src/io) |
Build + smoke on a dataset of that format |
Model / render (src/model, src/render) |
Build + smoke; eyeball output; benchmark vs baseline |
CMakeLists.txt / file moves |
repo_organization.md snippet + build + CI |
A rasterizer backend (rasterizer/) |
Build that backend + smoke; CI covers the others |