<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Nerfstudio on Producthunt daily</title>
        <link>https://producthunt.programnotes.cn/en/tags/nerfstudio/</link>
        <description>Recent content in Nerfstudio on Producthunt daily</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en</language>
        <lastBuildDate>Fri, 19 Sep 2025 15:28:23 +0800</lastBuildDate><atom:link href="https://producthunt.programnotes.cn/en/tags/nerfstudio/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>brush</title>
        <link>https://producthunt.programnotes.cn/en/p/brush/</link>
        <pubDate>Fri, 19 Sep 2025 15:28:23 +0800</pubDate>
        
        <guid>https://producthunt.programnotes.cn/en/p/brush/</guid>
        <description>&lt;img src="https://images.unsplash.com/photo-1676139524257-6b71166d737e?ixid=M3w0NjAwMjJ8MHwxfHJhbmRvbXx8fHx8fHx8fDE3NTgyNjY3ODh8&amp;ixlib=rb-4.1.0" alt="Featured image of post brush" /&gt;&lt;h1 id=&#34;arthurbrusseebrush&#34;&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/ArthurBrussee/brush&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;ArthurBrussee/brush&lt;/a&gt;
&lt;/h1&gt;&lt;h1 id=&#34;brush&#34;&gt;Brush
&lt;/h1&gt;&lt;p&gt;&lt;video src=https://github.com/user-attachments/assets/5756967a-846c-44cf-bde9-3ca4c86f1a4d&gt;A video showing various Brush features and scenes&lt;/video&gt;&lt;/p&gt;
&lt;p align=&#34;center&#34;&gt;
  &lt;i&gt;
    Massive thanks to &lt;a href=&#34;https://www.youtube.com/@gradeeterna&#34;&gt;@GradeEterna&lt;/a&gt; for the beautiful scenes
  &lt;/i&gt;
&lt;/p&gt;
&lt;p&gt;Brush is a 3D reconstruction engine using &lt;a class=&#34;link&#34; href=&#34;https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Gaussian splatting&lt;/a&gt;. It works on a wide range of systems: &lt;strong&gt;macOS/windows/linux&lt;/strong&gt;, &lt;strong&gt;AMD/Nvidia/Intel&lt;/strong&gt; cards, &lt;strong&gt;Android&lt;/strong&gt;, and in a &lt;strong&gt;browser&lt;/strong&gt;. To achieve this, it uses WebGPU compatible tech and the &lt;a class=&#34;link&#34; href=&#34;https://github.com/tracel-ai/burn&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Burn&lt;/a&gt; machine learning framework.&lt;/p&gt;
&lt;p&gt;Machine learning for real time rendering has tons of potential, but most ML tools don&amp;rsquo;t work well with it: Rendering requires realtime interactivity, usually involve dynamic shapes &amp;amp; computations, don&amp;rsquo;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.&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://arthurbrussee.github.io/brush-demo&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;strong&gt;Try the web demo&lt;/strong&gt; &lt;img src=&#34;https://cdn-icons-png.flaticon.com/256/888/888846.png&#34; alt=&#34;chrome logo&#34; width=&#34;24&#34;/&gt;
&lt;/a&gt;
&lt;em&gt;NOTE: Only works on Chrome and Edge. Firefox and Safari are hopefully supported soon)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://discord.gg/TbxJST2BbC&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://dcbadge.limes.pink/api/server/https://discord.gg/TbxJST2BbC&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1 id=&#34;features&#34;&gt;Features
&lt;/h1&gt;&lt;h2 id=&#34;training&#34;&gt;Training
&lt;/h2&gt;&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;It also supports masking images:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Images with transparency. This will force the final splat to match the transparency of the input.&lt;/li&gt;
&lt;li&gt;A folder of images called &amp;lsquo;masks&amp;rsquo;. This ignores parts of the image that are masked out.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;viewer&#34;&gt;Viewer
&lt;/h2&gt;&lt;p&gt;Brush also works well as a splat viewer, including on the web. It can load .ply &amp;amp; .compressed.ply files. You can stream in data from a URL (for a web app, simply append &lt;code&gt;?url=&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;Brush also can load .zip of splat files to display them as an animation, or a special ply that includes delta frames (see &lt;a class=&#34;link&#34; href=&#34;https://cat-4d.github.io/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;cat-4D&lt;/a&gt; and &lt;a class=&#34;link&#34; href=&#34;https://felixtaubner.github.io/cap4d/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Cap4D&lt;/a&gt;!).&lt;/p&gt;
&lt;h2 id=&#34;cli&#34;&gt;CLI
&lt;/h2&gt;&lt;p&gt;Brush can be used as a CLI. Run &lt;code&gt;brush --help&lt;/code&gt; to get an overview. Every CLI command can work with &lt;code&gt;--with-viewer&lt;/code&gt; which also opens the UI, for easy debugging.&lt;/p&gt;
&lt;h2 id=&#34;rerun&#34;&gt;Rerun
&lt;/h2&gt;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/user-attachments/assets/f679fec0-935d-4dd2-87e1-c301db9cdc2c&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/user-attachments/assets/f679fec0-935d-4dd2-87e1-c301db9cdc2c&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;While training, additional data can be visualized with the excellent &lt;a class=&#34;link&#34; href=&#34;https://rerun.io/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;rerun&lt;/a&gt;. To install rerun on your machine, please follow their &lt;a class=&#34;link&#34; href=&#34;https://rerun.io/docs/getting-started/installing-viewer&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;instructions&lt;/a&gt;. Open the ./brush_blueprint.rbl in the viewer for best results.&lt;/p&gt;
&lt;h2 id=&#34;building-brush&#34;&gt;Building Brush
&lt;/h2&gt;&lt;p&gt;First install rust 1.88+. You can run tests with &lt;code&gt;cargo test --all&lt;/code&gt;. Brush uses the wonderful &lt;a class=&#34;link&#34; href=&#34;https://rerun.io/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;rerun&lt;/a&gt; for additional visualizations while training, run &lt;code&gt;cargo install rerun-cli&lt;/code&gt; if you want to use it.&lt;/p&gt;
&lt;h3 id=&#34;windowsmacoslinux&#34;&gt;Windows/macOS/Linux
&lt;/h3&gt;&lt;p&gt;Simply &lt;code&gt;cargo run&lt;/code&gt; or &lt;code&gt;cargo run --release&lt;/code&gt; from the workspace root. Brush can also be used as a CLI, run &lt;code&gt;cargo run --release -- --help&lt;/code&gt; to use the CLI directly from source. See the notes about the CLI in the features section.&lt;/p&gt;
&lt;h3 id=&#34;web&#34;&gt;Web
&lt;/h3&gt;&lt;p&gt;Brush can be compiled to WASM. Run &lt;code&gt;npm run dev&lt;/code&gt; to start the demo website using Next.js, see the brush_nextjs directory.&lt;/p&gt;
&lt;p&gt;Brush uses &lt;a class=&#34;link&#34; href=&#34;https://rustwasm.github.io/wasm-bindgen/introduction.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;wasm-pack&lt;/code&gt;&lt;/a&gt; to build the WASM bundle. You can also use it without a bundler, see &lt;a class=&#34;link&#34; href=&#34;hhttps://rustwasm.github.io/wasm-bindgen/examples/without-a-bundler.html&#34; &gt;wasm-pack&amp;rsquo;s documentation&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;WebGPU is still an upcoming standard, and as such, only Chrome 134+ on Windows and macOS is currently supported.&lt;/p&gt;
&lt;h3 id=&#34;android&#34;&gt;Android
&lt;/h3&gt;&lt;p&gt;As a one time setup, make sure you have the Android SDK &amp;amp; NDK installed.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Check if ANDROID_NDK_HOME and ANDROID_HOME are set&lt;/li&gt;
&lt;li&gt;Add the Android target to rust &lt;code&gt;rustup target add aarch64-linux-android&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Install cargo-ndk to manage building a lib &lt;code&gt;cargo install cargo-ndk&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Each time you change the rust code, run&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;cargo ndk -t arm64-v8a -o crates/brush-app/app/src/main/jniLibs/ build&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Nb:  Nb, for best performance, build in release mode. This is separate
from the Android Studio app build configuration.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cargo ndk -t arm64-v8a -o crates/brush-app/app/src/main/jniLibs/  build --release&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can now either run the project from Android Studio (Android Studio does NOT build the rust code), or run it from the command line:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./gradlew build
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./gradlew installDebug
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;adb shell am start -n com.splats.app/.MainActivity
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;You can also open this folder as a project in Android Studio and run things from there. Nb: Running in Android Studio does &lt;em&gt;not&lt;/em&gt; rebuild the rust code automatically.&lt;/p&gt;
&lt;h2 id=&#34;benchmarks&#34;&gt;Benchmarks
&lt;/h2&gt;&lt;p&gt;Rendering and training are generally faster than gsplat. You can run benchmarks of some of the kernels using &lt;code&gt;cargo bench&lt;/code&gt;.&lt;/p&gt;
&lt;h1 id=&#34;acknowledgements&#34;&gt;Acknowledgements
&lt;/h1&gt;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/nerfstudio-project/gsplat&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;strong&gt;gSplat&lt;/strong&gt;&lt;/a&gt;, for their reference version of the kernels&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Peter Hedman, George Kopanas &amp;amp; Bernhard Kerbl&lt;/strong&gt;, for the many discussions &amp;amp; pointers.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Burn team&lt;/strong&gt;, for help &amp;amp; improvements to Burn along the way&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Raph Levien&lt;/strong&gt;, for the &lt;a class=&#34;link&#34; href=&#34;https://github.com/googlefonts/compute-shader-101/pull/31&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;original version&lt;/a&gt; of the GPU radix sort.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;GradeEterna&lt;/strong&gt;, for feedback and their scenes.&lt;/p&gt;
&lt;h1 id=&#34;disclaimer&#34;&gt;Disclaimer
&lt;/h1&gt;&lt;p&gt;This is &lt;em&gt;not&lt;/em&gt; an official Google product. This repository is a forked public version of &lt;a class=&#34;link&#34; href=&#34;https://github.com/google-research/google-research/tree/master/brush_splat&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;the google-research repository&lt;/a&gt;&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
