davinci-resolve-mcp 4.8.25 → 4.8.26

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 CHANGED
@@ -2,6 +2,26 @@
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 v4.8.26 — two dead layout-preset helpers removed
6
+
7
+ ### Removed
8
+
9
+ - `src/utils/layout_presets.py` no longer carries `save_layout_preset` and
10
+ `load_layout_preset`. Both went through `Resolve.GetUIManager()` and then
11
+ `SaveUILayout` / `LoadUILayout`, none of which exist on any build measured
12
+ (Studio 19.1.3.7; see the `api_truth` entry added in v4.8.25). Nothing called
13
+ them: the granular `save_layout_preset_tool` and `load_layout_preset_tool`
14
+ use `Resolve.SaveLayoutPreset` / `LoadLayoutPreset` directly, and still do.
15
+ No tool, action or count changes. The module docstring now says what the
16
+ file actually does (preset files on disk) and where live save/load happens.
17
+ - `scripts/audit_api_parity.py` drops `LoadUILayout` and `SaveUILayout` from
18
+ its allowlist, since no source calls them any more.
19
+
20
+ ### Validation
21
+
22
+ - No Resolve behavior changed; the removed functions had no callers. Live test
23
+ not required.
24
+
5
25
  ## What's New in v4.8.25 — open_settings and open_app_preferences say what Resolve cannot do
6
26
 
7
27
  ### Fixed
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  English | [简体中文](README.zh-CN.md)
4
4
 
5
- [![Version](https://img.shields.io/badge/version-4.8.25-blue.svg)](https://github.com/samuelgursky/davinci-resolve-mcp/releases)
5
+ [![Version](https://img.shields.io/badge/version-4.8.26-blue.svg)](https://github.com/samuelgursky/davinci-resolve-mcp/releases)
6
6
  [![npm](https://img.shields.io/npm/v/davinci-resolve-mcp.svg?label=npm&color=CB3837)](https://www.npmjs.com/package/davinci-resolve-mcp)
7
7
  [![API Coverage](https://img.shields.io/badge/API%20Coverage-100%25-brightgreen.svg)](docs/reference/api-coverage.md)
8
8
  [![Tools](https://img.shields.io/badge/MCP%20Tools-37%20(389%20full)-blue.svg)](#server-modes)
package/README.zh-CN.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  [English](README.md) | 简体中文
4
4
 
5
- [![Version](https://img.shields.io/badge/version-4.8.25-blue.svg)](https://github.com/samuelgursky/davinci-resolve-mcp/releases)
5
+ [![Version](https://img.shields.io/badge/version-4.8.26-blue.svg)](https://github.com/samuelgursky/davinci-resolve-mcp/releases)
6
6
  [![npm](https://img.shields.io/npm/v/davinci-resolve-mcp.svg?label=npm&color=CB3837)](https://www.npmjs.com/package/davinci-resolve-mcp)
7
7
  [![API Coverage](https://img.shields.io/badge/API%20Coverage-100%25-brightgreen.svg)](docs/reference/api-coverage.md)
8
8
  [![Tools](https://img.shields.io/badge/MCP%20Tools-37%20(389%20full)-blue.svg)](#服务器模式)
@@ -12,7 +12,7 @@
12
12
  [![Python](https://img.shields.io/badge/python-3.10+-green.svg)](https://www.python.org/downloads/)
13
13
  [![License](https://img.shields.io/badge/license-MIT-blue.svg)](https://opensource.org/licenses/MIT)
14
14
 
15
- > 本翻译对应 v4.8.25 版 README。如与英文原版有出入,以 [英文原版](README.md) 为准。
15
+ > 本翻译对应 v4.8.26 版 README。如与英文原版有出入,以 [英文原版](README.md) 为准。
16
16
 
17
17
  一个 Model Context Protocol (MCP) 服务器,让 AI 助手通过官方脚本 API 控制 DaVinci Resolve Studio(达芬奇)。它提供完整的 API 覆盖,外加带护栏的工作流助手,涵盖剪辑、媒体池整理、渲染设置、审阅标记、调色、Fusion、Fairlight、项目生命周期任务、扩展开发,以及不碰源媒体的媒体分析。
18
18
 
package/install.py CHANGED
@@ -37,7 +37,7 @@ from src.utils.update_check import (
37
37
 
38
38
  # ─── Version ──────────────────────────────────────────────────────────────────
39
39
 
40
- VERSION = "4.8.25"
40
+ VERSION = "4.8.26"
41
41
  # Only hard floor: mcp[cli] requires Python 3.10+. There is no upper bound —
42
42
  # Resolve's scripting bridge loads into newer interpreters on recent builds
43
43
  # (Python 3.14 verified against Resolve Studio 20.3.2). Older Resolve builds
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "davinci-resolve-mcp",
3
- "version": "4.8.25",
3
+ "version": "4.8.26",
4
4
  "description": "NPM bootstrapper for the DaVinci Resolve MCP Server.",
5
5
  "license": "MIT",
6
6
  "author": "Samuel Gursky <samgursky@gmail.com>",
@@ -148,10 +148,9 @@ ALLOWLIST_UNDOCUMENTED: Set[str] = {
148
148
  # Resolve app-control method, not in the scripting README this audit parses
149
149
  "SetHighPriority",
150
150
  # NOT a documented API: Resolve has no GetUIManager on any build measured
151
- # (Studio 19.1.3.7; api_truth 'Resolve.GetUIManager ...'). It is called
152
- # only behind has_method in src/utils/app_control.py, and from the unused
153
- # helpers in src/utils/layout_presets.py along with the other two.
154
- "GetUIManager", "LoadUILayout", "SaveUILayout",
151
+ # (Studio 19.1.3.7; api_truth 'Resolve.GetUIManager ...'). Called only
152
+ # behind has_method in src/utils/app_control.py.
153
+ "GetUIManager",
155
154
  # Lua-table iteration helper used as a fallback in object_inspection.py
156
155
  "GetKeyList",
157
156
  # Project metadata accessor used defensively (hasattr-guarded)
@@ -45,8 +45,6 @@ from src.utils.layout_presets import (
45
45
  export_layout_preset,
46
46
  import_layout_preset,
47
47
  list_layout_presets,
48
- load_layout_preset,
49
- save_layout_preset,
50
48
  )
51
49
  from src.utils.object_inspection import inspect_object, print_object_help
52
50
  from src.utils.platform import get_platform, get_resolve_paths
@@ -93,7 +91,7 @@ if not logging.getLogger().handlers:
93
91
  handlers=[logging.StreamHandler()],
94
92
  )
95
93
 
96
- VERSION = "4.8.25"
94
+ VERSION = "4.8.26"
97
95
  logger = logging.getLogger("davinci-resolve-mcp")
98
96
  logger.info(f"Starting DaVinci Resolve MCP Server v{VERSION}")
99
97
  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 377-tool granular server instead
12
12
  """
13
13
 
14
- VERSION = "4.8.25"
14
+ VERSION = "4.8.26"
15
15
 
16
16
  import base64
17
17
  import os
@@ -2,11 +2,17 @@
2
2
  """
3
3
  DaVinci Resolve MCP Server - Layout Presets Utilities
4
4
 
5
- This module provides functions for working with DaVinci Resolve UI layout presets:
6
- - Saving layout presets
7
- - Loading layout presets
5
+ This module works with DaVinci Resolve UI layout preset FILES on disk:
6
+ - Listing the presets in Resolve's preset folder
8
7
  - Exporting/importing preset files
9
- - Managing layout configurations
8
+ - Deleting a preset file
9
+
10
+ Saving and loading the live layout are not done here. They go through
11
+ Resolve.SaveLayoutPreset / LoadLayoutPreset, which the granular tools in
12
+ src/granular/resolve_control.py call directly. Two earlier helpers here tried
13
+ Resolve.GetUIManager().SaveUILayout / LoadUILayout instead; neither method
14
+ exists on any build measured (api_truth 'Resolve.GetUIManager ...'), nothing
15
+ called them, and they were removed in v4.8.26.
10
16
  """
11
17
 
12
18
  import os
@@ -137,71 +143,6 @@ def list_layout_presets(layout_type: str = "ui") -> List[Dict[str, Any]]:
137
143
 
138
144
  return presets
139
145
 
140
- def save_layout_preset(resolve_obj, preset_name: str, layout_type: str = "ui") -> bool:
141
- """
142
- Save the current layout as a preset.
143
-
144
- Args:
145
- resolve_obj: DaVinci Resolve API object
146
- preset_name: Name for the saved preset
147
- layout_type: Type of layout to save ('ui', 'window', 'workspace')
148
-
149
- Returns:
150
- True if successful, False otherwise
151
- """
152
- try:
153
- # Ensure preset name has no spaces or special characters
154
- safe_name = preset_name.replace(" ", "_").replace("/", "_").replace("\\", "_")
155
-
156
- # Different layout types have different save methods
157
- if layout_type.lower() == "ui":
158
- # For UI layouts, use the UI Manager
159
- ui_manager = resolve_obj.GetUIManager()
160
- if not ui_manager:
161
- logger.error("Failed to get UI Manager")
162
- return False
163
-
164
- # Save the current UI layout
165
- return ui_manager.SaveUILayout(safe_name)
166
- else:
167
- # Other layout types would be handled here
168
- logger.error(f"Unsupported layout type: {layout_type}")
169
- return False
170
- except Exception as e:
171
- logger.error(f"Error saving layout preset: {str(e)}")
172
- return False
173
-
174
- def load_layout_preset(resolve_obj, preset_name: str, layout_type: str = "ui") -> bool:
175
- """
176
- Load a layout preset.
177
-
178
- Args:
179
- resolve_obj: DaVinci Resolve API object
180
- preset_name: Name of the preset to load
181
- layout_type: Type of layout to load ('ui', 'window', 'workspace')
182
-
183
- Returns:
184
- True if successful, False otherwise
185
- """
186
- try:
187
- # Different layout types have different load methods
188
- if layout_type.lower() == "ui":
189
- # For UI layouts, use the UI Manager
190
- ui_manager = resolve_obj.GetUIManager()
191
- if not ui_manager:
192
- logger.error("Failed to get UI Manager")
193
- return False
194
-
195
- # Load the specified UI layout
196
- return ui_manager.LoadUILayout(preset_name)
197
- else:
198
- # Other layout types would be handled here
199
- logger.error(f"Unsupported layout type: {layout_type}")
200
- return False
201
- except Exception as e:
202
- logger.error(f"Error loading layout preset: {str(e)}")
203
- return False
204
-
205
146
  def export_layout_preset(preset_name: str, export_path: str, layout_type: str = "ui") -> bool:
206
147
  """
207
148
  Export a layout preset to a file.