mrkeyoor.com_
Tue 01 Sept 17:40 UTC
AI Toolsevaluationupdated 27 Aug 2026

brush review

Brush is a 3D reconstruction engine that trains and displays Gaussian splats from photo datasets. It aims to put the same workflow on desktop GPUs, Android devices, and supported WebGPU browsers without tying the application to CUDA.

+21 / 4dstars / 7d
Verdict

Our Brush install took 14 seconds, but its web build failed after 7 seconds at the wasm-pack command, so the browser path needs more preparation than npm install suggests. Try Brush if cross-platform Gaussian-splat training and an interactive viewer are worth accepting a young toolchain and narrower browser support. Choose a CUDA-centered research stack when repeatable experiments or a mature Python ecosystem matters more than deployment range.

We ran it

Lab card: what happened when we ran brushScreenshot of brush (github.com/ArthurBrussee/brush)
Install✓ · 14s102 packages · 192 MB
Build✗ · 7s
Testsn/ano test script
Known vulns00 critical · 0 high · 0 moderate · 0 low (npm audit)
Repo236 files~31,838 lines of source · 49.9 MB · 3 CI workflows

Answers from our run

Does brush build from source?

Dependencies installed in 14 seconds (102 packages), and the build failed. We cloned commit 8b7f5c6 into a clean Debian container with 3 CPUs and no project-specific setup.

Does brush have tests you can run?

Not through a standard command: the project exposes no test script or target that our harness could run.

Does brush have known vulnerabilities in its dependencies?

npm audit found none in the dependency tree at the time of our run.

Who should not use brush?

Safari or Firefox web deployments: the README limits web support to Chrome 134 or newer on Windows and macOS, and calls Firefox and Safari hoped-for support.

What are the alternatives to brush?

gsplat, Nerfstudio, 3D Gaussian Splatting. Our Brush install took 14 seconds, but its web build failed after 7 seconds at the wasm-pack command, so the browser path needs more preparation than npm install suggests.

Setup2/5102 packages installed, but the wasm-pack build exited 127
Docs3/5Native, web, and Android paths are covered, with setup gaps
Community4/54,993 stars with issue and pull request activity in August 2026
Maturity3/5Active code, but browser limits and open correctness reports remain

Discussed on

  1. hnBrush – A new compatible Gaussian splatting engine178 points

Who it’s for

3D developers who want one Rust engine for Gaussian-splat training and viewing.
Researchers who need interactive training with COLMAP or Nerfstudio datasets.
Web developers targeting Chrome or Edge with a WASM viewer or trainer.
Teams shipping a viewer across AMD, Nvidia, Intel, desktop, and Android hardware.

Who it’s NOT for

Safari or Firefox web deployments: the README limits web support to Chrome 134 or newer on Windows and macOS, and calls Firefox and Safari hoped-for support.
Teams that require repeatable training from a fixed seed: open issue 525 reports different models from three runs with seed 42, although the reporter used a redistributed v0.3.0 binary and labels the cause unconfirmed.
Multi-camera evaluation pipelines that cannot tolerate overwritten output: issue 516 reports 24 renders collapsing to 3 files when camera folders reuse basenames; an open pull request proposes a path-preserving fix.
iOS teams expecting a ready Xcode project: open issue 27 asks for that setup, while the README documents Android instead.

Setup reality

Our sandbox installed 102 npm packages in 14 seconds and used 192 MB. The build failed after 7 seconds with exit 127 at wasm-pack build .. --release --target bundler --out-dir web/pkg. The repository exposes no npm test script or target, so tests were skipped. Npm audit found 0 known vulnerabilities.

The README's native path requires Rust 1.88 or newer. Web work also uses WASM, wasm-pack, Vite, and a WebGPU-capable browser. Training expects COLMAP data or a Nerfstudio-format dataset; Android builds add the SDK, NDK, Rust target, cargo-ndk, Gradle, and manual native-library steps.

The npm workspace is only the web build path, not the whole Rust application. Browser support is documented as Chrome 134 or newer on Windows and macOS. Android Studio does not rebuild the Rust library automatically, and optional Rerun visualization has its own installation.

One engine trains and displays Gaussian splats across several platforms

Brush turns COLMAP or Nerfstudio photo datasets into Gaussian-splat scenes, then lets you inspect training while it runs. The same project also loads regular and compressed PLY files, streams scenes from URLs, and plays zipped splat sequences as animation. Its appeal is architectural: the Rust engine uses Burn and WebGPU-compatible technology to cover desktop GPUs, Android, and the browser instead of making CUDA the only useful route.

That range sits inside a substantial codebase. Our commit 8b7f5c6 checkout contained 236 files, about 31,838 lines of source, and occupied 49.9 MB before installation. The repository is a monorepo with Rust application code plus two npm web workspaces. A team can use the command line with an optional viewer, build the full application, or embed the JavaScript-facing package. Those are different delivery paths, so a successful web demo does not prove that an Android or native build is ready for your machines.

Chrome 134 gets the web path, while Safari and Firefox wait

The browser claim has a sharp boundary. The README says the current WASM build supports Chrome 134 or newer on Windows and macOS. Its demo note names Chrome and Edge, while Firefox and Safari support is something the author hopes to add. That makes Brush interesting for a controlled internal viewer or a kiosk where the browser is fixed. It is a poor foundation for a public upload tool that promises equal behavior across whatever browser a customer opens.

Our repository scan found 3 CI workflow files and no Dockerfile. The README covers cargo run --release, npm run dev, and Android commands, but each route brings its own tools. Android needs the SDK, NDK, an added Rust target, cargo-ndk, and a separate native build before Gradle. Android Studio does not rebuild that Rust code automatically. The optional Rerun view is another installation, useful during training but separate from Brush itself.

What happened when we ran it

Our sandbox installed 102 npm packages in 14 seconds, leaving 192 MB on disk. The checkout used a fresh unprivileged Debian container with 3 CPUs, 8 GB of RAM, Node 22, and no secrets. Npm audit reported 0 known vulnerabilities across all severity levels. Installation therefore worked as given; the next step did not.

The build stopped after 7 seconds with exit 127. Its log shows the brush-app-web workspace running wasm-pack build .. --release --target bundler --out-dir web/pkg, followed by failure of npm run build:wasm-release and the Vite build chain. The tail does not identify any deeper cause, so we would not pin this on Rust, WebGPU, or the application source. It does show that the root npm build was not self-contained in this clean Node image.

There was no npm test script or target to run, so our harness skipped tests. That is narrower than saying Brush has no tests: the README tells native developers to run cargo test --all, while our supplied measurement covers the npm workflow only. The practical result is still weak for a web adopter. We got neither a completed bundle nor a test result from the root package command at commit 8b7f5c6.

Fixed-seed training has an open reproducibility report

Issue 525 deserves attention from anyone using Brush for controlled experiments. The reporter ran three trials with seed 42 and received three different models. Five unseeded trials also fell into two outcome groups. The report is careful about its limits: it used a Brush 0.3.0 binary redistributed inside another application, and its proposed explanation is explicitly a hypothesis. This is evidence to reproduce on your own hardware, not proof that current main behaves the same way.

The 31,838-line checkout gives researchers room to inspect the training path, and the README exposes kernel benchmarks through Cargo. Our lab did not run those benchmarks or train a scene, so we make no speed or quality claim. If repeatability affects a paper or a production acceptance threshold, run several fixed-seed jobs on the exact backend you intend to use and compare the exported splat counts and held-out renders before standardizing on Brush.

Multi-camera evaluation can lose files with repeated basenames

Issue 516 reports a more concrete output problem on a COLMAP rig. Eight camera folders reused station filenames, and the evaluation save path discarded the folder names. The reporter expected 24 images at an evaluation point and found 3 because later renders overwrote earlier ones. Pull request 523 proposes retaining the relative path, but it remained open when checked. A multi-camera team should test that case or carry the fix before trusting saved evaluation sets.

The repository was pushed on August 17, 2026, and GitHub listed 46 combined issues and pull requests. Issue 525 was opened and updated on August 25, which shows current user activity even though the latest tagged release, v0.3.0, dates to September 14, 2025. The release is old relative to main, yet the push and issue record do not support calling the project abandoned. Pinning a commit is safer than assuming the release represents recent fixes.

Brush is easiest to justify when platform range decides the choice

Brush offers something the reference CUDA implementation does not: one project that treats native, mobile, and browser use as first-class goals. Interactive training, masking, PLY viewing, URL streaming, and animation playback make it more than a research kernel. Apache-2.0 licensing also leaves room for product integration. The cost is a platform matrix whose rough edges arrive early, including the failed 7-second web build in our sandbox and manual Android native steps.

For an Nvidia-only research environment, gsplat or the original Gaussian Splatting implementation will be easier to compare with existing Python work. Brush earns a trial when deployment on AMD, Intel, Android, or WebGPU is the requirement that would otherwise block the project. Keep that trial narrow: reproduce the build, train the same scene more than once, inspect saved evaluation files, and verify the exact browsers you promise to support.

Alternatives

ProjectWhat it isPick it when
gsplatA CUDA-accelerated library for Gaussian-splat rasterization and training components.pick this instead when Nvidia CUDA performance and a Python research stack matter more than Brush's platform range.
NerfstudioA Python toolkit for training, inspecting, and comparing neural scene representations.pick this instead when experiment tooling and a broader research workflow matter more than a small cross-platform binary.
3D Gaussian SplattingThe reference implementation associated with the original 3D Gaussian Splatting work.pick this instead when reproducing the reference method is the goal and its CUDA-centered setup is acceptable.

What people are saying

  1. [github-trending] ArthurBrussee/brush

Sources

  1. Brush README
  2. Brush repository metadata
  3. Brush v0.3.0 release
  4. Issue 525: fixed-seed training reproducibility report
  5. Issue 516: evaluation render filename collisions
  6. Issue 27: iOS project setup request

More ai tools reviews

claudian · SkillSpector · robin · mjlab · MoGe · awesome-design-md · the whole board →