Mesh Primitive Uv Sphere Add
A proper sphere with real UVs baked in
- location
- rotation
- scale
- BPY_OBJ
The name isn't marketing - "UV sphere" is Blender's actual term for the longitude/latitude style sphere (as opposed to an icosphere, which Blender doesn't offer here at all). This node is that exact operator, bpy.ops.mesh.primitive_uv_sphere_add, exposed as a ComfyUI node because it's part of Avatar Graph, the pack that runs real Blender inside ComfyUI's process (via the bpy Python package) to build and rig interactive 2D-to-3D avatars. Every Blender mesh operator gets an auto-generated node here, sphere included, even though you won't see it used in any of the pack's own eye-blink or lipsync demo templates.
How it works
It spawns a sphere built from horizontal rings and vertical segments - the classic globe-style topology, which is exactly why it's called "UV": that grid layout maps cleanly to a rectangular texture the same way a world map unwraps a globe. That makes it the natural choice any time you actually need to texture a spherical object, rather than just needing a round shape - for anything that's just geometry with no texture riding on it, a different sphere type would avoid the pole-pinching this topology is known for, but Blender's bpy API only exposes this one and the ico variant, and only the UV sphere made it into this pack's generated node list.
Inputs and outputs
The fields that actually change the shape:
segments(default 32) - vertical cuts, i.e. how many "orange slices" around the sphere.ring_count(default 16) - horizontal rings from pole to pole.radius(default 1) - the overall size.
More segments and rings means a rounder sphere at the cost of more geometry - 32/16 is Blender's own sane default and plenty for most uses. Beyond that it's the standard primitive-add boilerplate: location/rotation/scale vectors, calc_uvs (leave on - this is the node whose whole point is UVs), enter_editmode, an align enum (WORLD/VIEW/CURSOR), and a seed field that - as with every primitive node in this pack - isn't a real parameter of Blender's sphere operator. It's most likely there purely so ComfyUI has something to key a re-run off, not because it touches the mesh. Output is a single BPY_OBJ, a live handle into the running Blender scene for the next node in your chain.
Installing it
Through ComfyUI Manager: search "avatar-graph-comfyui", install, restart. Manually: cd ComfyUI/custom_nodes && git clone https://github.com/avatechai/avatar-graph-comfyui, then cd avatar-graph-comfyui && python -m pip install -r requirements.txt, then restart.
Get the Python version right first - this pack needs 3.10.x specifically, because that's what the bpy package underneath it is built against. The README recommends a dedicated conda environment on macOS/Linux (conda create --name comfyui python=3.10) instead of hoping your existing Python matches, and Windows users get a prebuilt ComfyUI + Python 3.10 zip linked in the README to unzip over their install before adding the pack through Manager. Restart with --enable-cors-header (macOS also wants --force-fp16) - without it the graph still runs, you just lose the live 3D preview and have to save the model out manually from the pack's Avatar Main Output node instead.
Common issues
The Python version mismatch will bite you before anything sphere-specific does - wrong minor version and bpy has no compatible wheel, so the whole pack fails to load. If you're cranking segments and ring_count way up chasing a smoother sphere, know that you're also multiplying the vertex count fast - fine for a one-off render, worth reconsidering if this sphere is about to get pushed through several more mesh operations downstream. And as with the rest of this pack, expect a heavier dependency footprint than a typical custom node (it's embedding real Blender, not a thin wrapper) which can collide with other packs' pinned versions - an unglamorous but normal part of running a large custom-node ecosystem. The README's own warning that things are still in flux applies here too.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| seedopt | INT | 00–18446744073709550000 | — |
| segmentsopt | INT | 323–100000 | — |
| ring_countopt | INT | 163–100000 | — |
| radiusopt | FLOAT | 1.000–999999995904 | — |
| calc_uvsopt | BOOLEAN | true | — |
| enter_editmodeopt | BOOLEAN | false | — |
| alignopt | COMBO | 3 options: WORLD, VIEW, CURSOR | |
| locationopt | B_VECTOR3 | — | |
| rotationopt | B_VECTOR3 | — | |
| scaleopt | B_VECTOR3 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| BPY_OBJ | BPY_OBJ | — |