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.
Key claims
Section titled “Key claims”- 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
.plyand.compressed.plysplats from a URL (?url=…) and can load a zipped sequence of.plyfiles or a delta-encoded.plyto display animations — explicitly citing CAT4D and Cap4D as supported formats [README §Viewer]. - Reported “rendering and training are generally faster than gsplat,” with
cargo benchexposing 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].
Method
Section titled “Method”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).
Results
Section titled “Results”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.
Why it’s interesting
Section titled “Why it’s interesting”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.
See also
Section titled “See also”- PlayCanvas Engine integrates Gracia 4D Gaussian Splatting on the web (Will Eastcott announcement) — PlayCanvas/Gracia 4DGS integration; the web-engine consumer of the same splat primitive Brush trains
- NeoVerse: Enhancing 4D World Model with in-the-wild Monocular Videos — feed-forward 4DGS world model whose outputs Brush can in principle load and play back
- Test-Time Training Done Right (LaCT) — LaCT NVS, which reports beating 3DGS rendering quality at the same view scale; Brush is a portable 3DGS baseline
- HY-World 2.0: A Multi-Modal World Model for Reconstructing, Generating, and Simulating 3D Worlds — uses a
gsplat-variant differentiable renderer; Brush is an alternative renderer with the same primitives - Reshoot-Anything: A Self-Supervised Model for In-the-Wild Video Reshooting — in-the-wild monocular video → reshooting, a use case that benefits from cheap 3DGS reconstruction on commodity devices