Nodes/Avatar Graph/Transform Push Pull
ComfyUI Node

Transform Push Pull

Pushing and pulling vertices along their normals — the inflate tool

By avatechai·Created 3 years ago·Updated 2 years ago· 264
Transform Push Pull
  • BPY_OBJ
  • center_override
  • BPY_OBJ
value0.00
mirrorfalse
use_proportional_editfalse
proportional_edit_falloff
proportional_size1.00
use_proportional_connectedfalse
use_proportional_projectedfalse
snapfalse
release_confirmfalse
use_accuratefalse

Transform Push Pull inflates and deflates. It wraps bpy.ops.transform.push_pull, which moves the selected vertices of a mesh along their own normals - out for positive values, in for negative - so a region swells or caves in relative to the surface around it. It's the tool you'd use to puff a cheek, round a forehead, or push a lip forward while making a morph target for an avatar's expressions.

It sits next to Transform_Bend in the "shape-key builder" corner of the pack. Bend handles curves, Push Pull handles volume. Where a talking avatar's face gets its life - the cheek that bulges on a smile, the pout - is exactly this kind of normal-direction push. And because it's per-vertex with proportional falloff available, you get a soft organic swell instead of a hard spike.

How it works

An EditOps node: deselect all, set your BPY_OBJ active, enter edit mode, run the operator, exit, pass the object back. The value input is a FLOAT with an enormous range (Blender's hard min/max leaked through the generator - realistically you'll stay within a few units). Positive pushes out along normals, negative pulls in. mirror mirrors to the symmetric side, which is gold for faces.

The proportional controls are the difference between "organic" and "lumpy":

  • use_proportional_edit - on, and the push tapers off for vertices further from the selection center.
  • proportional_edit_falloff - SMOOTH / SPHERE / ROOT / INVERSE_SQUARE / SHARP / LINEAR / CONSTANT / RANDOM. SMOOTH is the friendly default; SPHERE gives a rounder, more localized bulge.
  • proportional_size - the radius of influence. Tune this harder than you think you need to.
  • use_proportional_connected / use_proportional_projected - limit the falloff to connected geometry or to the projected area. Fine at defaults.
  • center_override - a B_VECTOR3 to shift the push's center of influence.

Inputs that matter

BPY_OBJ, value (how much, and which direction), use_proportional_edit + proportional_size (how soft), and center_override when you need the push somewhere other than the mesh center.

Output: BPY_OBJ - the modified mesh for the next node.

Installing it

Part of the Avatar Graph pack. 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 after. Pack gotchas: bpy==3.6.0 requires Python 3.10.x (a 3.11+ env breaks the pack's import), and first launch downloads the SAM ViT-H model (~2.5 GB) to ComfyUI/models/sams plus two MediaPipe landmarker files.

Common issues

  • "No module named bpy" → Python 3.10.x. The pack's one repeated chorus.
  • Result looks spiky, not smooth → you pushed without proportional editing, so every vertex moved independently. Enable use_proportional_edit and raise proportional_size.
  • The push happens in the wrong spot → selection and center_override. The node acts on the current selection; make sure it covers the region you mean.
  • Texture stretches when you push hard → big normal pushes distort UVs. Keep pushes modest, or do the deformation before unwrapping.
  • Scene resets between runs - shape keys and their source deformations belong in one graph.

If you're sculpting expression shape keys for the avatar editor, this and Bend are the two nodes that do most of the heavy lifting. Push a little, bake a shape key, push a little more.

Categoryblender

Inputs (12)

NameTypeDefaultDescription
BPY_OBJoptBPY_OBJ
valueoptFLOAT0.00-3.402823466385289e+38–3.402823466385289e+38
mirroroptBOOLEANfalse
use_proportional_editoptBOOLEANfalse
proportional_edit_falloffoptCOMBO8 options: SMOOTH, SPHERE, ROOT, INVERSE_SQUARE, SHARP, LINEAR, +2
proportional_sizeoptFLOAT1.009.999999974752427e-7–999999995904
use_proportional_connectedoptBOOLEANfalse
use_proportional_projectedoptBOOLEANfalse
snapoptBOOLEANfalse
center_overrideoptB_VECTOR3
release_confirmoptBOOLEANfalse
use_accurateoptBOOLEANfalse

Outputs (1)

NameTypeDescription
BPY_OBJBPY_OBJ