Transform Vertex Random
Add Organic Noise to a Flat Mesh
- BPY_OBJ
- BPY_OBJ
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.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| BPY_OBJopt | BPY_OBJ | — | |
| offsetopt | FLOAT | 0.00-3.402823466385289e+38–3.402823466385289e+38 | — |
| uniformopt | FLOAT | 0.000–1 | — |
| normalopt | FLOAT | 0.000–1 | — |
| seedopt | INT | 00–10000 | — |
| wait_for_inputopt | BOOLEAN | true | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| BPY_OBJ | BPY_OBJ | — |