I got around to testing tools for actual practical purpose. I have created an add-on that converts face sets to other attributes for different purposes. Julien showed interest in it and created design task, where it was proposed to create those operators with node tools. So I wanted to see what was doable currently out of those operators.
I will exclude Convert to Attribute from this testing, since it’s straightforward and obviously possible.
- Convert Face Sets to Materials
Purpose of this is to a) have face sets visible in every mode, or most importantly b) be able to assign materials on dense meshes by brush strokes instead of selecting individual faces in edit mode.
For that, I needed to be able to select faces in each individual face sets, which I found quite hard to do. I did it, but index assigned to each face set seems very random. When using stylized female model from base meshes bundle, and store face sets as attribute, index goes from 6 to 46, to 44, to 45, to 26. I can’t figure out pattern, but when selecting faces with that index, it doesn’t correctly select every face in face set. Only partially. I’m not native to Geometry Nodes, so I am probably doing something wrong, tell me if that’s so.

Ideally index should start from 0 and end at number of face sets(-1). That is whay my python code does at the moment. That makes using it in geonodes extremally easy.
As for assigning materials, I was pleasantly surprised that it worked. But when you assign material on the object that has no material slots, it creates empty material slot, and actual material is put in slot 2. I don’t know if you’d consider this a bug, but it’s there. In rest of the cases it works as expected.

As for assigning materials for each face set, I think it will be possible with new For Each zone, once it lands. Or am I misunderstanding what that zone is for?
- Face Sets to UV Map
Purpose of this operator is to create UV seams on face set boundaries, and unwrap. That way you can either just keep seams, for easier selection in edit mode, or more importantly to work with Quad Remesher add-on, or just unwrap and basically draw UV islands with brush strokes.
And it works! I was able to get same exact result as python operator!
But the obvious limitation is that it works for UV unwrapping, but not for simply creating Seams. That is a big limitation because seams are important for some add-ons, most importantly Quad Remesher. Obviously we can save attribute, select and mark as seams, or addons can change data type they use, but still. I know I don’t need to say this and it’s obvious to geonode developers, but seams as generic attributes would be very good.
- Face Sets to Vertex Groups
Purpose of this operator is to convert each face set as selectable group of faces in edit mode.
I’m not gonna try to recreate this now, because of issue I had in materials, without correct index I can’t work with that. But another obvious limitation is that I can’t directly create Vertex Groups from geonodes without doing manual steps myself.
That limitation isn’t important if goal is to simply be able to select face sets, there can be workarounds. But I keep thinking and if node tools specifically allowed creation of vertex groups it could result in some amazing results. Design I had in mind would be to assign faces to a group and assign weight to that group as float. What that would give us is ability to procedurally create field and basically assign that as vertex group weights. Easiest example would be using Easing nodes to control fall-off for weights towards edges. That can be very powerful for quick and dirty rigging.
Here is blend file if anyone wants to experiement more with the concept.
If we’ll solve incorrect index issue I’d love to create assets for Face Sets as discussed in design task.