Object Transforms To Deltas
Freezing animation into a rest pose with Transforms To Deltas
- BPY_OBJ
- BPY_OBJ
"Transforms to Deltas" is one of those Blender operators that sits quietly in the Object menu under Animation and only makes sense once you've hit a specific problem: your object is animated - keyframed, or moved by a parent - and you want to freeze that motion into the mesh's rest pose so the animation layer can start fresh. Delta transforms store the current transform as a per-component offset relative to the object's base, and zero out the original animation. Object TransformsToDeltas wraps exactly that operator (bpy.ops.object.transforms_to_deltas()) as an Avatar Graph node.
In the context of this pack - building a character, posing it, then handing it to the shape-flow runtime for real-time animation - this is a "settle the pose before the runtime takes over" step. The node only makes sense on objects that actually carry animation transforms, so if your avatar mesh is static, this is a no-op pass-through. But if you've driven motion into a mesh earlier in the graph (or brought in an animated object), this is how you commit that pose as the baseline.
The inputs: BPY_OBJ is the object; mode is an enum choosing what gets converted - ALL, LOC, ROT, or SCALE, i.e. bake every transform, or just location, just rotation, just scale. If you only care that the position becomes the rest position, LOC alone does it. reset_values (default true) is the "and zero out the original" part - with it off, you get the deltas but the original transforms stay, which is usually not what you want when freezing a pose.
Output is your BPY_OBJ, passed through with its transforms now baked as deltas.
Install is pack-wide: ComfyUI Manager → "Avatar Graph", or git clone https://github.com/avatechai/avatar-graph-comfyui into ComfyUI/custom_nodes and pip install -r requirements.txt. Python 3.10 required (bpy==3.6.0), first launch downloads the ~2.4 GB SAM model.
The honest caveat: this is an animation-pipeline tool, and in a ComfyUI graph the whole "delta" bookkeeping is only meaningful if the mesh and its animation survive to a later stage - which, in this pack, means the export or the runtime. Since the pack resets the Blender scene at the start of every run, "committing a pose" is per-run and idempotent; you're not mutating a saved scene. If you're not animating before this node, leave it out - it's more registry plumbing than a daily driver, and its sibling Object Transform Apply covers the more common "bake the transform into the geometry" case.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| BPY_OBJopt | BPY_OBJ | — | |
| modeopt | COMBO | 4 options: ALL, LOC, ROT, SCALE | |
| reset_valuesopt | BOOLEAN | true | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| BPY_OBJ | BPY_OBJ | — |