Avatar Graph
Include nodes for sam + bpy operation, that allows workflow creations for generative 2d character rig.
Nodes (634)
Hand-sculpting a blink or a mouth shape without opening Blender
Naming a selection so later nodes can target it
The terminal node every Avatar Graph workflow ends at
Feeding a dynamic string into any of this pack's enum fields
Pulling a 2D render out of Avatar Graph's 3D scene
A plain XYZ constant for this pack's blender nodes
A four-component constant for this pack's blender nodes
Merging SAM click-prompts into one prompt string
Deciding what a scale or rotate pivots around
The node that carries your avatar's runtime behavior
The node that puts a mesh into Blender's Edit Mode
The manual bridge between Shape Flow and your glTF export
The terminal node that actually writes your avatar to disk
Turn a segmented blob into a clean mesh outline
Pull one object back out of a group
Reading image dimensions as live values in Avatar Graph
Bundle two Blender objects into one socket
Cutting out transparent layers for Avatar Graph's mesh textures
A relay node that's supposed to do nothing
ComfyUI Node Guide
The loader that doesn't throw away your transparency
What it's for, and the bug you'll actually hit
Writes a value into the mesh's active attribute layer
Smooth out shading seams where flat mesh pieces meet
Fixes ugly triangulation after a face fill
Rounds sharp edges — most of its 20 fields you'll never touch
Cuts a mesh with a plane — most of the fields are leftover UI state
The actual mechanic behind mixing shape keys
Stitches two open boundaries together with new geometry
ComfyUI Node Guide
A niche fix for twisted per-corner color data
Shrink-wraps your selection into a simple, dent-free shape
Unlocks per-edge bevel weight, does nothing visible
The reverse of Add — wipes the layer out
Same idea as the edge version, one level up
The vertex half of a pair you'll rarely need to remove
Flips on subdivision-surface creasing, nothing else
Strips edge-crease data back out of a mesh
The newer, lesser-known sibling of edge crease
Removes per-vertex crease data
Locks in editable normals instead of Blender's auto-calculated ones
Hands normal calculation back to Blender
A Sculpt Mode leftover that has nothing to do with rigging avatars
Sets up the data the Skin Modifier reads to inflate a stick figure into a mesh
Tears down the Skin Modifier's per-vertex radius data
Collapsing selected geometry down by ratio in Avatar Graph
The blunt instrument, five ways to swing it
Blender's Ctrl+X, minus the hole a plain delete would leave
Sweeps up floating vertices and dangling edges nobody's using
Cleans up the near-duplicate geometry a remesh step leaves behind
Removes edges without leaving a hole
Merging selected faces without deleting geometry in Avatar Graph
The one cleanup operator actually worth reaching for reflexively
The generic dissolve behind Blender's own Ctrl+X, wherever your selection mode is
Removes vertices, keeps the surface sealed
Copying part of a mesh's geometry inside Avatar Graph
Duplicates on top of itself unless something downstream actually moves it
Duplicate-and-extrude toward wherever the 3D cursor happens to be
Zip a strip of edges shut
Blender's F-key, wired into ComfyUI
Grab a parallel band of edges in one click
Flip a triangle pair's shared diagonal
Cut a mesh apart without deleting anything
Grabbing hard-angle edges by threshold in Avatar Graph
Blender's E-key smart extrude, scripted into a node
The smart extrude behind Blender's E key
Each edge gets its own extrusion
Pull an edge loop into a wall
Every face pops out on its own
Push a patch of faces out as one piece
The extrude that won't leave junk geometry at corners
Extrude without the move bolted on
Extrude in the everyday sense of the word
Extrude that follows the surface's own curve
Build a ribbed strip in one node
The lightest-weight extrude in the pack
Every selected point grows its own spike
Flattening warped faces back into a plane in Avatar Graph
Pull a sculpted piece out as its own mesh
Stop hand-mirroring UVs on symmetric meshes
A knife cut driven by edges you've already made
Growing a selection across a flat patch of mesh
Telling faces to stop blending into their neighbors
Blending faces so a low-poly mesh doesn't look faceted
Closing an open boundary loop with triangles
Patching a gap with quads instead of a triangle fan
Automatically patching small gaps in Avatar Graph
The fix when a face renders black or invisible
An invisible-in-Blender fix for export-time triangulation
ComfyUI Node Guide
Framing a face before you do something to just the inside
Cutting a mesh's geometry against itself
Union, difference, and intersect without leaving edit mode
Combining separate Avatar Graph layers into one mesh
Cutting a traced outline straight into your mesh
Blender's interactive cutting tool exposed as a node in Avatar Graph
Adding edge loops by index instead of by mouse drag
The companion node with nothing to slide
Turning a starting edge into a full loop in Avatar Graph
The Alt+Click gesture as a node
Turning an outline into the faces it encloses
A line-art flag most Avatar Graph users will never need
The face-level sibling of a rendering flag you probably don't need
Telling Blender's unwrapper where it's allowed to cut
Flagging edges to hold their shading break in Avatar Graph
Welding selected vertices together, on your terms
Fixing the shading seam where two mesh pieces meet
The node that actually rigs the blink and the lipsync
Telling Blender's Weighted Normal modifier which faces win
The Shift+N of ComfyUI mesh nodes
Copy-paste for custom vertex normals
Adding a loop cut without cutting the whole face loop
The interactive loop-insert tool, minus the interaction
Pulling a masked region out as its own mesh in Avatar Graph
Cutting a mesh down to the part your segmentation mask kept
Faking rounded shading on a flat mesh, straight from Blender
Turning a flat face into a fan of triangles around one center point
Blender's Poly Build tool, minus the cursor
A cleaner delete, if you had a cursor to aim it
Extrude-and-drag, without the drag
Blender's click-to-add-a-face tool, wrapped as a node
Add-a-face, then drag it — minus the drag
Adding a vertex mid-edge, Poly Build style
Split-and-drag, minus the drag
Grab-the-nearest-vertex, without a cursor to grab with
Grab-and-drag, minus the drag
Dropping a clean circle mesh into your avatar graph
One node, cones, cylinders, and frustums
Blender's cube, straight from a ComfyUI node
The interactive cube, minus the interaction
Dropping a cylinder into your Avatar Graph scene
A subdivided plane, for anything that needs to bend
Building eyeballs and round props in Avatar Graph
Blender's mascot, one node away
The flattest possible starting point
Dropping a donut into your Avatar Graph scene
A proper sphere with real UVs baked in
Triangulate before something else does it for you
Trace the outline of whatever you've got selected
ComfyUI Node Guide
Bring back geometry you hid earlier in the graph
Tear the mesh open along a seam without deleting anything
ComfyUI Node Guide
The edge-based version of Blender's rip macro
Blender's V-key rip, without the mouse drag
Spin a profile into a spiral, lathe-style
The reset button for whatever's selected
Grab everything lined up with your active vertex
Grab every triangle, or every ngon, in one shot
Find the geometry buried inside your mesh
Shrink your selection by one ring
Grab everything connected to what you've already got
Blender's click-to-select-connected-geometry, scripted
Find the geometry nothing else is attached to
Instant selection symmetry across an axis
Switch between vertex, edge, and face selection
Grow your selection outward one ring
Step the active element forward
Find the mesh errors before they wreck your export
Checker-deselect, keep every Nth element
Step the active element backward
Grab a reproducible random chunk of the mesh
Extend a selection to everything that matches
Find every copy of a shape on the mesh
Catching vertices you forgot to weight
Split part of a mesh into its own object
Fix shading glitches on generated geometry
Drive an existing shape key by name
Keep every shape key in sync after a base edit
Select a path to a specific element by index
Connect two selected points with the shortest route
ComfyUI Node Guide
Turn a flat plane into an actual solid
Reorder the mesh's internal index numbering
Lathe a profile into a revolved shape
Disconnect a selection without making a new object
Fixing shading seams on Avatar Graph's auto-built mesh
Giving Avatar Graph's shape keys more geometry to bend
Adding resolution along a loop, not across the whole mesh
Mirroring a lopsided Avatar Graph mesh in one pass
Nudging an almost-symmetric mesh the rest of the way
ComfyUI Node Guide
Walking a subdivided Avatar Graph mesh back down
Fixing a texture that's landed mirror-flipped
Fixing a texture that landed sideways on one face
Opening a fresh UV slot on an Avatar Graph mesh
Clearing a stray UV map before you redo it
Drawing your own edge across a face
Auto-splitting a bowtie n-gon
Flattening faces that warped out of plane
Blender's vertex-connect operator, wired into ComfyUI
Sanding the noise out of an auto-generated mesh
Smoothing jagged mesh geometry without deflating it
Turning edges into real geometry in Avatar Graph
Dropping a raw Blender primitive into the scene
Pulling a specific Blender object into the graph by name
Batch-creating the keys your rig actually needs
Lining up scene objects without doing the math yourself
Folding animated transforms into deltas
Dropping a bone rig into an Avatar Graph scene
Sanitizing an object before Shape Flow gets it
Getting your ComfyUI image onto the mesh
Flattening Avatar Graph's 3D mesh into a 2D texture
Baking a texture from inside a Blender node graph
Wiping an object's keyframes clean
Giving an object somewhere to hang keyframes
Stripping asset-browser metadata off an object in Avatar Graph
Blender's asset thumbnail, wrapped as a node
Tagging a Blender object as a reusable asset
Freeing Blender's evaluated-mesh cache mid-graph
A camera projection matrix, computed but not wired out
Auto-framing a camera around a set of points
Snapping a point onto a mesh's surface
Converting a transform between coordinate spaces
Duplicating an object before you break it
Blender's deepest internals, exposed as a node
Mapping a deformed vertex offset back to the base mesh
Populating Blender's deformed-mesh cache
Freeing the deformed-mesh cache when you're done
Reading a mesh's actual current shape, post shape-keys
Locating the rig behind a mesh
Turning a mesh into vector line art
Reading whether an object is hidden
Toggling an object's visibility from the graph
Reading an object's render-holdout flag
Reading whether an object only casts indirect light
Object Call Is Deform Modified — ComfyUI Node from Avatar Graph
Object Call Is Modified — ComfyUI Node from Avatar Graph
Object Call Local View Get — ComfyUI Node from Avatar Graph
Object Call Local View Set — ComfyUI Node from Avatar Graph
Object Call Make Local — ComfyUI Node from Avatar Graph
Object Call Override Create — ComfyUI Node from Avatar Graph
Object Call Override Hierarchy Create — ComfyUI Node from Avatar Graph
Object Call Override Template Create — ComfyUI Node from Avatar Graph
Object Call Preview Ensure — ComfyUI Node from Avatar Graph
Object Call Ray Cast — ComfyUI Node from Avatar Graph
Object Call Select Get — ComfyUI Node from Avatar Graph
Object Call Select Set — ComfyUI Node from Avatar Graph
Object Call Shape Key Add — ComfyUI Node from Avatar Graph
Object Call Shape Key Clear — ComfyUI Node from Avatar Graph
Object Call Shape Key Remove — ComfyUI Node from Avatar Graph
Object Call To Curve — ComfyUI Node from Avatar Graph
Object Call To Curve Clear — ComfyUI Node from Avatar Graph
Object Call To Mesh — ComfyUI Node from Avatar Graph
Object Call To Mesh Clear — ComfyUI Node from Avatar Graph
Object Call Update From Editmode — ComfyUI Node from Avatar Graph
Force Blender's dependency graph to notice a change
Strip a datablock's user count inside Avatar Graph
Count how many times a datablock gets referenced
Swap one Blender datablock for another everywhere
Check if an object is actually visible right now
Per-viewport visibility, not global
Drop a Blender camera into your Avatar Graph scene
Detach an object from a linked library override
Dropping a Blender object into its own collection
The internal op behind Blender's asset drag-and-drop
Instance a whole Collection without duplicating it
File an object into a Blender Collection
Grabbing a whole group of parts at once in Avatar Graph
ComfyUI Node Guide
Pull an object back out of a Collection
Add a bare Blender constraint, no target set
Add a constraint pre-wired to your selection
Stripping every constraint off an object in one step
Clone one object's constraint stack onto others
ComfyUI Node Guide
Capture the base pose for a Corrective Smooth modifier
Avatar Graph's core node for turning a segmented image into a mesh
Finer contour control over Avatar Graph's mesh-from-image node
Starting a hair-curves system on your character's mesh
Blender's hair-curves operator, along for the ride
ComfyUI Node Guide
Generate the data layers a Data Transfer modifier needs
Carrying UVs and weights across rebuilt meshes in Avatar Graph
Cleaning up scrap objects in an Avatar Graph scene
Blender's asset-drag operator, not a graph tool
Placing an image file into the Avatar Graph scene
Assigning an existing material by name
The general-purpose copy node behind Avatar Graph's other duplicate tools
Copying a whole object and placing it in one step, Avatar Graph style
Blender's Alt+D, as a single node
Turning virtual instances into real objects
Tab, but as a node
Dropping a physics force field into the scene
A plain anchor point for your Avatar Graph scene
Recalculating a stale Explode modifier
Creating a named grouping of faces
Putting the selected faces into a face map
The inverse of Face Map Select
Reordering face maps up or down in Avatar Graph
Deleting the active face map in Avatar Graph
Dropping faces out of a face map without deleting them
Turning a face map's membership into an actual selection
Turning any object into (or out of) a force field
Switching a modifier input from a fixed value to mesh data
Promoting a one-off modifier setup into a reusable node group
Making a shared node group unique to one object
Bringing your character art into Avatar Graph's Blender scene
Breaking a linked/library object free so you can actually edit it
Giving an object a fresh empty material slot in Avatar Graph
Painting the active material onto selected faces
Deleting the active material slot in Avatar Graph
Tidying up after Avatar Graph joins your meshes
ComfyUI Node Guide
Turning a flat image into an actual 3D mesh object
Baking a particle system into real geometry in Avatar Graph
Reordering a Blender modifier stack from ComfyUI
Organizing generated objects into named groups in Avatar Graph
Stripping a subdivision level back off in Avatar Graph
Drawing an object's motion trail in the viewport
Refreshing every motion path after you change the animation
Clean quad topology for Avatar Graph meshes
ComfyUI Node Guide
ComfyUI Node Guide
Grabbing a whole parent/child chain at once
Giving Avatar Graph's rigging a fixed baseline
Changing how an Empty draws in the viewport
Draw order for image-reference Empties
ComfyUI Node Guide
ComfyUI Node Guide
Toggling the floating name label above an object
Showing an object's generated texture-coordinate box
Toggling the wireframe overlay on an object in Avatar Graph
Fixing transparent reference images in Avatar Graph
Controlling how edits interact with shape keys in Avatar Graph
ComfyUI Node Guide
Clearing stale sim bakes in Avatar Graph
ComfyUI Node Guide
Mirroring weight paint so you don't hand-paint both sides
Cleaning up messy geometry in Avatar Graph
Click-to-segment your character into rig-ready layers
The save node behind Avatar Graph's shareable demos
ComfyUI Node Guide
Spinning custom shading normals by an angle
Keeping textures aligned after you duplicate or join meshes in Avatar Graph
Wrapping a texture around a rounded mesh part
Relaxing a UV unwrap so the texture doesn't warp
Breaking up repetition on tiled or atlas textures
ComfyUI Node Guide
ComfyUI Node Guide
avatar-graph-comfyui
![]()
Wanna animate or got a question? Join our Discord
A custom nodes module for creating real-time interactive avatars powered by blender bpy mesh api + Avatech Shape Flow runtime.
WARNING
We are still making changes to the nodes and demo templates, please stay tuned.
Demo
| <img src="https://github.com/avatechai/avatar-graph-comfyui/assets/73209427/12e2bfc6-438e-4d16-bead-9957ced3bae1" width="180"/><br>Interact 👆 | <img src="https://github.com/avatechai/avatar-graph-comfyui/assets/73209427/0c497025-7ed5-4e25-b4d1-5a257e1ba814" width="180"/><br>Interact 👆 | <img src="https://github.com/avatechai/avatar-graph-comfyui/assets/73209427/a2bf71e3-0d9c-4ddd-957f-a6b0cb7e622a" width="180"/><br>Interact 👆 | <img src="https://github.com/avatechai/avatar-graph-comfyui/assets/73209427/ad808c42-5297-4e61-8be8-d5cb7729d2ff" width="180"/><br>Interact 👆 | | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | | <img src="https://github.com/avatechai/avatar-graph-comfyui/assets/73209427/1d1ad8f9-31a6-48ec-bad2-ce972ee3b12f" width="180"/><br>Interact 👆 | <img src="https://github.com/avatechai/avatar-graph-comfyui/assets/73209427/06958585-f780-4b38-8f5d-bddabd7da78a" width="180"/><br>Interact 👆 | <img src="https://github.com/avatechai/avatar-graph-comfyui/assets/73209427/3d0e6b54-d45f-45ac-90bd-d8b149880f98" width="180"/><br>Interact 👆 | <img src="https://github.com/avatechai/avatar-graph-comfyui/assets/73209427/1d1ad8f9-31a6-48ec-bad2-ce972ee3b12f" width="180"/><br>Interact 👆 |
How to?
- Basic Rigging Workflow Template
- Best Practices for image input
- Custom Nodes List
- Shape Flow
- Installation
- Development
- Join Discord 💬
Basic Rigging Workflow Template
1. Creating an eye blink and lipsync avatar
For optimal results, please input a character image with an open mouth and a minimum resolution of 768x768. This higher resolution will enable the tool to accurately recognize and work with facial features.
Download: Save the image, and drag into Comfyui or Simple Shape Flow
2. Creating an eye blink and lipsync emoji avatar
| |
|
| :--: | :--: |
Download: Save the image, and drag into Comfyui
| |
|
| :--: | :--: |
Download: Save the image, and drag into Comfyui or Dog Workflow
Best practices for image input
1. Generate a new character image
![]()
We need a character image with an open mouth and enable the tool to easily recognize facial features, so please add to the prompt:
looking at viewer, detailed face, open mouth, [smile], solo,eye-level angle
Download: Character Gen Template
2. Make existing character image mouth open (Inpaint)
![]()
To maintain consistency with the base image, it is recommended to utilize a checkpoint model that aligns with its style.
Download: Mouth Open Inpaint Template
<details> <summary> Inpaint Demonstration </summary> <video src="https://github.com/avatechai/avatar-graph-comfyui/assets/73209427/e3b77295-a1bf-4d96-9551-7cc423a4af73"/> </details>3. Pose Constraints (ControlNet)
![]()
Place normal and openpose image with reference to images.
Download: ControlNet Gen
Recommend Checkpoint Model List
Anime Style SD1.5
- https://civitai.com/models/35960/flat-2d-animerge
- https://civitai.com/models/24149/mistoonanime
Realistic Style SD1.5
- https://civitai.com/models/4201/realistic-vision-v51
- https://civitai.com/models/49463/am-i-real
- https://civitai.com/models/43331/majicmix-realistic
Custom Nodes
Expand to see all the available nodes description.
<details> <summary> All Custom Nodes </summary>| Name | Description | Preview |
| -------------------- | ---------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Segmentation (SAM) | Integrative SAM node allowing you to directly select and create multiple image segment output. | <img src="https://avatech-avatar-dev1.nyc3.cdn.digitaloceanspaces.com/public-download/github-readme/270576351-8aabeba8-5450-4d39-8203-e91f9ab47190.png" width="300"> |
| Name | Description | Preview |
| ---------------------------- | ----------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Create Mesh Layer | Create a mesh object from the input images (usually a segmented part of the entire image) | <img src="https://avatech-avatar-dev1.nyc3.cdn.digitaloceanspaces.com/public-download/github-readme/270576646-40740d25-9411-4cd3-a6c0-8b9008bca41c.png" width="300"> |
| Join Meshes | Combine multiple meshes into a single mesh object | <img src="https://avatech-avatar-dev1.nyc3.cdn.digitaloceanspaces.com/public-download/github-readme/270577004-ba7afbc5-9cd5-4f97-9614-f71133f5783e.png" width="300"> |
| Match Texture Aspect Ratio | Since the mesh is created in 1:1 aspect ratio, a re-scale is needed at the end of the operation | <img src="https://avatech-avatar-dev1.nyc3.cdn.digitaloceanspaces.com/public-download/github-readme/270602782-cb7155be-fb31-49f8-a24a-d001a1484ea7.png" width="300"> |
| Plane Texture Unwrap | Will perform mesh face fill and UV Cube project on the target plane mesh, scaled to bounds. | <img src="https://avatech-avatar-dev1.nyc3.cdn.digitaloceanspaces.com/public-download/github-readme/270603006-4b9c0cf5-0497-47bf-8e06-5a3370084c11.png" width="300"> |
| Name | Description | Preview |
| ----------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Mesh Modify Shape Key | Given shape key name & target vertex_group, modify the vertex / all vertex’s transform | <img src="https://avatech-avatar-dev1.nyc3.cdn.digitaloceanspaces.com/public-download/github-readme/270577944-ab4f259c-89a7-4f51-bc54-fd179e252073.png" width="300"> |
| Create Shape Flow | Create runtime shape flow graph, allowing interactive inputs affecting shape keys value in runtime | <img src="https://avatech-avatar-dev1.nyc3.cdn.digitaloceanspaces.com/public-download/github-readme/270592752-abfdd801-0387-4c5d-9c11-6c23337ff1dd.png" width="300"> |
| Name | Description | Preview |
| -------------------- | ----------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Avatar Main Output | The primary output of the .ava file. The embedded Avatar View will auto update with this node's output | <img src="https://avatech-avatar-dev1.nyc3.cdn.digitaloceanspaces.com/public-download/github-readme/270592519-6a9a8bb4-05ec-4a2e-98bf-194b6af3a62a.png" width="300"> |
Shape Flow
![]()
Installation
Method 1 - Windows
-
Download Python environment from here
-
Unzip it to ComfyUI directory
-
Run the
run_cpu_3.10.batorrun_nvidia_gpu_3.10.bat -
Install avatar-graph-comfyui from ComfyUI Manager
Method 2 - macOS/Linux
Make sure your Python environment is 3.10.x as required by the bpy package. Then go to the ComfyUI directory and run:
Suggest using conda for your comfyui python environment
conda create --name comfyui python=3.10
conda activate comfyui
pip install -r requirements.txt
-
cd custom_nodes -
git clone https://github.com/avatechgg/avatar-graph-comfyui.git -
cd avatar-graph-comfyui && python -m pip install -r requirements.txt -
Restart ComfyUI with enable-cors-header
python main.py --enable-cors-headeror (for mac)python main.py --force-fp16 --enable-cors-header
Development
If you are interested in contributing
For comfyui frontend extension, frontend js located at avatar-graph-comfyui/js
Web stack used: vanjs tailwindcss
Install deps
pnpm i
Run the dev command to start the tailwindcss watcher
pnpm dev
For each changes, simply refresh the comfyui page to see the changes.
<details> <summary>p.s. For tailwind autocomplete, add the following to your vscode settings.json.</summary>{
"tailwindCSS.experimental.classRegex": [
["class\\s?:\\s?([\\s\\S]*)", "(?:\"|')([^\"']*)(?:\"|')"]
]
}
</details>
Update blender node types
To update blender operations input and output types (stored in blender/input_types.txt), run:
python generate_blender_types.py
FAQ
What is --enable-cors-header used for?
It is used to enable communication between ComfyUI and our editor (https://editor.avatech.ai), which is in charge of animating static characters. The only messages exchanged between them are the character data like the meshes of eyes and mouth, and the JSON format of our editor graph.
When you execute the ComfyUI graph, it sends the character data and the JSON graph to our editor for animating. When you modify and save the graph in our editor, it sends the modified graph back to ComfyUI. To validate it, you can open the js/index.js, and log the message in window.addEventListener("message", ...) and postMessage(message).
You can also run ComfyUI without the --enable-cors-header: execute the ComfyUI workflow, then download the .GLB or .GLTF format by right clicking the Avatar Main Output node and Save File option. Yet, this will disable the real-time character preview in the top-right corner of ComfyUI. Feel free to view it in other software like Blender.