davinci-resolve-mcp 2.57.2 → 2.57.4
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/docs/reference/api-limitations.md +82 -1
- package/install.py +1 -1
- package/package.json +1 -1
- package/scripts/gen_api_limitations.py +18 -0
- package/src/granular/common.py +1 -1
- package/src/server.py +1 -1
- package/src/utils/api_truth.py +123 -0
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.57.4
|
|
6
|
+
|
|
7
|
+
Live mutating verification of the catalogued API gaps.
|
|
8
|
+
|
|
9
|
+
- **Added** `tests/live_api_gap_verification.py` — attempts each catalogued
|
|
10
|
+
"missing capability" against a disposable project built from synthetic ffmpeg
|
|
11
|
+
media, recording the failing call alongside a positive control that succeeds.
|
|
12
|
+
All 8 surface-audited gaps confirmed missing on Resolve Studio 21.0.0:
|
|
13
|
+
`SetProperty('Speed', …)` / audio-level keys return False while
|
|
14
|
+
`RetimeProcess` / video-transform keys succeed; trim/move/split/proxy/node-
|
|
15
|
+
graph/Smart-Bin methods are absent (by `dir()`), while append/CDL/AddSubFolder
|
|
16
|
+
controls work.
|
|
17
|
+
- **Added** a new bug entry: `hasattr()`/`getattr()` are unusable on Resolve
|
|
18
|
+
objects — the Python bridge fabricates a callable for ANY attribute name, so
|
|
19
|
+
capability detection must use `dir()`. (Discovered when the first harness pass
|
|
20
|
+
reported nonexistent methods as present.) Report now lists 14 missing + 10 bugs.
|
|
21
|
+
- **Changed** the report's Scope note to record the live mutating-harness
|
|
22
|
+
methodology and the `hasattr` caveat. Strengthened the clip-speed and
|
|
23
|
+
Fairlight-audio entries with the live `SetProperty` rejection evidence (and
|
|
24
|
+
noted that `'Pan'` is the video-transform key, not audio pan).
|
|
25
|
+
|
|
26
|
+
## What's New in v2.57.3
|
|
27
|
+
|
|
28
|
+
Expanded the API-limitations catalogue with a live surface audit.
|
|
29
|
+
|
|
30
|
+
- **Added** 8 newly-catalogued **missing capabilities** to
|
|
31
|
+
`docs/reference/api-limitations.md`, found by a `dir()` audit of the live
|
|
32
|
+
Resolve 21.0.0 API objects diffed against the UI feature set: timeline-item
|
|
33
|
+
trim/move/re-time (getters only, no setters), razor/blade/split, clip
|
|
34
|
+
speed/retime ratio & ramps, color node-graph editing + primary grade values,
|
|
35
|
+
Fairlight audio levels/pan/EQ/automation/FairlightFX, proxy/optimized-media
|
|
36
|
+
generation, insert/overwrite/replace/fit-to-fill edit modes, and Smart/Power
|
|
37
|
+
Bin creation. The report now lists 14 missing capabilities + 9 bugs.
|
|
38
|
+
- **Verified** the four previously-doc-derived entries (per-clip audio
|
|
39
|
+
stereo↔mono, native multicam creation, transitions, cloud list/export/user)
|
|
40
|
+
against the live API surface; all confirmed absent.
|
|
41
|
+
- **Changed** the generated report to carry an explicit **Scope & completeness**
|
|
42
|
+
note — it is not guaranteed exhaustive (surface audit + incident log; misses
|
|
43
|
+
parameters that exist-but-misbehave and untested capabilities).
|
|
44
|
+
|
|
5
45
|
## What's New in v2.57.2
|
|
6
46
|
|
|
7
47
|
Consolidated, submittable list of Resolve scripting-API limitations.
|
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# DaVinci Resolve MCP Server
|
|
2
2
|
|
|
3
|
-
[](https://github.com/samuelgursky/davinci-resolve-mcp/releases)
|
|
4
4
|
[](https://www.npmjs.com/package/davinci-resolve-mcp)
|
|
5
5
|
[](docs/reference/api-coverage.md)
|
|
6
6
|
[-blue.svg)](#server-modes)
|
|
@@ -12,12 +12,30 @@ that none exists).
|
|
|
12
12
|
|
|
13
13
|
**Verified on:** DaVinci Resolve Studio 21.0.0
|
|
14
14
|
|
|
15
|
-
**Totals:**
|
|
15
|
+
**Totals:** 14 missing capabilities, 10 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
|
|
19
19
|
it and stays in sync via a drift guard.
|
|
20
20
|
|
|
21
|
+
### Scope & completeness
|
|
22
|
+
|
|
23
|
+
This list is **not guaranteed exhaustive.** It combines (a) issues hit
|
|
24
|
+
while building this MCP server, (b) a `dir()` surface audit of the live
|
|
25
|
+
Resolve API objects (ProjectManager, Project, MediaPool, MediaPoolItem,
|
|
26
|
+
Timeline, TimelineItem, Graph) diffed against Resolve's UI feature set,
|
|
27
|
+
and (c) a live mutating harness (`tests/live_api_gap_verification.py`)
|
|
28
|
+
that attempts each operation against a disposable project built from
|
|
29
|
+
synthetic media and confirms it fails while a related control succeeds.
|
|
30
|
+
That catches absent methods and documented constraints, but not subtler
|
|
31
|
+
issues: parameters that exist yet misbehave, version-specific regressions,
|
|
32
|
+
or capabilities we simply never exercised. New findings are added as
|
|
33
|
+
`submit`-tagged `api_truth` entries and this document is regenerated.
|
|
34
|
+
|
|
35
|
+
Note: `hasattr()`/`getattr()` cannot be used to probe this API — the
|
|
36
|
+
Python bridge fabricates a callable for any attribute name (see the
|
|
37
|
+
`hasattr` bug below). Method existence here was checked with `dir()`.
|
|
38
|
+
|
|
21
39
|
## Missing Capabilities (please add)
|
|
22
40
|
|
|
23
41
|
Functionality that exists in the Resolve UI but has no scripting API
|
|
@@ -67,6 +85,62 @@ equivalent, blocking full automation.
|
|
|
67
85
|
- **Workaround / current handling:** Drive cloud project listing, export, and collaborator management from the Resolve UI; only create/load/import/restore are scriptable.
|
|
68
86
|
- **Tags:** missing-method, project, cloud
|
|
69
87
|
|
|
88
|
+
### TimelineItem trim / move / re-time (no position setters)
|
|
89
|
+
|
|
90
|
+
- **Object:** `TimelineItem`
|
|
91
|
+
- **Behavior:** TimelineItem exposes GetStart, GetEnd, GetDuration, GetLeftOffset, GetRightOffset and GetSourceStart/EndFrame, but NO matching setters. A clip cannot be trimmed, slipped, slid, rolled, moved to another time/track, or have its duration changed once it is on the timeline. Verified via dir() on Resolve 21.0.0 (getters only).
|
|
92
|
+
- **Workaround / current handling:** Do edit-point adjustments in the Resolve UI, or rebuild the timeline from MediaPool.AppendToTimeline clipInfos with the desired startFrame/endFrame/recordFrame.
|
|
93
|
+
- **Tags:** missing-method, timeline, edit, trim
|
|
94
|
+
|
|
95
|
+
### Razor / blade / split a timeline item
|
|
96
|
+
|
|
97
|
+
- **Object:** `Timeline / TimelineItem`
|
|
98
|
+
- **Behavior:** There is no method to split/cut/blade a clip at a given frame. Verified absent on Timeline and TimelineItem (dir(), 21.0.0).
|
|
99
|
+
- **Workaround / current handling:** Split in the Resolve UI, or construct the cut up-front by appending two clipInfos with the desired in/out points.
|
|
100
|
+
- **Tags:** missing-method, timeline, edit
|
|
101
|
+
|
|
102
|
+
### Clip speed / retime ratio and speed ramps
|
|
103
|
+
|
|
104
|
+
- **Object:** `TimelineItem`
|
|
105
|
+
- **Behavior:** SetProperty exposes only retime *quality* (RetimeProcess, MotionEstimation) and transform/crop/composite/opacity keys — not the speed value itself. There is no way to set a clip to a given % speed, reverse it, or author a speed ramp. Verified against the documented SetProperty key list AND by live mutating attempt on 21.0.0: SetProperty('Speed'|'PlaybackSpeed'|'RetimeSpeed'|'ClipSpeed', 50) all return False, while SetProperty('RetimeProcess', 1) returns True.
|
|
106
|
+
- **Workaround / current handling:** Set clip speed/retime in the Resolve UI; no scripted equivalent exists.
|
|
107
|
+
- **Tags:** missing-method, timeline, retime, speed
|
|
108
|
+
|
|
109
|
+
### Color node graph editing and primary grade values
|
|
110
|
+
|
|
111
|
+
- **Object:** `Graph / TimelineItem`
|
|
112
|
+
- **Behavior:** The Graph object exposes node enable/label/count, LUT get/set, cache mode, ResetAllGrades, ApplyGradeFromDRX and ApplyArriCdlLut; TimelineItem adds SetCDL, CopyGrades and color versions. But you cannot add, delete, or connect nodes, and you cannot read or write primary grade values (lift/gamma/gain/offset/contrast/curves/qualifiers/power windows). Grading is limited to CDL, whole-grade DRX/LUT application and copying.
|
|
113
|
+
- **Workaround / current handling:** Build node trees and dial grades in the Resolve UI or via DRX/CDL/LUT import; per-parameter grade control is not scriptable.
|
|
114
|
+
- **Tags:** missing-method, color, grade, node
|
|
115
|
+
|
|
116
|
+
### Fairlight audio levels / pan / EQ / automation / FairlightFX
|
|
117
|
+
|
|
118
|
+
- **Object:** `TimelineItem / Timeline`
|
|
119
|
+
- **Behavior:** There is no API to set clip or track volume, pan, EQ, audio automation, or to add/configure FairlightFX. SetProperty covers video transform only; the audio surface is read-only (GetSourceAudioChannelMapping, GetAudioMapping, voice isolation). Verified via dir() + SetProperty docs AND by live mutating attempt on 21.0.0: SetProperty('Volume'|'Level'|'Gain'|'AudioVolume', 0) all return False (note 'Pan' is the VIDEO transform key, not audio pan, so it misleadingly succeeds).
|
|
120
|
+
- **Workaround / current handling:** Mix in the Fairlight UI; only voice-isolation state and channel-mapping reads are scriptable.
|
|
121
|
+
- **Tags:** missing-method, audio, fairlight
|
|
122
|
+
|
|
123
|
+
### Proxy / optimized-media generation
|
|
124
|
+
|
|
125
|
+
- **Object:** `MediaPoolItem`
|
|
126
|
+
- **Behavior:** Only LinkProxyMedia, UnlinkProxyMedia and LinkFullResolutionMedia exist (attach/detach EXISTING proxies). There is no method to generate proxies or optimized media. Verified via MediaPoolItem dir() (21.0.0).
|
|
127
|
+
- **Workaround / current handling:** Trigger proxy/optimized-media generation from the Resolve UI; scripting can only link/unlink already-rendered proxies.
|
|
128
|
+
- **Tags:** missing-method, media-pool, proxy
|
|
129
|
+
|
|
130
|
+
### Insert / Overwrite / Replace / Fit-to-Fill edit modes
|
|
131
|
+
|
|
132
|
+
- **Object:** `MediaPool / Timeline`
|
|
133
|
+
- **Behavior:** MediaPool.AppendToTimeline (with optional recordFrame positioning) is the only programmatic placement. The standard edit modes — insert (ripple), overwrite, replace, fit-to-fill, place-on-top — have no API. Verified via dir() (21.0.0).
|
|
134
|
+
- **Workaround / current handling:** Position clips with AppendToTimeline clipInfo recordFrame, or perform insert/overwrite/replace edits in the Resolve UI.
|
|
135
|
+
- **Tags:** missing-method, timeline, edit
|
|
136
|
+
|
|
137
|
+
### Smart Bins / Power Bins creation
|
|
138
|
+
|
|
139
|
+
- **Object:** `MediaPool`
|
|
140
|
+
- **Behavior:** Only AddSubFolder (a regular bin) exists. Smart Bins (rule-based) and Power Bins (cross-project) cannot be created or configured. Verified via MediaPool dir() (21.0.0).
|
|
141
|
+
- **Workaround / current handling:** Create Smart/Power Bins in the Resolve UI; only regular bins are scriptable.
|
|
142
|
+
- **Tags:** missing-method, media-pool, bins
|
|
143
|
+
|
|
70
144
|
## Bugs / Unreliable Behavior (please fix)
|
|
71
145
|
|
|
72
146
|
Methods that exist but misbehave — silent failures, unreliable return
|
|
@@ -139,3 +213,10 @@ values, or automation-hostile modal prompts.
|
|
|
139
213
|
- **Behavior:** Returns None and pops a modal 'Save Current Project' dialog when the current unsaved/Untitled project blocks the switch. SaveProject() on an Untitled project re-triggers the same modal.
|
|
140
214
|
- **Workaround / current handling:** CloseProject(current) to discard the untitled project without a prompt, then CreateProject; restore with LoadProject afterward.
|
|
141
215
|
- **Tags:** project, modal, silent-failure
|
|
216
|
+
|
|
217
|
+
### hasattr() / getattr() on Resolve API objects (attribute fabrication)
|
|
218
|
+
|
|
219
|
+
- **Object:** `(all Resolve scripting objects)`
|
|
220
|
+
- **Behavior:** The Python bridge returns a callable for ANY attribute name, so hasattr(obj, 'TotallyMadeUpMethod') is always True and getattr never raises. This makes capability detection by hasattr impossible — verified on 21.0.0 (hasattr reported SetStart, Razor, AddNode, GenerateProxy, AddSmartBin etc. as present though none exist). Only dir() lists the real methods.
|
|
221
|
+
- **Workaround / current handling:** Never probe method existence with hasattr/getattr; test membership against dir(obj) instead. Calling a fabricated method typically returns None/False with no error.
|
|
222
|
+
- **Tags:** bridge, introspection, silent-failure
|
package/install.py
CHANGED
|
@@ -35,7 +35,7 @@ from src.utils.update_check import (
|
|
|
35
35
|
|
|
36
36
|
# ─── Version ──────────────────────────────────────────────────────────────────
|
|
37
37
|
|
|
38
|
-
VERSION = "2.57.
|
|
38
|
+
VERSION = "2.57.4"
|
|
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
|
@@ -82,6 +82,24 @@ def render() -> str:
|
|
|
82
82
|
"(`resolve_control api_truth \"<query>\"`); this document is generated from",
|
|
83
83
|
"it and stays in sync via a drift guard.",
|
|
84
84
|
"",
|
|
85
|
+
"### Scope & completeness",
|
|
86
|
+
"",
|
|
87
|
+
"This list is **not guaranteed exhaustive.** It combines (a) issues hit",
|
|
88
|
+
"while building this MCP server, (b) a `dir()` surface audit of the live",
|
|
89
|
+
"Resolve API objects (ProjectManager, Project, MediaPool, MediaPoolItem,",
|
|
90
|
+
"Timeline, TimelineItem, Graph) diffed against Resolve's UI feature set,",
|
|
91
|
+
"and (c) a live mutating harness (`tests/live_api_gap_verification.py`)",
|
|
92
|
+
"that attempts each operation against a disposable project built from",
|
|
93
|
+
"synthetic media and confirms it fails while a related control succeeds.",
|
|
94
|
+
"That catches absent methods and documented constraints, but not subtler",
|
|
95
|
+
"issues: parameters that exist yet misbehave, version-specific regressions,",
|
|
96
|
+
"or capabilities we simply never exercised. New findings are added as",
|
|
97
|
+
"`submit`-tagged `api_truth` entries and this document is regenerated.",
|
|
98
|
+
"",
|
|
99
|
+
"Note: `hasattr()`/`getattr()` cannot be used to probe this API — the",
|
|
100
|
+
"Python bridge fabricates a callable for any attribute name (see the",
|
|
101
|
+
"`hasattr` bug below). Method existence here was checked with `dir()`.",
|
|
102
|
+
"",
|
|
85
103
|
"## Missing Capabilities (please add)",
|
|
86
104
|
"",
|
|
87
105
|
"Functionality that exists in the Resolve UI but has no scripting API",
|
package/src/granular/common.py
CHANGED
|
@@ -80,7 +80,7 @@ if not logging.getLogger().handlers:
|
|
|
80
80
|
handlers=[logging.StreamHandler()],
|
|
81
81
|
)
|
|
82
82
|
|
|
83
|
-
VERSION = "2.57.
|
|
83
|
+
VERSION = "2.57.4"
|
|
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()}")
|
package/src/server.py
CHANGED
package/src/utils/api_truth.py
CHANGED
|
@@ -258,6 +258,129 @@ API_TRUTH: List[Dict[str, Any]] = [
|
|
|
258
258
|
"tags": ["missing-method", "project", "cloud"],
|
|
259
259
|
"submit": "missing",
|
|
260
260
|
},
|
|
261
|
+
{
|
|
262
|
+
"symbol": "TimelineItem trim / move / re-time (no position setters)",
|
|
263
|
+
"object": "TimelineItem",
|
|
264
|
+
"reality": "TimelineItem exposes GetStart, GetEnd, GetDuration, "
|
|
265
|
+
"GetLeftOffset, GetRightOffset and GetSourceStart/EndFrame, but "
|
|
266
|
+
"NO matching setters. A clip cannot be trimmed, slipped, slid, "
|
|
267
|
+
"rolled, moved to another time/track, or have its duration "
|
|
268
|
+
"changed once it is on the timeline. Verified via dir() on "
|
|
269
|
+
"Resolve 21.0.0 (getters only).",
|
|
270
|
+
"recommended": "Do edit-point adjustments in the Resolve UI, or rebuild the "
|
|
271
|
+
"timeline from MediaPool.AppendToTimeline clipInfos with the "
|
|
272
|
+
"desired startFrame/endFrame/recordFrame.",
|
|
273
|
+
"tags": ["missing-method", "timeline", "edit", "trim"],
|
|
274
|
+
"submit": "missing",
|
|
275
|
+
},
|
|
276
|
+
{
|
|
277
|
+
"symbol": "Razor / blade / split a timeline item",
|
|
278
|
+
"object": "Timeline / TimelineItem",
|
|
279
|
+
"reality": "There is no method to split/cut/blade a clip at a given frame. "
|
|
280
|
+
"Verified absent on Timeline and TimelineItem (dir(), 21.0.0).",
|
|
281
|
+
"recommended": "Split in the Resolve UI, or construct the cut up-front by "
|
|
282
|
+
"appending two clipInfos with the desired in/out points.",
|
|
283
|
+
"tags": ["missing-method", "timeline", "edit"],
|
|
284
|
+
"submit": "missing",
|
|
285
|
+
},
|
|
286
|
+
{
|
|
287
|
+
"symbol": "Clip speed / retime ratio and speed ramps",
|
|
288
|
+
"object": "TimelineItem",
|
|
289
|
+
"reality": "SetProperty exposes only retime *quality* (RetimeProcess, "
|
|
290
|
+
"MotionEstimation) and transform/crop/composite/opacity keys — "
|
|
291
|
+
"not the speed value itself. There is no way to set a clip to a "
|
|
292
|
+
"given % speed, reverse it, or author a speed ramp. Verified "
|
|
293
|
+
"against the documented SetProperty key list AND by live "
|
|
294
|
+
"mutating attempt on 21.0.0: SetProperty('Speed'|'PlaybackSpeed'"
|
|
295
|
+
"|'RetimeSpeed'|'ClipSpeed', 50) all return False, while "
|
|
296
|
+
"SetProperty('RetimeProcess', 1) returns True.",
|
|
297
|
+
"recommended": "Set clip speed/retime in the Resolve UI; no scripted "
|
|
298
|
+
"equivalent exists.",
|
|
299
|
+
"tags": ["missing-method", "timeline", "retime", "speed"],
|
|
300
|
+
"submit": "missing",
|
|
301
|
+
},
|
|
302
|
+
{
|
|
303
|
+
"symbol": "Color node graph editing and primary grade values",
|
|
304
|
+
"object": "Graph / TimelineItem",
|
|
305
|
+
"reality": "The Graph object exposes node enable/label/count, LUT get/set, "
|
|
306
|
+
"cache mode, ResetAllGrades, ApplyGradeFromDRX and "
|
|
307
|
+
"ApplyArriCdlLut; TimelineItem adds SetCDL, CopyGrades and color "
|
|
308
|
+
"versions. But you cannot add, delete, or connect nodes, and you "
|
|
309
|
+
"cannot read or write primary grade values (lift/gamma/gain/"
|
|
310
|
+
"offset/contrast/curves/qualifiers/power windows). Grading is "
|
|
311
|
+
"limited to CDL, whole-grade DRX/LUT application and copying.",
|
|
312
|
+
"recommended": "Build node trees and dial grades in the Resolve UI or via "
|
|
313
|
+
"DRX/CDL/LUT import; per-parameter grade control is not "
|
|
314
|
+
"scriptable.",
|
|
315
|
+
"tags": ["missing-method", "color", "grade", "node"],
|
|
316
|
+
"submit": "missing",
|
|
317
|
+
},
|
|
318
|
+
{
|
|
319
|
+
"symbol": "Fairlight audio levels / pan / EQ / automation / FairlightFX",
|
|
320
|
+
"object": "TimelineItem / Timeline",
|
|
321
|
+
"reality": "There is no API to set clip or track volume, pan, EQ, audio "
|
|
322
|
+
"automation, or to add/configure FairlightFX. SetProperty covers "
|
|
323
|
+
"video transform only; the audio surface is read-only "
|
|
324
|
+
"(GetSourceAudioChannelMapping, GetAudioMapping, voice "
|
|
325
|
+
"isolation). Verified via dir() + SetProperty docs AND by live "
|
|
326
|
+
"mutating attempt on 21.0.0: SetProperty('Volume'|'Level'|'Gain'"
|
|
327
|
+
"|'AudioVolume', 0) all return False (note 'Pan' is the VIDEO "
|
|
328
|
+
"transform key, not audio pan, so it misleadingly succeeds).",
|
|
329
|
+
"recommended": "Mix in the Fairlight UI; only voice-isolation state and "
|
|
330
|
+
"channel-mapping reads are scriptable.",
|
|
331
|
+
"tags": ["missing-method", "audio", "fairlight"],
|
|
332
|
+
"submit": "missing",
|
|
333
|
+
},
|
|
334
|
+
{
|
|
335
|
+
"symbol": "Proxy / optimized-media generation",
|
|
336
|
+
"object": "MediaPoolItem",
|
|
337
|
+
"reality": "Only LinkProxyMedia, UnlinkProxyMedia and "
|
|
338
|
+
"LinkFullResolutionMedia exist (attach/detach EXISTING proxies). "
|
|
339
|
+
"There is no method to generate proxies or optimized media. "
|
|
340
|
+
"Verified via MediaPoolItem dir() (21.0.0).",
|
|
341
|
+
"recommended": "Trigger proxy/optimized-media generation from the Resolve "
|
|
342
|
+
"UI; scripting can only link/unlink already-rendered proxies.",
|
|
343
|
+
"tags": ["missing-method", "media-pool", "proxy"],
|
|
344
|
+
"submit": "missing",
|
|
345
|
+
},
|
|
346
|
+
{
|
|
347
|
+
"symbol": "Insert / Overwrite / Replace / Fit-to-Fill edit modes",
|
|
348
|
+
"object": "MediaPool / Timeline",
|
|
349
|
+
"reality": "MediaPool.AppendToTimeline (with optional recordFrame "
|
|
350
|
+
"positioning) is the only programmatic placement. The standard "
|
|
351
|
+
"edit modes — insert (ripple), overwrite, replace, fit-to-fill, "
|
|
352
|
+
"place-on-top — have no API. Verified via dir() (21.0.0).",
|
|
353
|
+
"recommended": "Position clips with AppendToTimeline clipInfo recordFrame, "
|
|
354
|
+
"or perform insert/overwrite/replace edits in the Resolve UI.",
|
|
355
|
+
"tags": ["missing-method", "timeline", "edit"],
|
|
356
|
+
"submit": "missing",
|
|
357
|
+
},
|
|
358
|
+
{
|
|
359
|
+
"symbol": "Smart Bins / Power Bins creation",
|
|
360
|
+
"object": "MediaPool",
|
|
361
|
+
"reality": "Only AddSubFolder (a regular bin) exists. Smart Bins (rule-"
|
|
362
|
+
"based) and Power Bins (cross-project) cannot be created or "
|
|
363
|
+
"configured. Verified via MediaPool dir() (21.0.0).",
|
|
364
|
+
"recommended": "Create Smart/Power Bins in the Resolve UI; only regular "
|
|
365
|
+
"bins are scriptable.",
|
|
366
|
+
"tags": ["missing-method", "media-pool", "bins"],
|
|
367
|
+
"submit": "missing",
|
|
368
|
+
},
|
|
369
|
+
{
|
|
370
|
+
"symbol": "hasattr() / getattr() on Resolve API objects (attribute fabrication)",
|
|
371
|
+
"object": "(all Resolve scripting objects)",
|
|
372
|
+
"reality": "The Python bridge returns a callable for ANY attribute name, so "
|
|
373
|
+
"hasattr(obj, 'TotallyMadeUpMethod') is always True and getattr "
|
|
374
|
+
"never raises. This makes capability detection by hasattr "
|
|
375
|
+
"impossible — verified on 21.0.0 (hasattr reported SetStart, "
|
|
376
|
+
"Razor, AddNode, GenerateProxy, AddSmartBin etc. as present "
|
|
377
|
+
"though none exist). Only dir() lists the real methods.",
|
|
378
|
+
"recommended": "Never probe method existence with hasattr/getattr; test "
|
|
379
|
+
"membership against dir(obj) instead. Calling a fabricated "
|
|
380
|
+
"method typically returns None/False with no error.",
|
|
381
|
+
"tags": ["bridge", "introspection", "silent-failure"],
|
|
382
|
+
"submit": "bug",
|
|
383
|
+
},
|
|
261
384
|
{
|
|
262
385
|
"symbol": "subprocess inheriting stdin under the MCP stdio server",
|
|
263
386
|
"object": "(server runtime)",
|