davinci-resolve-mcp 2.95.1 → 2.95.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 +47 -0
- package/README.md +1 -1
- package/README.zh-CN.md +2 -2
- package/docs/process/release-process.md +20 -0
- package/install.py +1 -1
- package/package.json +1 -1
- package/resolve-advanced/vendor/drp-format/README.md +18 -2
- package/resolve-advanced/vendor/drp-format/__tests__/inject-grades.test.js +16 -8
- package/src/granular/common.py +1 -1
- package/src/server.py +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,53 @@
|
|
|
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.95.2
|
|
6
|
+
|
|
7
|
+
Adds the live round-trip harness the offline `.drp` tier never had — the absence
|
|
8
|
+
of which is why three unbacked "verified live" claims survived in its README, one
|
|
9
|
+
reaching a shipped `api_truth` recommendation before being caught.
|
|
10
|
+
|
|
11
|
+
### Added — `tests/live_drp_roundtrip_verification.py`
|
|
12
|
+
|
|
13
|
+
Authors a `.drp` per primitive, imports it into a running Resolve, asserts intent
|
|
14
|
+
against structural readback, **and exports the composited frame to assert the
|
|
15
|
+
item is actually visible on screen.**
|
|
16
|
+
|
|
17
|
+
That last assertion is the whole point. `place_fusion_title` satisfies every
|
|
18
|
+
structural check — right track, frame, duration, `PrettyType`, and correctly
|
|
19
|
+
encoded text — while rendering nothing, so a harness that only diffed
|
|
20
|
+
`GetStart()`/`GetDuration()` would have called it green. Visibility is measured
|
|
21
|
+
with `Project.ExportCurrentFrameAsStill` plus a luma pass: an inert item yields
|
|
22
|
+
`max=0` across the entire frame, a real one does not (the live control returns
|
|
23
|
+
`max=255` with ~16k bright pixels).
|
|
24
|
+
|
|
25
|
+
**Known-broken cases are declared, not skipped.** `place_fusion_title` is
|
|
26
|
+
recorded as `KNOWN BROKEN`; if it starts working the harness reports `UNEXPECTED
|
|
27
|
+
PASS` and fails, forcing the docs that describe it to be updated.
|
|
28
|
+
|
|
29
|
+
Current state on Studio 21.0.4.5: **7 passed, 1 known-broken, 0 needing
|
|
30
|
+
attention** — media placement, blade, trim, cross-track move, and generator
|
|
31
|
+
visibility all verified end to end.
|
|
32
|
+
|
|
33
|
+
### Fixed — the `RESOLVE_VERIFY=1` gate was unrunnable
|
|
34
|
+
|
|
35
|
+
It ran a single test that threw `TODO — implement once fixtures land`, so the
|
|
36
|
+
flag reported a failing suite and everyone learned to ignore it. A gate nobody
|
|
37
|
+
can run green is worse than no gate. It is now a documented skip pointing at the
|
|
38
|
+
harness above, and `RESOLVE_VERIFY=1 npm test` is clean.
|
|
39
|
+
|
|
40
|
+
### Changed — release process states the rule
|
|
41
|
+
|
|
42
|
+
"The file round-trips" and "Resolve honours it" are different claims; only a live
|
|
43
|
+
import establishes the second. Changes to the offline `.drp` tier must run the
|
|
44
|
+
harness, and a doc may not say "verified live" unless a runnable command produced
|
|
45
|
+
that result.
|
|
46
|
+
|
|
47
|
+
The harness is also robust to `DeleteProject`'s session lock: projects opened in
|
|
48
|
+
a session cannot be deleted until Resolve restarts, so it steps off the current
|
|
49
|
+
project, retries, falls back to run-unique names rather than colliding, and
|
|
50
|
+
reports what it could not remove instead of failing silently.
|
|
51
|
+
|
|
5
52
|
## What's New in v2.95.1
|
|
6
53
|
|
|
7
54
|
Withdraws a recommendation this project shipped two releases ago. **`drp
|
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.95.
|
|
15
|
+
> 本翻译对应 v2.95.2 版 README。如与英文原版有出入,以 [英文原版](README.md) 为准。
|
|
16
16
|
|
|
17
17
|
一个 Model Context Protocol (MCP) 服务器,让 AI 助手通过官方脚本 API 控制 DaVinci Resolve Studio(达芬奇)。它提供完整的 API 覆盖,外加带护栏的工作流助手,涵盖剪辑、媒体池整理、渲染设置、审阅标记、调色、Fusion、Fairlight、项目生命周期任务、扩展开发,以及不碰源媒体的媒体分析。
|
|
18
18
|
|
|
@@ -113,6 +113,26 @@ Resolve validation before release. Use disposable projects and synthetic media
|
|
|
113
113
|
only. Never modify, transcode, proxy, or create derivatives of source media
|
|
114
114
|
unless the user explicitly requests it.
|
|
115
115
|
|
|
116
|
+
**Changes to the offline `.drp` authoring tier must run the round-trip harness,
|
|
117
|
+
and a structural readback is NOT sufficient evidence on its own:**
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
RESOLVE_VERIFY=1 venv/bin/python tests/live_drp_roundtrip_verification.py
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
It authors a `.drp` per primitive, imports it into Resolve, asserts intent
|
|
124
|
+
against structural readback, **and exports the composited frame to assert the
|
|
125
|
+
item is visible on screen.** That last assertion exists because
|
|
126
|
+
`place_fusion_title` passes every structural check — right track, frame,
|
|
127
|
+
duration, type, and correctly-encoded text — while rendering nothing. Anything
|
|
128
|
+
that only diffs `GetStart()`/`GetDuration()` will call that green. Known-broken
|
|
129
|
+
cases are declared in the harness rather than skipped, so a fix reports
|
|
130
|
+
`UNEXPECTED PASS` and fails until the docs describing it are updated.
|
|
131
|
+
|
|
132
|
+
The same rule generalises: **"the file round-trips" and "Resolve honours it" are
|
|
133
|
+
different claims.** Only a live import establishes the second one. Do not write
|
|
134
|
+
"verified live" in a doc unless a runnable command produced that result.
|
|
135
|
+
|
|
116
136
|
Examples:
|
|
117
137
|
|
|
118
138
|
```bash
|
package/install.py
CHANGED
|
@@ -36,7 +36,7 @@ from src.utils.update_check import (
|
|
|
36
36
|
|
|
37
37
|
# ─── Version ──────────────────────────────────────────────────────────────────
|
|
38
38
|
|
|
39
|
-
VERSION = "2.95.
|
|
39
|
+
VERSION = "2.95.2"
|
|
40
40
|
# Only hard floor: mcp[cli] requires Python 3.10+. There is no upper bound —
|
|
41
41
|
# Resolve's scripting bridge loads into newer interpreters on recent builds
|
|
42
42
|
# (Python 3.14 verified against Resolve Studio 20.3.2). Older Resolve builds
|
package/package.json
CHANGED
|
@@ -1,8 +1,24 @@
|
|
|
1
1
|
# drp-format — offline DaVinci Resolve project authoring & editing
|
|
2
2
|
|
|
3
3
|
Read, author, and edit **real, importable** DaVinci Resolve 21 projects (`.drp`) and timelines
|
|
4
|
-
(`.drt`) as files — no Resolve required.
|
|
5
|
-
|
|
4
|
+
(`.drt`) as files — no Resolve required.
|
|
5
|
+
|
|
6
|
+
> **How to verify a claim in this file.** This README previously said "everything here is verified
|
|
7
|
+
> by a live round-trip". It was not: the gate it referred to threw `TODO — implement once fixtures
|
|
8
|
+
> land`, so nobody ever ran it green, and three unbacked "verified live" claims survived here —
|
|
9
|
+
> one of which reached a shipped `api_truth` recommendation before being caught. The round-trip
|
|
10
|
+
> that actually exists is:
|
|
11
|
+
>
|
|
12
|
+
> ```bash
|
|
13
|
+
> RESOLVE_VERIFY=1 venv/bin/python tests/live_drp_roundtrip_verification.py
|
|
14
|
+
> ```
|
|
15
|
+
>
|
|
16
|
+
> It authors a `.drp` per primitive, imports it into a running Resolve, asserts intent against
|
|
17
|
+
> structural readback, **and exports the composited frame to assert the item is visible on
|
|
18
|
+
> screen.** That last check is the point: `place_fusion_title` satisfies every structural
|
|
19
|
+
> assertion — correct track, frame, duration, type, and text encoded in the blob — while
|
|
20
|
+
> rendering nothing. Structure alone cannot tell you a thing works. Known-broken cases are
|
|
21
|
+
> declared in the harness, so a fix reports `UNEXPECTED PASS` and forces the docs to be updated.
|
|
6
22
|
|
|
7
23
|
Background + the full schema map: `docs/design/drp-drx-drt-closeout-harness/knowledge/resolve21-schema-reconciliation.md`
|
|
8
24
|
and `.../resolve-authoring-completion.md`.
|
|
@@ -18,7 +18,6 @@ const os = require('node:os');
|
|
|
18
18
|
const JSZip = require('jszip');
|
|
19
19
|
|
|
20
20
|
const drpFormat = require('..');
|
|
21
|
-
const { resolveVerifyTest } = require('./_resolve-verify');
|
|
22
21
|
|
|
23
22
|
// A plausible-shaped synthetic body. The injector does not parse the bytes,
|
|
24
23
|
// only substitutes them. Hex characters only.
|
|
@@ -229,10 +228,19 @@ test('injectGrades: internals — extractDrxBodyHex throws on missing Body', ()
|
|
|
229
228
|
// the byte-identical-render check requires Resolve. When the env flag is
|
|
230
229
|
// unset the test skips with a clear marker.
|
|
231
230
|
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
231
|
+
// NOT a throwing placeholder any more. It used to `throw new Error('TODO ...')`,
|
|
232
|
+
// which meant RESOLVE_VERIFY=1 reported a FAILING suite and everyone learned to
|
|
233
|
+
// ignore the flag — which is a large part of why this package carried three
|
|
234
|
+
// unbacked "verified live" claims. A gate nobody can run green is worse than no
|
|
235
|
+
// gate. The live round-trip that DOES exist now lives on the Python side, where
|
|
236
|
+
// the Resolve scripting API is reachable directly:
|
|
237
|
+
//
|
|
238
|
+
// RESOLVE_VERIFY=1 venv/bin/python tests/live_drp_roundtrip_verification.py
|
|
239
|
+
//
|
|
240
|
+
// It authors a .drp per primitive, imports it into Resolve, asserts intent
|
|
241
|
+
// against structural readback AND exports the composited frame to assert the
|
|
242
|
+
// item is actually VISIBLE — the check that catches place_fusion_title, which
|
|
243
|
+
// passes every structural assertion while rendering nothing.
|
|
244
|
+
test.skip('injectGrades: rendered frame matches direct DRX apply '
|
|
245
|
+
+ '(covered by tests/live_drp_roundtrip_verification.py — grade-render compare still TODO)',
|
|
246
|
+
() => {});
|
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.95.
|
|
90
|
+
VERSION = "2.95.2"
|
|
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()}")
|