Transform Tosphere
Balloon Your Mesh Into a Sphere
- BPY_OBJ
- center_override
- BPY_OBJ
Transform Tosphere morphs a mesh toward a perfect sphere, and it's the least subtle node in the Avatar Graph transform kit. value runs 0 to 1: 0 is the untouched mesh, 1 is full sphere. It's the tool behind balloon-head characters, chibi roundness, and the emoji-style avatars that the pack's own demos show off. If you've ever wanted a dignified anime portrait to come out the other end looking like a bouncy mascot, this is how.
How it works
Under the hood it's bpy.ops.transform.tosphere(value=...). Each vertex is pushed along a line toward a target sphere centered on the mesh's bounds (or on center_override if you provide a B_VECTOR3). Because it works on the whole mesh - there's no selection socket - feeding it the head layer is what you want, not the joined character. The result is smooth because every vertex moves proportionally; it's not a cheap "flatten to a ball," it's an actual radial morph.
Inputs that matter:
value- 0 to 1, the morph amount. Even 0.3 reads as "cute and rounded"; 0.8+ is full balloon.center_override- a 3-value vector. By default the sphere centers on the mesh bounds, but you can shift it to pull the roundness toward a specific point (like raising the round center to the top of the head).use_proportional_edit+proportional_size- if you want mostly sphere but with the face kept intact, this is the escape hatch. A small falloff leaves the perimeter untouched.
Everything else is the usual Blender operator plumbing: mirror, snap, gpencil_strokes, release_confirm, use_accurate. Output is BPY_OBJ, threaded to the next node.
Where it fits
In the avatar workflow this is a stylization step. The README's own demos lean hard on round, cute avatars (including the dog emoji workflow), and Tosphere is the one-word answer to "how do I get that." Just be aware of the texture: the mesh layer carries the character image as its texture, and a heavy sphere morph will visibly stretch it. Run Match Texture Aspect Ratio after your shape passes, and consider a lower value with proportional editing if the face starts looking smeared.
Installing
Tosphere comes with the Avatar Graph pack (avatechai/avatar-graph-comfyui). The pack needs 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 downloads specific to this node - you only hit the pack's SAM model download if you use the segmentation stage.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| BPY_OBJopt | BPY_OBJ | — | |
| valueopt | FLOAT | 0.000–1 | — |
| mirroropt | BOOLEAN | false | — |
| use_proportional_editopt | BOOLEAN | false | — |
| proportional_edit_falloffopt | COMBO | 8 options: SMOOTH, SPHERE, ROOT, INVERSE_SQUARE, SHARP, LINEAR, +2 | |
| proportional_sizeopt | FLOAT | 1.009.999999974752427e-7–999999995904 | — |
| use_proportional_connectedopt | BOOLEAN | false | — |
| use_proportional_projectedopt | BOOLEAN | false | — |
| snapopt | BOOLEAN | false | — |
| gpencil_strokesopt | BOOLEAN | false | — |
| center_overrideopt | B_VECTOR3 | — | |
| release_confirmopt | BOOLEAN | false | — |
| use_accurateopt | BOOLEAN | false | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| BPY_OBJ | BPY_OBJ | — |