Nodes/Avatar Graph/Transform Resize
ComfyUI Node

Transform Resize

ComfyUI Node Guide

By avatechai·Created 3 years ago·Updated 2 years ago· 264
Transform Resize
  • BPY_OBJ
  • value
  • mouse_dir_constraint
  • orient_type
  • orient_matrix
  • orient_matrix_type
  • constraint_axis
  • snap_elements
  • snap_point
  • center_override
  • BPY_OBJ
mirrorfalse
use_proportional_editfalse
proportional_edit_falloff
proportional_size1.00
use_proportional_connectedfalse
use_proportional_projectedfalse
snapfalse
use_snap_projectfalse
snap_target
use_snap_selftrue
use_snap_edittrue
use_snap_nonedittrue
use_snap_selectablefalse
gpencil_strokesfalse
texture_spacefalse
remove_on_cancelfalse
release_confirmfalse
use_accuratefalse

Transform Resize is the ComfyUI face of one of the most-used commands in Blender: hitting S to scale something. It's part of Avatar Graph, Avatech's node pack for rigging static character illustrations into real-time avatars that blink, lipsync, and breathe - and this node is pure mesh-editing plumbing, the kind of thing you reach for constantly once you're actually building rigs rather than something specific to the avatar concept itself.

It's a direct wrapper of Blender's bpy.ops.transform.resize operator - the exact same operator behind the S key in Blender's viewport. Avatar Graph embeds Blender's own Python API inside ComfyUI, so this node is a literal passthrough of that operator's parameters, which is also why the widget list looks intimidating at first glance: Blender's transform operators carry a huge shared parameter surface (snapping, proportional editing, orientation matrices) because the same underlying tool handles interactive viewport dragging, numeric input, and scripted calls all at once.

Here's the part that matters, though: as a beginner you really only need one of these fields.

  • value - the XYZ scale vector to apply. (1, 1, 1) is no change; (0.5, 0.5, 0.5) halves the object's size on every axis; you can scale axes independently too (say, (1, 1, 0.5) to flatten something on Z).

Everything else on this node - orient_type, orient_matrix, constraint_axis, snap, snap_elements, use_proportional_edit, proportional_edit_falloff, mirror, gpencil_strokes, and the rest - are leftovers from Blender's interactive transform tool. They control things like snapping to grid/geometry while dragging in a live viewport, or falling off scale smoothly across nearby vertices (proportional editing). In a scripted ComfyUI graph none of that interactive context exists, so the sane move is to leave them at their defaults and just set value. If you do want proportional editing (softening the effect of a scale across a mesh region rather than a hard cutoff at your selection), flip use_proportional_edit on and adjust proportional_size and proportional_edit_falloff - but that's a deliberate choice, not something a beginner needs out of the gate.

Output is the same BPY_OBJ, resized in place.

Installing it: no standalone install for a single node - this comes with the full Avatar Graph pack. Simplest path is ComfyUI Manager, search "Avatar Graph" or avatar-graph-comfyui. Manually: cd ComfyUI/custom_nodes && git clone https://github.com/avatechai/avatar-graph-comfyui, then cd in and pip install -r requirements.txt, then restart ComfyUI.

The install snag that trips most people up: Avatar Graph requires Python 3.10.x specifically, since its bpy dependency - Blender's API packaged as a library - only ships wheels for that version. A newer Python (the default on most fresh setups) means the install just fails. The README recommends a dedicated environment: conda create --name comfyui python=3.10, activate, install ComfyUI's own requirements first, then this pack's. For the live avatar preview inside Avatech's web editor, also launch with --enable-cors-header (Mac: add --force-fp16); without it, resizing and everything else still work fine, you just export .glb/.gltf instead of seeing a live in-browser update.

One practical note if a scale operation seems to do nothing: check what's actually selected upstream in your graph. Like Blender itself, transform.resize acts on the current selection state of the mesh, not the whole object unconditionally - if nothing's selected, there's nothing to scale.

Categoryblender

Inputs (28)

NameTypeDefaultDescription
BPY_OBJoptBPY_OBJ
valueoptB_VECTOR3
mouse_dir_constraintoptB_VECTOR3
orient_typeoptB_ENUM
orient_matrixoptB_VECTOR9
orient_matrix_typeoptB_ENUM
constraint_axisoptB_BOOLEAN3
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
snap_elementsoptB_ENUM_SET
use_snap_projectoptBOOLEANfalse
snap_targetoptCOMBO4 options: CLOSEST, CENTER, MEDIAN, ACTIVE
use_snap_selfoptBOOLEANtrue
use_snap_editoptBOOLEANtrue
use_snap_noneditoptBOOLEANtrue
use_snap_selectableoptBOOLEANfalse
snap_pointoptB_VECTOR3
gpencil_strokesoptBOOLEANfalse
texture_spaceoptBOOLEANfalse
remove_on_canceloptBOOLEANfalse
center_overrideoptB_VECTOR3
release_confirmoptBOOLEANfalse
use_accurateoptBOOLEANfalse

Outputs (1)

NameTypeDescription
BPY_OBJBPY_OBJ