Nodes/Avatar Graph/Transform Shear
ComfyUI Node

Transform Shear

The Skew Tool for Stylized Deformation

By avatechai·Created 3 years ago·Updated 2 years ago· 264
Transform Shear
  • BPY_OBJ
  • orient_type
  • orient_matrix
  • orient_matrix_type
  • BPY_OBJ
value0.00
orient_axis
orient_axis_ortho
mirrorfalse
use_proportional_editfalse
proportional_edit_falloff
proportional_size1.00
use_proportional_connectedfalse
use_proportional_projectedfalse
snapfalse
gpencil_strokesfalse
release_confirmfalse
use_accuratefalse

Transform Shear is how you push an avatar's geometry into a stylized slant. In Blender terms it's bpy.ops.transform.shear - the skew operator that shifts vertices sideways by an amount proportional to their position along another axis. Think italic text, a comic-book panel tilt, or the whole head of your character leaning into a smug angle. It's the tool that's genuinely fun to play with once you realize the pack lets you drive real Blender math from a ComfyUI graph.

How it works

Like every node in the Transform_ family, this one is an auto-generated wrapper. The pack's blender_node.py takes a BPY_OBJ input, sets it as the active object, drops into edit mode, and calls the operator with whatever you've set. Shear then skews the mesh: the value float is the amount of shear (negative flips the direction), and orient_axis picks the axis that does the sliding while orient_axis_ortho picks the axis the skew scales along. orient_type lets you run the whole thing in GLOBAL, LOCAL, NORMAL, or any other orientation space.

The inputs that matter for a beginner:

  • value - shear amount. Start small, like ±0.5, and watch it in the preview.
  • orient_axis / orient_axis_ortho - which axes do the work. X + Y is the classic "lean it sideways" pairing.
  • use_proportional_edit - enable this with a large proportional_size and the shear falls off from the transform pivot instead of hitting the whole mesh uniformly. This is how you get a subtle, organic slant rather than a hard italic skew.

Everything else (snap, mirror, falloff curves, release_confirm) is carried over from Blender's operator and is safe to leave alone. Output is BPY_OBJ - the same mesh, so you chain it into the next node.

Where you'd actually use it

In the avatar pipeline, shear is a secondary shaping tool. You're usually deforming a part mesh - the mouth layer, an eye, a hair piece - not the whole character. Since these nodes act on the entire mesh they're handed (there's no vertex-selection input), make sure you're feeding the right layer from Create Mesh Layer / segmentation, not the joined final mesh. A common trick: shear the mouth mesh slightly for a smirk expression before baking shape keys with Mesh Modify Shape Key.

Installing

Shear ships in the Avatar Graph pack (avatechai/avatar-graph-comfyui), which embeds headless Blender via bpy==3.6.0 - that pins you to Python 3.10:

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

Install through 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 ComfyUI with python main.py --enable-cors-header for the live preview. And a warning that's worth repeating: this node shears the entire mesh it receives. If you wanted only part of it skewed, that part has to be its own mesh layer already.

Categoryblender

Inputs (17)

NameTypeDefaultDescription
BPY_OBJoptBPY_OBJ
valueoptFLOAT0.00-3.402823466385289e+38–3.402823466385289e+38
orient_axisoptCOMBO3 options: X, Y, Z
orient_axis_orthooptCOMBO3 options: X, Y, Z
orient_typeoptB_ENUM
orient_matrixoptB_VECTOR9
orient_matrix_typeoptB_ENUM
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
gpencil_strokesoptBOOLEANfalse
release_confirmoptBOOLEANfalse
use_accurateoptBOOLEANfalse

Outputs (1)

NameTypeDescription
BPY_OBJBPY_OBJ