davinci-resolve-mcp 2.28.0 → 2.28.1

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,30 @@
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.28.1
6
+
7
+ Bug-fix release.
8
+
9
+ **Audio transcription no longer passes an invalid `language` argument.** The
10
+ `transcribe_audio` (clip) and `transcribe_folder_audio` tools in the full
11
+ (`--full`) server were calling `TranscribeAudio(language)` with a language
12
+ string, but the Resolve scripting API has never accepted a language positional —
13
+ its signature is `TranscribeAudio(useSpeakerDetection=None)`. The string was
14
+ silently coerced to a truthy boolean and misread as a speaker-detection flag,
15
+ and the success message falsely claimed a transcription language. The language
16
+ is controlled by the project's Speech Recognition setting, not per call.
17
+
18
+ - `transcribe_audio(clip_name, use_speaker_detection=None)` — the `language`
19
+ parameter is replaced with an optional `use_speaker_detection` boolean
20
+ (Resolve 21+). Omit it to use the project's setting.
21
+ - `transcribe_folder_audio(folder_name, use_speaker_detection=None)` — same
22
+ change for the folder-level tool.
23
+ - Both pass the boolean through only when supplied, so older Resolve builds
24
+ (which take no argument) keep working.
25
+
26
+ The consolidated 32-tool server was unaffected — its `folder`/`media_pool_item`
27
+ `transcribe_audio` actions already called `TranscribeAudio()` correctly.
28
+
5
29
  ## What's New in v2.28.0
6
30
 
7
31
  This release adds a structural timeline-diff engine, a declarative project spec
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # DaVinci Resolve MCP Server
2
2
 
3
- [![Version](https://img.shields.io/badge/version-2.28.0-blue.svg)](https://github.com/samuelgursky/davinci-resolve-mcp/releases)
3
+ [![Version](https://img.shields.io/badge/version-2.28.1-blue.svg)](https://github.com/samuelgursky/davinci-resolve-mcp/releases)
4
4
  [![npm](https://img.shields.io/npm/v/davinci-resolve-mcp.svg?label=npm&color=CB3837)](https://www.npmjs.com/package/davinci-resolve-mcp)
5
5
  [![API Coverage](https://img.shields.io/badge/API%20Coverage-100%25-brightgreen.svg)](docs/reference/api-coverage.md)
6
6
  [![Tools](https://img.shields.io/badge/MCP%20Tools-32%20(329%20full)-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.28.0"
38
+ VERSION = "2.28.1"
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "davinci-resolve-mcp",
3
- "version": "2.28.0",
3
+ "version": "2.28.1",
4
4
  "description": "NPM bootstrapper for the DaVinci Resolve MCP Server.",
5
5
  "license": "MIT",
6
6
  "author": "Samuel Gursky <samgursky@gmail.com>",
@@ -80,7 +80,7 @@ if not logging.getLogger().handlers:
80
80
  handlers=[logging.StreamHandler()],
81
81
  )
82
82
 
83
- VERSION = "2.28.0"
83
+ VERSION = "2.28.1"
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()}")
@@ -58,12 +58,16 @@ def export_folder(folder_name: str, export_path: str, export_type: str = "DRB")
58
58
 
59
59
 
60
60
  @mcp.tool()
61
- def transcribe_folder_audio(folder_name: str, language: str = "en-US") -> str:
61
+ def transcribe_folder_audio(folder_name: str, use_speaker_detection: Optional[bool] = None) -> str:
62
62
  """Transcribe audio for all clips in a folder.
63
-
63
+
64
+ The transcription language follows the project's Speech Recognition setting
65
+ (Project Settings > Subtitles), not a per-call argument.
66
+
64
67
  Args:
65
68
  folder_name: Name of the folder containing clips to transcribe
66
- language: Language code for transcription (default: en-US)
69
+ use_speaker_detection: Optional (Resolve 21+). Enable speaker detection.
70
+ If omitted, the project's setting is used.
67
71
  """
68
72
  pm, current_project = get_current_project()
69
73
  if not current_project:
@@ -90,11 +94,16 @@ def transcribe_folder_audio(folder_name: str, language: str = "en-US") -> str:
90
94
  if not target_folder:
91
95
  return f"Error: Folder '{folder_name}' not found in Media Pool"
92
96
 
93
- # Transcribe audio in the folder
97
+ # Transcribe audio in the folder.
98
+ # Resolve 21's signature is TranscribeAudio(useSpeakerDetection=None); pass the
99
+ # bool only when supplied so older Resolve builds (no arg) keep working.
94
100
  try:
95
- result = target_folder.TranscribeAudio(language)
101
+ if use_speaker_detection is None:
102
+ result = target_folder.TranscribeAudio()
103
+ else:
104
+ result = target_folder.TranscribeAudio(use_speaker_detection)
96
105
  if result:
97
- return f"Successfully started audio transcription for folder '{folder_name}' in language '{language}'"
106
+ return f"Successfully started audio transcription for folder '{folder_name}'"
98
107
  else:
99
108
  return f"Failed to start audio transcription for folder '{folder_name}'"
100
109
  except Exception as e:
@@ -162,12 +162,16 @@ def replace_clip(clip_name: str, replacement_path: str) -> str:
162
162
 
163
163
 
164
164
  @mcp.tool()
165
- def transcribe_audio(clip_name: str, language: str = "en-US") -> str:
165
+ def transcribe_audio(clip_name: str, use_speaker_detection: Optional[bool] = None) -> str:
166
166
  """Transcribe audio for a clip.
167
-
167
+
168
+ The transcription language follows the project's Speech Recognition setting
169
+ (Project Settings > Subtitles), not a per-call argument.
170
+
168
171
  Args:
169
172
  clip_name: Name of the clip to transcribe
170
- language: Language code for transcription (default: en-US)
173
+ use_speaker_detection: Optional (Resolve 21+). Enable speaker detection.
174
+ If omitted, the project's setting is used.
171
175
  """
172
176
  pm, current_project = get_current_project()
173
177
  if not current_project:
@@ -189,10 +193,15 @@ def transcribe_audio(clip_name: str, language: str = "en-US") -> str:
189
193
  if not target_clip:
190
194
  return f"Error: Clip '{clip_name}' not found in Media Pool"
191
195
 
196
+ # Resolve 21's signature is TranscribeAudio(useSpeakerDetection=None); pass the
197
+ # bool only when supplied so older Resolve builds (no arg) keep working.
192
198
  try:
193
- result = target_clip.TranscribeAudio(language)
199
+ if use_speaker_detection is None:
200
+ result = target_clip.TranscribeAudio()
201
+ else:
202
+ result = target_clip.TranscribeAudio(use_speaker_detection)
194
203
  if result:
195
- return f"Successfully started audio transcription for clip '{clip_name}' in language '{language}'"
204
+ return f"Successfully started audio transcription for clip '{clip_name}'"
196
205
  else:
197
206
  return f"Failed to start audio transcription for clip '{clip_name}'"
198
207
  except Exception as e:
package/src/server.py CHANGED
@@ -11,7 +11,7 @@ Usage:
11
11
  python src/server.py --full # Start the 329-tool granular server instead
12
12
  """
13
13
 
14
- VERSION = "2.28.0"
14
+ VERSION = "2.28.1"
15
15
 
16
16
  import base64
17
17
  import os