davinci-resolve-mcp 2.224.0 → 2.224.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 +58 -0
- package/README.md +1 -1
- package/README.zh-CN.md +2 -2
- package/install.py +1 -1
- package/package.json +1 -1
- package/scripts/install_resolve_bridge.py +67 -9
- package/src/granular/common.py +1 -1
- package/src/server.py +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,64 @@
|
|
|
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.224.1 — the bridge installer explains the outcome it was built to detect
|
|
6
|
+
|
|
7
|
+
Reported by @hemna (#219). No behaviour changed; the installer writes exactly
|
|
8
|
+
what it wrote before and says considerably more about it.
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
|
|
12
|
+
- **The canary-only outcome had no printed guidance at all.** Seeing
|
|
13
|
+
`resolve_bridge_canary` in Workspace ▸ Scripts while `resolve_bridge_probe`
|
|
14
|
+
is absent is not a failed install — it is the single most informative thing
|
|
15
|
+
the installer can tell you, and the exact signal the Lua canary exists to
|
|
16
|
+
produce. But the printed steps were a fixed four-line list that assumed the
|
|
17
|
+
Python probe had listed, so a user in this case followed step 3 to a menu
|
|
18
|
+
entry that cannot exist. The explanation was written down the whole time —
|
|
19
|
+
inside the canary's own Lua comments, which nobody has any reason to open.
|
|
20
|
+
There is now a real branch for it that says the install worked, says not to
|
|
21
|
+
re-run it, and explains what the missing probe means.
|
|
22
|
+
- **Duplicate canary entries are now expected rather than alarming.** The
|
|
23
|
+
installer writes into every Scripts/Utility folder Resolve scans, giving the
|
|
24
|
+
canary the same filename in each, so Resolve lists it once per folder with no
|
|
25
|
+
way to tell them apart. The reporter saw two and reasonably read it as a
|
|
26
|
+
broken install; a real run on the maintainer's machine produces **four**. The
|
|
27
|
+
guidance now names the number and says running any one of them is the same as
|
|
28
|
+
running any other. The count is derived from what was actually installed, and
|
|
29
|
+
the filename now has a single definition shared by the writer and the
|
|
30
|
+
counter — those two disagreeing would produce guidance promising entries that
|
|
31
|
+
are not there.
|
|
32
|
+
- **The Console is named.** The canary reports through `print()`, which lands in
|
|
33
|
+
Workspace ▸ Console and nowhere else. The installer had never mentioned the
|
|
34
|
+
Console — the string does not appear in it — so running the canary with no
|
|
35
|
+
Console open looks exactly like nothing happening, which is what was
|
|
36
|
+
reported.
|
|
37
|
+
|
|
38
|
+
### Changed
|
|
39
|
+
|
|
40
|
+
- The canary-only explanation is **split by edition instead of asserting a
|
|
41
|
+
single cause**. The canary's own text predates Resolve 21.1 and blames Python
|
|
42
|
+
discovery — `PYTHON3HOME`, then `/usr/local/bin/python3`, and nowhere else.
|
|
43
|
+
That is still right on Studio and on 21.0.x and earlier, but on **free 21.1
|
|
44
|
+
it is wrong**: Python scripting moved to the Studio edition (#203), so `.py`
|
|
45
|
+
files do not list there whatever Python is installed, and the older advice
|
|
46
|
+
would send a user chasing a setting that cannot fix their problem. Both
|
|
47
|
+
branches are now stated, newer cause first.
|
|
48
|
+
|
|
49
|
+
### Validation
|
|
50
|
+
|
|
51
|
+
- Full suite green: 3,484 passed, 1 skipped. Six new tests cover the duplicate
|
|
52
|
+
count and its wording, the absence of that wording for a single canary, the
|
|
53
|
+
canary-only branch, the Console pointer, both edition branches with the
|
|
54
|
+
newer one ordered first, and the single-definition guarantee on the canary
|
|
55
|
+
filename.
|
|
56
|
+
- Verified by running the installer for real on this machine, which is where
|
|
57
|
+
the four-entry figure comes from.
|
|
58
|
+
- **Still open in #219**: the canary's own embedded remediation text carries
|
|
59
|
+
the pre-21.1 single-cause diagnosis. Correcting what it says to a specific
|
|
60
|
+
user needs their edition, which has been asked for; the printed guidance
|
|
61
|
+
above no longer depends on that answer.
|
|
62
|
+
|
|
5
63
|
## What's New in v2.224.0 — native Resolve 21.1 DCTL encryption
|
|
6
64
|
|
|
7
65
|
Contributed by @legionsound (#216), live-validated on Studio 21.1.0.14.
|
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
English | [简体中文](README.zh-CN.md)
|
|
4
4
|
|
|
5
|
-
[](https://github.com/samuelgursky/davinci-resolve-mcp/releases)
|
|
6
6
|
[](https://www.npmjs.com/package/davinci-resolve-mcp)
|
|
7
7
|
[](docs/reference/api-coverage.md)
|
|
8
8
|
[-blue.svg)](#server-modes)
|
package/README.zh-CN.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
[English](README.md) | 简体中文
|
|
4
4
|
|
|
5
|
-
[](https://github.com/samuelgursky/davinci-resolve-mcp/releases)
|
|
6
6
|
[](https://www.npmjs.com/package/davinci-resolve-mcp)
|
|
7
7
|
[](docs/reference/api-coverage.md)
|
|
8
8
|
[-blue.svg)](#服务器模式)
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
[](https://www.python.org/downloads/)
|
|
13
13
|
[](https://opensource.org/licenses/MIT)
|
|
14
14
|
|
|
15
|
-
> 本翻译对应 v2.224.
|
|
15
|
+
> 本翻译对应 v2.224.1 版 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 = "2.224.
|
|
40
|
+
VERSION = "2.224.1"
|
|
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
|
@@ -281,6 +281,11 @@ _FRAMEWORK_PYTHON_ROOTS = (
|
|
|
281
281
|
#: PYTHON3HOME is unset. This is the one python.org's installer creates.
|
|
282
282
|
_FALLBACK_PYTHON3 = Path("/usr/local/bin/python3")
|
|
283
283
|
|
|
284
|
+
#: Filename of the Lua enumeration canary. Named once: the installer writes it
|
|
285
|
+
#: and the post-install guidance counts it, and those two disagreeing is how a
|
|
286
|
+
#: user ends up told to expect entries that are not there.
|
|
287
|
+
_CANARY_NAME = "resolve_bridge_canary.lua"
|
|
288
|
+
|
|
284
289
|
_LUA_CANARY = """-- Installed by davinci-resolve-mcp as an enumeration canary.
|
|
285
290
|
-- If THIS appears under Workspace > Scripts but resolve_bridge_probe does not,
|
|
286
291
|
-- Resolve is listing Lua and silently skipping Python: it cannot find a Python 3.
|
|
@@ -650,7 +655,7 @@ def _install_to(target: Path, *, probe_only: bool, installed: list[str]) -> None
|
|
|
650
655
|
installed.append(str(target / probe))
|
|
651
656
|
# Lua always enumerates; Python only with a framework install. The canary
|
|
652
657
|
# makes "Python not detected" distinguishable from "wrong folder".
|
|
653
|
-
canary = target /
|
|
658
|
+
canary = target / _CANARY_NAME
|
|
654
659
|
canary.write_text(_LUA_CANARY, encoding="utf-8")
|
|
655
660
|
installed.append(str(canary))
|
|
656
661
|
if probe_only:
|
|
@@ -686,6 +691,65 @@ def _install_to(target: Path, *, probe_only: bool, installed: list[str]) -> None
|
|
|
686
691
|
installed.append(str(launcher_path))
|
|
687
692
|
|
|
688
693
|
|
|
694
|
+
def canary_count(result: dict) -> int:
|
|
695
|
+
"""How many identical `resolve_bridge_canary` entries Resolve will list.
|
|
696
|
+
|
|
697
|
+
One per Scripts/Utility folder installed into, all with the same filename,
|
|
698
|
+
so they are indistinguishable in the menu. Reported in issue #219 by a user
|
|
699
|
+
who reasonably read two identical entries as a broken install.
|
|
700
|
+
"""
|
|
701
|
+
return sum(1 for path in result.get("installed", [])
|
|
702
|
+
if str(path).endswith(_CANARY_NAME))
|
|
703
|
+
|
|
704
|
+
|
|
705
|
+
def next_steps(result: dict) -> list:
|
|
706
|
+
"""The post-install instructions, as lines.
|
|
707
|
+
|
|
708
|
+
Built rather than printed inline so the canary-only branch is testable: it
|
|
709
|
+
is the single most likely outcome on macOS and, until issue #219, the only
|
|
710
|
+
one the installer had no words for. The user followed step 3 to a menu
|
|
711
|
+
entry that cannot exist, and the explanation was sitting in a Lua comment
|
|
712
|
+
they had no reason to open.
|
|
713
|
+
"""
|
|
714
|
+
lines = [
|
|
715
|
+
"Next:",
|
|
716
|
+
" 1. Restart DaVinci Resolve so it re-scans the Scripts folders.",
|
|
717
|
+
" 2. Open a saved project (the Scripts menu is empty in Project Manager).",
|
|
718
|
+
" 3. Workspace > Scripts > resolve_bridge_probe — run it TWICE.",
|
|
719
|
+
# The probe runs INSIDE Resolve, which never sees the shell's
|
|
720
|
+
# DAVINCI_RESOLVE_BRIDGE_CONFIG — it always writes to the fixed default
|
|
721
|
+
# directory, so the guidance must not follow the override.
|
|
722
|
+
" 4. Read ~/.config/davinci-resolve-mcp/host-model-probe.json",
|
|
723
|
+
]
|
|
724
|
+
count = canary_count(result)
|
|
725
|
+
if count > 1:
|
|
726
|
+
lines += [
|
|
727
|
+
"",
|
|
728
|
+
f"Expect {count} identical 'resolve_bridge_canary' entries — one per Scripts",
|
|
729
|
+
"folder this installed into. That is normal, not a double install; running",
|
|
730
|
+
"any one of them is the same as running any other.",
|
|
731
|
+
]
|
|
732
|
+
lines += [
|
|
733
|
+
"",
|
|
734
|
+
"If step 3 shows no 'resolve_bridge_probe' and you can only see",
|
|
735
|
+
"'resolve_bridge_canary':",
|
|
736
|
+
" - The install worked. Do not re-run it. That is the canary doing its job:",
|
|
737
|
+
" Resolve is enumerating scripts, listing Lua, and skipping Python.",
|
|
738
|
+
" - Run 'resolve_bridge_canary' and read its output in Workspace > Console.",
|
|
739
|
+
" It reports with print(), not a dialog, so with no Console open it looks",
|
|
740
|
+
" like nothing happened.",
|
|
741
|
+
" - What it means depends on your edition:",
|
|
742
|
+
" * Resolve 21.1+ FREE — Python scripting moved to the Studio edition,",
|
|
743
|
+
" so .py files no longer list there at all and no Python setting will",
|
|
744
|
+
" change that. See issue #203.",
|
|
745
|
+
" * Studio, or 21.0.x and earlier — Resolve cannot find a Python 3. It",
|
|
746
|
+
" looks at PYTHON3HOME and then /usr/local/bin/python3 and nowhere",
|
|
747
|
+
" else, which is why Homebrew, pyenv, uv and conda builds go unseen.",
|
|
748
|
+
" The canary's own output carries the fix.",
|
|
749
|
+
]
|
|
750
|
+
return lines
|
|
751
|
+
|
|
752
|
+
|
|
689
753
|
def main() -> int:
|
|
690
754
|
parser = argparse.ArgumentParser(description=__doc__)
|
|
691
755
|
parser.add_argument("--probe-only", action="store_true",
|
|
@@ -709,14 +773,8 @@ def main() -> int:
|
|
|
709
773
|
print("WARNING: " + warning)
|
|
710
774
|
print("!" * 72)
|
|
711
775
|
print()
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
print(" 2. Open a saved project (the Scripts menu is empty in Project Manager).")
|
|
715
|
-
print(" 3. Workspace > Scripts > resolve_bridge_probe — run it TWICE.")
|
|
716
|
-
# The probe runs INSIDE Resolve, which never sees the shell's
|
|
717
|
-
# DAVINCI_RESOLVE_BRIDGE_CONFIG — it always writes to the fixed default
|
|
718
|
-
# directory, so the guidance must not follow the override.
|
|
719
|
-
print(" 4. Read ~/.config/davinci-resolve-mcp/host-model-probe.json")
|
|
776
|
+
for line in next_steps(result):
|
|
777
|
+
print(line)
|
|
720
778
|
return 0
|
|
721
779
|
|
|
722
780
|
|
package/src/granular/common.py
CHANGED
|
@@ -87,7 +87,7 @@ if not logging.getLogger().handlers:
|
|
|
87
87
|
handlers=[logging.StreamHandler()],
|
|
88
88
|
)
|
|
89
89
|
|
|
90
|
-
VERSION = "2.224.
|
|
90
|
+
VERSION = "2.224.1"
|
|
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()}")
|