Skip to content

Brush: 3D Reconstruction for All via Gaussian Splatting

Brush is a portable 3D Gaussian Splatting reconstruction engine that trains and renders splats on macOS / Windows / Linux, on AMD / NVIDIA / Intel GPUs, on Android, and in a Chrome/Edge browser via WebGPU. It is written in Rust on top of the Burn ML framework rather than CUDA, so the resulting binaries are small and dependency-free. The author is Arthur Brussee (formerly Google Research); the repo is explicitly a public fork of the internal google-research/google-research/brush_splat codebase. Practically, it makes 3DGS training and viewing accessible on any device a Luma researcher already has on their desk.

  • Brush trains and renders 3DGS on desktop OSes, three GPU vendors, Android, and inside a WebGPU browser, from a single Rust + Burn codebase [README §Features].
  • Brush accepts COLMAP and Nerfstudio-format datasets, and supports image-transparency masks plus a separate masks/ folder to exclude regions from training [README §Training].
  • Brush can stream .ply and .compressed.ply splats from a URL (?url=…) and can load a zipped sequence of .ply files or a delta-encoded .ply to display animations — explicitly citing CAT4D and Cap4D as supported formats [README §Viewer].
  • Reported “rendering and training are generally faster than gsplat,” with cargo bench exposing kernel benchmarks; no numerical headline is given in the README [README §Benchmarks].
  • Brush is not an official Google product; the repo is a public fork of google-research/google-research/brush_splat, but @googleresearch tweeted the CVPR 2025 booth demo [README §Disclaimer; pointer tweet].

The engine is built on Burn, a Rust-native ML framework with WebGPU as one of its backends. Every 3DGS kernel (projection, tile rasterizer, gradient computation, radix sort) is implemented in WGSL/Burn so the same code runs on all supported targets without CUDA. The original GPU radix sort is credited to Raph Levien’s compute-shader-101; the reference kernels to gSplat. Training emits live previews to the Rerun viewer for debugging. There is a CLI mode (brush --with-viewer opens the UI for inspection while a CLI command runs), an Android app shell that loads the Rust code as a native lib, and a Next.js web app that embeds a wasm-pack-built WASM bundle. Web target requires Chrome 134+ on Windows/macOS (Firefox / Safari not yet supported, per README).

No quantitative benchmarks beyond the prose claim of “generally faster than gsplat” — cargo bench is exposed for users to measure specific kernels locally. The visible deliverables are: (a) the runnable web demo at arthurbrussee.github.io/brush-demo, (b) the CLI / desktop / Android binaries built from the same source, and (c) the WASM bundle for embedding the viewer in third-party web apps.

For Luma the headline is the portability: 3DGS training in the browser without any custom plugin lowers the floor for sharing scenes with researchers, artists, and partners. Brush also slots cleanly alongside PlayCanvas Engine integrates Gracia 4D Gaussian Splatting on the web (Will Eastcott announcement) (PlayCanvas integrating Gracia’s 4DGS) as part of a coherent “splats as first-class web content” story — Brush handles the train/view side, PlayCanvas the relight/composite side. The animation playback path (delta-encoded .ply, plus zip-of-plys) explicitly targets 4DGS workflows like NeoVerse: Enhancing 4D World Model with in-the-wild Monocular Videos and Cap4D, so a generated 4D Gaussian field can in principle be inspected end-to-end on a phone. Brush also gives the Test-Time Training Done Right (LaCT) LaCT comparison (which beats 3DGS on DL3DV rendering quality) a concrete baseline implementation a researcher can run locally without a GPU cluster.