davinci-resolve-mcp 2.93.3 → 2.94.0
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 +40 -0
- package/README.md +1 -1
- package/README.zh-CN.md +2 -2
- package/install.py +1 -1
- package/package.json +1 -1
- package/src/granular/common.py +1 -1
- package/src/server.py +1 -1
- package/src/utils/delivery_targets.py +78 -3
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,46 @@
|
|
|
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.94.0
|
|
6
|
+
|
|
7
|
+
Adds four delivery targets for deliverable classes the table did not cover:
|
|
8
|
+
image sequences for web/graphics, animated web assets, and an HTTP Live
|
|
9
|
+
Streaming package. All 32 targets resolve live on Studio 21.0.4.5.
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- **`png_sequence`** — PNG frames for web and motion-graphics handoff. Resolve
|
|
14
|
+
exposes **RGB only** (no alpha codec), so the target says so and points at
|
|
15
|
+
`dpx_sequence` (`RGBA 8 bits`) or `prores4444_master` when transparency is
|
|
16
|
+
actually needed. Alias: `png`.
|
|
17
|
+
- **`gif_animated`** — looping animated GIF. No audio track at all, so
|
|
18
|
+
`ExportAudio` is False rather than merely unpinned. Its QC projection uses
|
|
19
|
+
ffprobe values measured on a generated file (`container: gif`, `codec: gif`).
|
|
20
|
+
Alias: `gif`.
|
|
21
|
+
- **`webp_animated`** — looping animated WebP. Ships with **no QC projection**:
|
|
22
|
+
the reference machine's ffmpeg has only the `webp_pipe` still-image demuxer, so
|
|
23
|
+
a rendered animated WebP could not be probed and the ffprobe values are
|
|
24
|
+
unmeasured. `qc_skip_reason` says exactly that. Guessing `webp`/`webp` would
|
|
25
|
+
have produced QC failures about vocabulary rather than about the deliverable —
|
|
26
|
+
the same trap as mp4 reporting its container as `mov`. Alias: `webp`.
|
|
27
|
+
- **`hls_h264`** — HTTP Live Streaming package (`.m3u8` playlist plus segments),
|
|
28
|
+
in the `package` tier alongside IMF and DCP. Bitrate ladders, variant playlists
|
|
29
|
+
and encryption keys are not expressible as a render target. Aliases: `hls`,
|
|
30
|
+
`streaming`.
|
|
31
|
+
|
|
32
|
+
### Notes
|
|
33
|
+
|
|
34
|
+
- PNG, WebP and HLS are **not render formats on Resolve 19.x**. These targets
|
|
35
|
+
resolve on 21.x and fail loudly with the machine's available list on older
|
|
36
|
+
builds, which is the designed behavior rather than a regression.
|
|
37
|
+
- Deliberately **not** added, having checked the full 21.0.4.5 matrix: container
|
|
38
|
+
swaps that duplicate existing capability (MKV carries the same ProRes and
|
|
39
|
+
H.264/H.265 codecs already covered), standalone JPEG 2000 (the same essence the
|
|
40
|
+
IMF/DCP targets reach), and legacy formats (AVI, Cineon, MJ2, Panasonic AVC
|
|
41
|
+
8K). All remain reachable via a `format_candidates` override or a user target.
|
|
42
|
+
- `braw`, `mts` and `wav` expose zero codecs and reject every codec value, so no
|
|
43
|
+
target is possible for them at all.
|
|
44
|
+
|
|
5
45
|
## What's New in v2.93.3
|
|
6
46
|
|
|
7
47
|
Re-verifies the delivery-target table and the two recorded render API
|
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.
|
|
15
|
+
> 本翻译对应 v2.94.0 版 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
|
@@ -36,7 +36,7 @@ from src.utils.update_check import (
|
|
|
36
36
|
|
|
37
37
|
# ─── Version ──────────────────────────────────────────────────────────────────
|
|
38
38
|
|
|
39
|
-
VERSION = "2.
|
|
39
|
+
VERSION = "2.94.0"
|
|
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
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.
|
|
90
|
+
VERSION = "2.94.0"
|
|
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
|
@@ -110,9 +110,11 @@ major-version upgrade.
|
|
|
110
110
|
|
|
111
111
|
Two findings changed between the builds and should not be treated as fixed facts:
|
|
112
112
|
|
|
113
|
-
- **PNG.** Not
|
|
114
|
-
`
|
|
115
|
-
|
|
113
|
+
- **PNG, WebP and HLS.** Not render formats on 19.1.3.7; they *are* on 21.0.4.5.
|
|
114
|
+
`png_sequence`, `webp_animated` and `hls_h264` therefore resolve on 21.x and
|
|
115
|
+
fail loudly on 19.x, which is the correct behavior rather than a regression.
|
|
116
|
+
PNG exposes RGB only — no alpha codec — so it does not replace `dpx_sequence`
|
|
117
|
+
for transparency.
|
|
116
118
|
- **Zero-codec formats.** `wav` and `gif` on 19.x; `braw`, `mts` and `wav` on
|
|
117
119
|
21.x — `gif` gained codecs, BRAW and MTS lost them. `wav` is the constant, so
|
|
118
120
|
an audio-only WAV target remains inexpressible through
|
|
@@ -578,6 +580,63 @@ DELIVERY_TARGETS: Dict[str, DeliveryTarget] = {
|
|
|
578
580
|
("RGB 16 bits", "RGB16", "RGB 8 bits"),
|
|
579
581
|
"TIFF frames for stills-oriented or archival handoff.",
|
|
580
582
|
),
|
|
583
|
+
"png_sequence": _sequence(
|
|
584
|
+
"png_sequence", "PNG image sequence", ("PNG", "png"),
|
|
585
|
+
("RGB16", "RGB 16 bits", "RGB8", "RGB 8 bits"),
|
|
586
|
+
"PNG frames for web and motion-graphics handoff.",
|
|
587
|
+
notes=(
|
|
588
|
+
"RGB ONLY — Resolve exposes no alpha PNG codec (21.0.4.5 offers just "
|
|
589
|
+
"'RGB 16 bits' / 'RGB 8 bits'). For transparency use dpx_sequence "
|
|
590
|
+
"('RGBA 8 bits') or prores4444_master.",
|
|
591
|
+
"PNG is not a render format on Resolve 19.x; this target resolves on 21.x+.",
|
|
592
|
+
),
|
|
593
|
+
),
|
|
594
|
+
# ── Animated web assets ─────────────────────────────────────────────────
|
|
595
|
+
# Not _web(): that helper pins mp4 and requires a raster. These carry no
|
|
596
|
+
# audio track at all, so export_audio is False rather than merely unpinned.
|
|
597
|
+
"gif_animated": DeliveryTarget(
|
|
598
|
+
id="gif_animated",
|
|
599
|
+
label="Animated GIF",
|
|
600
|
+
describe="Looping animated GIF for web/social placement. No audio.",
|
|
601
|
+
tier="web",
|
|
602
|
+
format_candidates=("GIF", "gif"),
|
|
603
|
+
codec_candidates=("Animated_GIF", "Animated GIF"),
|
|
604
|
+
qc_container="gif",
|
|
605
|
+
qc_codec="gif",
|
|
606
|
+
export_audio=False,
|
|
607
|
+
verified=_VERIFIED,
|
|
608
|
+
source="Live matrix: GIF render format; ffprobe values measured on a generated .gif.",
|
|
609
|
+
notes=(
|
|
610
|
+
"GIF carries no audio and is palette-limited to 256 colours; prefer "
|
|
611
|
+
"webp_animated where the destination supports it.",
|
|
612
|
+
"Raster and rate inherit the timeline — set them explicitly for a "
|
|
613
|
+
"placement with a fixed spec.",
|
|
614
|
+
),
|
|
615
|
+
),
|
|
616
|
+
"webp_animated": DeliveryTarget(
|
|
617
|
+
id="webp_animated",
|
|
618
|
+
label="Animated WebP",
|
|
619
|
+
describe="Looping animated WebP for web placement. No audio.",
|
|
620
|
+
tier="web",
|
|
621
|
+
format_candidates=("WebP", "webp"),
|
|
622
|
+
codec_candidates=("Animated_WEBP", "Animated WebP"),
|
|
623
|
+
export_audio=False,
|
|
624
|
+
# No QC projection on purpose — see qc_skip_reason. Guessing "webp"/"webp"
|
|
625
|
+
# would produce failures that say nothing about the deliverable, which is
|
|
626
|
+
# the exact trap the mp4-reports-as-mov case taught.
|
|
627
|
+
qc_skip_reason=(
|
|
628
|
+
"ffprobe container/codec values for animated WebP are unverified: the "
|
|
629
|
+
"reference machine's ffmpeg has only the webp_pipe still-image demuxer, "
|
|
630
|
+
"so a rendered animated WebP could not be probed. Measure and fill in "
|
|
631
|
+
"qc_container/qc_codec on a build with full WebP support."
|
|
632
|
+
),
|
|
633
|
+
verified=_VERIFIED,
|
|
634
|
+
source="Live matrix: WebP render format (ffprobe side unmeasured).",
|
|
635
|
+
notes=(
|
|
636
|
+
"WebP carries no audio track.",
|
|
637
|
+
"WebP is not a render format on Resolve 19.x; this target resolves on 21.x+.",
|
|
638
|
+
),
|
|
639
|
+
),
|
|
581
640
|
# ── Broadcast / Avid handoff ────────────────────────────────────────────
|
|
582
641
|
"dnxhr_hq_mxf_opatom": DeliveryTarget(
|
|
583
642
|
id="dnxhr_hq_mxf_opatom",
|
|
@@ -644,6 +703,17 @@ DELIVERY_TARGETS: Dict[str, DeliveryTarget] = {
|
|
|
644
703
|
"need a human. easyDCP variants exist on this install too.",
|
|
645
704
|
),
|
|
646
705
|
),
|
|
706
|
+
"hls_h264": _package(
|
|
707
|
+
"hls_h264", "HLS package (H.264)",
|
|
708
|
+
("HLS", "m3u8"), ("H264", "H.264"),
|
|
709
|
+
"HTTP Live Streaming package: an .m3u8 playlist plus its segment files.",
|
|
710
|
+
notes=(
|
|
711
|
+
"HLS is a PACKAGE: a playlist plus segments, not one file. Bitrate ladders, "
|
|
712
|
+
"variant playlists and encryption keys are not expressible as a render target "
|
|
713
|
+
"— this selects the format/codec only.",
|
|
714
|
+
"HLS is not a render format on Resolve 19.x; this target resolves on 21.x+.",
|
|
715
|
+
),
|
|
716
|
+
),
|
|
647
717
|
}
|
|
648
718
|
|
|
649
719
|
VALID_TARGETS = frozenset(DELIVERY_TARGETS)
|
|
@@ -676,6 +746,11 @@ TARGET_ALIASES: Dict[str, str] = {
|
|
|
676
746
|
"dnx_master": "dnxhr_hqx_master",
|
|
677
747
|
"avid": "dnxhr_hq_mxf_opatom",
|
|
678
748
|
"vfx": "exr_sequence",
|
|
749
|
+
"png": "png_sequence",
|
|
750
|
+
"gif": "gif_animated",
|
|
751
|
+
"webp": "webp_animated",
|
|
752
|
+
"hls": "hls_h264",
|
|
753
|
+
"streaming": "hls_h264",
|
|
679
754
|
}
|
|
680
755
|
|
|
681
756
|
#: Fields a caller may override per call. Deliberately excludes id/label/tier/
|