ArthurBrussee /brush

3D Reconstruction for all

★ 5,247⑂ 343👁 64▤ 3
RustCreated 2024-02-24
5,247
stars
+0+4+95
343
forks
64
watchers
–
prs
–
issues
3
releases
–
discussions

README

Brush

A video showing various Brush features and scenes


  
    Massive thanks to @GradeEterna for the beautiful scenes
  


Brush is a 3D reconstruction engine using Gaussian splatting. It works on a wide range of systems: macOS/windows/linux, AMD/Nvidia/Intel cards, Android, and in a browser. To achieve this, it uses WebGPU compatible tech and the Burn machine learning framework.

Machine learning for real time rendering has tons of potential, but most ML tools don't work well with it: Rendering requires realtime interactivity, usually involve dynamic shapes & computations, don't run on most platforms, and it can be cumbersome to ship apps with large CUDA deps. Brush on the other hand produces simple dependency free binaries, runs on nearly all devices, without any setup.

Try the web demo 

_NOTE: Only works on Chrome and Edge. Firefox and Safari are hopefully supported soon)_



 Features

 Training

Brush takes in COLMAP data or datasets in the Nerfstudio format. Training is fully supported natively, on mobile, and in a browser. While training you can interact with the scene and see the training dynamics live, and compare the current rendering to input views as the training progresses.

It also supports masking images:
- Images with transparency. This will force the final splat to match the transparency of the input.
- A folder of images called 'masks'. This ignores parts of the image that are masked out.
  Black pixels in the mask are ignored, white pixels are kept. Pass --invert-masks if your masks are the other way around.

 Viewer
Brush also works well as a splat viewer, including on the web. It can load .ply & .compressed.ply files. You can stream in data from a URL (for a web app, simply append ?url=).

Brush also can load .zip of splat files to display them as an animation, or a special ply that includes delta frames (see cat-4D and Cap4D!).

 CLI
Brush can be used as a CLI. Run brush --help to get an overview. Every CLI command can work with --with-viewer which also opens the UI, for easy debugging.

 Rerun

https://github.com/user-attachments/assets/f679fec0-935d-4dd2-87e1-c301db9cdc2c

While training, additional data can be visualized with the excellent rerun. To install rerun on your machine, please follow their instructions. Open the ./brush_blueprint.rbl in the viewer for best results.

 Building Brush
First install rust 1.88+. You can run tests with cargo test --all. Brush uses the wonderful rerun for additional visualizations while training, run cargo install rerun-cli if you want to use it.

 Windows/macOS/Linux
Use cargo run --release from the workspace root to make an optimized build. Use cargo run to run a debug build. 

 Web
Brush can be compiled to WASM. Run npm run dev to start the demo website using Next.js, see the web directory in app/brush-app/web.

Brush uses wasm-pack to build the WASM bundle. You can also use it without a bundler, see wasm-pack's documentation.

WebGPU is still an upcoming standard, and as such

Snapshot: 2026-11-04T14:00:00Z · Data license Apache-2.0 · JSON