bump v0.1.1
This commit is contained in:
@@ -15290,3 +15290,325 @@ migbbody shapekeys apparently is experiencing the same issue where the action sl
|
||||
|
||||
---
|
||||
|
||||
_**Agent (model default, mode Agent)**_
|
||||
|
||||
<think><details><summary>Thought Process</summary>
|
||||
|
||||
The user is saying that MigBBody shapekeys (run_mig_bbody_shapekeys) has an issue where "the action slot is not applied" - similar to something they may have experienced elsewhere (perhaps NLA or animation data where an action isn't being applied correctly). Let me look at the run_mig_bbody_shapekeys function to see how it handles the shape key action and what might be missing.
|
||||
</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>
|
||||
|
||||
---
|
||||
|
||||
<tool-use data-tool-type="unknown" data-tool-name="ripgrep_raw_search">
|
||||
<details>
|
||||
<summary>Tool use: **ripgrep_raw_search**</summary>
|
||||
|
||||
|
||||
Parameters:
|
||||
|
||||
```json
|
||||
{
|
||||
"pattern": "shapekey|shape_key|action|animation_data",
|
||||
"path": "T:\\Dynamic-Link-Manager\\ops\\migrator.py",
|
||||
"caseInsensitive": false
|
||||
}
|
||||
```
|
||||
Additional data:
|
||||
|
||||
```json
|
||||
{
|
||||
"isPruned": true,
|
||||
"pattern": "shapekey|shape_key|action|animation_data",
|
||||
"path": "T:\\Dynamic-Link-Manager\\ops\\migrator.py",
|
||||
"outputMode": "content",
|
||||
"totalFiles": 1,
|
||||
"totalMatches": 49,
|
||||
"topFiles": [
|
||||
{
|
||||
"uri": "ops\\migrator.py",
|
||||
"matchCount": 49
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
Status: **completed**
|
||||
|
||||
|
||||
</details>
|
||||
</tool-use>
|
||||
|
||||
---
|
||||
|
||||
<think><details><summary>Thought Process</summary>
|
||||
|
||||
I see. For MigNLA they added handling for Blender 4.4+ "slotted actions" - they copy `action_slot`, `last_slot_identifier`, `action_blend_type`, `action_extrapolation`, `action_influence` so the action slot is properly applied. For the base body shape keys, the code only does:
|
||||
- ob.data.shape_keys.animation_data_create() if no animation_data
|
||||
- Then finds an action by name (body_name + "Action", etc.) and sets ob.data.shape_keys.animation_data.action = action
|
||||
|
||||
So it's not copying the action from the *original* base body - it's looking up an action by naming convention. And it's not copying the action_slot / slot-related props on the shape_keys' animation_data. So two potential issues:
|
||||
1. The action might need to come from orig_base.data.shape_keys.animation_data.action (copy from original base body) rather than (or in addition to) looking up by name.
|
||||
2. Even when we set .action, in Blender 4.4+ the "action slot" might need to be set (action_slot, last_slot_identifier, action_blend_type, etc.) for it to actually show/apply.
|
||||
|
||||
Let me look at what MigNLA does for the action slot again to mirror that for shape_keys.animation_data.
|
||||
</details></think>
|
||||
|
||||
---
|
||||
|
||||
|
||||
Checking how MigNLA applies the action slot so we can mirror it for shape keys:
|
||||
|
||||
|
||||
---
|
||||
|
||||
<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>
|
||||
|
||||
So for shape keys we need to:
|
||||
1. Prefer copying the action (and slot) from the *original* base body's shape_keys.animation_data, not just look up by name.
|
||||
2. When setting the action on rep's shape_keys.animation_data, also set last_slot_identifier (before action), then action, then action_slot, then action_blend_type, action_extrapolation, action_influence.
|
||||
|
||||
Let me update run_mig_bbody_shapekeys to:
|
||||
- Get orig_sk_ad = orig_base.data.shape_keys.animation_data if orig_base and orig_base.data.shape_keys
|
||||
- If orig_sk_ad and orig_sk_ad.action: use that action; also copy slot props (last_slot_identifier, action_slot, action_blend_type, action_extrapolation, action_influence) to rep's shape_keys.animation_data
|
||||
- Else: keep current fallback (look up action by name) but when assigning also try to copy slot-related props if they exist on the rep's animation_data (we might not have an origin to copy from, so we just set action and any slot props we can set generically - actually for fallback we only have the action by name, we don't have an "orig" shape_keys anim_data to copy slot from). So the main fix is: when we have orig_base and orig_base.data.shape_keys.animation_data with an action, use that action and copy all slot-related props from orig base body shape_keys to rep base body shape_keys. When we don't have that (name lookup path), we still set .action but we could try to set last_slot_identifier/action_slot if the rep's anim_data has those - but we'd have nothing to copy from. So the fix is: copy from orig base body shape_keys.animation_data when available (action + slot props), else fall back to name lookup and set action only.
|
||||
</details></think>
|
||||
|
||||
---
|
||||
|
||||
|
||||
Applying MigNLA's action-slot handling to the base body's shape_keys: copy the action and slot props from the original base body's shape_keys.animation_data when present.
|
||||
|
||||
|
||||
---
|
||||
|
||||
<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>
|
||||
|
||||
When we don't have orig_sk_ad (no orig base body or no shape_keys on orig), we still look up action by name and set sk_ad.action = action, but we don't set any slot props (nothing to copy from). That's correct. Let me double-check: if action is set from name lookup, we still do sk_ad.action = action - yes, that's inside "if action:" and we do "sk_ad.action = action" unconditionally there. The "if orig_sk_ad" parts only add the slot props when we have an origin. Good.
|
||||
</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>
|
||||
|
||||
Done. Summary for user.
|
||||
</details></think>
|
||||
|
||||
---
|
||||
|
||||
|
||||
Summary of changes:
|
||||
|
||||
**MigBBody shape keys – action and slot**
|
||||
|
||||
1. **Source of the action**
|
||||
The action is now taken from the **original** base body when possible: `orig_base.data.shape_keys.animation_data.action`. The previous name-based lookup (`body_name + "Action"`, etc.) is only used when the original has no shape key animation data.
|
||||
|
||||
2. **Blender 4.4+ action slot**
|
||||
When we have original base body shape key `animation_data`, we now copy the same slot-related fields as in MigNLA:
|
||||
- Set **`last_slot_identifier`** before assigning the action (so the slot resolves correctly).
|
||||
- Set **`action`**.
|
||||
- Set **`action_slot`** from the original (with try/except).
|
||||
- Copy **`action_blend_type`**, **`action_extrapolation`**, **`action_influence`** from the original.
|
||||
|
||||
So the replacement base body’s shape key block gets the same action and the same slot/settings as the original, which should fix the action slot not being applied. If there is no original base body (or no shape key animation on it), behavior is unchanged: we still assign an action by name and do not set slot props.
|
||||
|
||||
---
|
||||
|
||||
_**User**_
|
||||
|
||||
bump 0.1.1 and concisely summarize the last 5 commits in the changelog.
|
||||
|
||||
---
|
||||
|
||||
_**Agent (model default, mode Agent)**_
|
||||
|
||||
|
||||
|
||||
---
|
||||
|
||||
|
||||
|
||||
---
|
||||
|
||||
<tool-use data-tool-type="shell" data-tool-name="run_terminal_command_v2">
|
||||
<details><summary>Tool use: **run_terminal_command_v2**</summary>
|
||||
|
||||
</details>
|
||||
</tool-use>
|
||||
|
||||
---
|
||||
|
||||
<tool-use data-tool-type="unknown" data-tool-name="glob_file_search">
|
||||
<details>
|
||||
<summary>Tool use: **glob_file_search**</summary>
|
||||
|
||||
Status: **loading**
|
||||
|
||||
|
||||
</details>
|
||||
</tool-use>
|
||||
|
||||
---
|
||||
|
||||
<tool-use data-tool-type="unknown" data-tool-name="ripgrep_raw_search">
|
||||
<details>
|
||||
<summary>Tool use: **ripgrep_raw_search**</summary>
|
||||
|
||||
Status: **loading**
|
||||
|
||||
|
||||
</details>
|
||||
</tool-use>
|
||||
|
||||
---
|
||||
|
||||
|
||||
|
||||
---
|
||||
|
||||
|
||||
|
||||
---
|
||||
|
||||
<tool-use data-tool-type="shell" data-tool-name="run_terminal_command_v2">
|
||||
<details><summary>Tool use: **run_terminal_command_v2**</summary>
|
||||
|
||||
</details>
|
||||
</tool-use>
|
||||
|
||||
---
|
||||
|
||||
<tool-use data-tool-type="unknown" data-tool-name="read_file_v2">
|
||||
<details>
|
||||
<summary>Tool use: **read_file_v2**</summary>
|
||||
|
||||
Status: **loading**
|
||||
|
||||
|
||||
</details>
|
||||
</tool-use>
|
||||
|
||||
---
|
||||
|
||||
<tool-use data-tool-type="unknown" data-tool-name="ripgrep_raw_search">
|
||||
<details>
|
||||
<summary>Tool use: **ripgrep_raw_search**</summary>
|
||||
|
||||
Status: **loading**
|
||||
|
||||
|
||||
</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\blender_manifest.toml</summary>
|
||||
|
||||
Status: **loading**
|
||||
|
||||
</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>
|
||||
|
||||
Status: **loading**
|
||||
|
||||
</details>
|
||||
|
||||
</tool-use>
|
||||
|
||||
---
|
||||
|
||||
|
||||
|
||||
---
|
||||
|
||||
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -1,5 +1,14 @@
|
||||
# Changelog
|
||||
|
||||
## [0.1.1] - 2026-02-19
|
||||
|
||||
### Fixed
|
||||
- MigBBody shapekeys: action slot not applying; now copy action and slot props (last_slot_identifier, action_slot, blend/extrapolation/influence) from original base body.
|
||||
- RetargRelations: skip objects in Original Character’s hierarchy (linked collection); only retarget relations outside orig’s hierarchy.
|
||||
- MigBoneConst: copy all constraint properties and targets (RNA POINTER/COLLECTION with orig→rep retarget), not just type/name/mute/influence.
|
||||
- AnimLayers: detect/mirror via RNA (obj.als.turn_on) so “Animation Layer attributes migrated” reports correctly.
|
||||
- MigCustProps: recursive id-property copy for nested groups; debug logging for armature/bone keys.
|
||||
|
||||
## [0.1.0] - 2026-02-19
|
||||
|
||||
### Added
|
||||
|
||||
@@ -3,7 +3,7 @@ schema_version = "1.0.0"
|
||||
id = "dynamiclinkmanager"
|
||||
name = "Dynamic Link Manager"
|
||||
tagline = "Character migrator and linked library tools"
|
||||
version = "0.1.0"
|
||||
version = "0.1.1"
|
||||
type = "add-on"
|
||||
|
||||
# Optional: Semantic Versioning
|
||||
|
||||
Reference in New Issue
Block a user