Nodes/Avatar Graph/Transform Vertex Random
ComfyUI Node

Transform Vertex Random

Add Organic Noise to a Flat Mesh

By avatechai·Created 3 years ago·Updated 2 years ago· 264
Transform Vertex Random
  • BPY_OBJ
  • BPY_OBJ
offset0.00
uniform0.00
normal0.00
seed0
wait_for_inputtrue

Transform Vertex Random is the texture generator of the mesh world - the one that stops geometry from feeling machine-made. It wraps Blender's transform.vertex_random, which jitters every vertex by a random amount. Give it a tiny offset and you get a rough, hand-hewn surface; crank it and the mesh dissolves into noise. It's not something you use in every avatar, but when you want a knitted beanie, ruffled hair, a rocky base, or any "this wasn't generated by a computer" quality, it's the node.

How it works

Feed it a BPY_OBJ and it enters edit mode, runs bpy.ops.transform.vertex_random(...), and hands the mesh back. The three sliders blend three different flavors of randomness:

  • offset - the overall magnitude of the jitter. Start at 0.05 for texture, 0.5+ for chaos.
  • uniform - 0 to 1. At 1, every vertex jitters by the full random amount (uniform distribution). At 0 it's a more centered, gaussian-ish scatter. Low values give subtle texture; 1 gives harsh static.
  • normal - 0 to 1. At 1, all the jitter happens along vertex normals - the mesh gets lumpy, like bumpy skin or a plush surface, without tearing apart its silhouette.
  • seed - 0 to 10000, the random seed. Same settings, different seed, different scatter. This is your reproducibility knob: lock the seed, get the same noise every run.

Blend uniform and normal to taste: a bit of both reads as "organic," all-uniform reads as "digital garble." Output is BPY_OBJ, chained on.

Where it fits (and a warning)

In the avatar pipeline this is a surface-detail stage: apply it to a hair layer for a fluffy edge, or to a clothing mesh for fabric texture, before you bake the shape key. The warning is the same one as every transform node here - it hits the entire mesh, no selection. And since avatar layers are image-textured planes, a large offset will wreck the texture mapping. Keep offsets small unless the mesh is meant to be abstract.

One more thing: the node waits for input (wait_for_input defaults on), meaning it doesn't regenerate until the graph re-runs - that's how a locked seed stays stable while you tune other nodes.

Installing

Vertex Random ships in the Avatar Graph pack (avatechai/avatar-graph-comfyui), which pins bpy==3.6.0 → Python 3.10:

conda create --name comfyui python=3.10
conda activate comfyui

Install via ComfyUI Manager (search Avatar Graph) or:

cd ComfyUI/custom_nodes
git clone https://github.com/avatechai/avatar-graph-comfyui
cd avatar-graph-comfyui && python -m pip install -r requirements.txt

Restart with python main.py --enable-cors-header for live preview. No per-node downloads.

Categoryblender

Inputs (6)

NameTypeDefaultDescription
BPY_OBJoptBPY_OBJ
offsetoptFLOAT0.00-3.402823466385289e+38–3.402823466385289e+38
uniformoptFLOAT0.000–1
normaloptFLOAT0.000–1
seedoptINT00–10000
wait_for_inputoptBOOLEANtrue

Outputs (1)

NameTypeDescription
BPY_OBJBPY_OBJ