davinci-resolve-mcp 2.32.1 → 2.32.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +17 -0
- package/README.md +1 -1
- package/install.py +1 -1
- package/package.json +1 -1
- package/src/granular/common.py +1 -1
- package/src/server.py +9 -3
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,23 @@
|
|
|
2
2
|
|
|
3
3
|
Release history for the DaVinci Resolve MCP Server. The latest release is summarized in the root README; older entries live here to keep the README focused.
|
|
4
4
|
|
|
5
|
+
## What's New in v2.32.2
|
|
6
|
+
|
|
7
|
+
Fixes `fusion_comp(action="get_keyframes")` serialization.
|
|
8
|
+
|
|
9
|
+
The handler iterated `Input.GetKeyFrames()` as if it returned `{time: value}`,
|
|
10
|
+
but Fusion returns `{1-based index: frame_position}`. The result put the
|
|
11
|
+
keyframe **index** in `time` and the **frame position** in `value` — the actual
|
|
12
|
+
keyframed values were never reported.
|
|
13
|
+
|
|
14
|
+
The handler now treats the dict values as frame positions and reads each
|
|
15
|
+
keyframed value back via `GetInput(input_name, frame)`.
|
|
16
|
+
|
|
17
|
+
- **Fixed** `get_keyframes` now returns `[{"time": <frame>, "value": <value>}, ...]`
|
|
18
|
+
in frame order (live-validated on DaVinci Resolve Studio 21.0.0:
|
|
19
|
+
`Size` keyed `1.0@f0` / `1.4@f75` → `[{0.0: 1.0}, {75.0: 1.4}]`).
|
|
20
|
+
- Follow-up to the `add_keyframe` fix in v2.32.1; flagged by @sandypoli-boop in #56.
|
|
21
|
+
|
|
5
22
|
## What's New in v2.32.1
|
|
6
23
|
|
|
7
24
|
Fixes `fusion_comp(action="add_keyframe")` so it actually **animates** the input.
|
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# DaVinci Resolve MCP Server
|
|
2
2
|
|
|
3
|
-
[](https://github.com/samuelgursky/davinci-resolve-mcp/releases)
|
|
4
4
|
[](https://www.npmjs.com/package/davinci-resolve-mcp)
|
|
5
5
|
[](docs/reference/api-coverage.md)
|
|
6
6
|
[-blue.svg)](#server-modes)
|
package/install.py
CHANGED
|
@@ -35,7 +35,7 @@ from src.utils.update_check import (
|
|
|
35
35
|
|
|
36
36
|
# ─── Version ──────────────────────────────────────────────────────────────────
|
|
37
37
|
|
|
38
|
-
VERSION = "2.32.
|
|
38
|
+
VERSION = "2.32.2"
|
|
39
39
|
# Only hard floor: mcp[cli] requires Python 3.10+. There is no upper bound —
|
|
40
40
|
# Resolve's scripting bridge loads into newer interpreters on recent builds
|
|
41
41
|
# (Python 3.14 verified against Resolve Studio 20.3.2). Older Resolve builds
|
package/package.json
CHANGED
package/src/granular/common.py
CHANGED
|
@@ -80,7 +80,7 @@ if not logging.getLogger().handlers:
|
|
|
80
80
|
handlers=[logging.StreamHandler()],
|
|
81
81
|
)
|
|
82
82
|
|
|
83
|
-
VERSION = "2.32.
|
|
83
|
+
VERSION = "2.32.2"
|
|
84
84
|
logger = logging.getLogger("davinci-resolve-mcp")
|
|
85
85
|
logger.info(f"Starting DaVinci Resolve MCP Server v{VERSION}")
|
|
86
86
|
logger.info(f"Detected platform: {get_platform()}")
|
package/src/server.py
CHANGED
|
@@ -11,7 +11,7 @@ Usage:
|
|
|
11
11
|
python src/server.py --full # Start the 341-tool granular server instead
|
|
12
12
|
"""
|
|
13
13
|
|
|
14
|
-
VERSION = "2.32.
|
|
14
|
+
VERSION = "2.32.2"
|
|
15
15
|
|
|
16
16
|
import base64
|
|
17
17
|
import os
|
|
@@ -18685,11 +18685,17 @@ def fusion_comp(action: str, params: Optional[Dict[str, Any]] = None) -> Dict[st
|
|
|
18685
18685
|
inp = tool[p["input_name"]]
|
|
18686
18686
|
if not inp:
|
|
18687
18687
|
return _err(f"Input '{p['input_name']}' not found on tool '{p['tool_name']}'")
|
|
18688
|
+
# GetKeyFrames() returns {1-based index: frame_position}, NOT
|
|
18689
|
+
# {time: value}. Iterating it directly puts the index in `time` and the
|
|
18690
|
+
# frame position in `value`. Read the actual keyframed value back from
|
|
18691
|
+
# the input at each frame position via GetInput.
|
|
18688
18692
|
keyframes = []
|
|
18689
18693
|
kfs = inp.GetKeyFrames()
|
|
18690
18694
|
if kfs:
|
|
18691
|
-
for
|
|
18692
|
-
|
|
18695
|
+
for idx in sorted(kfs):
|
|
18696
|
+
frame = kfs[idx]
|
|
18697
|
+
value = tool.GetInput(p["input_name"], frame)
|
|
18698
|
+
keyframes.append({"time": frame, "value": _ser(value)})
|
|
18693
18699
|
return {"keyframes": keyframes}
|
|
18694
18700
|
|
|
18695
18701
|
elif action == "delete_keyframe":
|