Brushtool 2.0 Plugin: Clone and place models onto your map with ease

Brushtool 2.0

Since the previous iteration of Brushtool was clunky and prone to breaking, I felt that a rewrite was necessary. Here’s a totally-not-rehearsed demo:

Changes from the previous version

  1. More placement settings. Two new settings were added: Scale and Wobble. Scale resizes the object your brushing with (duh) and Wobble rotates the model in the x- and z-axis.
  2. Two new modes: Stamp and Erase. Stamp lets you to place models one by one. Erase is pretty self-explanatory.
  3. Ignore water and ignore transparent. If working near bodies of water was a huge pain with the previous iteration of the plugin, then fear no more.
  4. Per-object settings. You can set the placement settings of each object individually instead of having them share the same settings.
  5. Dark theme support. Also the UI is like 1000x better.
  6. Team create support. The previous version of the plugin broke very badly when multiple users were using the plugin in team create. Now, each team member can have their own settings. No more stepping on each other’s toes!
  7. Removed the ignore list function. It’s a con, but it’s worth mentioning. Keeping track of the ignore list through sessions is hard and was a huge source of bugs and clunkyness in the previous version, so I removed it. I might add this back, but without the ability to save it across sessions. Maybe.

Get it here (if you have an old version of it, then update the plugin!):

I used Roact and Rodux to write the plugin. I also stole borrowed some code/libraries from the built-in toolbox plugin.


This looks like an awesome upgrade compared to the last! I’ll be sure to bookmark this and check it out later. Keep up the awesome work!

1 Like

Oh my hecking yes.
Gonna make my life of Terrain work so much easier. 1.0 Didnt have all these fun settings. :+1:

this looks cool and all but do we need to assign a primarypart for every model?

This occurs every time I press “Click to Start.” Both pictures are from the same Output. Had to scroll.

It crashes my viewport and Brushtool widget but nothing else.

1 Like

Not anymore. I should have mentioned that. It uses the model’s bounding box as the center by default. If the model has a primary part, then you can set it to use that instead:


BLESS :pray::pray::pray::pray::pray: :sob:

now im definitely downloading this, thanks for letting me know!!!

Weird. Can you try again, but this time can you make sure that you have nothing selected before stating the plugin?

EDIT: I found the cuprit. Since workspace technically inherits from model, my plugin tries to make a thumbnail for it but cant. Whoops. Selecting workspace triggers the bug. Very bad, must be a change I made recently :frowning:

I didn’t have workspace selected, but reinstalling Studio fixed it. I was getting a similar error with another plugin that also works now.

In any case, tyvm for alerting me because this was really a bug:

1 Like

im really enjoying this plugin! awesome work!!

1 Like

Hey, @XAXA here’s a suggestion!

What about a feature to install brushes through plugins? Rather than through a part? The latter can still be an option, but for permanent brushes, I think having separate brushes that other developers could publish and upload. My plugin, Redshift Arena SDK has this feature. Would definitely be something I’d look into! :slight_smile:

Can you explain step-by-step how a typical user would “install brushes through plugins”? The way you worded it sounds confusing.

My apologies. :joy:

I’ll explain how my plugin does it.
My plugin creates a new folder under Coregui called “Redshift_Arena_SDK_Third_Party_Assets.” This is where all “installed” assets will go. For each asset pack to be compatible with my SDK, they’ll need a loader script that has this code:

local SDKTPA = game.CoreGui:WaitForChild("Redshift_Arena_SDK_Third_Party_Assets")
local asset = script.Asset:Clone()
asset.Parent = SDKTPA

Then in Redshift Arena SDK, it’ll scan for items within the folder that the asset created. It’ll categorize them based on if they’re a part, model, decal, etc, and put them in a GUI within the SDK, where players can insert them.

This could be something to be done with your brush plugin since you already have two default assets that developers have by default.

I was looking for more of how a user would include an asset pack and how a user would create and share one, not how you implemented it.

They’d install the asset packs as plugins.

1 Like

Eh, I’m rejecting it for several reasons:

  • It would clutter a user’s list of plugins.
  • Users can just bundle assets as a free model if they’re so inclined.
  • I don’t see a whole lot of people using this feature since it requires knowing how to create and publish a plugin and knowing how to script it such that it injects assets into a certain folder.
  • There’s some implementation details that would make this difficult.
1 Like

This could still be done without the use of plugins, but I prefer doing it through plugins since the developer themselves don’t really need to do anything other than install something.

This plugin is great! It makes it easy to build my tree for a scene I’m making.

(Ignore the mouse offset, my recorder wack)

There are however many features I wish were added but of all of them, I wish there was an import/export button

Me and a friend were using Team Create to build some trees and the brush objects were cleared (which was expected). Of course I could always send him the original brush objects but then there are also some brush settings that need to be transferred.

Hope you take into account my suggestion


Any chance a clamp to axis would be added?

Use case: Map already has trees or objects placed on it but still needs grass. This currently would place grass on the sides of a trees bounding box rather than going through it. I’m assuming that’s what the ignore feature did before you removed it, but I feel like this would be a cheap fix in most scenarios.

Awesome plugin, solid design. Thanks for your contribution to developers :+1: