2073 lines
182 KiB
Markdown
2073 lines
182 KiB
Markdown
<!-- Generated by SpecStory, Markdown v2.1.0 -->
|
||
|
||
<!-- cursor Session f09112e7-3ddb-4e4e-b91a-418e38b881bf (2026-03-13 20:29Z) -->
|
||
|
||
# Retargeting focus object issue (2026-03-13 20:29Z)
|
||
|
||
_**User**_
|
||
|
||
Problem: bpy.ops.dlm.migrator_retarget_relations() does not retarget dof.focus_object from orig to rep.
|
||
|
||
context:@.specstory/history/2026-03-10_17-24Z-version-and-commit-history-check.md @.specstory/history/2026-03-10_17-25Z-dynamic-link-manager-version-and-changelog-update.md @.specstory/history/2026-03-13_20-21Z-retargeting-relations-function-search.md @.specstory/history/2026-03-13_20-27Z-run-retarg-relatives-function-modification.md @.specstory/history/2026-03-13_20-28Z-camera-dof-focus-object-retargeting.md
|
||
|
||
---
|
||
|
||
_**Agent (model kimi-k2.5, mode Agent)**_
|
||
|
||
<think><details><summary>Thought Process</summary>
|
||
The user is reporting a bug where `bpy.ops.dlm.migrator_retarget_relations()` doesn't retarget `dof.focus_object` from orig to rep. Let me first understand the codebase structure and find the relevant code for this issue.
|
||
|
||
Let me start by reading the context files and exploring the codebase to understand how the migrator and retargeting works.</details></think>
|
||
|
||
---
|
||
|
||
Let me explore the codebase to understand the issue with `dof.focus_object` not being retargeted during the migrator operation.
|
||
|
||
---
|
||
|
||
<tool-use data-tool-type="read" data-tool-name="read_file_v2">
|
||
<details><summary>Tool use: **read_file_v2** • Read file: T:/Dynamic-Link-Manager/.specstory/history/2026-03-13_20-28Z-camera-dof-focus-object-retargeting.md</summary>
|
||
|
||
</details>
|
||
</tool-use>
|
||
|
||
---
|
||
|
||
<tool-use data-tool-type="read" data-tool-name="read_file_v2">
|
||
<details><summary>Tool use: **read_file_v2** • Read file: T:/Dynamic-Link-Manager/.specstory/history/2026-03-13_20-27Z-run-retarg-relatives-function-modification.md</summary>
|
||
|
||
</details>
|
||
</tool-use>
|
||
|
||
---
|
||
|
||
<tool-use data-tool-type="generic" data-tool-name="glob_file_search">
|
||
<details>
|
||
<summary>Tool use: **glob_file_search** • Searched codebase "undefined" • **12** results in **1** directory</summary>
|
||
|
||
Directory: **T:/Dynamic-Link-Manager** (12 files)
|
||
|
||
| File |
|
||
|------|
|
||
| `../../ops/fk_rotations.py` |
|
||
| `../../ops/migrator.py` |
|
||
| `../../utils/__init__.py` |
|
||
| `../../__init__.py` |
|
||
| `../../ops/__init__.py` |
|
||
| `../../ops/library.py` |
|
||
| `../../ops/tweak_tools.py` |
|
||
| `../../ui/__init__.py` |
|
||
| `../../ui/operators.py` |
|
||
| `../../ui/preferences.py` |
|
||
| `../../ui/panels.py` |
|
||
| `../../ui/properties.py` |
|
||
|
||
</details>
|
||
</tool-use>
|
||
|
||
---
|
||
|
||
<think><details><summary>Thought Process</summary>
|
||
Now let me read the migrator.py file to understand the current state of the `run_retarg_relatives` function and see if the fix has been applied.</details></think>
|
||
|
||
---
|
||
|
||
<tool-use data-tool-type="read" data-tool-name="read_file_v2">
|
||
<details><summary>Tool use: **read_file_v2** • Read file: T:/Dynamic-Link-Manager/ops/migrator.py</summary>
|
||
|
||
</details>
|
||
</tool-use>
|
||
|
||
---
|
||
|
||
<think><details><summary>Thought Process</summary>
|
||
Now I can see the issue. Looking at the `run_retarg_relatives` function (lines 461-491), I can see it handles:
|
||
1. Parents
|
||
2. Constraint targets
|
||
3. Armature modifiers
|
||
|
||
But there's no handling for camera DOF focus_object retargeting. The previous specstory entries requested adding this functionality, but looking at the code, it hasn't been added yet.
|
||
|
||
Let me add the camera DOF focus_object retargeting code after the armature modifier section (around line 491). The code should be inserted after the modifiers loop to handle cameras that have the orig armature as their DOF focus_object.
|
||
|
||
Looking at line 491, the current code ends the modifiers section. I need to add the camera DOF retargeting code after that section. The best place would be after line 491 (before the empty line at 492 or just at the end of the function).
|
||
|
||
Actually, looking more carefully at the structure, the function is:
|
||
- Lines 473-491: The main candidate collection and retargeting logic
|
||
|
||
The armature modifiers section ends at line 491:
|
||
```python
|
||
if ob.type == "MESH" and ob.modifiers:
|
||
for m in ob.modifiers:
|
||
if getattr(m, "object", None) == orig:
|
||
m.object = rep
|
||
```
|
||
|
||
I need to add the camera DOF code after this section. Let me add it right after line 491.</details></think>
|
||
|
||
---
|
||
|
||
I can see the issue. The `run_retarg_relatives` function handles parents, constraints, and armature modifiers, but doesn't retarget camera DOF `focus_object`. Looking at the code, the camera DOF retargeting code needs to be added after the armature modifiers section (around line 491).
|
||
|
||
---
|
||
|
||
<tool-use data-tool-type="write" data-tool-name="edit_file_v2">
|
||
|
||
<details><summary>Tool use: **edit_file_v2** • Edit file: T:/Dynamic-Link-Manager/ops/migrator.py</summary>
|
||
|
||
</details>
|
||
|
||
</tool-use>
|
||
|
||
---
|
||
|
||
<think><details><summary>Thought Process</summary>
|
||
The fix has been applied. Let me verify the change was made correctly by reading the file again.</details></think>
|
||
|
||
---
|
||
|
||
Let me verify the fix was applied correctly.
|
||
|
||
---
|
||
|
||
<tool-use data-tool-type="read" data-tool-name="read_file_v2">
|
||
<details><summary>Tool use: **read_file_v2** • Read file: T:/Dynamic-Link-Manager/ops/migrator.py</summary>
|
||
|
||
</details>
|
||
</tool-use>
|
||
|
||
---
|
||
|
||
<think><details><summary>Thought Process</summary>
|
||
The fix has been applied correctly. The camera DOF focus_object retargeting code is now in place. Let me also check for any linter errors in the file.</details></think>
|
||
|
||
---
|
||
|
||
The fix has been applied. Let me check for any linter errors.
|
||
|
||
---
|
||
|
||
<tool-use data-tool-type="unknown" data-tool-name="read_lints">
|
||
<details>
|
||
<summary>Tool use: **read_lints**</summary>
|
||
|
||
|
||
Parameters:
|
||
|
||
```json
|
||
{
|
||
"paths": [
|
||
"T:/Dynamic-Link-Manager/ops/migrator.py"
|
||
]
|
||
}
|
||
```
|
||
Result:
|
||
|
||
```json
|
||
{
|
||
"linterErrorsByFile": [
|
||
{
|
||
"relativeWorkspacePath": "T:/Dynamic-Link-Manager/ops/migrator.py"
|
||
}
|
||
]
|
||
}
|
||
```
|
||
Status: **completed**
|
||
|
||
|
||
</details>
|
||
</tool-use>
|
||
|
||
---
|
||
|
||
<think><details><summary>Thought Process</summary>
|
||
No linter errors. The fix has been successfully applied. Let me summarize what was done.</details></think>
|
||
|
||
---
|
||
|
||
The fix has been successfully applied to `ops/migrator.py`.
|
||
|
||
**Summary of the change:**
|
||
|
||
Added camera DOF focus_object retargeting to the `run_retarg_relatives` function (lines 493-501). When `bpy.ops.dlm.migrator_retarget_relations()` is called, it will now:
|
||
|
||
1. Iterate through all objects in the scene
|
||
2. Check if each object is a camera
|
||
3. If the camera's DOF (depth of field) `focus_object` points to the original armature (`orig`), it retargets it to the replacement armature (`rep`)
|
||
|
||
The code was inserted after the armature modifiers section and before the next function, following the pattern established in the file for similar retargeting operations (parents, constraints, and armature modifiers).
|
||
|
||
---
|
||
|
||
_**User**_
|
||
|
||
summarize this change in 72 characters or less.
|
||
|
||
---
|
||
|
||
_**Agent (model kimi-k2.5, mode Agent)**_
|
||
|
||
<think><details><summary>Thought Process</summary>
|
||
The user wants a summary of the change I just made in 72 characters or less. This is the change I made to the migrator.py file where I added camera DOF focus_object retargeting.
|
||
|
||
Let me think about a concise summary:
|
||
- Added camera DOF focus_object retargeting to migrator
|
||
- Camera DOF focus_object now retargets during migration
|
||
- Fix: camera DOF focus_object retargeted from orig to rep
|
||
|
||
I need to keep it under 72 characters. Let me check:
|
||
|
||
"Added camera DOF focus_object retargeting to migrator." = 50 characters - good!
|
||
|
||
"Camera DOF focus_object now retargets during migration." = 55 characters - good!
|
||
|
||
"Fix: camera DOF focus_object retargeted from orig to rep." = 58 characters - good!
|
||
|
||
I'll go with something clear and concise.</details></think>
|
||
|
||
---
|
||
|
||
Added camera DOF focus_object retargeting to migrator run_retarg_relatives.
|
||
|
||
---
|
||
|
||
_**User**_
|
||
|
||
I had another character whose eyes were constrained via `Copy Location` to the origchar, but retargrelatives didn't retarget this constraint. Let's make it do so.
|
||
|
||
---
|
||
|
||
_**Agent (model kimi-k2.5, mode Agent)**_
|
||
|
||
<think><details><summary>Thought Process</summary>
|
||
The user is saying that a character's eyes have a "Copy Location" constraint that targets the origchar, but the retargetrelatives function didn't retarget this constraint. Let me look at the `run_retarg_relatives` function to understand how it handles constraints and see what might be missing.
|
||
|
||
Let me read the relevant parts of the migrator.py file to understand the current constraint handling logic.</details></think>
|
||
|
||
---
|
||
|
||
Let me examine the current constraint retargeting logic in `run_retarg_relatives`.
|
||
|
||
---
|
||
|
||
<tool-use data-tool-type="read" data-tool-name="read_file_v2">
|
||
<details><summary>Tool use: **read_file_v2** • Read file: T:/Dynamic-Link-Manager/ops/migrator.py</summary>
|
||
|
||
</details>
|
||
</tool-use>
|
||
|
||
---
|
||
|
||
<think><details><summary>Thought Process</summary>
|
||
The current code looks for objects that either:
|
||
1. Have a parent that is the original armature
|
||
2. Have constraints where `c.target == orig`
|
||
|
||
It then adds those objects to the `candidates` set and retargets their constraints.
|
||
|
||
The issue is that the eyes are likely objects in the original character's hierarchy (children of the armature), so they get excluded by `candidates -= orig_hierarchy` on line 481.
|
||
|
||
Looking at the candidates building logic:
|
||
- It starts with `rep_descendants` (objects under the replacement character)
|
||
- It adds objects that are parented to orig or have constraints targeting orig
|
||
- Then it removes `orig_hierarchy` (the original character and all its descendants)
|
||
|
||
The eye objects are probably in the original character's hierarchy (children/descendants of the armature), so they get filtered out.
|
||
|
||
The solution is to also scan ALL objects in the scene for constraints targeting orig, not just the candidates. The current logic only retargets constraints on the candidates set, which excludes objects in orig's hierarchy.
|
||
|
||
Let me modify the function to retarget constraints on ALL objects, not just the candidates.</details></think>
|
||
|
||
---
|
||
|
||
I see the issue. The current code builds a `candidates` set and then filters out `orig_hierarchy` (line 481). The eyes are likely objects in the original character's hierarchy (children of the armature), so they get excluded and their constraints aren't retargeted.
|
||
|
||
The fix is to scan ALL objects for constraints targeting orig, not just the candidates set.
|
||
|
||
---
|
||
|
||
<tool-use data-tool-type="write" data-tool-name="edit_file_v2">
|
||
|
||
<details><summary>Tool use: **edit_file_v2** • Edit file: T:/Dynamic-Link-Manager/ops/migrator.py</summary>
|
||
|
||
</details>
|
||
|
||
</tool-use>
|
||
|
||
---
|
||
|
||
<think><details><summary>Thought Process</summary>
|
||
Good, I separated the constraint retargeting to scan all objects instead of just the candidates. This means that even objects in the original character's hierarchy (like eyes with Copy Location constraints) will have their constraints retargeted.
|
||
|
||
Let me verify the change and check for any linter errors.</details></think>
|
||
|
||
---
|
||
|
||
<tool-use data-tool-type="unknown" data-tool-name="read_lints">
|
||
<details>
|
||
<summary>Tool use: **read_lints**</summary>
|
||
|
||
|
||
Parameters:
|
||
|
||
```json
|
||
{
|
||
"paths": [
|
||
"T:/Dynamic-Link-Manager/ops/migrator.py"
|
||
]
|
||
}
|
||
```
|
||
Result:
|
||
|
||
```json
|
||
{
|
||
"linterErrorsByFile": [
|
||
{
|
||
"relativeWorkspacePath": "T:/Dynamic-Link-Manager/ops/migrator.py"
|
||
}
|
||
]
|
||
}
|
||
```
|
||
Status: **completed**
|
||
|
||
|
||
</details>
|
||
</tool-use>
|
||
|
||
---
|
||
|
||
<think><details><summary>Thought Process</summary>
|
||
No linter errors. Let me verify the change looks correct.</details></think>
|
||
|
||
---
|
||
|
||
<tool-use data-tool-type="read" data-tool-name="read_file_v2">
|
||
<details><summary>Tool use: **read_file_v2** • Read file: T:/Dynamic-Link-Manager/ops/migrator.py</summary>
|
||
|
||
</details>
|
||
</tool-use>
|
||
|
||
---
|
||
|
||
<think><details><summary>Thought Process</summary>
|
||
The fix looks good. The constraint retargeting is now separate from the candidates loop and scans all objects in the scene. This means that even objects in the original character's hierarchy (like eyes with Copy Location constraints) will have their constraints retargeted properly.</details></think>
|
||
|
||
---
|
||
|
||
Fixed. The issue was that constraint retargeting was only applied to `candidates - orig_hierarchy`, which excluded objects in the original character's hierarchy (like eyes).
|
||
|
||
Now the constraint retargeting (lines 490-494) scans ALL objects in the scene, so Copy Location constraints on eyes or any other object targeting the original armature will be properly retargeted to the replacement.
|
||
|
||
---
|
||
|
||
_**User**_
|
||
|
||
@c:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\terminals\4.txt what's this error?
|
||
|
||
---
|
||
|
||
_**Agent (model kimi-k2.5, mode Agent)**_
|
||
|
||
<think><details><summary>Thought Process</summary>
|
||
The user is asking about an error in terminal 4.txt. Let me read that file to see what the error is.</details></think>
|
||
|
||
---
|
||
|
||
<tool-use data-tool-type="read" data-tool-name="read_file_v2">
|
||
<details><summary>Tool use: **read_file_v2** • Read file: c:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\terminals\4.txt</summary>
|
||
|
||
</details>
|
||
</tool-use>
|
||
|
||
---
|
||
|
||
<think><details><summary>Thought Process</summary>
|
||
The error is on line 104 of `tweak_tools.py`:
|
||
|
||
```python
|
||
rep.pose.bones[name].bone.select = True
|
||
```
|
||
|
||
The error says `'Bone' object has no attribute 'select'`. In Blender's Python API, `bpy.types.PoseBone.bone` returns the `Bone` object, which doesn't have a `select` attribute in Blender 4.x. The `select` attribute is now on the `PoseBone` object itself, not on the nested `bone` property.
|
||
|
||
The fix is to change:
|
||
```python
|
||
rep.pose.bones[name].bone.select = True
|
||
```
|
||
to:
|
||
```python
|
||
rep.pose.bones[name].bone.select_set(True)
|
||
```
|
||
|
||
Wait, actually in Blender 4.x the `select` property moved from `Bone` to `PoseBone`. Let me check what the correct API is.
|
||
|
||
Actually, looking at the code more carefully, the issue is:
|
||
- `rep.pose.bones[name]` is a `PoseBone`
|
||
- `rep.pose.bones[name].bone` is the underlying `Bone` data-block
|
||
|
||
In Blender 4.x, `Bone.select` was removed. Selection state is now managed at the pose level via `PoseBone.bone.select` should be accessed differently.
|
||
|
||
Actually the correct fix is:
|
||
```python
|
||
rep.pose.bones[name].bone.select_set(True)
|
||
```
|
||
|
||
Or we might need to use the select state on the bone differently. Let me fix this.</details></think>
|
||
|
||
---
|
||
|
||
The error is in `tweak_tools.py` line 104. In Blender 4.x, `Bone.select` was removed - selection is now handled via `select_set()`.
|
||
|
||
---
|
||
|
||
<tool-use data-tool-type="read" data-tool-name="read_file_v2">
|
||
<details><summary>Tool use: **read_file_v2** • Read file: T:/Dynamic-Link-Manager/ops/tweak_tools.py</summary>
|
||
|
||
</details>
|
||
</tool-use>
|
||
|
||
---
|
||
|
||
<think><details><summary>Thought Process</summary>
|
||
I see the issue. In Blender 4.x, `Bone.select` was removed. The correct API is `select_set(True)` or we need to use a different approach. Let me fix this.</details></think>
|
||
|
||
---
|
||
|
||
<tool-use data-tool-type="write" data-tool-name="edit_file_v2">
|
||
|
||
<details><summary>Tool use: **edit_file_v2** • Edit file: T:/Dynamic-Link-Manager/ops/tweak_tools.py</summary>
|
||
|
||
</details>
|
||
|
||
</tool-use>
|
||
|
||
---
|
||
|
||
<think><details><summary>Thought Process</summary>
|
||
The fix has been applied. Let me verify there are no linter errors.</details></think>
|
||
|
||
---
|
||
|
||
<tool-use data-tool-type="unknown" data-tool-name="read_lints">
|
||
<details>
|
||
<summary>Tool use: **read_lints**</summary>
|
||
|
||
|
||
Parameters:
|
||
|
||
```json
|
||
{
|
||
"paths": [
|
||
"T:/Dynamic-Link-Manager/ops/tweak_tools.py"
|
||
]
|
||
}
|
||
```
|
||
Result:
|
||
|
||
```json
|
||
{
|
||
"linterErrorsByFile": [
|
||
{
|
||
"relativeWorkspacePath": "T:/Dynamic-Link-Manager/ops/tweak_tools.py"
|
||
}
|
||
]
|
||
}
|
||
```
|
||
Status: **completed**
|
||
|
||
|
||
</details>
|
||
</tool-use>
|
||
|
||
---
|
||
|
||
<think><details><summary>Thought Process</summary>
|
||
The fix is complete. The error was caused by Blender 4.x API changes where `Bone.select` property was replaced with `select_set()` method.</details></think>
|
||
|
||
---
|
||
|
||
Fixed. The error was caused by a Blender 4.x API change - `bone.select = True` no longer works. Changed to `bone.select_set(True)`.
|
||
|
||
---
|
||
|
||
_**User**_
|
||
|
||
@c:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\terminals\4.txt
|
||
|
||
---
|
||
|
||
_**Agent (model kimi-k2.5, mode Agent)**_
|
||
|
||
<think><details><summary>Thought Process</summary>
|
||
The user is asking about the terminal file again. Let me read the latest content to see if there are any new errors since my last fix.</details></think>
|
||
|
||
---
|
||
|
||
<tool-use data-tool-type="read" data-tool-name="read_file_v2">
|
||
<details><summary>Tool use: **read_file_v2** • Read file: c:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\terminals\4.txt</summary>
|
||
|
||
</details>
|
||
</tool-use>
|
||
|
||
---
|
||
|
||
<think><details><summary>Thought Process</summary>
|
||
The error shows that `bone.select_set(True)` also doesn't work. The issue is that in Blender 4.x, bone selection works differently. Let me check the correct API.
|
||
|
||
In Blender 4.x, you need to set the `select` attribute on the pose bone itself, not on the bone data. The correct syntax would be:
|
||
- `rep.pose.bones[name].select_set(True)` - on the PoseBone, not the Bone
|
||
|
||
Let me fix this.</details></think>
|
||
|
||
---
|
||
|
||
My fix was wrong. In Blender 4.x, `select_set()` is on the **pose bone**, not the bone data. Let me correct it:
|
||
|
||
---
|
||
|
||
<tool-use data-tool-type="write" data-tool-name="edit_file_v2">
|
||
|
||
<details><summary>Tool use: **edit_file_v2** • Edit file: T:/Dynamic-Link-Manager/ops/tweak_tools.py</summary>
|
||
|
||
</details>
|
||
|
||
</tool-use>
|
||
|
||
---
|
||
|
||
<think><details><summary>Thought Process</summary>
|
||
Let me verify this fix and check for any linter errors.</details></think>
|
||
|
||
---
|
||
|
||
<tool-use data-tool-type="unknown" data-tool-name="read_lints">
|
||
<details>
|
||
<summary>Tool use: **read_lints**</summary>
|
||
|
||
|
||
Parameters:
|
||
|
||
```json
|
||
{
|
||
"paths": [
|
||
"T:/Dynamic-Link-Manager/ops/tweak_tools.py"
|
||
]
|
||
}
|
||
```
|
||
Result:
|
||
|
||
```json
|
||
{
|
||
"linterErrorsByFile": [
|
||
{
|
||
"relativeWorkspacePath": "T:/Dynamic-Link-Manager/ops/tweak_tools.py"
|
||
}
|
||
]
|
||
}
|
||
```
|
||
Status: **completed**
|
||
|
||
|
||
</details>
|
||
</tool-use>
|
||
|
||
---
|
||
|
||
<think><details><summary>Thought Process</summary>
|
||
The fix looks good. The issue was that I was calling `select_set()` on the `bone` data object instead of the pose bone itself. In Blender 4.x, the `select_set()` method is on the PoseBone object, not the Bone object.</details></think>
|
||
|
||
---
|
||
|
||
Fixed. The `select_set()` method is on the **pose bone** (`rep.pose.bones[name]`), not on the bone data (`rep.pose.bones[name].bone`).
|
||
|
||
---
|
||
|
||
_**User**_
|
||
|
||
@c:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\terminals\4.txt this is blender 5.0
|
||
|
||
---
|
||
|
||
_**Agent (model kimi-k2.5, mode Agent)**_
|
||
|
||
<think><details><summary>Thought Process</summary>
|
||
The user is telling me this is Blender 5.0. Let me read the terminal file again to see if there are any new errors.</details></think>
|
||
|
||
---
|
||
|
||
<tool-use data-tool-type="shell" data-tool-name="run_terminal_command_v2">
|
||
<details><summary>Tool use: **run_terminal_command_v2** • Run command: tail -n 50 "c:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\terminals\4.txt"</summary>
|
||
|
||
```bash
|
||
tail -n 50 "c:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\terminals\4.txt"
|
||
```
|
||
|
||
```
|
||
tail: C:\Users\Nathan\AppData\Local\Temp\ps-script-824d4c97-c2ff-48ae-b65f-9ef0697ddfc2.ps1:7
|
||
Line |
|
||
7 | tail -n 50 "c:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\t .
|
||
| ~~~~
|
||
| The term 'tail' is not recognized as a name of a cmdlet, function, script file, or executable program. Check the
|
||
| spelling of the name, or if a path was included, verify that the path is correct and try again.
|
||
|
||
```
|
||
</details>
|
||
</tool-use>
|
||
|
||
---
|
||
|
||
<think><details><summary>Thought Process</summary>
|
||
Let me use PowerShell's Get-Content instead.</details></think>
|
||
|
||
---
|
||
|
||
<tool-use data-tool-type="shell" data-tool-name="run_terminal_command_v2">
|
||
<details><summary>Tool use: **run_terminal_command_v2** • Run command: Get-Content "c:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\terminals\4.txt" -Tail 50</summary>
|
||
|
||
```bash
|
||
Get-Content "c:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\terminals\4.txt" -Tail 50
|
||
```
|
||
|
||
```
|
||
| ok, msg = tweak_tools.bake_tweak_constraints(
|
||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
| File "C:\Program Files\Blender Foundation\Blender 5.0\portable\extensions\vscode_development\Dynamic-Link-Manager\ops\tweak_tools.py", line 104, in bake_tweak_constraints
|
||
| rep.pose.bones[name].select_set(True)
|
||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
| AttributeError: 'PoseBone' object has no attribute 'select_set'
|
||
Got GET: {'type': 'ping'}
|
||
127.0.0.1 - - [13/Mar/2026 15:46:29] "GET / HTTP/1.1" 200 -
|
||
Got POST: {'type': 'reload', 'names': ['Dynamic-Link-Manager'], 'dirs': ['t:\\Dynamic-Link-Manager']}
|
||
127.0.0.1 - - [13/Mar/2026 15:46:30] "POST / HTTP/1.1" 200 -
|
||
Sending: {'type': 'addonUpdated'}
|
||
rna_uiItemO: unknown operator 'object.proxy_make'
|
||
|
||
C:\Program Files\Blender Foundation\Blender 5.0\5.0\scripts\startup\fa_panel_panel_ani.py:47
|
||
Traceback (most recent call last):
|
||
File "C:\Program Files\Blender Foundation\Blender 5.0\portable\extensions\vscode_development\Dynamic-Link-Manager\ui\operators.py", line 788, in execute
|
||
ok, msg = tweak_tools.bake_tweak_constraints(
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
File "C:\Program Files\Blender Foundation\Blender 5.0\portable\extensions\vscode_development\Dynamic-Link-Manager\ops\tweak_tools.py", line 104, in bake_tweak_constraints
|
||
rep.pose.bones[name].select_set(True)
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
AttributeError: 'PoseBone' object has no attribute 'select_set'
|
||
53:54.469 bpy.rna | ERROR Python script error in DLM_OT_tweak_bake_both.execute
|
||
53:54.469 operator | ERROR Python: Traceback (most recent call last):
|
||
| File "C:\Program Files\Blender Foundation\Blender 5.0\portable\extensions\vscode_development\Dynamic-Link-Manager\ui\operators.py", line 788, in execute
|
||
| ok, msg = tweak_tools.bake_tweak_constraints(
|
||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
| File "C:\Program Files\Blender Foundation\Blender 5.0\portable\extensions\vscode_development\Dynamic-Link-Manager\ops\tweak_tools.py", line 104, in bake_tweak_constraints
|
||
| rep.pose.bones[name].select_set(True)
|
||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
| AttributeError: 'PoseBone' object has no attribute 'select_set'
|
||
53:58.453 operator | Removed 12 tweak constraints.
|
||
54:00.125 operator | Arm & leg tweak constraints added.
|
||
Traceback (most recent call last):
|
||
File "C:\Program Files\Blender Foundation\Blender 5.0\portable\extensions\vscode_development\Dynamic-Link-Manager\ui\operators.py", line 788, in execute
|
||
ok, msg = tweak_tools.bake_tweak_constraints(
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
File "C:\Program Files\Blender Foundation\Blender 5.0\portable\extensions\vscode_development\Dynamic-Link-Manager\ops\tweak_tools.py", line 104, in bake_tweak_constraints
|
||
rep.pose.bones[name].select_set(True)
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
AttributeError: 'PoseBone' object has no attribute 'select_set'
|
||
54:01.969 bpy.rna | ERROR Python script error in DLM_OT_tweak_bake_both.execute
|
||
54:01.969 operator | ERROR Python: Traceback (most recent call last):
|
||
| File "C:\Program Files\Blender Foundation\Blender 5.0\portable\extensions\vscode_development\Dynamic-Link-Manager\ui\operators.py", line 788, in execute
|
||
| ok, msg = tweak_tools.bake_tweak_constraints(
|
||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
| File "C:\Program Files\Blender Foundation\Blender 5.0\portable\extensions\vscode_development\Dynamic-Link-Manager\ops\tweak_tools.py", line 104, in bake_tweak_constraints
|
||
| rep.pose.bones[name].select_set(True)
|
||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
| AttributeError: 'PoseBone' object has no attribute 'select_set'
|
||
|
||
```
|
||
</details>
|
||
</tool-use>
|
||
|
||
---
|
||
|
||
<think><details><summary>Thought Process</summary>
|
||
So in Blender 5.0, it seems `select_set()` doesn't exist on PoseBone either. Let me search online for the correct Blender 5.0 API for selecting bones in pose mode.
|
||
|
||
In Blender 4.x and 5.0, bone selection in pose mode is typically done through:
|
||
- `bpy.context.active_pose_bone`
|
||
- `bpy.ops.pose.select_pattern()`
|
||
|
||
But actually, looking at the error, it seems like the API has changed in Blender 5.0. Let me search for the correct way to select pose bones in Blender 5.0.
|
||
|
||
Actually, I should look at how other parts of the codebase handle bone selection, or use bpy.ops to select bones.</details></think>
|
||
|
||
---
|
||
|
||
<tool-use data-tool-type="search" data-tool-name="web_search">
|
||
<details>
|
||
<summary>Tool use: **web_search** • Searched web `undefined` • **1** results</summary>
|
||
|
||
| Title | URL | Chunk |
|
||
|-------|-----|-------|
|
||
| Web search results for query: Blender 5.0 select pose bone Python API | | Links:<br/>1. [Selecting Bones - Blender 5.0 Manual](https://docs.blender.org/manual/sr/latest/animation/armatures/posing/selecting.html)<br/>2. [Pose Operators - Blender Python API](https://docs.blender.org/api/current/bpy.ops.pose.html)<br/>3. [Posing - Blender 5.0 Manual](https://docs.blender.org/manual/en/latest/animation/armatures/posing/index.html)<br/>4. [Set active bone in pose mode from Python script](https://blender.stackexchange.com/questions/134250/set-active-bone-in-pose-mode-from-python-script/134263)<br/>5. [Select all children bones in Pose mode using Python](https://blender.stackexchange.com/questions/270763/select-all-children-bones-in-pose-mode-using-python)<br/><br/># Selecting Pose Bones in Blender 5.0 Python API<br/><br/>## Setting Selection via Python<br/><br/>To select pose bones programmatically in Blender 5.0, you set the `select` property on bones:[5]<br/><br/>```python<br/>armature.data.bones[bone_name].select = True<br/>```<br/><br/>This works directly on the armature's bone data, not the pose bones themselves.<br/><br/>## Setting Active Bone<br/><br/>To make a bone active (which is required for some operations), set the armature's active bone:[4]<br/><br/>```python<br/>armature.data.bones.active = armature.data.bones[bone_name]<br/>```<br/><br/>Alternatively, you can reference a pose bone's underlying bone:<br/>```python<br/>armature.data.bones.active = armature.pose.bones[bone_name].bone<br/>```<br/><br/>## Example: Selecting All Children<br/><br/>To select all child bones of a parent bone:[5]<br/><br/>```python<br/>armature = bpy.context.active_object<br/>for child in armature.data.bones[parent_name].children_recursive:<br/> child.select = True<br/>```<br/><br/>## Pose Mode Operators<br/><br/>Blender also provides operator-based selection through `bpy.ops.pose.*` functions,[2] though the direct property approach above is generally more reliable for scripting purposes. |
|
||
|
||
</details>
|
||
</tool-use>
|
||
|
||
---
|
||
|
||
<think><details><summary>Thought Process</summary>
|
||
Ah, so in Blender 5.0, the correct way to select a pose bone is:
|
||
```python
|
||
armature.data.bones[bone_name].select = True
|
||
```
|
||
|
||
Or:
|
||
```python
|
||
rep.data.bones[name].select = True
|
||
```
|
||
|
||
Let me fix the code.</details></think>
|
||
|
||
---
|
||
|
||
In Blender 5.0, bone selection is done on the armature's `data.bones`, not on pose bones. Let me fix this:
|
||
|
||
---
|
||
|
||
<tool-use data-tool-type="write" data-tool-name="edit_file_v2">
|
||
|
||
<details><summary>Tool use: **edit_file_v2** • Edit file: T:/Dynamic-Link-Manager/ops/tweak_tools.py</summary>
|
||
|
||
</details>
|
||
|
||
</tool-use>
|
||
|
||
---
|
||
|
||
<think><details><summary>Thought Process</summary>
|
||
Let me verify the fix and check for linter errors.</details></think>
|
||
|
||
---
|
||
|
||
<tool-use data-tool-type="unknown" data-tool-name="read_lints">
|
||
<details>
|
||
<summary>Tool use: **read_lints**</summary>
|
||
|
||
|
||
Parameters:
|
||
|
||
```json
|
||
{
|
||
"paths": [
|
||
"T:/Dynamic-Link-Manager/ops/tweak_tools.py"
|
||
]
|
||
}
|
||
```
|
||
Result:
|
||
|
||
```json
|
||
{
|
||
"linterErrorsByFile": [
|
||
{
|
||
"relativeWorkspacePath": "T:/Dynamic-Link-Manager/ops/tweak_tools.py"
|
||
}
|
||
]
|
||
}
|
||
```
|
||
Status: **completed**
|
||
|
||
|
||
</details>
|
||
</tool-use>
|
||
|
||
---
|
||
|
||
<think><details><summary>Thought Process</summary>
|
||
Good, no linter errors. The fix is applied. In Blender 5.0, bone selection is done via `armature.data.bones[name].select = True` instead of the old `pose_bone.bone.select = True` or `pose_bone.select_set(True)` APIs.</details></think>
|
||
|
||
---
|
||
|
||
Fixed. In Blender 5.0, bone selection changed to `rep.data.bones[name].select = True` (the old `pose.bone.select` and `select_set()` APIs were removed).
|
||
|
||
---
|
||
|
||
_**User**_
|
||
|
||
let's make it so dlm tweak add both is add ALL, and it adds every tweak. use blender mcp to view my scene and take down all of the tweaks.
|
||
|
||
---
|
||
|
||
_**Agent (model kimi-k2.5, mode Agent)**_
|
||
|
||
<think><details><summary>Thought Process</summary>
|
||
The user wants to modify the "tweak add both" feature to add ALL tweaks (every tweak bone), and they want me to use the Blender MCP to view their scene and identify all the tweak bones.
|
||
|
||
First, I need to check if there's a Blender MCP available. Let me look at the MCP servers available.</details></think>
|
||
|
||
---
|
||
|
||
<tool-use data-tool-type="generic" data-tool-name="glob_file_search">
|
||
<details>
|
||
<summary>Tool use: **glob_file_search** • Searched codebase "undefined" • **58** results in **1** directory</summary>
|
||
|
||
Directory: **C:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\mcps** (58 files)
|
||
|
||
| File |
|
||
|------|
|
||
| `../C:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\mcps\user-blender\SERVER_METADATA.json` |
|
||
| `../C:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\mcps\user-blender\prompts\asset_creation_strategy.json` |
|
||
| `../C:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\mcps\user-blender\tools\generate_hunyuan3d_model.json` |
|
||
| `../C:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\mcps\user-blender\tools\poll_hunyuan_job_status.json` |
|
||
| `../C:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\mcps\user-blender\tools\import_generated_asset_hunyuan.json` |
|
||
| `../C:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\mcps\user-blender\tools\get_hunyuan3d_status.json` |
|
||
| `../C:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\mcps\user-blender\tools\import_generated_asset.json` |
|
||
| `../C:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\mcps\user-blender\tools\poll_rodin_job_status.json` |
|
||
| `../C:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\mcps\user-blender\tools\generate_hyper3d_model_via_text.json` |
|
||
| `../C:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\mcps\user-blender\tools\generate_hyper3d_model_via_images.json` |
|
||
| `../C:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\mcps\user-blender\tools\download_sketchfab_model.json` |
|
||
| `../C:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\mcps\user-blender\tools\search_sketchfab_models.json` |
|
||
| `../C:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\mcps\user-blender\tools\get_sketchfab_model_preview.json` |
|
||
| `../C:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\mcps\user-blender\tools\get_hyper3d_status.json` |
|
||
| `../C:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\mcps\user-blender\tools\get_sketchfab_status.json` |
|
||
| `../C:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\mcps\user-blender\tools\get_polyhaven_status.json` |
|
||
| `../C:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\mcps\user-blender\tools\set_texture.json` |
|
||
| `../C:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\mcps\user-blender\tools\search_polyhaven_assets.json` |
|
||
| `../C:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\mcps\user-blender\tools\download_polyhaven_asset.json` |
|
||
| `../C:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\mcps\user-blender\tools\execute_blender_code.json` |
|
||
| `../C:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\mcps\user-blender\tools\get_viewport_screenshot.json` |
|
||
| `../C:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\mcps\user-blender\tools\get_polyhaven_categories.json` |
|
||
| `../C:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\mcps\user-blender\tools\get_object_info.json` |
|
||
| `../C:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\mcps\user-blender\tools\get_scene_info.json` |
|
||
| `../C:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\mcps\cursor-ide-browser\SERVER_METADATA.json` |
|
||
| `../C:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\mcps\cursor-ide-browser\tools\browser_profile_stop.json` |
|
||
| `../C:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\mcps\cursor-ide-browser\tools\browser_profile_start.json` |
|
||
| `../C:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\mcps\cursor-ide-browser\tools\browser_lock.json` |
|
||
| `../C:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\mcps\cursor-ide-browser\tools\browser_unlock.json` |
|
||
| `../C:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\mcps\cursor-ide-browser\tools\browser_search.json` |
|
||
| `../C:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\mcps\cursor-ide-browser\tools\browser_take_screenshot.json` |
|
||
| `../C:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\mcps\cursor-ide-browser\tools\browser_network_requests.json` |
|
||
| `../C:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\mcps\cursor-ide-browser\tools\browser_tabs.json` |
|
||
| `../C:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\mcps\cursor-ide-browser\tools\browser_console_messages.json` |
|
||
| `../C:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\mcps\cursor-ide-browser\tools\browser_handle_dialog.json` |
|
||
| `../C:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\mcps\cursor-ide-browser\tools\browser_resize.json` |
|
||
| `../C:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\mcps\cursor-ide-browser\tools\browser_drag.json` |
|
||
| `../C:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\mcps\cursor-ide-browser\tools\browser_get_bounding_box.json` |
|
||
| `../C:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\mcps\cursor-ide-browser\tools\browser_highlight.json` |
|
||
| `../C:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\mcps\cursor-ide-browser\tools\browser_is_checked.json` |
|
||
| `../C:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\mcps\cursor-ide-browser\tools\browser_is_enabled.json` |
|
||
| `../C:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\mcps\cursor-ide-browser\tools\browser_get_input_value.json` |
|
||
| `../C:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\mcps\cursor-ide-browser\tools\browser_is_visible.json` |
|
||
| `../C:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\mcps\cursor-ide-browser\tools\browser_get_attribute.json` |
|
||
| `../C:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\mcps\cursor-ide-browser\tools\browser_scroll.json` |
|
||
| `../C:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\mcps\cursor-ide-browser\tools\browser_navigate_back.json` |
|
||
| `../C:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\mcps\cursor-ide-browser\tools\browser_navigate_forward.json` |
|
||
| `../C:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\mcps\cursor-ide-browser\tools\browser_reload.json` |
|
||
| `../C:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\mcps\cursor-ide-browser\tools\browser_press_key.json` |
|
||
| `../C:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\mcps\cursor-ide-browser\tools\browser_select_option.json` |
|
||
| `../C:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\mcps\cursor-ide-browser\tools\browser_wait_for.json` |
|
||
| `../C:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\mcps\cursor-ide-browser\tools\browser_fill_form.json` |
|
||
| `../C:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\mcps\cursor-ide-browser\tools\browser_hover.json` |
|
||
| `../C:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\mcps\cursor-ide-browser\tools\browser_fill.json` |
|
||
| `../C:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\mcps\cursor-ide-browser\tools\browser_click.json` |
|
||
| `../C:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\mcps\cursor-ide-browser\tools\browser_type.json` |
|
||
| `../C:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\mcps\cursor-ide-browser\tools\browser_snapshot.json` |
|
||
| `../C:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\mcps\cursor-ide-browser\tools\browser_navigate.json` |
|
||
|
||
</details>
|
||
</tool-use>
|
||
|
||
---
|
||
|
||
<think><details><summary>Thought Process</summary>
|
||
I can see there's a `user-blender` MCP with tools like `execute_blender_code` and `get_scene_info`. Let me read the tool schema to understand how to use it.</details></think>
|
||
|
||
---
|
||
|
||
<tool-use data-tool-type="read" data-tool-name="read_file_v2">
|
||
<details><summary>Tool use: **read_file_v2** • Read file: C:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\mcps\user-blender\tools\execute_blender_code.json</summary>
|
||
|
||
</details>
|
||
</tool-use>
|
||
|
||
---
|
||
|
||
<tool-use data-tool-type="read" data-tool-name="read_file_v2">
|
||
<details><summary>Tool use: **read_file_v2** • Read file: C:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\mcps\user-blender\tools\get_scene_info.json</summary>
|
||
|
||
</details>
|
||
</tool-use>
|
||
|
||
---
|
||
|
||
<think><details><summary>Thought Process</summary>
|
||
Now let me use the Blender MCP to get scene info and then execute code to find all tweak bones in the scene.</details></think>
|
||
|
||
---
|
||
|
||
<tool-use data-tool-type="unknown" data-tool-name="mcp-blender-user-blender-execute_blender_code">
|
||
<details>
|
||
<summary>Tool use: **mcp-blender-user-blender-execute_blender_code**</summary>
|
||
|
||
|
||
Parameters:
|
||
|
||
```json
|
||
{
|
||
"tools": [
|
||
{
|
||
"name": "execute_blender_code",
|
||
"parameters": "{\"code\":\"import bpy\\nimport json\\n\\n# Find all armatures in the scene\\narmatures = [obj for obj in bpy.data.objects if obj.type == 'ARMATURE']\\n\\n# Find all bones with \\\"tweak\\\" in their name across all armatures\\ntweak_bones = []\\nfor arm in armatures:\\n if arm.pose:\\n for bone in arm.pose.bones:\\n if 'tweak' in bone.name.lower():\\n tweak_bones.append({\\n 'armature': arm.name,\\n 'bone': bone.name,\\n 'bone_type': 'POSE'\\n })\\n\\n# Also check data bones\\nfor arm in armatures:\\n if arm.data:\\n for bone in arm.data.bones:\\n if 'tweak' in bone.name.lower():\\n # Check if already found as pose bone\\n found = any(tb['armature'] == arm.name and tb['bone'] == bone.name for tb in tweak_bones)\\n if not found:\\n tweak_bones.append({\\n 'armature': arm.name,\\n 'bone': bone.name,\\n 'bone_type': 'DATA'\\n })\\n\\nprint(f\\\"Found {len(tweak_bones)} tweak bones:\\\")\\nfor tb in tweak_bones:\\n print(f\\\" - {tb['armature']}: {tb['bone']}\\\")\\n\\n# Return as JSON for easy parsing\\nresult = {\\n 'armatures': [a.name for a in armatures],\\n 'tweak_bones': tweak_bones,\\n 'count': len(tweak_bones)\\n}\\nprint(\\\"\\\\nJSON_RESULT:\\\")\\nprint(json.dumps(result, indent=2))\",\"user_prompt\":\"Find all tweak bones in the current Blender scene\"}",
|
||
"serverName": "blender"
|
||
}
|
||
]
|
||
}
|
||
```
|
||
Additional data:
|
||
|
||
```json
|
||
{
|
||
"status": "success"
|
||
}
|
||
```
|
||
Result:
|
||
|
||
```json
|
||
{
|
||
"result": "{\"content\":[{\"type\":\"text\",\"text\":\"Code executed successfully: Found 230 tweak bones:\\n - Bebe_Rigify: tweak_spine\\n - Bebe_Rigify: MCH-foot_tweak.L\\n - Bebe_Rigify: foot_tweak.L\\n - Bebe_Rigify: MCH-shin_tweak.L\\n - Bebe_Rigify: shin_tweak.L\\n - Bebe_Rigify: MCH-shin_tweak.L.001\\n - Bebe_Rigify: shin_tweak.L.001\\n - Bebe_Rigify: MCH-thigh_tweak.L.001\\n - Bebe_Rigify: thigh_tweak.L.001\\n - Bebe_Rigify: MCH-foot_tweak.R\\n - Bebe_Rigify: foot_tweak.R\\n - Bebe_Rigify: MCH-shin_tweak.R\\n - Bebe_Rigify: shin_tweak.R\\n - Bebe_Rigify: MCH-shin_tweak.R.001\\n - Bebe_Rigify: shin_tweak.R.001\\n - Bebe_Rigify: MCH-thigh_tweak.R.001\\n - Bebe_Rigify: thigh_tweak.R.001\\n - Bebe_Rigify: MCH-thigh_tweak.L\\n - Bebe_Rigify: thigh_tweak.L\\n - Bebe_Rigify: MCH-thigh_tweak.R\\n - Bebe_Rigify: thigh_tweak.R\\n - Bebe_Rigify: tweak_spine.001\\n - Bebe_Rigify: tweak_spine.002\\n - Bebe_Rigify: tweak_spine.004\\n - Bebe_Rigify: tweak_spine.005\\n - Bebe_Rigify: tweak_spine.003\\n - Bebe_Rigify: MCH-hand_tweak.L\\n - Bebe_Rigify: hand_tweak.L\\n - Bebe_Rigify: MCH-forearm_tweak.L\\n - Bebe_Rigify: forearm_tweak.L\\n - Bebe_Rigify: MCH-forearm_tweak.L.001\\n - Bebe_Rigify: forearm_tweak.L.001\\n - Bebe_Rigify: MCH-upper_arm_tweak.L.001\\n - Bebe_Rigify: upper_arm_tweak.L.001\\n - Bebe_Rigify: MCH-upper_arm_tweak.L\\n - Bebe_Rigify: upper_arm_tweak.L\\n - Bebe_Rigify: MCH-hand_tweak.R\\n - Bebe_Rigify: hand_tweak.R\\n - Bebe_Rigify: MCH-forearm_tweak.R\\n - Bebe_Rigify: forearm_tweak.R\\n - Bebe_Rigify: MCH-forearm_tweak.R.001\\n - Bebe_Rigify: forearm_tweak.R.001\\n - Bebe_Rigify: MCH-upper_arm_tweak.R.001\\n - Bebe_Rigify: upper_arm_tweak.R.001\\n - Bebe_Rigify: MCH-upper_arm_tweak.R\\n - Bebe_Rigify: upper_arm_tweak.R\\n - Bebe_Rigify.001: tweak_spine\\n - Bebe_Rigify.001: MCH-foot_tweak.L\\n - Bebe_Rigify.001: foot_tweak.L\\n - Bebe_Rigify.001: MCH-shin_tweak.L\\n - Bebe_Rigify.001: shin_tweak.L\\n - Bebe_Rigify.001: MCH-shin_tweak.L.001\\n - Bebe_Rigify.001: shin_tweak.L.001\\n - Bebe_Rigify.001: MCH-thigh_tweak.L.001\\n - Bebe_Rigify.001: thigh_tweak.L.001\\n - Bebe_Rigify.001: MCH-foot_tweak.R\\n - Bebe_Rigify.001: foot_tweak.R\\n - Bebe_Rigify.001: MCH-shin_tweak.R\\n - Bebe_Rigify.001: shin_tweak.R\\n - Bebe_Rigify.001: MCH-shin_tweak.R.001\\n - Bebe_Rigify.001: shin_tweak.R.001\\n - Bebe_Rigify.001: MCH-thigh_tweak.R.001\\n - Bebe_Rigify.001: thigh_tweak.R.001\\n - Bebe_Rigify.001: MCH-thigh_tweak.L\\n - Bebe_Rigify.001: thigh_tweak.L\\n - Bebe_Rigify.001: MCH-thigh_tweak.R\\n - Bebe_Rigify.001: thigh_tweak.R\\n - Bebe_Rigify.001: tweak_spine.001\\n - Bebe_Rigify.001: tweak_spine.002\\n - Bebe_Rigify.001: tweak_spine.004\\n - Bebe_Rigify.001: tweak_spine.005\\n - Bebe_Rigify.001: tweak_spine.003\\n - Bebe_Rigify.001: MCH-hand_tweak.L\\n - Bebe_Rigify.001: hand_tweak.L\\n - Bebe_Rigify.001: MCH-forearm_tweak.L\\n - Bebe_Rigify.001: forearm_tweak.L\\n - Bebe_Rigify.001: MCH-forearm_tweak.L.001\\n - Bebe_Rigify.001: forearm_tweak.L.001\\n - Bebe_Rigify.001: MCH-upper_arm_tweak.L.001\\n - Bebe_Rigify.001: upper_arm_tweak.L.001\\n - Bebe_Rigify.001: MCH-upper_arm_tweak.L\\n - Bebe_Rigify.001: upper_arm_tweak.L\\n - Bebe_Rigify.001: MCH-hand_tweak.R\\n - Bebe_Rigify.001: hand_tweak.R\\n - Bebe_Rigify.001: MCH-forearm_tweak.R\\n - Bebe_Rigify.001: forearm_tweak.R\\n - Bebe_Rigify.001: MCH-forearm_tweak.R.001\\n - Bebe_Rigify.001: forearm_tweak.R.001\\n - Bebe_Rigify.001: MCH-upper_arm_tweak.R.001\\n - Bebe_Rigify.001: upper_arm_tweak.R.001\\n - Bebe_Rigify.001: MCH-upper_arm_tweak.R\\n - Bebe_Rigify.001: upper_arm_tweak.R\\n - Martha_Rigify: tweak_spine\\n - Martha_Rigify: MCH-foot_tweak.L\\n - Martha_Rigify: foot_tweak.L\\n - Martha_Rigify: MCH-shin_tweak.L\\n - Martha_Rigify: shin_tweak.L\\n - Martha_Rigify: MCH-shin_tweak.L.001\\n - Martha_Rigify: shin_tweak.L.001\\n - Martha_Rigify: MCH-thigh_tweak.L.001\\n - Martha_Rigify: thigh_tweak.L.001\\n - Martha_Rigify: MCH-foot_tweak.R\\n - Martha_Rigify: foot_tweak.R\\n - Martha_Rigify: MCH-shin_tweak.R\\n - Martha_Rigify: shin_tweak.R\\n - Martha_Rigify: MCH-shin_tweak.R.001\\n - Martha_Rigify: shin_tweak.R.001\\n - Martha_Rigify: MCH-thigh_tweak.R.001\\n - Martha_Rigify: thigh_tweak.R.001\\n - Martha_Rigify: MCH-thigh_tweak.L\\n - Martha_Rigify: thigh_tweak.L\\n - Martha_Rigify: MCH-thigh_tweak.R\\n - Martha_Rigify: thigh_tweak.R\\n - Martha_Rigify: tweak_spine.001\\n - Martha_Rigify: tweak_spine.002\\n - Martha_Rigify: tweak_spine.004\\n - Martha_Rigify: tweak_spine.005\\n - Martha_Rigify: tweak_spine.003\\n - Martha_Rigify: MCH-hand_tweak.L\\n - Martha_Rigify: hand_tweak.L\\n - Martha_Rigify: MCH-forearm_tweak.L\\n - Martha_Rigify: forearm_tweak.L\\n - Martha_Rigify: MCH-forearm_tweak.L.001\\n - Martha_Rigify: forearm_tweak.L.001\\n - Martha_Rigify: MCH-upper_arm_tweak.L.001\\n - Martha_Rigify: upper_arm_tweak.L.001\\n - Martha_Rigify: MCH-upper_arm_tweak.L\\n - Martha_Rigify: upper_arm_tweak.L\\n - Martha_Rigify: MCH-hand_tweak.R\\n - Martha_Rigify: hand_tweak.R\\n - Martha_Rigify: MCH-forearm_tweak.R\\n - Martha_Rigify: forearm_tweak.R\\n - Martha_Rigify: MCH-forearm_tweak.R.001\\n - Martha_Rigify: forearm_tweak.R.001\\n - Martha_Rigify: MCH-upper_arm_tweak.R.001\\n - Martha_Rigify: upper_arm_tweak.R.001\\n - Martha_Rigify: MCH-upper_arm_tweak.R\\n - Martha_Rigify: upper_arm_tweak.R\\n - Bebe_Rigify: tweak_spine\\n - Bebe_Rigify: MCH-foot_tweak.L\\n - Bebe_Rigify: foot_tweak.L\\n - Bebe_Rigify: MCH-shin_tweak.L\\n - Bebe_Rigify: shin_tweak.L\\n - Bebe_Rigify: MCH-shin_tweak.L.001\\n - Bebe_Rigify: shin_tweak.L.001\\n - Bebe_Rigify: MCH-thigh_tweak.L.001\\n - Bebe_Rigify: thigh_tweak.L.001\\n - Bebe_Rigify: MCH-foot_tweak.R\\n - Bebe_Rigify: foot_tweak.R\\n - Bebe_Rigify: MCH-shin_tweak.R\\n - Bebe_Rigify: shin_tweak.R\\n - Bebe_Rigify: MCH-shin_tweak.R.001\\n - Bebe_Rigify: shin_tweak.R.001\\n - Bebe_Rigify: MCH-thigh_tweak.R.001\\n - Bebe_Rigify: thigh_tweak.R.001\\n - Bebe_Rigify: MCH-thigh_tweak.L\\n - Bebe_Rigify: thigh_tweak.L\\n - Bebe_Rigify: MCH-thigh_tweak.R\\n - Bebe_Rigify: thigh_tweak.R\\n - Bebe_Rigify: tweak_spine.001\\n - Bebe_Rigify: tweak_spine.002\\n - Bebe_Rigify: tweak_spine.004\\n - Bebe_Rigify: tweak_spine.005\\n - Bebe_Rigify: tweak_spine.003\\n - Bebe_Rigify: MCH-hand_tweak.L\\n - Bebe_Rigify: hand_tweak.L\\n - Bebe_Rigify: MCH-forearm_tweak.L\\n - Bebe_Rigify: forearm_tweak.L\\n - Bebe_Rigify: MCH-forearm_tweak.L.001\\n - Bebe_Rigify: forearm_tweak.L.001\\n - Bebe_Rigify: MCH-upper_arm_tweak.L.001\\n - Bebe_Rigify: upper_arm_tweak.L.001\\n - Bebe_Rigify: MCH-upper_arm_tweak.L\\n - Bebe_Rigify: upper_arm_tweak.L\\n - Bebe_Rigify: MCH-hand_tweak.R\\n - Bebe_Rigify: hand_tweak.R\\n - Bebe_Rigify: MCH-forearm_tweak.R\\n - Bebe_Rigify: forearm_tweak.R\\n - Bebe_Rigify: MCH-forearm_tweak.R.001\\n - Bebe_Rigify: forearm_tweak.R.001\\n - Bebe_Rigify: MCH-upper_arm_tweak.R.001\\n - Bebe_Rigify: upper_arm_tweak.R.001\\n - Bebe_Rigify: MCH-upper_arm_tweak.R\\n - Bebe_Rigify: upper_arm_tweak.R\\n - Martha_Rigify: tweak_spine\\n - Martha_Rigify: MCH-foot_tweak.L\\n - Martha_Rigify: foot_tweak.L\\n - Martha_Rigify: MCH-shin_tweak.L\\n - Martha_Rigify: shin_tweak.L\\n - Martha_Rigify: MCH-shin_tweak.L.001\\n - Martha_Rigify: shin_tweak.L.001\\n - Martha_Rigify: MCH-thigh_tweak.L.001\\n - Martha_Rigify: thigh_tweak.L.001\\n - Martha_Rigify: MCH-foot_tweak.R\\n - Martha_Rigify: foot_tweak.R\\n - Martha_Rigify: MCH-shin_tweak.R\\n - Martha_Rigify: shin_tweak.R\\n - Martha_Rigify: MCH-shin_tweak.R.001\\n - Martha_Rigify: shin_tweak.R.001\\n - Martha_Rigify: MCH-thigh_tweak.R.001\\n - Martha_Rigify: thigh_tweak.R.001\\n - Martha_Rigify: MCH-thigh_tweak.L\\n - Martha_Rigify: thigh_tweak.L\\n - Martha_Rigify: MCH-thigh_tweak.R\\n - Martha_Rigify: thigh_tweak.R\\n - Martha_Rigify: tweak_spine.001\\n - Martha_Rigify: tweak_spine.002\\n - Martha_Rigify: tweak_spine.004\\n - Martha_Rigify: tweak_spine.005\\n - Martha_Rigify: tweak_spine.003\\n - Martha_Rigify: MCH-hand_tweak.L\\n - Martha_Rigify: hand_tweak.L\\n - Martha_Rigify: MCH-forearm_tweak.L\\n - Martha_Rigify: forearm_tweak.L\\n - Martha_Rigify: MCH-forearm_tweak.L.001\\n - Martha_Rigify: forearm_tweak.L.001\\n - Martha_Rigify: MCH-upper_arm_tweak.L.001\\n - Martha_Rigify: upper_arm_tweak.L.001\\n - Martha_Rigify: MCH-upper_arm_tweak.L\\n - Martha_Rigify: upper_arm_tweak.L\\n - Martha_Rigify: MCH-hand_tweak.R\\n - Martha_Rigify: hand_tweak.R\\n - Martha_Rigify: MCH-forearm_tweak.R\\n - Martha_Rigify: forearm_tweak.R\\n - Martha_Rigify: MCH-forearm_tweak.R.001\\n - Martha_Rigify: forearm_tweak.R.001\\n - Martha_Rigify: MCH-upper_arm_tweak.R.001\\n - Martha_Rigify: upper_arm_tweak.R.001\\n - Martha_Rigify: MCH-upper_arm_tweak.R\\n - Martha_Rigify: upper_arm_tweak.R\\n\\nJSON_RESULT:\\n{\\n \\\"armatures\\\": [\\n \\\"Bebe_Rigify\\\",\\n \\\"Bebe_Rigify.001\\\",\\n \\\"Martha_Rigify\\\",\\n \\\"Bebe_Rigify\\\",\\n \\\"Martha_Rigify\\\"\\n ],\\n \\\"tweak_bones\\\": [\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"tweak_spine\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-foot_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"foot_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-shin_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"shin_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-shin_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"shin_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-thigh_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"thigh_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-foot_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"foot_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-shin_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"shin_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-shin_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"shin_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-thigh_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"thigh_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-thigh_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"thigh_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-thigh_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"thigh_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"tweak_spine.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"tweak_spine.002\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"tweak_spine.004\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"tweak_spine.005\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"tweak_spine.003\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-hand_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"hand_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-forearm_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"forearm_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-forearm_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"forearm_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-upper_arm_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"upper_arm_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-upper_arm_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"upper_arm_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-hand_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"hand_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-forearm_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"forearm_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-forearm_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"forearm_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-upper_arm_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"upper_arm_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-upper_arm_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"upper_arm_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"tweak_spine\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"MCH-foot_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"foot_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"MCH-shin_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"shin_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"MCH-shin_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"shin_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"MCH-thigh_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"thigh_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"MCH-foot_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"foot_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"MCH-shin_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"shin_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"MCH-shin_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"shin_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"MCH-thigh_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"thigh_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"MCH-thigh_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"thigh_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"MCH-thigh_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"thigh_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"tweak_spine.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"tweak_spine.002\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"tweak_spine.004\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"tweak_spine.005\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"tweak_spine.003\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"MCH-hand_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"hand_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"MCH-forearm_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"forearm_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"MCH-forearm_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"forearm_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"MCH-upper_arm_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"upper_arm_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"MCH-upper_arm_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"upper_arm_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"MCH-hand_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"hand_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"MCH-forearm_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"forearm_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"MCH-forearm_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"forearm_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"MCH-upper_arm_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"upper_arm_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"MCH-upper_arm_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"upper_arm_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"tweak_spine\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-foot_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"foot_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-shin_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"shin_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-shin_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"shin_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-thigh_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"thigh_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-foot_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"foot_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-shin_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"shin_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-shin_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"shin_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-thigh_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"thigh_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-thigh_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"thigh_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-thigh_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"thigh_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"tweak_spine.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"tweak_spine.002\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"tweak_spine.004\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"tweak_spine.005\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"tweak_spine.003\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-hand_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"hand_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-forearm_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"forearm_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-forearm_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"forearm_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-upper_arm_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"upper_arm_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-upper_arm_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"upper_arm_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-hand_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"hand_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-forearm_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"forearm_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-forearm_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"forearm_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-upper_arm_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"upper_arm_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-upper_arm_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"upper_arm_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"tweak_spine\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-foot_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"foot_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-shin_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"shin_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-shin_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"shin_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-thigh_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"thigh_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-foot_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"foot_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-shin_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"shin_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-shin_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"shin_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-thigh_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"thigh_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-thigh_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"thigh_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-thigh_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"thigh_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"tweak_spine.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"tweak_spine.002\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"tweak_spine.004\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"tweak_spine.005\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"tweak_spine.003\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-hand_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"hand_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-forearm_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"forearm_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-forearm_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"forearm_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-upper_arm_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"upper_arm_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-upper_arm_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"upper_arm_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-hand_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"hand_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-forearm_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"forearm_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-forearm_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"forearm_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-upper_arm_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"upper_arm_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-upper_arm_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"upper_arm_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"tweak_spine\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-foot_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"foot_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-shin_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"shin_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-shin_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"shin_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-thigh_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"thigh_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-foot_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"foot_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-shin_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"shin_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-shin_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"shin_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-thigh_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"thigh_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-thigh_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"thigh_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-thigh_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"thigh_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"tweak_spine.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"tweak_spine.002\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"tweak_spine.004\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"tweak_spine.005\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"tweak_spine.003\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-hand_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"hand_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-forearm_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"forearm_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-forearm_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"forearm_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-upper_arm_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"upper_arm_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-upper_arm_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"upper_arm_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-hand_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"hand_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-forearm_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"forearm_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-forearm_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"forearm_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-upper_arm_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"upper_arm_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-upper_arm_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"upper_arm_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n }\\n ],\\n \\\"count\\\": 230\\n}\\n\"}],\"structuredContent\":{\"result\":\"Code executed successfully: Found 230 tweak bones:\\n - Bebe_Rigify: tweak_spine\\n - Bebe_Rigify: MCH-foot_tweak.L\\n - Bebe_Rigify: foot_tweak.L\\n - Bebe_Rigify: MCH-shin_tweak.L\\n - Bebe_Rigify: shin_tweak.L\\n - Bebe_Rigify: MCH-shin_tweak.L.001\\n - Bebe_Rigify: shin_tweak.L.001\\n - Bebe_Rigify: MCH-thigh_tweak.L.001\\n - Bebe_Rigify: thigh_tweak.L.001\\n - Bebe_Rigify: MCH-foot_tweak.R\\n - Bebe_Rigify: foot_tweak.R\\n - Bebe_Rigify: MCH-shin_tweak.R\\n - Bebe_Rigify: shin_tweak.R\\n - Bebe_Rigify: MCH-shin_tweak.R.001\\n - Bebe_Rigify: shin_tweak.R.001\\n - Bebe_Rigify: MCH-thigh_tweak.R.001\\n - Bebe_Rigify: thigh_tweak.R.001\\n - Bebe_Rigify: MCH-thigh_tweak.L\\n - Bebe_Rigify: thigh_tweak.L\\n - Bebe_Rigify: MCH-thigh_tweak.R\\n - Bebe_Rigify: thigh_tweak.R\\n - Bebe_Rigify: tweak_spine.001\\n - Bebe_Rigify: tweak_spine.002\\n - Bebe_Rigify: tweak_spine.004\\n - Bebe_Rigify: tweak_spine.005\\n - Bebe_Rigify: tweak_spine.003\\n - Bebe_Rigify: MCH-hand_tweak.L\\n - Bebe_Rigify: hand_tweak.L\\n - Bebe_Rigify: MCH-forearm_tweak.L\\n - Bebe_Rigify: forearm_tweak.L\\n - Bebe_Rigify: MCH-forearm_tweak.L.001\\n - Bebe_Rigify: forearm_tweak.L.001\\n - Bebe_Rigify: MCH-upper_arm_tweak.L.001\\n - Bebe_Rigify: upper_arm_tweak.L.001\\n - Bebe_Rigify: MCH-upper_arm_tweak.L\\n - Bebe_Rigify: upper_arm_tweak.L\\n - Bebe_Rigify: MCH-hand_tweak.R\\n - Bebe_Rigify: hand_tweak.R\\n - Bebe_Rigify: MCH-forearm_tweak.R\\n - Bebe_Rigify: forearm_tweak.R\\n - Bebe_Rigify: MCH-forearm_tweak.R.001\\n - Bebe_Rigify: forearm_tweak.R.001\\n - Bebe_Rigify: MCH-upper_arm_tweak.R.001\\n - Bebe_Rigify: upper_arm_tweak.R.001\\n - Bebe_Rigify: MCH-upper_arm_tweak.R\\n - Bebe_Rigify: upper_arm_tweak.R\\n - Bebe_Rigify.001: tweak_spine\\n - Bebe_Rigify.001: MCH-foot_tweak.L\\n - Bebe_Rigify.001: foot_tweak.L\\n - Bebe_Rigify.001: MCH-shin_tweak.L\\n - Bebe_Rigify.001: shin_tweak.L\\n - Bebe_Rigify.001: MCH-shin_tweak.L.001\\n - Bebe_Rigify.001: shin_tweak.L.001\\n - Bebe_Rigify.001: MCH-thigh_tweak.L.001\\n - Bebe_Rigify.001: thigh_tweak.L.001\\n - Bebe_Rigify.001: MCH-foot_tweak.R\\n - Bebe_Rigify.001: foot_tweak.R\\n - Bebe_Rigify.001: MCH-shin_tweak.R\\n - Bebe_Rigify.001: shin_tweak.R\\n - Bebe_Rigify.001: MCH-shin_tweak.R.001\\n - Bebe_Rigify.001: shin_tweak.R.001\\n - Bebe_Rigify.001: MCH-thigh_tweak.R.001\\n - Bebe_Rigify.001: thigh_tweak.R.001\\n - Bebe_Rigify.001: MCH-thigh_tweak.L\\n - Bebe_Rigify.001: thigh_tweak.L\\n - Bebe_Rigify.001: MCH-thigh_tweak.R\\n - Bebe_Rigify.001: thigh_tweak.R\\n - Bebe_Rigify.001: tweak_spine.001\\n - Bebe_Rigify.001: tweak_spine.002\\n - Bebe_Rigify.001: tweak_spine.004\\n - Bebe_Rigify.001: tweak_spine.005\\n - Bebe_Rigify.001: tweak_spine.003\\n - Bebe_Rigify.001: MCH-hand_tweak.L\\n - Bebe_Rigify.001: hand_tweak.L\\n - Bebe_Rigify.001: MCH-forearm_tweak.L\\n - Bebe_Rigify.001: forearm_tweak.L\\n - Bebe_Rigify.001: MCH-forearm_tweak.L.001\\n - Bebe_Rigify.001: forearm_tweak.L.001\\n - Bebe_Rigify.001: MCH-upper_arm_tweak.L.001\\n - Bebe_Rigify.001: upper_arm_tweak.L.001\\n - Bebe_Rigify.001: MCH-upper_arm_tweak.L\\n - Bebe_Rigify.001: upper_arm_tweak.L\\n - Bebe_Rigify.001: MCH-hand_tweak.R\\n - Bebe_Rigify.001: hand_tweak.R\\n - Bebe_Rigify.001: MCH-forearm_tweak.R\\n - Bebe_Rigify.001: forearm_tweak.R\\n - Bebe_Rigify.001: MCH-forearm_tweak.R.001\\n - Bebe_Rigify.001: forearm_tweak.R.001\\n - Bebe_Rigify.001: MCH-upper_arm_tweak.R.001\\n - Bebe_Rigify.001: upper_arm_tweak.R.001\\n - Bebe_Rigify.001: MCH-upper_arm_tweak.R\\n - Bebe_Rigify.001: upper_arm_tweak.R\\n - Martha_Rigify: tweak_spine\\n - Martha_Rigify: MCH-foot_tweak.L\\n - Martha_Rigify: foot_tweak.L\\n - Martha_Rigify: MCH-shin_tweak.L\\n - Martha_Rigify: shin_tweak.L\\n - Martha_Rigify: MCH-shin_tweak.L.001\\n - Martha_Rigify: shin_tweak.L.001\\n - Martha_Rigify: MCH-thigh_tweak.L.001\\n - Martha_Rigify: thigh_tweak.L.001\\n - Martha_Rigify: MCH-foot_tweak.R\\n - Martha_Rigify: foot_tweak.R\\n - Martha_Rigify: MCH-shin_tweak.R\\n - Martha_Rigify: shin_tweak.R\\n - Martha_Rigify: MCH-shin_tweak.R.001\\n - Martha_Rigify: shin_tweak.R.001\\n - Martha_Rigify: MCH-thigh_tweak.R.001\\n - Martha_Rigify: thigh_tweak.R.001\\n - Martha_Rigify: MCH-thigh_tweak.L\\n - Martha_Rigify: thigh_tweak.L\\n - Martha_Rigify: MCH-thigh_tweak.R\\n - Martha_Rigify: thigh_tweak.R\\n - Martha_Rigify: tweak_spine.001\\n - Martha_Rigify: tweak_spine.002\\n - Martha_Rigify: tweak_spine.004\\n - Martha_Rigify: tweak_spine.005\\n - Martha_Rigify: tweak_spine.003\\n - Martha_Rigify: MCH-hand_tweak.L\\n - Martha_Rigify: hand_tweak.L\\n - Martha_Rigify: MCH-forearm_tweak.L\\n - Martha_Rigify: forearm_tweak.L\\n - Martha_Rigify: MCH-forearm_tweak.L.001\\n - Martha_Rigify: forearm_tweak.L.001\\n - Martha_Rigify: MCH-upper_arm_tweak.L.001\\n - Martha_Rigify: upper_arm_tweak.L.001\\n - Martha_Rigify: MCH-upper_arm_tweak.L\\n - Martha_Rigify: upper_arm_tweak.L\\n - Martha_Rigify: MCH-hand_tweak.R\\n - Martha_Rigify: hand_tweak.R\\n - Martha_Rigify: MCH-forearm_tweak.R\\n - Martha_Rigify: forearm_tweak.R\\n - Martha_Rigify: MCH-forearm_tweak.R.001\\n - Martha_Rigify: forearm_tweak.R.001\\n - Martha_Rigify: MCH-upper_arm_tweak.R.001\\n - Martha_Rigify: upper_arm_tweak.R.001\\n - Martha_Rigify: MCH-upper_arm_tweak.R\\n - Martha_Rigify: upper_arm_tweak.R\\n - Bebe_Rigify: tweak_spine\\n - Bebe_Rigify: MCH-foot_tweak.L\\n - Bebe_Rigify: foot_tweak.L\\n - Bebe_Rigify: MCH-shin_tweak.L\\n - Bebe_Rigify: shin_tweak.L\\n - Bebe_Rigify: MCH-shin_tweak.L.001\\n - Bebe_Rigify: shin_tweak.L.001\\n - Bebe_Rigify: MCH-thigh_tweak.L.001\\n - Bebe_Rigify: thigh_tweak.L.001\\n - Bebe_Rigify: MCH-foot_tweak.R\\n - Bebe_Rigify: foot_tweak.R\\n - Bebe_Rigify: MCH-shin_tweak.R\\n - Bebe_Rigify: shin_tweak.R\\n - Bebe_Rigify: MCH-shin_tweak.R.001\\n - Bebe_Rigify: shin_tweak.R.001\\n - Bebe_Rigify: MCH-thigh_tweak.R.001\\n - Bebe_Rigify: thigh_tweak.R.001\\n - Bebe_Rigify: MCH-thigh_tweak.L\\n - Bebe_Rigify: thigh_tweak.L\\n - Bebe_Rigify: MCH-thigh_tweak.R\\n - Bebe_Rigify: thigh_tweak.R\\n - Bebe_Rigify: tweak_spine.001\\n - Bebe_Rigify: tweak_spine.002\\n - Bebe_Rigify: tweak_spine.004\\n - Bebe_Rigify: tweak_spine.005\\n - Bebe_Rigify: tweak_spine.003\\n - Bebe_Rigify: MCH-hand_tweak.L\\n - Bebe_Rigify: hand_tweak.L\\n - Bebe_Rigify: MCH-forearm_tweak.L\\n - Bebe_Rigify: forearm_tweak.L\\n - Bebe_Rigify: MCH-forearm_tweak.L.001\\n - Bebe_Rigify: forearm_tweak.L.001\\n - Bebe_Rigify: MCH-upper_arm_tweak.L.001\\n - Bebe_Rigify: upper_arm_tweak.L.001\\n - Bebe_Rigify: MCH-upper_arm_tweak.L\\n - Bebe_Rigify: upper_arm_tweak.L\\n - Bebe_Rigify: MCH-hand_tweak.R\\n - Bebe_Rigify: hand_tweak.R\\n - Bebe_Rigify: MCH-forearm_tweak.R\\n - Bebe_Rigify: forearm_tweak.R\\n - Bebe_Rigify: MCH-forearm_tweak.R.001\\n - Bebe_Rigify: forearm_tweak.R.001\\n - Bebe_Rigify: MCH-upper_arm_tweak.R.001\\n - Bebe_Rigify: upper_arm_tweak.R.001\\n - Bebe_Rigify: MCH-upper_arm_tweak.R\\n - Bebe_Rigify: upper_arm_tweak.R\\n - Martha_Rigify: tweak_spine\\n - Martha_Rigify: MCH-foot_tweak.L\\n - Martha_Rigify: foot_tweak.L\\n - Martha_Rigify: MCH-shin_tweak.L\\n - Martha_Rigify: shin_tweak.L\\n - Martha_Rigify: MCH-shin_tweak.L.001\\n - Martha_Rigify: shin_tweak.L.001\\n - Martha_Rigify: MCH-thigh_tweak.L.001\\n - Martha_Rigify: thigh_tweak.L.001\\n - Martha_Rigify: MCH-foot_tweak.R\\n - Martha_Rigify: foot_tweak.R\\n - Martha_Rigify: MCH-shin_tweak.R\\n - Martha_Rigify: shin_tweak.R\\n - Martha_Rigify: MCH-shin_tweak.R.001\\n - Martha_Rigify: shin_tweak.R.001\\n - Martha_Rigify: MCH-thigh_tweak.R.001\\n - Martha_Rigify: thigh_tweak.R.001\\n - Martha_Rigify: MCH-thigh_tweak.L\\n - Martha_Rigify: thigh_tweak.L\\n - Martha_Rigify: MCH-thigh_tweak.R\\n - Martha_Rigify: thigh_tweak.R\\n - Martha_Rigify: tweak_spine.001\\n - Martha_Rigify: tweak_spine.002\\n - Martha_Rigify: tweak_spine.004\\n - Martha_Rigify: tweak_spine.005\\n - Martha_Rigify: tweak_spine.003\\n - Martha_Rigify: MCH-hand_tweak.L\\n - Martha_Rigify: hand_tweak.L\\n - Martha_Rigify: MCH-forearm_tweak.L\\n - Martha_Rigify: forearm_tweak.L\\n - Martha_Rigify: MCH-forearm_tweak.L.001\\n - Martha_Rigify: forearm_tweak.L.001\\n - Martha_Rigify: MCH-upper_arm_tweak.L.001\\n - Martha_Rigify: upper_arm_tweak.L.001\\n - Martha_Rigify: MCH-upper_arm_tweak.L\\n - Martha_Rigify: upper_arm_tweak.L\\n - Martha_Rigify: MCH-hand_tweak.R\\n - Martha_Rigify: hand_tweak.R\\n - Martha_Rigify: MCH-forearm_tweak.R\\n - Martha_Rigify: forearm_tweak.R\\n - Martha_Rigify: MCH-forearm_tweak.R.001\\n - Martha_Rigify: forearm_tweak.R.001\\n - Martha_Rigify: MCH-upper_arm_tweak.R.001\\n - Martha_Rigify: upper_arm_tweak.R.001\\n - Martha_Rigify: MCH-upper_arm_tweak.R\\n - Martha_Rigify: upper_arm_tweak.R\\n\\nJSON_RESULT:\\n{\\n \\\"armatures\\\": [\\n \\\"Bebe_Rigify\\\",\\n \\\"Bebe_Rigify.001\\\",\\n \\\"Martha_Rigify\\\",\\n \\\"Bebe_Rigify\\\",\\n \\\"Martha_Rigify\\\"\\n ],\\n \\\"tweak_bones\\\": [\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"tweak_spine\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-foot_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"foot_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-shin_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"shin_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-shin_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"shin_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-thigh_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"thigh_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-foot_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"foot_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-shin_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"shin_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-shin_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"shin_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-thigh_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"thigh_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-thigh_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"thigh_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-thigh_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"thigh_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"tweak_spine.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"tweak_spine.002\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"tweak_spine.004\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"tweak_spine.005\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"tweak_spine.003\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-hand_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"hand_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-forearm_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"forearm_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-forearm_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"forearm_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-upper_arm_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"upper_arm_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-upper_arm_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"upper_arm_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-hand_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"hand_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-forearm_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"forearm_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-forearm_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"forearm_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-upper_arm_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"upper_arm_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-upper_arm_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"upper_arm_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"tweak_spine\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"MCH-foot_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"foot_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"MCH-shin_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"shin_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"MCH-shin_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"shin_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"MCH-thigh_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"thigh_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"MCH-foot_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"foot_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"MCH-shin_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"shin_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"MCH-shin_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"shin_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"MCH-thigh_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"thigh_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"MCH-thigh_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"thigh_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"MCH-thigh_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"thigh_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"tweak_spine.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"tweak_spine.002\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"tweak_spine.004\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"tweak_spine.005\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"tweak_spine.003\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"MCH-hand_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"hand_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"MCH-forearm_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"forearm_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"MCH-forearm_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"forearm_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"MCH-upper_arm_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"upper_arm_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"MCH-upper_arm_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"upper_arm_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"MCH-hand_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"hand_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"MCH-forearm_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"forearm_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"MCH-forearm_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"forearm_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"MCH-upper_arm_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"upper_arm_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"MCH-upper_arm_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify.001\\\",\\n \\\"bone\\\": \\\"upper_arm_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"tweak_spine\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-foot_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"foot_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-shin_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"shin_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-shin_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"shin_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-thigh_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"thigh_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-foot_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"foot_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-shin_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"shin_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-shin_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"shin_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-thigh_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"thigh_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-thigh_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"thigh_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-thigh_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"thigh_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"tweak_spine.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"tweak_spine.002\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"tweak_spine.004\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"tweak_spine.005\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"tweak_spine.003\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-hand_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"hand_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-forearm_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"forearm_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-forearm_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"forearm_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-upper_arm_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"upper_arm_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-upper_arm_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"upper_arm_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-hand_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"hand_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-forearm_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"forearm_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-forearm_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"forearm_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-upper_arm_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"upper_arm_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-upper_arm_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"upper_arm_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"tweak_spine\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-foot_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"foot_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-shin_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"shin_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-shin_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"shin_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-thigh_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"thigh_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-foot_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"foot_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-shin_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"shin_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-shin_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"shin_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-thigh_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"thigh_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-thigh_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"thigh_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-thigh_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"thigh_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"tweak_spine.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"tweak_spine.002\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"tweak_spine.004\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"tweak_spine.005\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"tweak_spine.003\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-hand_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"hand_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-forearm_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"forearm_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-forearm_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"forearm_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-upper_arm_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"upper_arm_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-upper_arm_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"upper_arm_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-hand_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"hand_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-forearm_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"forearm_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-forearm_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"forearm_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-upper_arm_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"upper_arm_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-upper_arm_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Bebe_Rigify\\\",\\n \\\"bone\\\": \\\"upper_arm_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"tweak_spine\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-foot_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"foot_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-shin_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"shin_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-shin_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"shin_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-thigh_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"thigh_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-foot_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"foot_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-shin_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"shin_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-shin_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"shin_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-thigh_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"thigh_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-thigh_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"thigh_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-thigh_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"thigh_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"tweak_spine.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"tweak_spine.002\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"tweak_spine.004\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"tweak_spine.005\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"tweak_spine.003\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-hand_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"hand_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-forearm_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"forearm_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-forearm_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"forearm_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-upper_arm_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"upper_arm_tweak.L.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-upper_arm_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"upper_arm_tweak.L\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-hand_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"hand_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-forearm_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"forearm_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-forearm_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"forearm_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-upper_arm_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"upper_arm_tweak.R.001\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"MCH-upper_arm_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n },\\n {\\n \\\"armature\\\": \\\"Martha_Rigify\\\",\\n \\\"bone\\\": \\\"upper_arm_tweak.R\\\",\\n \\\"bone_type\\\": \\\"POSE\\\"\\n }\\n ],\\n \\\"count\\\": 230\\n}\\n\"}}"
|
||
}
|
||
```
|
||
Status: **completed**
|
||
|
||
|
||
</details>
|
||
</tool-use>
|
||
|
||
---
|
||
|
||
<think><details><summary>Thought Process</summary>
|
||
I found 230 tweak bones across all armatures in the scene. Looking at the patterns:
|
||
|
||
1. **Spine tweaks**: `tweak_spine`, `tweak_spine.001`, `tweak_spine.002`, `tweak_spine.003`, `tweak_spine.004`, `tweak_spine.005`
|
||
|
||
2. **Leg tweaks (left)**:
|
||
- `thigh_tweak.L`, `thigh_tweak.L.001`
|
||
- `shin_tweak.L`, `shin_tweak.L.001`
|
||
- `foot_tweak.L`
|
||
- MCH variants: `MCH-thigh_tweak.L`, `MCH-thigh_tweak.L.001`, `MCH-shin_tweak.L`, `MCH-shin_tweak.L.001`, `MCH-foot_tweak.L`
|
||
|
||
3. **Leg tweaks (right)**:
|
||
- `thigh_tweak.R`, `thigh_tweak.R.001`
|
||
- `shin_tweak.R`, `shin_tweak.R.001`
|
||
- `foot_tweak.R`
|
||
- MCH variants
|
||
|
||
4. **Arm tweaks (left)**:
|
||
- `upper_arm_tweak.L`, `upper_arm_tweak.L.001`
|
||
- `forearm_tweak.L`, `forearm_tweak.L.001`
|
||
- `hand_tweak.L`
|
||
- MCH variants
|
||
|
||
5. **Arm tweaks (right)**:
|
||
- `upper_arm_tweak.R`, `upper_arm_tweak.R.001`
|
||
- `forearm_tweak.R`, `forearm_tweak.R.001`
|
||
- `hand_tweak.R`
|
||
- MCH variants
|
||
|
||
Now let me look at the current tweak_tools.py to see how it currently works and then modify it to add ALL tweaks.</details></think>
|
||
|
||
---
|
||
|
||
Now let me examine the current `tweak_tools.py` to see how it currently selects tweak bones, then modify it to add ALL tweaks.
|
||
|
||
---
|
||
|
||
<tool-use data-tool-type="read" data-tool-name="read_file_v2">
|
||
<details><summary>Tool use: **read_file_v2** • Read file: T:/Dynamic-Link-Manager/ops/tweak_tools.py</summary>
|
||
|
||
</details>
|
||
</tool-use>
|
||
|
||
---
|
||
|
||
<think><details><summary>Thought Process</summary>
|
||
Now I understand the current implementation. The code has:
|
||
- `ARM_TWEAK_BONES` - specific arm tweak bones
|
||
- `LEG_TWEAK_BONES` - specific leg tweak bones
|
||
- `get_tweak_bones()` - gets tweak bones for a specific limb type ('arm', 'leg', 'both')
|
||
|
||
The user wants "both" to mean ALL tweaks, not just arm+leg. Based on the scene scan, there are also:
|
||
- Spine tweaks (`tweak_spine` variants)
|
||
- MCH tweaks (mechanism bones)
|
||
|
||
Let me modify the code so that when `limb='both'` (or maybe a new mode 'all'), it includes ALL bones with "tweak" in the name, not just the predefined arm/leg list.
|
||
|
||
Actually, the user said "tweak add both is add ALL" - so I'll modify the 'both' case to include ALL tweak bones found on the armature (any bone with "tweak" in the name).</details></think>
|
||
|
||
---
|
||
|
||
Now I understand the current code. The user wants "both" to add ALL tweak bones (not just arms and legs). Based on the scene scan, I found spine tweaks (`tweak_spine`), arm/leg tweaks, and MCH tweaks. Let me modify the code:
|
||
|
||
---
|
||
|
||
<tool-use data-tool-type="write" data-tool-name="edit_file_v2">
|
||
|
||
<details><summary>Tool use: **edit_file_v2** • Edit file: T:/Dynamic-Link-Manager/ops/tweak_tools.py</summary>
|
||
|
||
</details>
|
||
|
||
</tool-use>
|
||
|
||
---
|
||
|
||
<think><details><summary>Thought Process</summary>
|
||
Now let me also update the docstrings and the bake function message to clarify that "both" now means "all tweaks". Also, I should update the module docstring.</details></think>
|
||
|
||
---
|
||
|
||
<tool-use data-tool-type="write" data-tool-name="edit_file_v2">
|
||
|
||
<details><summary>Tool use: **edit_file_v2** • Edit file: T:/Dynamic-Link-Manager/ops/tweak_tools.py</summary>
|
||
|
||
</details>
|
||
|
||
</tool-use>
|
||
|
||
---
|
||
|
||
<think><details><summary>Thought Process</summary>
|
||
Let me verify the changes and check for linter errors.</details></think>
|
||
|
||
---
|
||
|
||
<tool-use data-tool-type="unknown" data-tool-name="read_lints">
|
||
<details>
|
||
<summary>Tool use: **read_lints**</summary>
|
||
|
||
|
||
Parameters:
|
||
|
||
```json
|
||
{
|
||
"paths": [
|
||
"T:/Dynamic-Link-Manager/ops/tweak_tools.py"
|
||
]
|
||
}
|
||
```
|
||
Result:
|
||
|
||
```json
|
||
{
|
||
"linterErrorsByFile": [
|
||
{
|
||
"relativeWorkspacePath": "T:/Dynamic-Link-Manager/ops/tweak_tools.py"
|
||
}
|
||
]
|
||
}
|
||
```
|
||
Status: **completed**
|
||
|
||
|
||
</details>
|
||
</tool-use>
|
||
|
||
---
|
||
|
||
<think><details><summary>Thought Process</summary>
|
||
The changes are complete. Let me summarize what was changed:
|
||
|
||
1. Updated the module docstring to indicate it now supports "all" tweaks, not just arm/leg
|
||
2. Modified `get_tweak_bones()` so that when `limb="both"`, it returns ALL bones with "tweak" in their name (case-insensitive), instead of just the predefined arm+leg list
|
||
|
||
This means:
|
||
- "arm" → only arm tweaks (unchanged)
|
||
- "leg" → only leg tweaks (unchanged)
|
||
- "both" → ALL tweak bones found on the armature (spine, arm, leg, MCH, etc.)
|
||
|
||
The bones are filtered to only return those that actually exist on the armature, so it won't error if an armature doesn't have certain tweak bones.</details></think>
|
||
|
||
---
|
||
|
||
Done. Now when you use "tweak add both", it will add ALL tweak bones found on the armature (any bone with "tweak" in its name) - including spine tweaks (`tweak_spine`), arm tweaks, leg tweaks, and MCH mechanism tweaks.
|
||
|
||
**Summary of changes to `tweak_tools.py`:**
|
||
|
||
| Mode | Before | After |
|
||
|------|--------|-------|
|
||
| `arm` | 6 bones (upper/forearm/hand L+R) | Same |
|
||
| `leg` | 6 bones (thigh/shin/foot L+R) | Same |
|
||
| `both` | 12 bones (arm+leg only) | **All tweak bones** (spine, arm, leg, MCH, etc.) |
|
||
|
||
The function now dynamically discovers all tweak bones by checking `if "tweak" in bone.name.lower()` for every bone in the armature's pose.
|
||
|
||
---
|
||
|
||
_**User**_
|
||
|
||
let's create a new one that's only for body tweaks (no arm/leg); this includes spine_fk.003, and 002; they're blue and they're in the torso tweaks bone group in the rigify UI so let's make sure to add them. those should also be in the 'add all' functions.
|
||
|
||
---
|
||
|
||
_**Agent (model kimi-k2.5, mode Agent)**_
|
||
|
||
<think><details><summary>Thought Process</summary>
|
||
The user wants to create a new operator for body tweaks (no arm/leg). This includes spine tweaks like `spine_fk.003`, `spine_fk.002`, etc. They mentioned these are in the "torso tweaks" bone group in Rigify and are blue colored.
|
||
|
||
Let me first check the current operators.py to see how the tweak operators are defined, then add a new one for body tweaks.</details></think>
|
||
|
||
---
|
||
|
||
Let me examine the current tweak operators and add a new body tweaks option.
|
||
|
||
---
|
||
|
||
<tool-use data-tool-type="read" data-tool-name="read_file_v2">
|
||
<details><summary>Tool use: **read_file_v2** • Read file: T:/Dynamic-Link-Manager/ui/operators.py</summary>
|
||
|
||
</details>
|
||
</tool-use>
|
||
|
||
---
|
||
|
||
<think><details><summary>Thought Process</summary>
|
||
Now let me look at the earlier operators to see how arm and leg tweaks are defined:</details></think>
|
||
|
||
---
|
||
|
||
<tool-use data-tool-type="unknown" data-tool-name="ripgrep_raw_search">
|
||
<details>
|
||
<summary>Tool use: **ripgrep_raw_search**</summary>
|
||
|
||
|
||
Parameters:
|
||
|
||
```json
|
||
{
|
||
"pattern": "class DLM_OT_tweak_add",
|
||
"path": "T:/Dynamic-Link-Manager/ui/operators.py",
|
||
"outputMode": "content",
|
||
"contextBefore": 2,
|
||
"contextAfter": 20,
|
||
"caseInsensitive": false
|
||
}
|
||
```
|
||
Additional data:
|
||
|
||
```json
|
||
{
|
||
"isPruned": true,
|
||
"pattern": "class DLM_OT_tweak_add",
|
||
"path": "T:/Dynamic-Link-Manager/ui/operators.py",
|
||
"outputMode": "content",
|
||
"totalFiles": 1,
|
||
"totalMatches": 3,
|
||
"topFiles": [
|
||
{
|
||
"uri": "ui/operators.py",
|
||
"matchCount": 69
|
||
}
|
||
]
|
||
}
|
||
```
|
||
Status: **completed**
|
||
|
||
|
||
</details>
|
||
</tool-use>
|
||
|
||
---
|
||
|
||
<think><details><summary>Thought Process</summary>
|
||
Now I understand the structure. I need to:
|
||
|
||
1. Add a new "body" mode to `tweak_tools.py` that includes spine/torso tweaks (but excludes arm/leg tweaks)
|
||
2. Add new operators for add/remove/bake body tweaks
|
||
3. Register the new operators
|
||
|
||
The body tweaks should include:
|
||
- `tweak_spine` (and numbered variants like `tweak_spine.001`, etc.)
|
||
- `spine_fk` (and numbered variants like `spine_fk.002`, `spine_fk.003`)
|
||
- But NOT arm/leg tweak bones
|
||
|
||
Let me modify the code:</details></think>
|
||
|
||
---
|
||
|
||
Now I'll add a new "body" mode for torso/spine tweaks and create the corresponding operators.
|
||
|
||
---
|
||
|
||
<tool-use data-tool-type="write" data-tool-name="edit_file_v2">
|
||
|
||
<details><summary>Tool use: **edit_file_v2** • Edit file: T:/Dynamic-Link-Manager/ops/tweak_tools.py</summary>
|
||
|
||
</details>
|
||
|
||
</tool-use>
|
||
|
||
---
|
||
|
||
<think><details><summary>Thought Process</summary>
|
||
Now I need to add the new body tweak operators to operators.py. I'll add them after the leg operators and before the "both" operators:</details></think>
|
||
|
||
---
|
||
|
||
Now let me add the new body tweak operators to `operators.py`:
|
||
|
||
---
|
||
|
||
<tool-use data-tool-type="write" data-tool-name="edit_file_v2">
|
||
|
||
<details><summary>Tool use: **edit_file_v2** • Edit file: T:/Dynamic-Link-Manager/ui/operators.py</summary>
|
||
|
||
</details>
|
||
|
||
</tool-use>
|
||
|
||
---
|
||
|
||
<think><details><summary>Thought Process</summary>
|
||
Now I need to update the "remove both" and "bake both" labels/descriptions and add the new body operators to the OPERATOR_CLASSES list:</details></think>
|
||
|
||
---
|
||
|
||
<tool-use data-tool-type="write" data-tool-name="edit_file_v2">
|
||
|
||
<details><summary>Tool use: **edit_file_v2** • Edit file: T:/Dynamic-Link-Manager/ui/operators.py</summary>
|
||
|
||
</details>
|
||
|
||
</tool-use>
|
||
|
||
---
|
||
|
||
<think><details><summary>Thought Process</summary>
|
||
Now update the bake both label/description:</details></think>
|
||
|
||
---
|
||
|
||
<tool-use data-tool-type="write" data-tool-name="edit_file_v2">
|
||
|
||
<details><summary>Tool use: **edit_file_v2** • Edit file: T:/Dynamic-Link-Manager/ui/operators.py</summary>
|
||
|
||
</details>
|
||
|
||
</tool-use>
|
||
|
||
---
|
||
|
||
<think><details><summary>Thought Process</summary>
|
||
Now I need to add the new operators to the OPERATOR_CLASSES list:</details></think>
|
||
|
||
---
|
||
|
||
<tool-use data-tool-type="write" data-tool-name="edit_file_v2">
|
||
|
||
<details><summary>Tool use: **edit_file_v2** • Edit file: T:/Dynamic-Link-Manager/ui/operators.py</summary>
|
||
|
||
</details>
|
||
|
||
</tool-use>
|
||
|
||
---
|
||
|
||
<think><details><summary>Thought Process</summary>
|
||
Now let me check the UI panels to see if there's a panel that displays the tweak operators, so I can add the new body operators there:</details></think>
|
||
|
||
---
|
||
|
||
Let me check the UI panels to add the body tweak buttons:
|
||
|
||
---
|
||
|
||
<tool-use data-tool-type="unknown" data-tool-name="ripgrep_raw_search">
|
||
<details>
|
||
<summary>Tool use: **ripgrep_raw_search**</summary>
|
||
|
||
|
||
Parameters:
|
||
|
||
```json
|
||
{
|
||
"pattern": "tweak_add",
|
||
"path": "T:/Dynamic-Link-Manager/ui",
|
||
"outputMode": "content",
|
||
"contextBefore": 3,
|
||
"contextAfter": 5,
|
||
"caseInsensitive": false
|
||
}
|
||
```
|
||
Additional data:
|
||
|
||
```json
|
||
{
|
||
"isPruned": true,
|
||
"pattern": "tweak_add",
|
||
"path": "T:/Dynamic-Link-Manager/ui",
|
||
"outputMode": "content",
|
||
"totalFiles": 3,
|
||
"totalMatches": 27,
|
||
"topFiles": [
|
||
{
|
||
"uri": "ui/operators.py",
|
||
"matchCount": 58
|
||
},
|
||
{
|
||
"uri": "ui\\operators.py",
|
||
"matchCount": 58
|
||
},
|
||
{
|
||
"uri": "ui/panels.py",
|
||
"matchCount": 17
|
||
}
|
||
]
|
||
}
|
||
```
|
||
Status: **completed**
|
||
|
||
|
||
</details>
|
||
</tool-use>
|
||
|
||
---
|
||
|
||
<think><details><summary>Thought Process</summary>
|
||
Now I need to add the body tweak row to the UI panel:</details></think>
|
||
|
||
---
|
||
|
||
<tool-use data-tool-type="write" data-tool-name="edit_file_v2">
|
||
|
||
<details><summary>Tool use: **edit_file_v2** • Edit file: T:/Dynamic-Link-Manager/ui/panels.py</summary>
|
||
|
||
</details>
|
||
|
||
</tool-use>
|
||
|
||
---
|
||
|
||
<think><details><summary>Thought Process</summary>
|
||
Now let me run the linter to check for errors:</details></think>
|
||
|
||
---
|
||
|
||
<tool-use data-tool-type="unknown" data-tool-name="read_lints">
|
||
<details>
|
||
<summary>Tool use: **read_lints**</summary>
|
||
|
||
|
||
Parameters:
|
||
|
||
```json
|
||
{
|
||
"paths": [
|
||
"T:/Dynamic-Link-Manager/ops/tweak_tools.py",
|
||
"T:/Dynamic-Link-Manager/ui/operators.py",
|
||
"T:/Dynamic-Link-Manager/ui/panels.py"
|
||
]
|
||
}
|
||
```
|
||
Result:
|
||
|
||
```json
|
||
{
|
||
"linterErrorsByFile": [
|
||
{
|
||
"relativeWorkspacePath": "T:/Dynamic-Link-Manager/ops/tweak_tools.py"
|
||
},
|
||
{
|
||
"relativeWorkspacePath": "T:/Dynamic-Link-Manager/ui/operators.py"
|
||
},
|
||
{
|
||
"relativeWorkspacePath": "T:/Dynamic-Link-Manager/ui/panels.py"
|
||
}
|
||
]
|
||
}
|
||
```
|
||
Status: **completed**
|
||
|
||
|
||
</details>
|
||
</tool-use>
|
||
|
||
---
|
||
|
||
<think><details><summary>Thought Process</summary>
|
||
Everything is complete. Let me summarize the changes:</details></think>
|
||
|
||
---
|
||
|
||
Done. I've added a new "Body Tweaks" mode and updated the UI. Here's the summary:
|
||
|
||
**New Features:**
|
||
|
||
| Mode | Bones Included |
|
||
|------|---------------|
|
||
| `arm` | Upper arm, forearm, hand (L+R) |
|
||
| `leg` | Thigh, shin, foot (L+R) |
|
||
| **`body`** (new) | Spine tweaks, `spine_fk` bones, torso tweaks (no arm/leg) |
|
||
| `both` (renamed to "All") | All tweak bones: arm + leg + body + MCH |
|
||
|
||
**Changes Made:**
|
||
|
||
1. **`ops/tweak_tools.py`** - Added "body" mode to `get_tweak_bones()`:
|
||
- Body mode includes bones with "tweak" or "spine_fk" in the name
|
||
- Excludes arm/leg tweak bones
|
||
- "both" mode now includes all tweaks (arm, leg, body, spine, MCH)
|
||
|
||
2. **`ui/operators.py`** - Added 3 new operators:
|
||
- `DLM_OT_tweak_add_body`
|
||
- `DLM_OT_tweak_remove_body`
|
||
- `DLM_OT_tweak_bake_body`
|
||
- Renamed "Both" to "All" in labels
|
||
|
||
3. **`ui/panels.py`** - Added Body row and renamed Both to All:
|
||
- New row: Add Body / Remove Body / Bake Body
|
||
- Renamed: Add All / Remove All / Bake All
|
||
|
||
---
|
||
|
||
_**User**_
|
||
|
||
@c:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\terminals\4.txt still getting this error on tweakbakes.
|
||
|
||
---
|
||
|
||
_**Agent (model kimi-k2.5, mode Agent)**_
|
||
|
||
<think><details><summary>Thought Process</summary>
|
||
Let me check the latest error in the terminal file to see what's happening with the tweak bake operations.</details></think>
|
||
|
||
---
|
||
|
||
<tool-use data-tool-type="shell" data-tool-name="run_terminal_command_v2">
|
||
<details><summary>Tool use: **run_terminal_command_v2** • Run command: Get-Content "c:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\terminals\4.txt" -Tail 60</summary>
|
||
|
||
```bash
|
||
Get-Content "c:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\terminals\4.txt" -Tail 60
|
||
```
|
||
|
||
```
|
||
C:\Program Files\Blender Foundation\Blender 5.0\5.0\scripts\startup\fa_panel_panel_ani.py:47
|
||
rna_uiItemO: unknown operator 'object.proxy_make'
|
||
|
||
C:\Program Files\Blender Foundation\Blender 5.0\5.0\scripts\startup\fa_panel_panel_ani.py:47
|
||
rna_uiItemO: unknown operator 'object.proxy_make'
|
||
|
||
C:\Program Files\Blender Foundation\Blender 5.0\5.0\scripts\startup\fa_panel_panel_ani.py:47
|
||
rna_uiItemO: unknown operator 'object.proxy_make'
|
||
|
||
C:\Program Files\Blender Foundation\Blender 5.0\5.0\scripts\startup\fa_panel_panel_ani.py:47
|
||
rna_uiItemO: unknown operator 'object.proxy_make'
|
||
|
||
C:\Program Files\Blender Foundation\Blender 5.0\5.0\scripts\startup\fa_panel_panel_ani.py:47
|
||
rna_uiItemO: unknown operator 'object.proxy_make'
|
||
|
||
C:\Program Files\Blender Foundation\Blender 5.0\5.0\scripts\startup\fa_panel_panel_ani.py:47
|
||
rna_uiItemO: unknown operator 'object.proxy_make'
|
||
|
||
C:\Program Files\Blender Foundation\Blender 5.0\5.0\scripts\startup\fa_panel_panel_ani.py:47
|
||
rna_uiItemO: unknown operator 'object.proxy_make'
|
||
|
||
C:\Program Files\Blender Foundation\Blender 5.0\5.0\scripts\startup\fa_panel_panel_ani.py:47
|
||
rna_uiItemO: unknown operator 'object.proxy_make'
|
||
|
||
C:\Program Files\Blender Foundation\Blender 5.0\5.0\scripts\startup\fa_panel_panel_ani.py:47
|
||
rna_uiItemO: unknown operator 'object.proxy_make'
|
||
|
||
C:\Program Files\Blender Foundation\Blender 5.0\5.0\scripts\startup\fa_panel_panel_ani.py:47
|
||
rna_uiItemO: unknown operator 'object.proxy_make'
|
||
|
||
C:\Program Files\Blender Foundation\Blender 5.0\5.0\scripts\startup\fa_panel_panel_ani.py:47
|
||
rna_uiItemO: unknown operator 'object.proxy_make'
|
||
|
||
C:\Program Files\Blender Foundation\Blender 5.0\5.0\scripts\startup\fa_panel_panel_ani.py:47
|
||
01:02:35.156 operator | Body tweak constraints added.
|
||
Traceback (most recent call last):
|
||
File "C:\Program Files\Blender Foundation\Blender 5.0\portable\extensions\vscode_development\Dynamic-Link-Manager\ui\operators.py", line 788, in execute
|
||
ok, msg = tweak_tools.bake_tweak_constraints(
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
File "C:\Program Files\Blender Foundation\Blender 5.0\portable\extensions\vscode_development\Dynamic-Link-Manager\ops\tweak_tools.py", line 116, in bake_tweak_constraints
|
||
rep.data.bones[name].select = True
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
AttributeError: 'Bone' object has no attribute 'select'
|
||
01:02:38.844 bpy.rna | ERROR Python script error in DLM_OT_tweak_bake_body.execute
|
||
01:02:38.844 operator | ERROR Python: Traceback (most recent call last):
|
||
| File "C:\Program Files\Blender Foundation\Blender 5.0\portable\extensions\vscode_development\Dynamic-Link-Manager\ui\operators.py", line 788, in execute
|
||
| ok, msg = tweak_tools.bake_tweak_constraints(
|
||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
| File "C:\Program Files\Blender Foundation\Blender 5.0\portable\extensions\vscode_development\Dynamic-Link-Manager\ops\tweak_tools.py", line 116, in bake_tweak_constraints
|
||
| rep.data.bones[name].select = True
|
||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
| AttributeError: 'Bone' object has no attribute 'select'
|
||
rna_uiItemO: unknown operator 'object.proxy_make'
|
||
|
||
C:\Program Files\Blender Foundation\Blender 5.0\5.0\scripts\startup\fa_panel_panel_ani.py:47
|
||
Info: Saved copy as "2026-03-13_15-55_P&S_BD2_animation 4c.blend"
|
||
Incremental Autosave: Saved file: C:\Users\Nathan\AppData\Local\Temp\2026-03-13_15-55_P&S_BD2_animation 4c.blend
|
||
rna_uiItemO: unknown operator 'object.proxy_make'
|
||
|
||
C:\Program Files\Blender Foundation\Blender 5.0\5.0\scripts\startup\fa_panel_panel_ani.py:47
|
||
|
||
```
|
||
</details>
|
||
</tool-use>
|
||
|
||
---
|
||
|
||
<think><details><summary>Thought Process</summary>
|
||
The error is still happening. It seems my fix didn't get applied properly, or there's something else going on. The error is on line 116 of `tweak_tools.py`:
|
||
|
||
```python
|
||
rep.data.bones[name].select = True
|
||
```
|
||
|
||
In Blender 5.0, `Bone` objects don't have a `select` attribute. Let me check the current state of the file to see what happened.</details></think>
|
||
|
||
---
|
||
|
||
Let me check the current state of the file:
|
||
|
||
---
|
||
|
||
<tool-use data-tool-type="read" data-tool-name="read_file_v2">
|
||
<details><summary>Tool use: **read_file_v2** • Read file: T:/Dynamic-Link-Manager/ops/tweak_tools.py</summary>
|
||
|
||
</details>
|
||
</tool-use>
|
||
|
||
---
|
||
|
||
<think><details><summary>Thought Process</summary>
|
||
The file still has the old code. Let me check what's happening. Maybe my edit didn't save properly. Let me try again with the correct fix.</details></think>
|
||
|
||
---
|
||
|
||
<tool-use data-tool-type="write" data-tool-name="edit_file_v2">
|
||
|
||
<details><summary>Tool use: **edit_file_v2** • Edit file: T:/Dynamic-Link-Manager/ops/tweak_tools.py</summary>
|
||
|
||
</details>
|
||
|
||
</tool-use>
|
||
|
||
---
|
||
|
||
<think><details><summary>Thought Process</summary>
|
||
Let me verify this change was applied and check for linter errors.</details></think>
|
||
|
||
---
|
||
|
||
<tool-use data-tool-type="read" data-tool-name="read_file_v2">
|
||
<details><summary>Tool use: **read_file_v2** • Read file: T:/Dynamic-Link-Manager/ops/tweak_tools.py</summary>
|
||
|
||
</details>
|
||
</tool-use>
|
||
|
||
---
|
||
|
||
<tool-use data-tool-type="unknown" data-tool-name="read_lints">
|
||
<details>
|
||
<summary>Tool use: **read_lints**</summary>
|
||
|
||
|
||
Parameters:
|
||
|
||
```json
|
||
{
|
||
"paths": [
|
||
"T:/Dynamic-Link-Manager/ops/tweak_tools.py"
|
||
]
|
||
}
|
||
```
|
||
Result:
|
||
|
||
```json
|
||
{
|
||
"linterErrorsByFile": [
|
||
{
|
||
"relativeWorkspacePath": "T:/Dynamic-Link-Manager/ops/tweak_tools.py"
|
||
}
|
||
]
|
||
}
|
||
```
|
||
Status: **completed**
|
||
|
||
|
||
</details>
|
||
</tool-use>
|
||
|
||
---
|
||
|
||
<think><details><summary>Thought Process</summary>
|
||
The fix has been applied. In Blender 5.0, bone selection is done via `select_head` and `select_tail` properties rather than a single `select` property.</details></think>
|
||
|
||
---
|
||
|
||
Fixed. In Blender 5.0, bone selection changed from `bone.select = True` to setting `bone.select_head = True` and `bone.select_tail = True`. The bone is now fully selected.
|
||
|
||
---
|
||
|
||
_**User**_
|
||
|
||
@c:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\terminals\4.txt check the blender 5.0 API documentation.
|
||
|
||
---
|
||
|
||
_**Agent (model kimi-k2.5, mode Agent)**_
|
||
|
||
<think><details><summary>Thought Process</summary>
|
||
The user wants me to check the Blender 5.0 API documentation. Let me search for the proper way to select bones in Blender 5.0.</details></think>
|
||
|
||
---
|
||
|
||
<tool-use data-tool-type="search" data-tool-name="web_search">
|
||
<details>
|
||
<summary>Tool use: **web_search** • Searched web `undefined` • **1** results</summary>
|
||
|
||
| Title | URL | Chunk |
|
||
|-------|-----|-------|
|
||
| Web search results for query: Blender 5.0 API bone.select python armature | | Links:<br/>1. [Bones & Armatures - Blender Python API](https://docs.blender.org/api/current/info_gotchas_armatures_and_bones.html)<br/>2. [Python API - Blender Developer Documentation](https://developer.blender.org/docs/release_notes/5.0/python_api/)<br/>3. [Armature Operators - Blender Python API](https://docs.blender.org/api/current/bpy.ops.armature.html)<br/>4. [How to select multiple bones and set an active bone with Python?](https://blender.stackexchange.com/questions/269659/how-to-select-multiple-bones-and-set-an-active-bone-with-python)<br/>5. [Set active bone in pose mode from Python script](https://blender.stackexchange.com/questions/134250/set-active-bone-in-pose-mode-from-python-script/134263)<br/><br/># Blender 5.0 Bone Selection in Python<br/><br/>## Three Types of Bones<br/><br/>Blender armatures have three distinct bone data structures accessed differently:[1]<br/><br/>- **Edit Bones** (`bpy.context.object.data.edit_bones`) - Only accessible in Edit-Mode; used for structural changes<br/>- **Bones** (`bpy.context.object.data.bones`) - Accessible in Object/Pose-Mode; read-only properties like head/tail<br/>- **Pose Bones** (`bpy.context.object.pose.bones`) - Contains animation data, constraints, and IK settings<br/><br/>## Selecting Bones<br/><br/>### In Edit-Mode<br/>Set `bone.select = True` on edit bones, then set the active bone using `armature.data.edit_bones.active`:[4]<br/><br/>```python<br/>for bone in arm.data.edit_bones:<br/> if bone.name in bones_to_select:<br/> bone.select = True<br/> if bone.name == bones_to_select[-1]:<br/> arm.data.edit_bones.active = bone<br/>```<br/><br/>### In Pose-Mode<br/>Set the active bone through `armature.data.bones.active` (the Bone object, not the PoseBone):[5]<br/><br/>```python<br/>bone = bpy.context.object.data.bones["Bone"]<br/>bpy.context.object.data.bones.active = bone<br/>```<br/><br/>The active bone in the armature data automatically sets the active pose bone.<br/><br/>## Important Notes<br/><br/>- Mode switching matters: Edit bones don't exist outside Edit-Mode and shouldn't be referenced after leaving that mode[1]<br/>- Pose bones are accessed from the object (`bpy.context.object.pose.bones`), not the armature data, allowing multiple objects to share one armature in different poses[1] |
|
||
|
||
</details>
|
||
</tool-use>
|
||
|
||
---
|
||
|
||
<think><details><summary>Thought Process</summary>
|
||
The search didn't give me the exact API for selecting bones in pose mode. Let me try a different search specifically for the select property or the new way to select bones in Blender 5.0.</details></think>
|
||
|
||
---
|
||
|
||
<tool-use data-tool-type="search" data-tool-name="web_search">
|
||
<details>
|
||
<summary>Tool use: **web_search** • Searched web `undefined` • **1** results</summary>
|
||
|
||
| Title | URL | Chunk |
|
||
|-------|-----|-------|
|
||
| Web search results for query: Blender 5.0 bone.select_head select_tail API change python | | Links:<br/>1. [Python API - Blender Developer Documentation](https://developer.blender.org/docs/release_notes/5.0/python_api/)<br/>2. [Bones & Armatures - Blender Python API](https://docs.blender.org/api/current/info_gotchas_armatures_and_bones.html)<br/>3. [Select tail of a bone with Python](https://blender.stackexchange.com/questions/172858/select-tail-of-a-bone-with-python)<br/>4. [Animation & Rigging - Blender Developer Documentation](https://developer.blender.org/docs/release_notes/5.0/animation_rigging/)<br/>5. [Armature.Editbone](https://docs.blender.org/api/245PythonDoc/Armature.Editbone-class.html)<br/><br/># Blender 5.0 Bone Selection API Changes<br/><br/>In Blender 5.0, there are significant Python API changes related to bone selection state. The key change is that **bone selection state is now stored on the pose bone itself rather than on the bone data**.[4]<br/><br/>## Specific Changes<br/><br/>Previously, you could access selection properties like `select_head` and `select_tail` on bone objects in object mode. However, with the new architecture where selection is stored per pose bone instance, this allows different armature instances to have independent selection states.[4]<br/><br/>## Python API Impact<br/><br/>This represents a **backwards compatibility break** for the Python API.[4] Code that previously used properties like:<br/>```python<br/>bpy.data.armatures["Armature"].bones["Bone.001"].select_tail = True<br/>```<br/><br/>will need to be updated to work with pose bones instead, which now carry the selection state.<br/><br/>## Edit Mode Selection<br/><br/>For selecting bone components in Edit Mode, you should use `EditBone` objects through `bpy.context.object.data.edit_bones`. EditBones have properties for manipulating bone geometry including head and tail positions.[2]<br/><br/>The change reflects Blender 5.0's broader effort to separate selection and visibility states between armature instances, making it possible to work with multiple instances of the same armature simultaneously without their properties being synced.[4] |
|
||
|
||
</details>
|
||
</tool-use>
|
||
|
||
---
|
||
|
||
<think><details><summary>Thought Process</summary>
|
||
This is very helpful. It says that in Blender 5.0, bone selection state is now stored on the **pose bone** itself rather than on the bone data. So instead of `rep.data.bones[name].select_head`, we should use the pose bone directly.
|
||
|
||
Let me search for more specific information about how to select bones via the pose bone.</details></think>
|
||
|
||
---
|
||
|
||
<tool-use data-tool-type="unknown" data-tool-name="web_fetch">
|
||
<details>
|
||
<summary>Tool use: **web_fetch**</summary>
|
||
|
||
|
||
Parameters:
|
||
|
||
```json
|
||
{
|
||
"url": "https://docs.blender.org/api/current/bpy.types.PoseBone.html"
|
||
}
|
||
```
|
||
Result:
|
||
|
||
```json
|
||
{
|
||
"url": "https://docs.blender.org/api/current/bpy.types.PoseBone.html",
|
||
"markdown": "PoseBone(bpy_struct) - Blender Python API\n\n# PoseBone(bpy_struct)¶\n\nbase class — [bpy_struct](https://docs.blender.org/api/current/bpy.types.bpy_struct.html#bpy.types.bpy_struct)\n\nclass bpy.types.PoseBone(bpy_struct)¶\n\nChannel defining pose data for a bone in a Pose\n\nbbone_curveinx¶\n\nX-axis handle offset for start of the B-Bone’s curve, adjusts curvature\n\nType:\n\nfloat in [-inf, inf], default 0.0\n\nbbone_curveinz¶\n\nZ-axis handle offset for start of the B-Bone’s curve, adjusts curvature\n\nType:\n\nfloat in [-inf, inf], default 0.0\n\nbbone_curveoutx¶\n\nX-axis handle offset for end of the B-Bone’s curve, adjusts curvature\n\nType:\n\nfloat in [-inf, inf], default 0.0\n\nbbone_curveoutz¶\n\nZ-axis handle offset for end of the B-Bone’s curve, adjusts curvature\n\nType:\n\nfloat in [-inf, inf], default 0.0\n\nbbone_custom_handle_end¶\n\nBone that serves as the end handle for the B-Bone curve\n\nType:\n\n`PoseBone`, (readonly)\n\nbbone_custom_handle_start¶\n\nBone that serves as the start handle for the B-Bone curve\n\nType:\n\n`PoseBone`, (readonly)\n\nbbone_easein¶\n\nLength of first Bézier Handle (for B-Bones only)\n\nType:\n\nfloat in [-inf, inf], default 0.0\n\nbbone_easeout¶\n\nLength of second Bézier Handle (for B-Bones only)\n\nType:\n\nfloat in [-inf, inf], default 0.0\n\nbbone_rollin¶\n\nRoll offset for the start of the B-Bone, adjusts twist\n\nType:\n\nfloat in [-inf, inf], default 0.0\n\nbbone_rollout¶\n\nRoll offset for the end of the B-Bone, adjusts twist\n\nType:\n\nfloat in [-inf, inf], default 0.0\n\nbbone_scalein¶\n\nScale factors for the start of the B-Bone, adjusts thickness (for tapering effects)\n\nType:\n\n[mathutils.Vector](https://docs.blender.org/api/current/mathutils.html#mathutils.Vector) of 3 items in [-inf, inf], default (1.0, 1.0, 1.0)\n\nbbone_scaleout¶\n\nScale factors for the end of the B-Bone, adjusts thickness (for tapering effects)\n\nType:\n\n[mathutils.Vector](https://docs.blender.org/api/current/mathutils.html#mathutils.Vector) of 3 items in [-inf, inf], default (1.0, 1.0, 1.0)\n\nbone¶\n\nBone associated with this PoseBone\n\nType:\n\n[Bone](https://docs.blender.org/api/current/bpy.types.Bone.html#bpy.types.Bone), (readonly, never None)\n\nchild¶\n\nChild of this pose bone\n\nType:\n\n`PoseBone`, (readonly)\n\ncolor¶ Type:\n\n[BoneColor](https://docs.blender.org/api/current/bpy.types.BoneColor.html#bpy.types.BoneColor), (readonly)\n\nconstraints¶\n\nConstraints that act on this pose channel\n\nType:\n\n[PoseBoneConstraints](https://docs.blender.org/api/current/bpy.types.PoseBoneConstraints.html#bpy.types.PoseBoneConstraints) [bpy_prop_collection](https://docs.blender.org/api/current/bpy.types.bpy_prop_collection.html#bpy.types.bpy_prop_collection) of [Constraint](https://docs.blender.org/api/current/bpy.types.Constraint.html#bpy.types.Constraint), (readonly)\n\ncustom_shape¶\n\nObject that defines custom display shape for this bone\n\nType:\n\n[Object](https://docs.blender.org/api/current/bpy.types.Object.html#bpy.types.Object)\n\ncustom_shape_rotation_euler¶\n\nAdjust the rotation of the custom shape\n\nType:\n\n[mathutils.Euler](https://docs.blender.org/api/current/mathutils.html#mathutils.Euler) rotation of 3 items in [-inf, inf], default (0.0, 0.0, 0.0)\n\ncustom_shape_scale_xyz¶\n\nAdjust the size of the custom shape\n\nType:\n\n[mathutils.Vector](https://docs.blender.org/api/current/mathutils.html#mathutils.Vector) of 3 items in [-inf, inf], default (1.0, 1.0, 1.0)\n\ncustom_shape_transform¶\n\nBone that defines the display transform of this custom shape\n\nType:\n\n`PoseBone`\n\ncustom_shape_translation¶\n\nAdjust the location of the custom shape\n\nType:\n\n[mathutils.Vector](https://docs.blender.org/api/current/mathutils.html#mathutils.Vector) of 3 items in [-inf, inf], default (0.0, 0.0, 0.0)\n\ncustom_shape_wire_width¶\n\nAdjust the line thickness of custom shapes\n\nType:\n\nfloat in [1, 16], default 0.0\n\nhead¶\n\nLocation of head of the channel’s bone\n\nType:\n\n[mathutils.Vector](https://docs.blender.org/api/current/mathutils.html#mathutils.Vector) of 3 items in [-inf, inf], default (0.0, 0.0, 0.0), (readonly)\n\nhide¶\n\nBone is not visible except for Edit Mode\n\nType:\n\nboolean, default False\n\nik_linear_weight¶\n\nWeight of scale constraint for IK\n\nType:\n\nfloat in [0, 1], default 0.0\n\nik_max_x¶\n\nMaximum angles for IK Limit\n\nType:\n\nfloat in [0, 3.14159], default 0.0\n\nik_max_y¶\n\nMaximum angles for IK Limit\n\nType:\n\nfloat in [0, 3.14159], default 0.0\n\nik_max_z¶\n\nMaximum angles for IK Limit\n\nType:\n\nfloat in [0, 3.14159], default 0.0\n\nik_min_x¶\n\nMinimum angles for IK Limit\n\nType:\n\nfloat in [-3.14159, 0], default 0.0\n\nik_min_y¶\n\nMinimum angles for IK Limit\n\nType:\n\nfloat in [-3.14159, 0], default 0.0\n\nik_min_z¶\n\nMinimum angles for IK Limit\n\nType:\n\nfloat in [-3.14159, 0], default 0.0\n\nik_rotation_weight¶\n\nWeight of rotation constraint for IK\n\nType:\n\nfloat in [0, 1], default 0.0\n\nik_stiffness_x¶\n\nIK stiffness around the X axis\n\nType:\n\nfloat in [0, 0.99], default 0.0\n\nik_stiffness_y¶\n\nIK stiffness around the Y axis\n\nType:\n\nfloat in [0, 0.99], default 0.0\n\nik_stiffness_z¶\n\nIK stiffness around the Z axis\n\nType:\n\nfloat in [0, 0.99], default 0.0\n\nik_stretch¶\n\nAllow scaling of the bone for IK\n\nType:\n\nfloat in [0, 1], default 0.0\n\nis_in_ik_chain¶\n\nIs part of an IK chain\n\nType:\n\nboolean, default False, (readonly)\n\nlength¶\n\nLength of the bone\n\nType:\n\nfloat in [-inf, inf], default 0.0, (readonly)\n\nlocation¶ Type:\n\n[mathutils.Vector](https://docs.blender.org/api/current/mathutils.html#mathutils.Vector) of 3 items in [-inf, inf], default (0.0, 0.0, 0.0)\n\nlock_ik_x¶\n\nDisallow movement around the X axis\n\nType:\n\nboolean, default False\n\nlock_ik_y¶\n\nDisallow movement around the Y axis\n\nType:\n\nboolean, default False\n\nlock_ik_z¶\n\nDisallow movement around the Z axis\n\nType:\n\nboolean, default False\n\nlock_location¶\n\nLock editing of location when transforming\n\nType:\n\nboolean array of 3 items, default (False, False, False)\n\nlock_rotation¶\n\nLock editing of rotation when transforming\n\nType:\n\nboolean array of 3 items, default (False, False, False)\n\nlock_rotation_w¶\n\nLock editing of ‘angle’ component of four-component rotations when transforming\n\nType:\n\nboolean, default False\n\nlock_rotations_4d¶\n\nLock editing of four component rotations by components (instead of as Eulers)\n\nType:\n\nboolean, default False\n\nlock_scale¶\n\nLock editing of scale when transforming\n\nType:\n\nboolean array of 3 items, default (False, False, False)\n\nmatrix¶\n\nFinal 4×4 matrix after constraints and drivers are applied, in the armature object space\n\nType:\n\n[mathutils.Matrix](https://docs.blender.org/api/current/mathutils.html#mathutils.Matrix) of 4 * 4 items in [-inf, inf], default ((0.0, 0.0, 0.0, 0.0), (0.0, 0.0, 0.0, 0.0), (0.0, 0.0, 0.0, 0.0), (0.0, 0.0, 0.0, 0.0))\n\nmatrix_basis¶\n\nAlternative access to location/scale/rotation relative to the parent and own rest bone\n\nType:\n\n[mathutils.Matrix](https://docs.blender.org/api/current/mathutils.html#mathutils.Matrix) of 4 * 4 items in [-inf, inf], default ((0.0, 0.0, 0.0, 0.0), (0.0, 0.0, 0.0, 0.0), (0.0, 0.0, 0.0, 0.0), (0.0, 0.0, 0.0, 0.0))\n\nmatrix_channel¶\n\n4×4 matrix of the bone’s location/rotation/scale channels (including animation and drivers) and the effect of bone constraints\n\nType:\n\n[mathutils.Matrix](https://docs.blender.org/api/current/mathutils.html#mathutils.Matrix) of 4 * 4 items in [-inf, inf], default ((0.0, 0.0, 0.0, 0.0), (0.0, 0.0, 0.0, 0.0), (0.0, 0.0, 0.0, 0.0), (0.0, 0.0, 0.0, 0.0)), (readonly)\n\nmotion_path¶\n\nMotion Path for this element\n\nType:\n\n[MotionPath](https://docs.blender.org/api/current/bpy.types.MotionPath.html#bpy.types.MotionPath), (readonly)\n\nname¶ Type:\n\nstring, default “”, (never None)\n\nparent¶\n\nParent of this pose bone\n\nType:\n\n`PoseBone`, (readonly)\n\nrotation_axis_angle¶\n\nAngle of Rotation for Axis-Angle rotation representation\n\nType:\n\nfloat array of 4 items in [-inf, inf], default (0.0, 0.0, 1.0, 0.0)\n\nrotation_euler¶\n\nRotation in Eulers\n\nType:\n\n[mathutils.Euler](https://docs.blender.org/api/current/mathutils.html#mathutils.Euler) rotation of 3 items in [-inf, inf], default (0.0, 0.0, 0.0)\n\nrotation_mode¶\n\nThe kind of rotation to apply, values from other rotation modes are not used\n\nType:\n\nenum in [Object Rotation Mode Items](https://docs.blender.org/api/current/bpy_types_enum_items/object_rotation_mode_items.html#rna-enum-object-rotation-mode-items), default`'QUATERNION'`\n\nrotation_quaternion¶\n\nRotation in Quaternions\n\nType:\n\n[mathutils.Quaternion](https://docs.blender.org/api/current/mathutils.html#mathutils.Quaternion) rotation of 4 items in [-inf, inf], default (1.0, 0.0, 0.0, 0.0)\n\nscale¶ Type:\n\n[mathutils.Vector](https://docs.blender.org/api/current/mathutils.html#mathutils.Vector) of 3 items in [-inf, inf], default (1.0, 1.0, 1.0)\n\nselect¶\n\nBone is selected in Pose Mode\n\nType:\n\nboolean, default False\n\ntail¶\n\nLocation of tail of the channel’s bone\n\nType:\n\n[mathutils.Vector](https://docs.blender.org/api/current/mathutils.html#mathutils.Vector) of 3 items in [-inf, inf], default (0.0, 0.0, 0.0), (readonly)\n\nuse_custom_shape_bone_size¶\n\nScale the custom object by the bone length\n\nType:\n\nboolean, default False\n\nuse_ik_limit_x¶\n\nLimit movement around the X axis\n\nType:\n\nboolean, default False\n\nuse_ik_limit_y¶\n\nLimit movement around the Y axis\n\nType:\n\nboolean, default False\n\nuse_ik_limit_z¶\n\nLimit movement around the Z axis\n\nType:\n\nboolean, default False\n\nuse_ik_linear_control¶\n\nApply channel size as IK constraint if stretching is enabled\n\nType:\n\nboolean, default False\n\nuse_ik_rotation_control¶\n\nApply channel rotation as IK constraint\n\nType:\n\nboolean, default False\n\nuse_transform_around_custom_shape¶\n\nTransform the bone as if it was a child of the Custom Shape Transform bone. This can be useful when combining shape-key and armature deformations.\n\nType:\n\nboolean, default False\n\nuse_transform_at_custom_shape¶\n\nThe location and orientation of the Custom Shape Transform bone will be used for transform gizmos and for other transform operators in the 3D Viewport. When disabled, the 3D Viewport will still use the actual bone transform for these, even when the custom bone shape transform is overridden.\n\nType:\n\nboolean, default False\n\nbasename¶\n\nThe name of this bone before any`.` character.\n\n(readonly)\n\ncenter¶\n\nThe midpoint between the head and the tail.\n\n(readonly)\n\nchildren¶\n\n(readonly)\n\nchildren_recursive¶\n\nA list of all children from this bone.\n\nNote\n\nTakes`O(len(bones)**2)` time.\n\n(readonly)\n\nchildren_recursive_basename¶\n\nReturns a chain of children with the same base name as this bone. Only direct chains are supported, forks caused by multiple children with matching base names will terminate the function and not be returned.\n\nNote\n\nTakes`O(len(bones)**2)` time.\n\n(readonly)\n\nparent_recursive¶\n\nA list of parents, starting with the immediate parent.\n\n(readonly)\n\nvector¶\n\nThe direction this bone is pointing. Utility function for (tail - head)\n\n(readonly)\n\nx_axis¶\n\nVector pointing down the x-axis of the bone.\n\n(readonly)\n\ny_axis¶\n\nVector pointing down the y-axis of the bone.\n\n(readonly)\n\nz_axis¶\n\nVector pointing down the z-axis of the bone.\n\n(readonly)\n\nbl_system_properties_get(*, do_create=False)¶\n\nDEBUG ONLY. Internal access to runtime-defined RNA data storage, intended solely for testing and debugging purposes. Do not access it in regular scripting work, and in particular, do not assume that it contains writable data\n\nParameters:\n\ndo_create (boolean, (optional)) – Ensure that system properties are created if they do not exist yet\n\nReturns:\n\nThe system properties root container, or None if there are no system properties stored in this data yet, and its creation was not requested\n\nReturn type:\n\n[PropertyGroup](https://docs.blender.org/api/current/bpy.types.PropertyGroup.html#bpy.types.PropertyGroup)\n\nevaluate_envelope(point)¶\n\nCalculate bone envelope at given point\n\nParameters:\n\npoint ([mathutils.Vector](https://docs.blender.org/api/current/mathutils.html#mathutils.Vector) of 3 items in [-inf, inf]) – Point, Position in 3d space to evaluate\n\nReturns:\n\nFactor, Envelope factor\n\nReturn type:\n\nfloat in [-inf, inf]\n\nbbone_segment_index(point)¶\n\nRetrieve the index and blend factor of the B-Bone segments based on vertex position\n\nParameters:\n\npoint ([mathutils.Vector](https://docs.blender.org/api/current/mathutils.html#mathutils.Vector) of 3 items in [-inf, inf]) – Point, Vertex position in armature pose space\n\nReturns:\n\n`index`, The index of the first segment joint affecting the point, int in [-inf, inf]\n\n`blend_next`, The blend factor between the given and the following joint, float in [-inf, inf]\n\nReturn type:\n\n(int in [-inf, inf], float in [-inf, inf])\n\nbbone_segment_matrix(index, *, rest=False)¶\n\nRetrieve the matrix of the joint between B-Bone segments if available\n\nParameters:\n\nindex (int in [0, inf]) – Index of the segment endpoint\n\nrest (boolean, (optional)) – Return the rest pose matrix\n\nReturns:\n\nThe resulting matrix in bone local space\n\nReturn type:\n\n[mathutils.Matrix](https://docs.blender.org/api/current/mathutils.html#mathutils.Matrix) of 4 * 4 items in [-inf, inf]\n\nThis example shows how to use B-Bone segment matrices to emulate deformation produced by the Armature modifier or constraint when assigned to the given bone (without Preserve Volume). The coordinates are processed in armature Pose space:\n\n```\ndef bbone_deform_matrix(pose_bone, point):\n index, blend_next = pose_bone.bbone_segment_index(point)\n\n rest1 = pose_bone.bbone_segment_matrix(index, rest=True)\n pose1 = pose_bone.bbone_segment_matrix(index, rest=False)\n deform1 = pose1 @ rest1.inverted()\n\n # `bbone_segment_index` ensures that index + 1 is always valid\n rest2 = pose_bone.bbone_segment_matrix(index + 1, rest=True)\n pose2 = pose_bone.bbone_segment_matrix(index + 1, rest=False)\n deform2 = pose2 @ rest2.inverted()\n\n deform = deform1 * (1 - blend_next) + deform2 * blend_next\n\n return pose_bone.matrix @ deform @ pose_bone.bone.matrix_local.inverted()\n\n\n# Armature modifier deforming vertices:\nmesh = bpy.data.objects[\"Mesh\"]\npose_bone = bpy.data.objects[\"Armature\"].pose.bones[\"Bone\"]\n\nfor vertex in mesh.data.vertices:\n vertex.co = bbone_deform_matrix(pose_bone, vertex.co) @ vertex.co\n\n# Armature constraint modifying an object transform:\nempty = bpy.data.objects[\"Empty\"]\nmatrix = empty.matrix_world\n\nempty.matrix_world = bbone_deform_matrix(pose_bone, matrix.translation) @ matrix\n\n```\n\ncompute_bbone_handles(*, rest=False, ease=False, offsets=False)¶\n\nRetrieve the vectors and rolls coming from B-Bone custom handles\n\nParameters:\n\nrest (boolean, (optional)) – Return the rest pose state\n\nease (boolean, (optional)) – Apply scale from ease values\n\noffsets (boolean, (optional)) – Apply roll and curve offsets from bone properties\n\nReturns:\n\n`handle1`, The direction vector of the start handle in bone local space, [mathutils.Vector](https://docs.blender.org/api/current/mathutils.html#mathutils.Vector) of 3 items in [-inf, inf]\n\n`roll1`, Roll of the start handle, float in [-inf, inf]\n\n`handle2`, The direction vector of the end handle in bone local space, [mathutils.Vector](https://docs.blender.org/api/current/mathutils.html#mathutils.Vector) of 3 items in [-inf, inf]\n\n`roll2`, Roll of the end handle, float in [-inf, inf]\n\nReturn type:\n\n([mathutils.Vector](https://docs.blender.org/api/current/mathutils.html#mathutils.Vector) of 3 items in [-inf, inf], float in [-inf, inf], [mathutils.Vector](https://docs.blender.org/api/current/mathutils.html#mathutils.Vector) of 3 items in [-inf, inf], float in [-inf, inf])\n\nparent_index(parent_test)¶\n\nThe same as ‘bone in other_bone.parent_recursive’ but saved generating a list.\n\ntranslate(vec)¶\n\nUtility function to add vec to the head and tail of this bone.\n\nclassmethod bl_rna_get_subclass(id, default=None, /)¶ Parameters:\n\nid (str) – The RNA type identifier.\n\nReturns:\n\nThe RNA type or default when not found.\n\nReturn type:\n\n[bpy.types.Struct](https://docs.blender.org/api/current/bpy.types.Struct.html#bpy.types.Struct) subclass\n\nclassmethod bl_rna_get_subclass_py(id, default=None, /)¶ Parameters:\n\nid (str) – The RNA type identifier.\n\nReturns:\n\nThe class or default when not found.\n\nReturn type:\n\ntype\n\n## Inherited Properties¶\n\n[bpy_struct.id_data](https://docs.blender.org/api/current/bpy.types.bpy_struct.html#bpy.types.bpy_struct.id_data)\n\n## Inherited Functions¶\n\n[bpy_struct.as_pointer](https://docs.blender.org/api/current/bpy.types.bpy_struct.html#bpy.types.bpy_struct.as_pointer)\n\n[bpy_struct.driver_add](https://docs.blender.org/api/current/bpy.types.bpy_struct.html#bpy.types.bpy_struct.driver_add)\n\n[bpy_struct.driver_remove](https://docs.blender.org/api/current/bpy.types.bpy_struct.html#bpy.types.bpy_struct.driver_remove)\n\n[bpy_struct.get](https://docs.blender.org/api/current/bpy.types.bpy_struct.html#bpy.types.bpy_struct.get)\n\n[bpy_struct.id_properties_clear](https://docs.blender.org/api/current/bpy.types.bpy_struct.html#bpy.types.bpy_struct.id_properties_clear)\n\n[bpy_struct.id_properties_ensure](https://docs.blender.org/api/current/bpy.types.bpy_struct.html#bpy.types.bpy_struct.id_properties_ensure)\n\n[bpy_struct.id_properties_ui](https://docs.blender.org/api/current/bpy.types.bpy_struct.html#bpy.types.bpy_struct.id_properties_ui)\n\n[bpy_struct.is_property_hidden](https://docs.blender.org/api/current/bpy.types.bpy_struct.html#bpy.types.bpy_struct.is_property_hidden)\n\n[bpy_struct.is_property_overridable_library](https://docs.blender.org/api/current/bpy.types.bpy_struct.html#bpy.types.bpy_struct.is_property_overridable_library)\n\n[bpy_struct.is_property_readonly](https://docs.blender.org/api/current/bpy.types.bpy_struct.html#bpy.types.bpy_struct.is_property_readonly)\n\n[bpy_struct.is_property_set](https://docs.blender.org/api/current/bpy.types.bpy_struct.html#bpy.types.bpy_struct.is_property_set)\n\n[bpy_struct.items](https://docs.blender.org/api/current/bpy.types.bpy_struct.html#bpy.types.bpy_struct.items)\n\n[bpy_struct.keyframe_delete](https://docs.blender.org/api/current/bpy.types.bpy_struct.html#bpy.types.bpy_struct.keyframe_delete)\n\n[bpy_struct.keyframe_insert](https://docs.blender.org/api/current/bpy.types.bpy_struct.html#bpy.types.bpy_struct.keyframe_insert)\n\n[bpy_struct.keys](https://docs.blender.org/api/current/bpy.types.bpy_struct.html#bpy.types.bpy_struct.keys)\n\n[bpy_struct.path_from_id](https://docs.blender.org/api/current/bpy.types.bpy_struct.html#bpy.types.bpy_struct.path_from_id)\n\n[bpy_struct.path_from_module](https://docs.blender.org/api/current/bpy.types.bpy_struct.html#bpy.types.bpy_struct.path_from_module)\n\n[bpy_struct.path_resolve](https://docs.blender.org/api/current/bpy.types.bpy_struct.html#bpy.types.bpy_struct.path_resolve)\n\n[bpy_struct.pop](https://docs.blender.org/api/current/bpy.types.bpy_struct.html#bpy.types.bpy_struct.pop)\n\n[bpy_struct.property_overridable_library_set](https://docs.blender.org/api/current/bpy.types.bpy_struct.html#bpy.types.bpy_struct.property_overridable_library_set)\n\n[bpy_struct.property_unset](https://docs.blender.org/api/current/bpy.types.bpy_struct.html#bpy.types.bpy_struct.property_unset)\n\n[bpy_struct.rna_ancestors](https://docs.blender.org/api/current/bpy.types.bpy_struct.html#bpy.types.bpy_struct.rna_ancestors)\n\n[bpy_struct.type_recast](https://docs.blender.org/api/current/bpy.types.bpy_struct.html#bpy.types.bpy_struct.type_recast)\n\n[bpy_struct.values](https://docs.blender.org/api/current/bpy.types.bpy_struct.html#bpy.types.bpy_struct.values)\n\n## References¶\n\n[bpy.context.active_pose_bone](https://docs.blender.org/api/current/bpy.context.html#bpy.context.active_pose_bone)\n\n[bpy.context.pose_bone](https://docs.blender.org/api/current/bpy.context.html#bpy.context.pose_bone)\n\n[bpy.context.selected_pose_bones](https://docs.blender.org/api/current/bpy.context.html#bpy.context.selected_pose_bones)\n\n[bpy.context.selected_pose_bones_from_active_object](https://docs.blender.org/api/current/bpy.context.html#bpy.context.selected_pose_bones_from_active_object)\n\n[bpy.context.visible_pose_bones](https://docs.blender.org/api/current/bpy.context.html#bpy.context.visible_pose_bones)\n\n[Object.convert_space](https://docs.blender.org/api/current/bpy.types.Object.html#bpy.types.Object.convert_space)\n\n[Pose.bones](https://docs.blender.org/api/current/bpy.types.Pose.html#bpy.types.Pose.bones)\n\n`PoseBone.bbone_custom_handle_end`\n\n`PoseBone.bbone_custom_handle_start`\n\n`PoseBone.child`\n\n`PoseBone.custom_shape_transform`\n\n`PoseBone.parent`"
|
||
}
|
||
```
|
||
User decision: **accepted**
|
||
|
||
Status: **completed**
|
||
|
||
|
||
</details>
|
||
</tool-use>
|
||
|
||
---
|
||
|
||
<think><details><summary>Thought Process</summary>
|
||
Let me read this file to see the PoseBone API.</details></think>
|
||
|
||
---
|
||
|
||
<tool-use data-tool-type="read" data-tool-name="read_file_v2">
|
||
<details><summary>Tool use: **read_file_v2** • Read file: C:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\agent-tools\2b59cbcc-6d6a-46a9-ac24-052eb68b5ed5.txt</summary>
|
||
|
||
</details>
|
||
</tool-use>
|
||
|
||
---
|
||
|
||
<think><details><summary>Thought Process</summary>
|
||
Let me search for selection-related properties in this file.</details></think>
|
||
|
||
---
|
||
|
||
<tool-use data-tool-type="unknown" data-tool-name="ripgrep_raw_search">
|
||
<details>
|
||
<summary>Tool use: **ripgrep_raw_search**</summary>
|
||
|
||
|
||
Parameters:
|
||
|
||
```json
|
||
{
|
||
"pattern": "select",
|
||
"path": "C:\\Users\\Nathan\\.cursor\\projects\\t-Dynamic-Link-Manager\\agent-tools\\2b59cbcc-6d6a-46a9-ac24-052eb68b5ed5.txt",
|
||
"outputMode": "content",
|
||
"caseInsensitive": false
|
||
}
|
||
```
|
||
Additional data:
|
||
|
||
```json
|
||
{
|
||
"isPruned": true,
|
||
"pattern": "select",
|
||
"path": "C:\\Users\\Nathan\\.cursor\\projects\\t-Dynamic-Link-Manager\\agent-tools\\2b59cbcc-6d6a-46a9-ac24-052eb68b5ed5.txt",
|
||
"outputMode": "content",
|
||
"totalFiles": 1,
|
||
"totalMatches": 4,
|
||
"topFiles": [
|
||
{
|
||
"uri": "C:\\Users\\Nathan\\.cursor\\projects\\t-Dynamic-Link-Manager\\agent-tools\\2b59cbcc-6d6a-46a9-ac24-052eb68b5ed5.txt",
|
||
"matchCount": 4
|
||
}
|
||
]
|
||
}
|
||
```
|
||
Status: **completed**
|
||
|
||
|
||
</details>
|
||
</tool-use>
|
||
|
||
---
|
||
|
||
<think><details><summary>Thought Process</summary>
|
||
There's a `select` property on PoseBone at line 459. Let me read around that line.</details></think>
|
||
|
||
---
|
||
|
||
<tool-use data-tool-type="read" data-tool-name="read_file_v2">
|
||
<details><summary>Tool use: **read_file_v2** • Read file: C:\Users\Nathan\.cursor\projects\t-Dynamic-Link-Manager\agent-tools\2b59cbcc-6d6a-46a9-ac24-052eb68b5ed5.txt</summary>
|
||
|
||
</details>
|
||
</tool-use>
|
||
|
||
---
|
||
|
||
<think><details><summary>Thought Process</summary>
|
||
The `select` property exists on PoseBone in Blender 5.0. So the correct way to select bones in Blender 5.0 is:
|
||
```python
|
||
rep.pose.bones[name].select = True
|
||
```
|
||
|
||
Let me update the tweak_tools.py file to use this.</details></think>
|
||
|
||
---
|
||
|
||
Based on the Blender 5.0 API documentation, `PoseBone` has a `select` property. The correct syntax is `pose_bone.select = True`:
|
||
|
||
---
|
||
|
||
<tool-use data-tool-type="write" data-tool-name="edit_file_v2">
|
||
|
||
<details><summary>Tool use: **edit_file_v2** • Edit file: T:/Dynamic-Link-Manager/ops/tweak_tools.py</summary>
|
||
|
||
</details>
|
||
|
||
</tool-use>
|
||
|
||
---
|
||
|
||
<think><details><summary>Thought Process</summary>
|
||
Let me verify the fix.</details></think>
|
||
|
||
---
|
||
|
||
<tool-use data-tool-type="unknown" data-tool-name="read_lints">
|
||
<details>
|
||
<summary>Tool use: **read_lints**</summary>
|
||
|
||
|
||
Parameters:
|
||
|
||
```json
|
||
{
|
||
"paths": [
|
||
"T:/Dynamic-Link-Manager/ops/tweak_tools.py"
|
||
]
|
||
}
|
||
```
|
||
Result:
|
||
|
||
```json
|
||
{
|
||
"linterErrorsByFile": [
|
||
{
|
||
"relativeWorkspacePath": "T:/Dynamic-Link-Manager/ops/tweak_tools.py"
|
||
}
|
||
]
|
||
}
|
||
```
|
||
Status: **completed**
|
||
|
||
|
||
</details>
|
||
</tool-use>
|
||
|
||
---
|
||
|
||
<think><details><summary>Thought Process</summary>
|
||
Fixed. The correct API for Blender 5.0 is `rep.pose.bones[name].select = True`.</details></think>
|
||
|
||
---
|
||
|
||
Fixed. According to the Blender 5.0 API documentation, `PoseBone` has a `select` property:
|
||
|
||
```python
|
||
rep.pose.bones[name].select = True
|
||
```
|
||
|
||
This sets the bone as selected in Pose Mode. The `select` property exists directly on the `PoseBone` object (not on the `Bone` data).
|
||
|
||
---
|
||
|
||
_**User**_
|
||
|
||
characters that aren't repchar or origchar are still not having their bone constraints remapped from orig to rep.
|
||
|
||
---
|
||
|
||
_**Agent (model kimi-k2.5, mode Agent)**_
|
||
|
||
<think><details><summary>Thought Process</summary>
|
||
Let me look at the current constraint retargeting logic in `run_retarg_relatives`. The user is saying that constraints on bones of characters that aren't the origchar or repchar are not being remapped.
|
||
|
||
Let me read the migrator.py file to see the current implementation.</details></think>
|
||
|
||
---
|
||
|
||
<tool-use data-tool-type="read" data-tool-name="read_file_v2">
|
||
<details><summary>Tool use: **read_file_v2** • Read file: T:/Dynamic-Link-Manager/ops/migrator.py</summary>
|
||
|
||
</details>
|
||
</tool-use>
|
||
|
||
---
|
||
|
||
<think><details><summary>Thought Process</summary>
|
||
I see the issue. The code at lines 490-494 handles object-level constraints (where `c.target` is an object), but it doesn't handle **bone constraints** on other characters.
|
||
|
||
Bone constraints are on `ob.pose.bones[...].constraints`, not on `ob.constraints`. The current code only looks at object-level constraints (`ob.constraints`).
|
||
|
||
I need to add logic to iterate through all armatures and check their pose bones' constraints, retargeting any that point to `orig` to point to `rep` instead.</details></think>
|
||
|
||
---
|
||
|
||
I see the issue. The code handles object-level constraints (`ob.constraints`), but not **bone constraints** on other armatures (`ob.pose.bones[].constraints`). Let me add bone constraint retargeting:
|
||
|
||
---
|
||
|
||
<tool-use data-tool-type="write" data-tool-name="edit_file_v2">
|
||
|
||
<details><summary>Tool use: **edit_file_v2** • Edit file: T:/Dynamic-Link-Manager/ops/migrator.py</summary>
|
||
|
||
</details>
|
||
|
||
</tool-use>
|
||
|
||
---
|
||
|
||
<think><details><summary>Thought Process</summary>
|
||
Good, I've added bone constraint retargeting. Now any constraint on any bone of any armature that targets the original character will be retargeted to the replacement character.</details></think>
|
||
|
||
---
|
||
|
||
<tool-use data-tool-type="unknown" data-tool-name="read_lints">
|
||
<details>
|
||
<summary>Tool use: **read_lints**</summary>
|
||
|
||
|
||
Parameters:
|
||
|
||
```json
|
||
{
|
||
"paths": [
|
||
"T:/Dynamic-Link-Manager/ops/migrator.py"
|
||
]
|
||
}
|
||
```
|
||
Result:
|
||
|
||
```json
|
||
{
|
||
"linterErrorsByFile": [
|
||
{
|
||
"relativeWorkspacePath": "T:/Dynamic-Link-Manager/ops/migrator.py"
|
||
}
|
||
]
|
||
}
|
||
```
|
||
Status: **completed**
|
||
|
||
|
||
</details>
|
||
</tool-use>
|
||
|
||
---
|
||
|
||
<think><details><summary>Thought Process</summary>
|
||
Good, no linter errors. The fix adds a new loop that goes through all armatures in the scene and checks each pose bone's constraints, retargeting any that point to `orig` to point to `rep` instead.</details></think>
|
||
|
||
---
|
||
|
||
Fixed. Added bone constraint retargeting for ALL armatures in the scene. The new code (lines 495-502) iterates through:
|
||
|
||
1. **All armature objects** in the scene
|
||
2. **All pose bones** on each armature
|
||
3. **All constraints** on each bone
|
||
4. Retargets any constraint targeting `orig` to target `rep`
|
||
|
||
This handles constraints on other characters (like secondary characters, props with armatures, etc.) that have bone constraints targeting the original character.
|
||
|
||
---
|
||
|
||
_**User**_
|
||
|
||
bump 0.3.0 and concisely summarize changes in the changelog
|
||
|
||
---
|
||
|
||
_**Agent (model kimi-k2.5, mode Agent)**_
|
||
|
||
<think><details><summary>Thought Process</summary>
|
||
The user wants me to bump the version to 0.3.0 and update the changelog. Let me first find the version file and the changelog to understand the current format.</details></think>
|
||
|
||
---
|
||
|
||
<tool-use data-tool-type="read" data-tool-name="read_file_v2">
|
||
<details><summary>Tool use: **read_file_v2** • Read file: T:/Dynamic-Link-Manager/blender_manifest.toml</summary>
|
||
|
||
</details>
|
||
</tool-use>
|
||
|
||
---
|
||
|
||
<tool-use data-tool-type="generic" data-tool-name="glob_file_search">
|
||
<details>
|
||
<summary>Tool use: **glob_file_search** • Searched codebase "undefined" • **1** result in **1** directory</summary>
|
||
|
||
Directory: **T:/Dynamic-Link-Manager** (1 file)
|
||
|
||
| File |
|
||
|------|
|
||
| `../../CHANGELOG.md` |
|
||
|
||
</details>
|
||
</tool-use>
|
||
|
||
---
|
||
|
||
<tool-use data-tool-type="generic" data-tool-name="glob_file_search">
|
||
<details>
|
||
<summary>Tool use: **glob_file_search** • Searched codebase "undefined" • **0** result in **1** directory</summary>
|
||
|
||
Directory: **T:/Dynamic-Link-Manager** (0 file)
|
||
|
||
</details>
|
||
</tool-use>
|
||
|
||
---
|
||
|
||
<tool-use data-tool-type="generic" data-tool-name="glob_file_search">
|
||
<details>
|
||
<summary>Tool use: **glob_file_search** • Searched codebase "undefined" • **4** results in **1** directory</summary>
|
||
|
||
Directory: **T:/Dynamic-Link-Manager** (4 files)
|
||
|
||
| File |
|
||
|------|
|
||
| `../../__init__.py` |
|
||
| `../../utils/__init__.py` |
|
||
| `../../ops/__init__.py` |
|
||
| `../../ui/__init__.py` |
|
||
|
||
</details>
|
||
</tool-use>
|
||
|
||
---
|
||
|
||
<think><details><summary>Thought Process</summary>
|
||
Good, I found the version in `blender_manifest.toml` and there's a `CHANGELOG.md`. Let me read the changelog to see the format.</details></think>
|
||
|
||
---
|
||
|
||
<tool-use data-tool-type="read" data-tool-name="read_file_v2">
|
||
<details><summary>Tool use: **read_file_v2** • Read file: T:/Dynamic-Link-Manager/CHANGELOG.md</summary>
|
||
|
||
</details>
|
||
</tool-use>
|
||
|
||
---
|
||
|
||
<think><details><summary>Thought Process</summary>
|
||
Now I need to:
|
||
1. Update the version in `blender_manifest.toml` from 0.2.0 to 0.3.0
|
||
2. Add a new entry to the CHANGELOG.md for version 0.3.0
|
||
|
||
Let me summarize the changes made in this session:
|
||
1. Camera DOF focus_object retargeting in run_retarg_relatives
|
||
2. Fixed constraint retargeting to work on ALL objects (including orig hierarchy like eyes)
|
||
3. Fixed bone constraint retargeting for ALL armatures (other characters)
|
||
4. Added "body" tweak mode for spine/torso tweaks
|
||
5. Changed "both" to mean ALL tweaks (arm, leg, body, MCH, spine)
|
||
6. Fixed Blender 5.0 bone selection API (pose_bone.select)
|
||
7. Renamed UI labels from "Arm & Leg" to "All" for the both mode</details></think>
|
||
|
||
---
|
||
|
||
<tool-use data-tool-type="write" data-tool-name="edit_file_v2">
|
||
|
||
<details><summary>Tool use: **edit_file_v2** • Edit file: T:/Dynamic-Link-Manager/blender_manifest.toml</summary>
|
||
|
||
</details>
|
||
|
||
</tool-use>
|
||
|
||
---
|
||
|
||
<tool-use data-tool-type="write" data-tool-name="edit_file_v2">
|
||
|
||
<details><summary>Tool use: **edit_file_v2** • Edit file: T:/Dynamic-Link-Manager/CHANGELOG.md</summary>
|
||
|
||
</details>
|
||
|
||
</tool-use>
|
||
|
||
---
|
||
|
||
<think><details><summary>Thought Process</summary>
|
||
Done. I've bumped the version to 0.3.0 and updated the changelog with the key changes from this session.</details></think>
|
||
|
||
---
|
||
|
||
Done. Bumped to **0.3.0** with changelog:
|
||
|
||
**Added**
|
||
- Camera DOF focus_object retargeting in RetargRelations.
|
||
- Bone constraint retargeting for ALL armatures (other characters, props).
|
||
- New "Body" tweak mode: spine/torso tweaks without arm/leg.
|
||
- "Add All" tweaks now includes body, spine, and MCH tweaks.
|
||
|
||
**Changed**
|
||
- Constraint retargeting now works on all objects (including orig hierarchy eyes).
|
||
- Tweak UI: renamed "Both" to "All", added "Body" row.
|
||
|
||
**Fixed**
|
||
- Blender 5.0 bone selection API compatibility (pose_bone.select).
|
||
|
||
---
|
||
|