Node wrangler improvement - extra maps

As far as I know NW has the most easier and flexible way to load a PBR texture in one step, and it’s keyword filtering is really helpful with different naming conventions.
I did a small modification to the NW addon, Add Principled Setup functionality so it can load more maps that I frequently use:

I’ve made it work with the green maps but my programming skills being close to zero, the AO map is broken.
Ideally I would like to load it as an unconnected node along with the others because this one has more possible use cases and it’s missing it’s own socket in the principled shader.
Right now if a AO file is selected it will break the execution when checking for it’s corresponding socket in the shader. But I don’t know how to make it a separate case and here I would ask for some help.

In the end, me or someone more experienced will submit the patch to

Usage: first disable the default NW addon, restart blender then install and activate this one.


This is the improved last version with AO fixed: (232.5 KB)

Not working for me, tested on blender 3.0
the only slot that worked for me is alpha

What is happening? You will have to disable the standard addon and leave only this one active.

yha i disable the default one but still its not picking those texture file , even i cross check their name and tags in addons.

not getting any error but also not picking up any file other than alpha

Hi dude my bad , its working now all i has to do is disable default node wrangler and then restart blender and then install new one. sorry for the bad feedback.

Np I will add this in description.

Hey, I tried adding the extra case to handle the ambient occlusion node as you mentioned. I also took the freedom and changed the “AO” label to “Ambient Occlusion”, but choose whatever you prefer :slight_smile: (232.8 KB)

I basically copied the section for the displacement node. This is most of what I added (missing a few one liners later…):

if sname[0] == 'Ambient Occlusion':
    ao_texture ='ShaderNodeTexImage')
    img =, sname[2]))
    ao_texture.image = img
    ao_texture.label = sname[0]
    if ao_texture.image:
        ao_texture.image.colorspace_settings.is_data = True
    # Add Ambient Occlusion node
    ao_node ='ShaderNodeAmbientOcclusion')
    ao_node.location = active_node.location + Vector((100, 0))
    link =[0], ao_texture.outputs[0])


You can maybe also further look into the alignment of the nodes, as sometimes the AO node seems to overlap some of the links…

If you get some positive feedback that this is something that would be desirable to add to the add-on (I personally do think so), I would encourage you to look into submitting a patch on New contributors are always welcome!

Hey this is so great! Thanks a bunch! I see it links it to an ao generator which is not even working with evee. Is it necessary? or I can comment the section below # add ambient…? I have at least 3 use cases for AO: as a mask, as an abbedo multiplier or linked to a glTF group so it’s better to have it free just to polish it a bit.

1 Like

Oh, now that I think about it, the Ambient Occlusion node doesn’t really make sense, does it…
Yeah, you can just get rid of the parts dealing with the ao_node :slight_smile:

Edit: I quickly did it, since I didn’t include all my changes in the previous post. (232.4 KB)

Thanks again! this is excellent. I tested a bit more and the only tiny detail remaining would be to align it on top as the first use case is probably to multiply with base color. I tried and is not that obvious :slight_smile: But don’t worry, it’s already good as it is.

I had actually thought the same thing, so I already looked into it. :upside_down_face:

Instead of appending the ao_texture inserting it at the beginning of the texture_nodes list seems to work fine. I haven’t tested it extensively.
Changing the if-block at line 3412 to something like this does the trick:

    if ao_texture:
        # We want the ambient occlusion texture to be the top most texture node
        texture_nodes.insert(0, ao_texture)

That worked like a charm! When I saw “append” I thought “insert” would be nice to have but didn’t search for it. I also declared the ao_texture because it was giving an error if you didn’t pick an AO file. I am almost convinced to learn python for blender. :nerd_face:
Anyway, here it is with AO above base color. (232.5 KB)

1 Like