davinci-resolve-mcp 2.104.2 → 2.104.3

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,18 @@
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.104.3
6
+
7
+ Documentation follow-through on the v2.104.2 batch.
8
+
9
+ - The FCP7 internal-sequence-name-overrides-timelineName behavior (#171) is now
10
+ a submit-tagged api_truth entry, so it feeds the Blackmagic-facing
11
+ limitations report alongside the fix that works around it.
12
+ - `project_db.list_subtitle_styles`'s styled:false note now states that the
13
+ "must be styled once in the UI" precondition covers the scripted
14
+ `ImportMedia(srt)` + `AppendToTimeline` route too (confirmed by the #169
15
+ reporter on Studio 21.0.4.5), not only tracks added empty in the UI.
16
+
5
17
  ## What's New in v2.104.2
6
18
 
7
19
  A contributor batch: two merged PRs, one PR converted into its fix, and four
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-2.104.2-blue.svg)](https://github.com/samuelgursky/davinci-resolve-mcp/releases)
5
+ [![Version](https://img.shields.io/badge/version-2.104.3-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-36%20(353%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-2.104.2-blue.svg)](https://github.com/samuelgursky/davinci-resolve-mcp/releases)
5
+ [![Version](https://img.shields.io/badge/version-2.104.3-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-36%20(353%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
- > 本翻译对应 v2.104.2 版 README。如与英文原版有出入,以 [英文原版](README.md) 为准。
15
+ > 本翻译对应 v2.104.3 版 README。如与英文原版有出入,以 [英文原版](README.md) 为准。
16
16
 
17
17
  一个 Model Context Protocol (MCP) 服务器,让 AI 助手通过官方脚本 API 控制 DaVinci Resolve Studio(达芬奇)。它提供完整的 API 覆盖,外加带护栏的工作流助手,涵盖剪辑、媒体池整理、渲染设置、审阅标记、调色、Fusion、Fairlight、项目生命周期任务、扩展开发,以及不碰源媒体的媒体分析。
18
18
 
@@ -12,7 +12,7 @@ that none exists).
12
12
 
13
13
  **Verified on:** DaVinci Resolve Studio 21.0.2
14
14
 
15
- **Totals:** 33 missing capabilities, 39 bugs / unreliable behaviors.
15
+ **Totals:** 33 missing capabilities, 40 bugs / unreliable behaviors.
16
16
 
17
17
  The authoritative source is the runtime-queryable `api_truth` ledger
18
18
  (`resolve_control api_truth "<query>"`); this document is generated from
@@ -517,6 +517,15 @@ values, or automation-hostile modal prompts.
517
517
  - **Reference:** [issue #77](https://github.com/samuelgursky/davinci-resolve-mcp/issues/77)
518
518
  - **Tags:** unreliable-return, silent-failure, metadata, reel-name
519
519
 
520
+ ### MediaPool.ImportTimelineFromFile (internal sequence name overrides timelineName)
521
+
522
+ - **Object:** `MediaPool`
523
+ - **Signature:** `(filePath, {timelineName, importSourceClips, ...}) -> Timeline`
524
+ - **Behavior:** For FCP7 XML, the sequence name INSIDE the file wins over the timelineName import option. When the internal name matches an existing timeline, the call returns that EXISTING timeline — no error, no new timeline — so an export→edit→re-import loop keying uniqueness on the option 'succeeds' while operating on one timeline forever (issue #171, Studio 21.0.4.5; wrapper behavior verified on 19.1.3.7). Distinct from the documented repeated-timelineName None return: here the option is fresh and the file's name is stale.
525
+ - **Workaround / current handling:** Rewrite the <sequence><name> inside the file to the intended name before importing — timeline.import_timeline_checked does this automatically for FCP7 XML and errors when a non-rewritable format still returns an existing timeline. Never treat a truthy return as proof of creation; check the returned timeline's id against the pre-import set.
526
+ - **Reference:** [issue #171](https://github.com/samuelgursky/davinci-resolve-mcp/issues/171)
527
+ - **Tags:** timeline, import, silent-failure, unreliable-return
528
+
520
529
  ### Timeline.DeleteClips (requires the Edit page; flaky first attempt)
521
530
 
522
531
  - **Object:** `Timeline`
package/install.py CHANGED
@@ -37,7 +37,7 @@ from src.utils.update_check import (
37
37
 
38
38
  # ─── Version ──────────────────────────────────────────────────────────────────
39
39
 
40
- VERSION = "2.104.2"
40
+ VERSION = "2.104.3"
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": "2.104.2",
3
+ "version": "2.104.3",
4
4
  "description": "NPM bootstrapper for the DaVinci Resolve MCP Server.",
5
5
  "license": "MIT",
6
6
  "author": "Samuel Gursky <samgursky@gmail.com>",
@@ -259,7 +259,7 @@ export const projectDbTool = {
259
259
  return {
260
260
  tracks,
261
261
  note: tracks.some((t) => t.styled === false)
262
- ? 'Tracks with styled:false carry no style blob (Resolve writes a NumLayers-only stub until the track is styled once in the UI); set_subtitle_style cannot patch those.'
262
+ ? 'Tracks with styled:false carry no style blob (Resolve writes a NumLayers-only stub until the track is styled once in the UI); set_subtitle_style cannot patch those. This covers scripted routes too: a track built by MediaPool.ImportMedia(srt) + AppendToTimeline([srtClip]) reports styled:false (confirmed on Studio 21.0.4.5, issue #169), so style once in the UI regardless of how the track was created.'
263
263
  : undefined,
264
264
  };
265
265
  } finally {
@@ -87,7 +87,7 @@ if not logging.getLogger().handlers:
87
87
  handlers=[logging.StreamHandler()],
88
88
  )
89
89
 
90
- VERSION = "2.104.2"
90
+ VERSION = "2.104.3"
91
91
  logger = logging.getLogger("davinci-resolve-mcp")
92
92
  logger.info(f"Starting DaVinci Resolve MCP Server v{VERSION}")
93
93
  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 353-tool granular server instead
12
12
  """
13
13
 
14
- VERSION = "2.104.2"
14
+ VERSION = "2.104.3"
15
15
 
16
16
  import base64
17
17
  import os
@@ -1853,6 +1853,32 @@ API_TRUTH: List[Dict[str, Any]] = [
1853
1853
  "when mirroring keep-ranges into clipInfos.",
1854
1854
  "tags": ["timeline", "edit", "off-by-one", "readback"],
1855
1855
  },
1856
+ {
1857
+ "symbol": "MediaPool.ImportTimelineFromFile (internal sequence name overrides timelineName)",
1858
+ "object": "MediaPool",
1859
+ "signature": "(filePath, {timelineName, importSourceClips, ...}) -> Timeline",
1860
+ "reality": "For FCP7 XML, the sequence name INSIDE the file wins over "
1861
+ "the timelineName import option. When the internal name "
1862
+ "matches an existing timeline, the call returns that "
1863
+ "EXISTING timeline — no error, no new timeline — so an "
1864
+ "export→edit→re-import loop keying uniqueness on the option "
1865
+ "'succeeds' while operating on one timeline forever "
1866
+ "(issue #171, Studio 21.0.4.5; wrapper behavior verified on "
1867
+ "19.1.3.7). Distinct from the documented repeated-"
1868
+ "timelineName None return: here the option is fresh and the "
1869
+ "file's name is stale.",
1870
+ "recommended": "Rewrite the <sequence><name> inside the file to the "
1871
+ "intended name before importing — "
1872
+ "timeline.import_timeline_checked does this "
1873
+ "automatically for FCP7 XML and errors when a "
1874
+ "non-rewritable format still returns an existing "
1875
+ "timeline. Never treat a truthy return as proof of "
1876
+ "creation; check the returned timeline's id against "
1877
+ "the pre-import set.",
1878
+ "tags": ["timeline", "import", "silent-failure", "unreliable-return"],
1879
+ "submit": "bug",
1880
+ "issue": 171,
1881
+ },
1856
1882
  {
1857
1883
  "symbol": "MediaPool.AppendToTimeline clipInfo recordFrame (timeline-absolute origin)",
1858
1884
  "object": "MediaPool",