Eastin Weight Tools

Eastin Weight Tools is a free great addon for speeding up manual weighting. Sometimes Blender’s automatic weighting system doesn’t get it quite right and you just want to do it yourself instead of tinkering with it or when weight painting is too imprecise. In comes Weight Tools. With some simple but great features, you can quickly get your model weighted just the way you want!

Weight Gradient

Easily gradiate from one weight to another by simply selecting an edge loop between them. Weight Tools automatically assigns weights to the vertices in-between them. You can decide between a linear algorithm or one based upon length .

Linear Example:

Length Example:

You can also have two options when it comes to the range of vertices affected. Selection only applies weights to those vertices that are selected. Parallel (all) will gradiate the edge loops as well.

Quick Weights

Quick Weights is for easily assigning evenly spaced weights. If in Edit Mode clicking on one of the numbers will assign that weight to selected vertices. If in Object Mode it will assign that weight to all vertices regardless of selection.

Changing the Denom (inator) number will change what buttons are shown. Think of it as the bottom number in a fraction (the denominator). 2 will show the decimals for 0/2 (0.0),1/2 (0.5), 2/2 (1.0). 5 will show the decimals fro 0/5 (0.0), 1/5 (0.2), 2/5 (0.4), 3/5 (0.6), 4/5 (0.8), 5/5 (1.0).

Remove 0’s will remove all 0 weightings from weight groups so that if you need to select the vertices in any weight group it won’t select those with 0 weights.

Select By Weight

Select By Weight allows you to do just that, select all vertices that match the condition with respect to the set weight. The panel is laid out as a linear sentence to help think about what you’re selecting. Select (operator button) if ( greater than or equal to, greater than, equal to, lesser than, lesser than or equal to) the Weight to Select (put in weight).

Copy Paste

This panel will copy weights from one group to another. There are multiple ways to paste the weights though.

  • Replace: Replace the weight of each vertex with copied weight
  • Invert: Paste 1 - copied weight | 1-CW=Inverted Weight
  • Add: Add copied weight to vertex weight = CW+VW
  • Average: Add copied weight and vertex weight divided by 2 | (CW+VW)/2
  • Subtract: Subtract copied weight from vertex weight | VW-CW
  • Normalize: Pasted weights are divided by the sum of all vertex weights per vertex | PW/(Sum of all weight layers + PW)
  • Weighted Normalize: Same as Normalize (f) but active weight layer is prioritized (not reduced) — EFFECTS ALL WEIGHT LAYERS, NOT JUST ACTIVE

Recursive Blend: Find all weight layers that begin with active weight layer’s name and copy and paste each one of those layers onto active according to paste mode (replace, invert, add, subtract, etc.)

Copy Nearest: For each selected vertex find the nearest unselected vertex and copy its weight onto the selected vertex


This panel is to help you find vertices that when the sum of all of its weights from all of its weight groups is greater than 1. Hitting Select will select all of those non-normalized vertices. Clicking on the Debug toggle will show you all of the vertices that are not normailzed in a list. In the list the numbers correspond to the vertex index and clicking on them will select that vertex. Clicking the ’ X ’ next to it will remove the vertex from the list.

Other Operators

Blender’s built-in operators placed in this panel for easy access:

  • Show Weights - a toggle to show the vertex weights on the mesh in Edit Mode
  • Invert - Invert selected vertices
  • Smooth - Smooth selected vertices
  • Copy - Copy active vertex weight onto selected vertices
  • Mirror - Mirror vertex group, flip weights and/or names, editing only selected vertices, flipping when both sides are selected otherwise copy from unselected

Normalize - Blender has a built-in Normalize operator but this one works a little differently. Normalize will make sure the sum of all weights from all vertex groups assigned to each selected vertex add up to 1. This will keep the ratio of weights though, so if you have weights such as 1, 0.75, 0.5, 0.25 assigned to a vertex those weights will become 0.4, 0.3, 0.2, 0.1 respectfully. The weights now add up to 1 and their importance to that vertex is kept.

Weighted Normalize - Same as Normalize but the active weight group’s weights are kept and considered the most important. So back to our example if we have weights such as 1, 0.75, 0.5, 0.25 with 0.75 as the active group’s weight those weights will become ~0.14, 0.75, ~0.07, ~0.04 respectfully. if 1 was the active group’s weight those weights will become 1, 0, 0, 0.

Blender Market: https://blendermarket.com/products/eastin-weight-tools
Gumroad link: https://gum.co/tukDb


May want to change the name for archiving purposes and marketability. There is a similar paid addon on the market “Weight Paint Tools” Easy enough to distinguish the two, but Eatin’s Weight Tools, has such a magical sound.

1 Like

Works this with blender 2.82 Alpha :grinning:

1 Like

Good to know! I hadn’t even thought about testing it with 2.82 yet! Thanks!

Wow, this addon is amazing…
Thanks for it. It´s helping me a lot!!!

1 Like

It sounds really really promising!

I’m so glad to hear that! It really helped my workflow out too! It’s great knowing others can benefit from it too!

1 Like

You can change the Wight painting using the Edit object view, and all the tools to select points to paint.

It also has a smooth option the “relaxes” the weight…
I dont have words to describe it.

I liked it so much that I just bought the blender market version of it :wink:

And I´ll put my rating over there…

1 Like

I’ve noticed that I could also help you, as you helped me. So I bought the blendermarket version and added my rating over there.

Please keep up the great job.
Do you have a twwitter account?
I wanted to spread the word about your addon over there. (and link to you)

1 Like

Oh dang, that’s really great of you! My twitter handle is @Zacitone. I don’t post much but you’re welcome to link me!

after using some weight paint addons, this is my go to weight adjust swiss army knife.
it is so easy to use in mesh edit mode, fine tune one or several vertex is a breeze.
I mostly use the feature “smooth” and “set vert weight” and I feel like there can be some improvement.
here is my wish list for future update :
1, add adjustment to set vert weight, after click a weight value, offer option to fine tune the value with mouse wheel. for instance, after I set 0.5 to a vert (or several) I can scroll wheel up and down to adjust the value to 0 or 1, then click to confirm.
2, add adjustment to “smooth”, after click smooth, scroll wheel up and down to increase or decrease smooth iteration, hold shift to adjust factor and hold ctrl to adjust expand/contract, and then click to confirm.
3, possible to select bone directly in 3d view.

I am not sure if it is doable code wise, it is just my experience using it for a few days, so that it is easier to focus on the mesh instead of click between the property panel and the 3d view. However, it is quite powerful as it is now, thank you very much for making the addon.

1 Like

You have some interesting ideas! I’ll have to think on the fine tuning because right now the number it assigns isn’t based upon a public integer or anything… Thanks for your feedback!

1 Like

Hello, just a quick question, to use the Gradient function, is it necessary to select the start loop, the end loop and one loop in between?
I am asking because whenever I run this in 2.81 or 2.83 I get this error:

Traceback (most recent call last):
  File "C:\Users\AppData\Roaming\Blender Foundation\Blender\2.81\scripts\addons\ZWeightTools-1_0_1.py", line 370, in execute
    actVert = endVs[0]
IndexError: list index out of range

location: <unknown location>:-1

Similarly, when I try to copy weights from an active to a bunch of selected verts, I get

Traceback (most recent call last):
  File "C:\Users\AppData\Roaming\Blender Foundation\Blender\2.81\scripts\addons\ZWeightTools-1_0_1.py", line 766, in execute
TypeError: assignVWeight() missing 2 required positional arguments: 'wlay' and 'multiple'

location: <unknown location>:-1

Is that just me being an idiot or is something off here?

Ok, I am starting to see what threw me off. You should not select an Edge Loop between the vertices to be interpolated. Just a series of edges. These need to be connected, but must not loop in on themselves.

Sorry Benjay! I’m not sure why but my email refuses to notify me of new emails. Yes, you are correct. You only need to select an open line of edges/vertices. When using the “parallel” function if you’d like for the gradient to stop at a certain point instead of continuing to follow the edge loop the best approach currently is to hide the edges you’d like for it to stop at.

when I select a vert and de-select it, I got the following error:

Traceback (most recent call last):
  File "C:\Users\GG\AppData\Roaming\Blender Foundation\Blender\2.83\scripts\addons\ZWeightTools-1_0_1.py", line 1049, in draw
    for key in bm.select_history.active[wlay].keys():
TypeError: 'NoneType' object is not subscriptable

location: <unknown location>:-1

I am using 2.83.4 LTS

Awesome tool! Thank you @Blender_bari ! Just one question, I got this error when I was trying to add weights from one vertex group to anthor. Was there anything I did it wrong? Many thx!

Were the vertex groups on the same object?

Did the copy and paste weight button just…failed to work ?
Blender 3.1.2

Or am I not understand ?
Select a vertex, on the under vertex weight, click copy.
Select any vertex, under that vertex weight click paste.

Nothing happens.

Wait…upon more experimentation…copy and paste assign to the SAME vertex(s)…but to a different group…why does it work this way ?
Ok nevermind, I will just accept that for what it is…but how about…
How do you select a vertex, click copy…select another vertex, click paste so that that vertex have the same weight value ?

As for the gradient feature, is there a “Reverse Gradient” option ? Cause I often select the vertices closest to the bone and to the furthest away and it would assign the vertex furthest away to the bone instead.

Yeah, the copy/paste is specifically for copying weights between different layers.

There is the invert button that will do that, but you will have to hit Gradient first and then the invert button

1 Like