Nodes/ComfyUI_Antonioilev_Lightpack/🎨 Multi Mesh Colorizer (10 Slots)
ComfyUI Node

🎨 Multi Mesh Colorizer (10 Slots)

The five-second way to tell your parts apart

By AntonioilevΒ·Created 2 days agoΒ·Updated a day agoΒ· 0
🎨 Multi Mesh Colorizer (10 Slots)
  • mesh_1
  • color_1
  • mesh_2
  • color_2
  • mesh_3
  • color_3
  • mesh_4
  • color_4
  • mesh_5
  • color_5
  • mesh_6
  • color_6
  • mesh_7
  • color_7
  • mesh_8
  • color_8
  • mesh_9
  • color_9
  • mesh_10
  • color_10
  • m1
  • m2
  • m3
  • m4
  • m5
  • m6
  • m7
  • m8
  • m9
  • m10

A ten-in, ten-out node that does one small thing: it writes a flat colour into each mesh's vertex colours.

That sounds trivial until you've spent twenty minutes staring at a generated character in a viewport trying to work out which shell is the hat and which is the hair, or until you need ten parts in one GLB that a viewer will render in distinguishable colours without a single texture file. This node is the cheap, immediate answer to both.

What it does per slot

For every slot where a mesh is connected, it copies the mesh, converts the hex colour to RGB, and fills the vertex-colour array - one RGBA entry per vertex, alpha 255. Slots you left empty return None on their matching output. It also reports the colour list as UI data, so the widget values travel with a saved workflow.

That's the entire implementation. No UV work, no materials, no per-face colours, no interpolation logic. Just paint every vertex of part N in colour N.

Two consequences follow directly from that, and they're the things to hold in your head:

It's per-vertex. On a 60k-vertex part, the colour information is dense; on a 200-face block, you get ten interpolated blobs of colour across a triangle. For flat-shaded props in a viewer it looks fine; for anything you'd call a material, use a material.

It's vertex colours, not a texture. Some renderers and importers respect them, some ignore them entirely. Blender's viewport in solid mode: yes. Game engines: only with a vertex-colour material. Most glTF viewers: yes, since the spec carries COLOR_0. The pack's own 3D preview nodes handle them. Don't assume; look.

Inputs and outputs

Ten optional pairs and ten outputs, pairwise in order:

  • mesh_1 … mesh_10 - TRIMESH (also accepts the MESH type other 3D packs emit).
  • color_1 … color_10 - hex, default #FFFFFF.
  • Outputs m1 … m10.

Everything is optional, so you can wire two meshes and leave eight slots empty - the node won't hold up the queue. But wire output mN for input mesh_N; the node doesn't tell you which slot a mesh came from, and swapping two outputs silently swaps two colours.

When you feed the outputs on into a merge/combine node, the concatenated mesh ends up with a vertex-colour array that encodes part identity, which is genuinely useful: it's instance segmentation you get for free, without UVs, without masks, and it survives an OBJ/GLB export.

One relationship worth knowing

Its sibling Mesh Colorizer (Legacy) is registered to the same class - same ten slots, same outputs, literally the same code under a second node ID. "Legacy" here means "keep the old ID so old workflows still load", not "older, weaker version". Pick either; they behave identically and you can wire them in place of one another.

Where it belongs in the chain

Last, basically. Anything geometric after this can wipe it: the pack's Hole Filler resets the visual block to a blank ColorVisuals, and Refine Mesh and Hole Surgeon write their own debug colours (yellow patches, red/green protection masks). So the order is: all geometry β†’ all repair β†’ colour β†’ export.

If you do need to colour early for debugging and then run geometry ops, just re-colour at the end. It's one node.

Install

cd ComfyUI/custom_nodes
git clone https://github.com/Antonioilev/ComfyUI_Antonioilev_Lightpack.git
python -m pip install trimesh

Restart ComfyUI. Manager installs the pack by name (Antonioilev Light Pack) but nothing else, because the repo ships no requirements.txt and no install.py - trimesh and numpy (already present) are the only things this node imports, and trimesh is the one you'll have to add by hand to ComfyUI's environment. If the node doesn't appear in the Add Node menu, the pack's startup banner [Antonioilev_Light_pack] Loaded N nodes (M failed) is where the missing module is named.

An honest note on the whole pack while we're here: this is a solo artist/TD's production toolkit - the defaults still point at their own drives, the comments are partly in Russian, and there is no community discussion of it anywhere in the reddit corpus. That's not a red flag so much as an instruction manual: judge it on the code, and change every default path before you queue.

CategoryAntonioilev/Meshes

Inputs (20)

NameTypeDefaultDescription
mesh_1optTRIMESH,MESHβ€”
color_1optCOLOR#FFFFFFβ€”
mesh_2optTRIMESH,MESHβ€”
color_2optCOLOR#FFFFFFβ€”
mesh_3optTRIMESH,MESHβ€”
color_3optCOLOR#FFFFFFβ€”
mesh_4optTRIMESH,MESHβ€”
color_4optCOLOR#FFFFFFβ€”
mesh_5optTRIMESH,MESHβ€”
color_5optCOLOR#FFFFFFβ€”
mesh_6optTRIMESH,MESHβ€”
color_6optCOLOR#FFFFFFβ€”
mesh_7optTRIMESH,MESHβ€”
color_7optCOLOR#FFFFFFβ€”
mesh_8optTRIMESH,MESHβ€”
color_8optCOLOR#FFFFFFβ€”
mesh_9optTRIMESH,MESHβ€”
color_9optCOLOR#FFFFFFβ€”
mesh_10optTRIMESH,MESHβ€”
color_10optCOLOR#FFFFFFβ€”

Outputs (10)

NameTypeDescription
m1TRIMESH,MESHβ€”
m2TRIMESH,MESHβ€”
m3TRIMESH,MESHβ€”
m4TRIMESH,MESHβ€”
m5TRIMESH,MESHβ€”
m6TRIMESH,MESHβ€”
m7TRIMESH,MESHβ€”
m8TRIMESH,MESHβ€”
m9TRIMESH,MESHβ€”
m10TRIMESH,MESHβ€”