Object Datalayout Transfer
Generate the data layers a Data Transfer modifier needs
- BPY_OBJ
- BPY_OBJ
A direct wrap of bpy.ops.object.datalayout_transfer(modifier, ...) - the "Generate Data Layers" button on Blender's Data Transfer modifier. Data Transfer copies data (UVs, vertex colors, vertex groups, sharp/crease flags, and more) from a source mesh onto a target mesh, but it can only write into layers that already exist on the target. This operator is the step that creates those matching layers first, so the actual transfer has somewhere to write.
Where it fits in Avatar Graph
Avatar Graph (avatechai/avatar-graph-comfyui) rigs a flat character image into a real-time interactive avatar - segmentation, mesh layers, a "Shape Flow" runtime graph, exported through Avatar Main Output. Data Transfer isn't part of that documented pipeline; this node belongs to the much larger family the pack generates by exposing Blender's Object operators directly. It's real, useful Blender functionality if you're doing custom mesh work around a rig - moving UV or vertex-group data between the segmented mesh layers this pack produces and a hand-modeled mesh, for example - but not something the standard tutorial calls for.
How it works
The Data Transfer modifier needs a source object and a chosen data_type (UV layout, vertex colors, custom normals, bevel weights, and a dozen others), and it maps source layers onto matching destination layers based on selection rules. If the destination mesh doesn't have a layer of the right name/type yet, the modifier has nothing to write into - this operator generates that layer first, using the same source/type/selection settings the modifier itself is configured with.
Inputs and outputs
modifier(default"") - the name of an existing Data Transfer modifier on the object; this operator reads its settings rather than taking them all as separate fields, so the modifier has to already be set up correctly.data_type- which kind of data layer to generate (UV, vertex colors, bevel weight, crease, sharp edge, and more - a 13-option enum matching the modifier's own data-type list).use_delete(defaultfalse) - whether to delete destination layers that no longer have a matching source, instead of just adding missing ones.layers_select_src- which source layers to pull from (ACTIVE,ALL,BONE_SELECT,BONE_DEFORM).layers_select_dst- how destination layers get matched or named (ACTIVE,NAME,INDEX).BPY_OBJ(optional) - the object carrying the modifier. Unwired, it falls back to Blender's active object.
Output: BPY_OBJ - the same object, passed through for chaining, matching every other node in this family.
How to install it
ComfyUI Manager: search "avatar-graph-comfyui", install, restart. Manual clone:
cd ComfyUI/custom_nodes
git clone https://github.com/avatechai/avatar-graph-comfyui
cd avatar-graph-comfyui && python -m pip install -r requirements.txt
bpy needs Python 3.10.x specifically, which is the actual blocker most people hit. Windows gets a prebuilt Python 3.10 ComfyUI zip from the README; on Mac/Linux, set up a dedicated conda env (conda create --name comfyui python=3.10). Restart with --enable-cors-header if you want the live avatar preview to connect to editor.avatech.ai - exports work without it.
Common issues & troubleshooting
Install trouble is almost always the Python version - a 3.11/3.12 environment, the default on most current ComfyUI installs, can't load bpy. There's also a real report of Avatar Graph leaving a ComfyUI Desktop install badly broken after install (an oversized logo, an unexpected audio-permission popup) severe enough that a full reinstall didn't fully clear it - test in a spare, portable ComfyUI instance first if you're not already sandboxed on 3.10.
For this node: it does nothing useful if modifier doesn't match an existing Data Transfer modifier on the object, or if that modifier's source object isn't set - this operator reads the modifier's own configuration rather than taking a source mesh as a separate input, so get the modifier itself set up right first, then call this to generate the layers it needs.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| BPY_OBJopt | BPY_OBJ | — | |
| modifieropt | STRING | — | |
| data_typeopt | COMBO | 13 options: VGROUP_WEIGHTS, BEVEL_WEIGHT_VERT, COLOR_VERTEX, SHARP_EDGE, SEAM, CREASE, +7 | |
| use_deleteopt | BOOLEAN | false | — |
| layers_select_srcopt | COMBO | 4 options: ACTIVE, ALL, BONE_SELECT, BONE_DEFORM | |
| layers_select_dstopt | COMBO | 3 options: ACTIVE, NAME, INDEX |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| BPY_OBJ | BPY_OBJ | — |