davinci-resolve-mcp 2.71.0 → 2.72.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 +93 -0
- package/README.md +6 -6
- package/docs/SKILL.md +14 -1
- package/docs/contributing.md +2 -1
- package/docs/reference/api-coverage.md +28 -8
- package/docs/reference/api-limitations.md +59 -4
- package/docs/reference/resolve_scripting_api.txt +116 -10
- package/install.py +1 -1
- package/package.json +1 -1
- package/src/granular/common.py +1 -1
- package/src/server.py +175 -41
- package/src/utils/api_truth.py +210 -10
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,99 @@
|
|
|
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.72.0
|
|
6
|
+
|
|
7
|
+
Resolve 21's AI methods report a missing Extras pack as an error *string*, not
|
|
8
|
+
the documented bool — and a non-empty string is truthy. Live-validated against
|
|
9
|
+
Studio 21.0.2.4 by @AghisSs in #107.
|
|
10
|
+
|
|
11
|
+
### The trap
|
|
12
|
+
|
|
13
|
+
The methods do not agree on how they refuse. With only AI Motion Deblur
|
|
14
|
+
installed:
|
|
15
|
+
|
|
16
|
+
| Method | Return when the pack is absent |
|
|
17
|
+
|---|---|
|
|
18
|
+
| `AnalyzeForSlate` | `False` |
|
|
19
|
+
| `AnalyzeForIntellisearch` | `"Required package 'AI Intellisearch - Faster' is not installed."` |
|
|
20
|
+
| `GenerateSpeech` | `"Required Package, 'AI Speech Generator' is not Installed."` |
|
|
21
|
+
|
|
22
|
+
So `bool(result)` reported **success for analysis that never ran** across eight
|
|
23
|
+
call sites, and `generate_speech` let the string past its guard into
|
|
24
|
+
`.GetName()`, raising `AttributeError: 'str' object has no attribute 'GetName'`.
|
|
25
|
+
|
|
26
|
+
`_ai_result` / `_ai_result_payload` now treat any string as a failure and
|
|
27
|
+
surface its text as the error. That message is the only machine-readable signal
|
|
28
|
+
that a pack is missing, since nothing in the scripting API enumerates installed
|
|
29
|
+
Extras.
|
|
30
|
+
|
|
31
|
+
`remove_motion_blur` is routed through the same helper. It needs the AI Motion
|
|
32
|
+
Deblur Extra like its siblings and reproduced *both* failures — the
|
|
33
|
+
`AttributeError` on the clip path, and a silent `success: true` with
|
|
34
|
+
`created: []` in the confirm-gated folder path that renders new media. Both were
|
|
35
|
+
live-tested with the Extra installed, so the absent-pack return was never
|
|
36
|
+
observable.
|
|
37
|
+
|
|
38
|
+
### Also
|
|
39
|
+
|
|
40
|
+
- `project_settings("reset_intellisearch_analysis")` — documented in the 21.0.2
|
|
41
|
+
scripting README and present in `dir(project)`, but absent from the copy the
|
|
42
|
+
repo bundled, so it was never wrapped.
|
|
43
|
+
- A live validation harness for the Resolve 21 delta, source-safe: synthetic
|
|
44
|
+
media in a temp dir, disposable project, teardown that restores the
|
|
45
|
+
originally-open project.
|
|
46
|
+
- `api_truth` entries for the string-return bug, the undiscoverable Extras gap,
|
|
47
|
+
and `AnalyzeForSlate`'s documented `resolve.MARKER_*` constants, which do not
|
|
48
|
+
exist on the handle at all.
|
|
49
|
+
- The `hasattr` attribute-fabrication entry is scoped as **unresolved**. The
|
|
50
|
+
21.0.2.4 control probe used an invented name, while the 21.0.0 evidence it
|
|
51
|
+
overturns used real method names borrowed from other object types — so it does
|
|
52
|
+
not refute the original record. `_has_method` is what every `_requires_method`
|
|
53
|
+
version gate is built on, and a gate that silently passes is the failure this
|
|
54
|
+
ledger exists to prevent.
|
|
55
|
+
|
|
56
|
+
## What's New in v2.71.1
|
|
57
|
+
|
|
58
|
+
`Timeline.DeleteClips` can lie about whether it worked. #111 recorded four
|
|
59
|
+
behaviours from a live edit session; #114 mitigates the first of them. Both by
|
|
60
|
+
@billcarroll.
|
|
61
|
+
|
|
62
|
+
### DeleteClips readback-and-retry
|
|
63
|
+
|
|
64
|
+
`Timeline.DeleteClips` can return `False` on a first call even when every item
|
|
65
|
+
passed is a valid, present `TimelineItem`, with an identical retry succeeding.
|
|
66
|
+
`_timeline_delete_clips_verified` reads the tracks back on a `False` and retries
|
|
67
|
+
once if the items are still there. All four timeline call sites route through
|
|
68
|
+
it: the `delete_clips` action, `lift_range`, `duplicate_clips` and `copy_range`.
|
|
69
|
+
|
|
70
|
+
The readback is deliberately **tri-state**. A walk that raised, enumerated no
|
|
71
|
+
track at all, or covered items whose unique ID cannot be read is `unknown`, not
|
|
72
|
+
`absent` — so an unverifiable delete is never reported as success, and never
|
|
73
|
+
spends a second destructive call buying information it cannot read. An earlier
|
|
74
|
+
draft collapsed unknown into absent, which turned a failed delete into a
|
|
75
|
+
reported success; that is the exact silent-lie class this series exists to
|
|
76
|
+
remove, so it is worth naming.
|
|
77
|
+
|
|
78
|
+
The `ripple=True` non-idempotence of a retry is recorded in the docstring rather
|
|
79
|
+
than claimed to be solved: if the first call deleted some items and left others,
|
|
80
|
+
the retry passes the original list back in, stale handles included. It could not
|
|
81
|
+
be made to misbehave against a fake.
|
|
82
|
+
|
|
83
|
+
### Four edit-session behaviours recorded
|
|
84
|
+
|
|
85
|
+
- **`DeleteClips` flaky first attempt.** The entry states plainly that the cause
|
|
86
|
+
is **unknown**, and specifically that this is *not* the
|
|
87
|
+
`ProjectManager.DeleteProject` shape — that one has an identified mechanism
|
|
88
|
+
which retrying does not clear, whereas a single retry cleared this in the one
|
|
89
|
+
instance seen. One observation is not a mechanism.
|
|
90
|
+
- **`DeleteClips` leaves linked audio.** The API deletes exactly the items
|
|
91
|
+
passed; the UI's linked-selection behaviour does not apply, so orphaned audio
|
|
92
|
+
collides with later appends.
|
|
93
|
+
- **`AppendToTimeline` mixed-fps duration floor.** Source-to-timeline frame
|
|
94
|
+
conversion rounds down, landing a planned range one frame short.
|
|
95
|
+
- **`ImportMedia` current-folder only.** No destination parameter; imports land
|
|
96
|
+
in the current bin.
|
|
97
|
+
|
|
5
98
|
## What's New in v2.71.0
|
|
6
99
|
|
|
7
100
|
Keyed metadata getters honor a list of keys, and `delete_timelines` names the
|
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)
|
|
@@ -252,10 +252,10 @@ The default server is a local stdio process launched by your MCP client; it does
|
|
|
252
252
|
| MCP Tools | **34** compound / **341** granular (live server) |
|
|
253
253
|
| Advanced (offline) tools | **18** — .drp/.drt/.drx + DB authoring, no Resolve running |
|
|
254
254
|
| Kernel Actions | **136** guarded workflow actions across 9 compound tools |
|
|
255
|
-
| API Methods Covered | **
|
|
256
|
-
| Methods Live Tested | **
|
|
257
|
-
| Live Test Pass Rate | **
|
|
258
|
-
| Tested Against | DaVinci Resolve 19.1.3 Studio + Resolve 20.3.2 Studio |
|
|
255
|
+
| API Methods Covered | **337/337** (100%) |
|
|
256
|
+
| Methods Live Tested | **332/337** (98.5%) |
|
|
257
|
+
| Live Test Pass Rate | **332/332** (100%) |
|
|
258
|
+
| Tested Against | DaVinci Resolve 19.1.3 Studio + Resolve 20.3.2 Studio + Resolve 21.0.2 Studio |
|
|
259
259
|
|
|
260
260
|
For method-by-method status, see [API Coverage and Test Results](docs/reference/api-coverage.md). For current workflow support, see [Kernel Action Coverage](docs/kernels/README.md).
|
|
261
261
|
|
|
@@ -289,7 +289,7 @@ Extension authoring references live in [docs/authoring](docs/authoring/). Resolv
|
|
|
289
289
|
preference has no effect — use the [in-app bridge](#free-edition-in-app-bridge)
|
|
290
290
|
instead.
|
|
291
291
|
|
|
292
|
-
Resolve 19.1.3 remains the compatibility baseline. Resolve 20.x scripting calls are additive, version-guarded, and live-tested on 20.3.2. Resolve 21.0 scripting additions (audio classification, speaker-detection transcription, IntelliSearch, slate analysis, motion-deblur, speech generation, session background-task control) are exposed behind runtime capability detection, so they stay inert on older builds and activate automatically on Resolve 21+.
|
|
292
|
+
Resolve 19.1.3 remains the compatibility baseline. Resolve 20.x scripting calls are additive, version-guarded, and live-tested on 20.3.2. Resolve 21.0 scripting additions (audio classification, speaker-detection transcription, IntelliSearch, slate analysis, motion-deblur, speech generation, session background-task control) are exposed behind runtime capability detection, so they stay inert on older builds and activate automatically on Resolve 21+. They are live-tested on Studio 21.0.2.4 — see the [Resolve 21 delta](docs/reference/api-coverage.md#resolve-21-delta-detail). Note that `AnalyzeForIntellisearch`, `AnalyzeForSlate` and `GenerateSpeech` each require a separately-downloaded AI Extras pack, and Resolve reports a missing pack inconsistently (some return `False`, others an error string), so these actions report `success: false` with the Resolve-supplied reason rather than guessing.
|
|
293
293
|
|
|
294
294
|
## Development
|
|
295
295
|
|
package/docs/SKILL.md
CHANGED
|
@@ -1307,7 +1307,12 @@ Key actions:
|
|
|
1307
1307
|
instead of walking tracks by hand. Filters may be passed inline or as a
|
|
1308
1308
|
`filters` dict; a mistyped filter name is rejected rather than silently
|
|
1309
1309
|
matching everything. Returns `{clips, match_count, total_clips}`.
|
|
1310
|
-
- `delete_clips(clip_ids, ripple?)` — IDs are unique IDs from `get_items
|
|
1310
|
+
- `delete_clips(clip_ids, ripple?)` — IDs are unique IDs from `get_items`.
|
|
1311
|
+
Two verified quirks (see `api_truth`): the call can return `success: false`
|
|
1312
|
+
on the first attempt with valid IDs — re-list and retry once before failing;
|
|
1313
|
+
and deleting a video item does NOT delete its linked audio — pass the linked
|
|
1314
|
+
audio item IDs explicitly, then `detect_gaps_overlaps` across both track
|
|
1315
|
+
types.
|
|
1311
1316
|
- `duplicate_clips(clip_ids?, selected?, target_track_index?, track_offset?, placement?, record_frame?, record_frame_offset?, copy_properties?, include_linked?)` —
|
|
1312
1317
|
duplicate existing video timeline items by re-appending the same Media Pool
|
|
1313
1318
|
item with the same source trim; `selected=True` uses Resolve's selected/current
|
|
@@ -1723,6 +1728,14 @@ media_pool(action="append_to_timeline", params={"clip_infos": [
|
|
|
1723
1728
|
]})
|
|
1724
1729
|
```
|
|
1725
1730
|
|
|
1731
|
+
Mixed-fps caution: `start_frame`/`end_frame` are SOURCE frames, and a source
|
|
1732
|
+
whose fps differs from the timeline's rounds DOWN on conversion — a 24.0 or
|
|
1733
|
+
29.97 clip appended into a 23.976 timeline can land one frame short of its
|
|
1734
|
+
slot. Plan durations in timeline frames, extend `end_frame` by a source frame
|
|
1735
|
+
when the floor misses, and finish with `detect_gaps_overlaps` (see
|
|
1736
|
+
`api_truth`). `import_media` always lands in the CURRENT bin — call
|
|
1737
|
+
`set_current_folder` first; there is no destination parameter.
|
|
1738
|
+
|
|
1726
1739
|
### 4. Inspect and annotate timeline items
|
|
1727
1740
|
|
|
1728
1741
|
```
|
package/docs/contributing.md
CHANGED
|
@@ -67,7 +67,8 @@ davinci-resolve-mcp/
|
|
|
67
67
|
│ ├── resolve_mcp_server.py # Thin full-server entrypoint — 341 tools
|
|
68
68
|
│ ├── granular/ # Modular full-server implementation
|
|
69
69
|
│ └── utils/ # Platform detection, Resolve connection helpers
|
|
70
|
-
├── tests/ #
|
|
70
|
+
├── tests/ # offline suite (test_*.py) + live harnesses (live_*.py):
|
|
71
|
+
│ # 5-phase live API suite + Resolve 20/21 deltas
|
|
71
72
|
├── docs/
|
|
72
73
|
│ ├── README.md # Documentation index
|
|
73
74
|
│ ├── SKILL.md # AI assistant operating reference
|
|
@@ -6,20 +6,20 @@ Complete Resolve scripting API coverage, live-test status, and method-by-method
|
|
|
6
6
|
|
|
7
7
|
| Metric | Value |
|
|
8
8
|
|--------|-------|
|
|
9
|
-
| MCP Tools | **
|
|
9
|
+
| MCP Tools | **34** compound (default) / **341** granular |
|
|
10
10
|
| Kernel Actions | **136** guarded MCP workflow actions across 9 compound tools |
|
|
11
|
-
| API Methods Covered | **
|
|
12
|
-
| Methods Live Tested | **
|
|
13
|
-
| Live Test Pass Rate | **
|
|
11
|
+
| API Methods Covered | **337/337** (100%) |
|
|
12
|
+
| Methods Live Tested | **332/337** (98.5%) |
|
|
13
|
+
| Live Test Pass Rate | **332/332** (100%) |
|
|
14
14
|
| API Object Classes | 13 |
|
|
15
|
-
| Tested Against | DaVinci Resolve 19.1.3 Studio + Resolve 20.3.2 Studio |
|
|
16
|
-
| Compatibility Note | Resolve 19.1.3 remains the compatibility baseline; Resolve 20.x scripting calls are additive, version-guarded, and live-tested on 20.3.2; Resolve 21
|
|
15
|
+
| Tested Against | DaVinci Resolve 19.1.3 Studio + Resolve 20.3.2 Studio + Resolve 21.0.2 Studio |
|
|
16
|
+
| Compatibility Note | Resolve 19.1.3 remains the compatibility baseline; Resolve 20.x scripting calls are additive, version-guarded, and live-tested on 20.3.2; Resolve 21.0 additions are version-guarded and live-tested on 21.0.2 (see the Resolve 21 delta row below — three of them need AI Extras packs and stay untested without one) |
|
|
17
17
|
|
|
18
18
|
## API Coverage
|
|
19
19
|
|
|
20
20
|
Every non-deprecated method in the DaVinci Resolve Scripting API is covered. The default compound server exposes **34 tools** that group related operations by action parameter, keeping LLM context windows lean. The full granular server provides **341 individual tools** for power users. Both modes cover all 13 API object classes. MCP-level kernel actions are tracked separately in [Kernel Action Coverage](../kernels/README.md).
|
|
21
21
|
|
|
22
|
-
The
|
|
22
|
+
The 34th compound tool is `timeline_versioning` (C6) — an MCP-level workflow
|
|
23
23
|
tool, not a wrapper around a Resolve API method. It surfaces the
|
|
24
24
|
version-on-mutate hook that auto-archives the working timeline before any
|
|
25
25
|
destructive op, plus rollback and brain-edit history. See [SKILL.md](../SKILL.md)
|
|
@@ -91,7 +91,27 @@ Baseline testing was performed against **DaVinci Resolve 19.1.3 Studio** on macO
|
|
|
91
91
|
| Phase 4 | 10/10 | 100% | AI/ML methods, Fusion clips, stereo, gallery stills |
|
|
92
92
|
| Phase 5 | 6/6 | 100% | Scene cuts, subtitles from audio, graph node cache/tools/enable |
|
|
93
93
|
| Resolve 20 delta | 12/12 | 100% | Resolve 20.0-20.2.2 scripting additions live-tested on 20.3.2 |
|
|
94
|
-
|
|
|
94
|
+
| Resolve 21 delta | 8/9 | 89% | Resolve 21.0 scripting additions live-tested on Studio 21.0.2.4 (`tests/live_resolve21_validation.py`) |
|
|
95
|
+
| **Total** | **339/340** | **99.7%** | **98.5% of current API methods tested live** |
|
|
96
|
+
|
|
97
|
+
#### Resolve 21 delta detail
|
|
98
|
+
|
|
99
|
+
Run on Studio 21.0.2.4, macOS/Apple Silicon, with **only the AI Motion Deblur
|
|
100
|
+
Extra installed**. Three of these methods require an Extras pack that was
|
|
101
|
+
absent, so their result says nothing about the wrapper — that is why they are
|
|
102
|
+
marked 🔬 rather than ⚠️.
|
|
103
|
+
|
|
104
|
+
| Method | Result | Evidence |
|
|
105
|
+
|--------|--------|----------|
|
|
106
|
+
| `MediaPoolItem/Folder.PerformAudioClassification` | ✅ | Returned True; `Category` clip property went `""` → `Dialogue` |
|
|
107
|
+
| `MediaPoolItem/Folder.ClearAudioClassification` | ✅ | Returned True; `Category` reset to `Uncategorized` (not `""`) |
|
|
108
|
+
| `MediaPoolItem/Folder.TranscribeAudio(useSpeakerDetection)` | ⚠️ | Parameter accepted; `True` and `False` produced identical transcripts on a two-voice clip |
|
|
109
|
+
| `MediaPoolItem/Folder.RemoveMotionBlur` | ✅ | Returned a MediaPoolItem; source media path unchanged |
|
|
110
|
+
| `Project.ResetIntellisearchAnalysis` | ✅ | Returned True — new in the 21.0.2 scripting doc, previously unwrapped |
|
|
111
|
+
| `MediaPoolItem/Folder.AnalyzeForIntellisearch` | 🔬 | Requires AI IntelliSearch; returned an error **string**, not False — see api-limitations |
|
|
112
|
+
| `MediaPoolItem/Folder.AnalyzeForSlate` | 🔬 | Requires AI Slate ID; returned False. Documented `resolve.MARKER_*` constants do not exist on the handle |
|
|
113
|
+
| `Project.GenerateSpeech` | 🔬 | Requires AI Speech Generator; returned an error **string**, not a MediaPoolItem |
|
|
114
|
+
| `Resolve.DisableBackgroundTasksForCurrentResolveSession` | 🔬 | Present in `dir()`; **not executed** — session-wide, returns None, and has no `Enable...` counterpart, so there is no undo short of restarting Resolve |
|
|
95
115
|
|
|
96
116
|
### Untested Methods (5 of 336)
|
|
97
117
|
|
|
@@ -10,9 +10,9 @@ submission to Blackmagic Design's developer feedback. Every item was
|
|
|
10
10
|
observed against live Resolve; each entry notes the current workaround (or
|
|
11
11
|
that none exists).
|
|
12
12
|
|
|
13
|
-
**Verified on:** DaVinci Resolve Studio 21.0.
|
|
13
|
+
**Verified on:** DaVinci Resolve Studio 21.0.2
|
|
14
14
|
|
|
15
|
-
**Totals:**
|
|
15
|
+
**Totals:** 25 missing capabilities, 24 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
|
|
@@ -192,6 +192,29 @@ equivalent, blocking full automation.
|
|
|
192
192
|
- **Workaround / current handling:** Delete and recreate the folder with the desired name, or rename in the Resolve UI.
|
|
193
193
|
- **Tags:** missing-method, media-pool, folder
|
|
194
194
|
|
|
195
|
+
### Installed AI Extras packs are not discoverable from scripting
|
|
196
|
+
|
|
197
|
+
- **Object:** `Resolve`
|
|
198
|
+
- **Behavior:** AnalyzeForIntellisearch, AnalyzeForSlate, GenerateSpeech and RemoveMotionBlur each require a separately-downloaded Extras pack, but nothing in the scripting API reports which packs are installed. A caller cannot distinguish 'the Extra is missing' from 'the analysis ran and found nothing' ahead of time; on 21.0.2.4 two of the four leak the reason only as free text in the return value, and AnalyzeForSlate's bare False carries no reason at all.
|
|
199
|
+
- **Workaround / current handling:** Until an API exists, treat a string return as the reason and read the pack names out of the Extras directory (Blackmagic Design/DaVinci Resolve/Extras/*/log.dpl1) for diagnostics only — that path is undocumented and may change.
|
|
200
|
+
- **Tags:** ai, extras, introspection, resolve-21
|
|
201
|
+
|
|
202
|
+
### Resolve.DisableBackgroundTasksForCurrentResolveSession
|
|
203
|
+
|
|
204
|
+
- **Object:** `Resolve`
|
|
205
|
+
- **Signature:** `() -> None`
|
|
206
|
+
- **Behavior:** Returns None, so a caller cannot tell whether it took effect, and there is no Enable... counterpart anywhere in the shipped 21.0.2 scripting README — the only documented way back is restarting Resolve. The scope is the whole session, so a script disables background tasks for every project open in that instance, not just its own. Present in dir(resolve) on Studio 21.0.2.4; deliberately not executed during validation for exactly that reason.
|
|
207
|
+
- **Workaround / current handling:** Treat as irreversible within a session. server returns _ok() unconditionally because there is nothing to check.
|
|
208
|
+
- **Tags:** resolve-21, unreliable-return, irreversible, session-wide
|
|
209
|
+
|
|
210
|
+
### MediaPool.ImportMedia (current-folder destination only)
|
|
211
|
+
|
|
212
|
+
- **Object:** `MediaPool`
|
|
213
|
+
- **Signature:** `([paths] | [clipInfos]) -> [MediaPoolItem]`
|
|
214
|
+
- **Behavior:** Imports always land in the CURRENT media pool folder; the call has no destination-folder parameter, and passing an unrecognized one to the MCP tool is silently ignored.
|
|
215
|
+
- **Workaround / current handling:** SetCurrentFolder to the target bin first (media_pool set_current_folder), import, then restore the previous current folder if it matters.
|
|
216
|
+
- **Tags:** media-pool, import
|
|
217
|
+
|
|
195
218
|
### Project.SetCurrentRenderFormatAndCodec
|
|
196
219
|
|
|
197
220
|
- **Object:** `Project`
|
|
@@ -314,10 +337,26 @@ values, or automation-hostile modal prompts.
|
|
|
314
337
|
### hasattr() / getattr() on Resolve API objects (attribute fabrication)
|
|
315
338
|
|
|
316
339
|
- **Object:** `(all Resolve scripting objects)`
|
|
317
|
-
- **Behavior:**
|
|
318
|
-
- **Workaround / current handling:**
|
|
340
|
+
- **Behavior:** UNRESOLVED — the two measurements do not test the same thing. On 21.0.0 the bridge was recorded as returning a callable for ANY attribute name, making capability detection by hasattr impossible; the evidence was REAL API method names borrowed from other object types (SetStart, Razor, AddNode, GenerateProxy, AddSmartBin reported present on objects that do not have them). A 21.0.2.4 control probe of the invented name 'TotallyMadeUpMethod_xyz123' returned getattr-callable False on all eight object types, matching dir() in every case. That does NOT refute the 21.0.0 record: if the bridge resolves any name known to the RemoteObject method table rather than literally any string, an invented name is correctly rejected on both builds and the probe never exercised the failing case. Re-running the probe with those five real names is what would settle it; until then, assume fabrication is possible.
|
|
341
|
+
- **Workaround / current handling:** Use dir(obj) membership for capability probes. It is correct on every build measured, and it is the only form not affected by whichever way this resolves. server._has_method uses hasattr/getattr and so may over-report on builds where fabrication is live — that is the case _requires_method gates guard, so it matters most exactly where it is least tested. Calling a fabricated method typically returns None/False with no error.
|
|
319
342
|
- **Tags:** bridge, introspection, silent-failure
|
|
320
343
|
|
|
344
|
+
### Resolve 21 AI methods (AnalyzeForIntellisearch, GenerateSpeech, AnalyzeForSlate) — inconsistent failure return type
|
|
345
|
+
|
|
346
|
+
- **Object:** `MediaPoolItem / Folder / Project`
|
|
347
|
+
- **Signature:** `-> Bool (documented)`
|
|
348
|
+
- **Behavior:** When the required Extras pack is not installed, these methods do not agree on how they say so, and the documented Bool is not what you get. Verified live on Studio 21.0.2.4 with only AI Motion Deblur installed: AnalyzeForSlate returned False, but AnalyzeForIntellisearch returned the STRING "Required package 'AI Intellisearch - Faster' is not installed." and GenerateSpeech returned the STRING "Required Package, 'AI Speech Generator' is not Installed.". A non-empty string is truthy in Python, so bool(result) reports SUCCESS for a call that definitively did not run, and treating GenerateSpeech's return as a MediaPoolItem raises AttributeError: 'str' object has no attribute 'GetName'.
|
|
349
|
+
- **Workaround / current handling:** Never bool() an AI-method return directly. Route it through server._ai_result / _ai_result_payload, which treat any string as a failure and surface its text as the error — the message is the only machine-readable signal that an Extras pack is missing, since there is no scripting API to enumerate installed Extras.
|
|
350
|
+
- **Tags:** ai, extras, unreliable-return, silent-failure, resolve-21
|
|
351
|
+
|
|
352
|
+
### Folder.AnalyzeForSlate / MediaPoolItem.AnalyzeForSlate markerColor
|
|
353
|
+
|
|
354
|
+
- **Object:** `MediaPoolItem / Folder`
|
|
355
|
+
- **Signature:** `(markerColor) -> Bool`
|
|
356
|
+
- **Behavior:** The shipped 21.0.2 scripting README says markerColor must be one of the resolve.MARKER_* constants (resolve.MARKER_BLUE etc.). Those constants do not exist: on Studio 21.0.2.4, [c for c in dir(resolve) if c.startswith('MARKER_')] is empty. There is therefore no documented-correct way to call this method. The plain colour string the server passes is the only option available, and it returns False here — though with AI Slate ID absent, a string-rejection bug cannot be distinguished from the missing pack on this machine.
|
|
357
|
+
- **Workaround / current handling:** Keep passing the plain colour name (server._MARKER_COLORS) — the documented constants are unavailable. Re-test on a machine with the AI Slate ID Extra installed before concluding the string form is rejected.
|
|
358
|
+
- **Tags:** ai, extras, missing-constant, documentation, resolve-21
|
|
359
|
+
|
|
321
360
|
### MediaPoolItem.SetClipProperty('Reel Name', ...)
|
|
322
361
|
|
|
323
362
|
- **Object:** `MediaPoolItem`
|
|
@@ -327,6 +366,22 @@ values, or automation-hostile modal prompts.
|
|
|
327
366
|
- **Reference:** [issue #77](https://github.com/samuelgursky/davinci-resolve-mcp/issues/77)
|
|
328
367
|
- **Tags:** unreliable-return, silent-failure, metadata, reel-name
|
|
329
368
|
|
|
369
|
+
### Timeline.DeleteClips (flaky first attempt)
|
|
370
|
+
|
|
371
|
+
- **Object:** `Timeline`
|
|
372
|
+
- **Signature:** `([TimelineItem], ripple) -> bool`
|
|
373
|
+
- **Behavior:** Can return False on the first call even when every item in the list is a valid, present TimelineItem; an identical immediate retry succeeds. Observed once, on Studio 21.0 during a cut-video edit session (items confirmed still present after the False, deleted cleanly on retry). Cause unknown — do NOT read this as the ProjectManager.DeleteProject shape: that one has an identified mechanism (the project being, or recently having been, current) that retrying does not clear, whereas a single retry cleared this in the one instance seen. One observation is not a mechanism; if a retry is ever seen to fail repeatedly here, this entry needs revisiting.
|
|
374
|
+
- **Workaround / current handling:** Treat a False return as advisory: re-list the track and check whether the items are actually gone; if still present, retry the identical call once before failing. A readback that raised, enumerated nothing, or covered items whose unique ID cannot be read is UNKNOWN, not gone — never report an unverifiable delete as success, and do not spend a second destructive call on an outcome you equally cannot read.
|
|
375
|
+
- **Tags:** unreliable-return, flaky, timeline, edit
|
|
376
|
+
|
|
377
|
+
### MediaPool.AppendToTimeline with mixed-fps sources (duration floor)
|
|
378
|
+
|
|
379
|
+
- **Object:** `MediaPool`
|
|
380
|
+
- **Signature:** `([{mediaPoolItem, startFrame, endFrame, recordFrame, ...}]) -> [TimelineItem]`
|
|
381
|
+
- **Behavior:** start/endFrame are in SOURCE frames. When the source fps differs from the timeline fps (e.g. 24.0 or 29.97 source in a 23.976 timeline), Resolve converts the source range to timeline frames by flooring — so a range planned to fill an exact record slot lands one frame short, leaving a 1-frame gap before the next clip.
|
|
382
|
+
- **Workaround / current handling:** Plan durations in timeline frames (floor(src_frames * timeline_fps / source_fps)); if the floored duration misses the slot, extend endFrame by a source frame and re-check. Always finish with detect_gaps_overlaps.
|
|
383
|
+
- **Tags:** timeline, edit, off-by-one, mixed-fps
|
|
384
|
+
|
|
330
385
|
### Graph.SetLUT (master-LUT-dir-only resolution)
|
|
331
386
|
|
|
332
387
|
- **Object:** `Graph`
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
Last Updated:
|
|
1
|
+
Last Updated: 26 May 2026
|
|
2
2
|
-------------------------
|
|
3
3
|
In this package, you will find a brief introduction to the Scripting API for DaVinci Resolve Studio. Apart from this README.txt file, this package contains folders containing the basic import
|
|
4
4
|
modules for scripting access (DaVinciResolve.py) and some representative examples.
|
|
@@ -86,8 +86,8 @@ Resolve
|
|
|
86
86
|
Fusion() --> Fusion # Returns the Fusion object. Starting point for Fusion scripts.
|
|
87
87
|
GetMediaStorage() --> MediaStorage # Returns the media storage object to query and act on media locations.
|
|
88
88
|
GetProjectManager() --> ProjectManager # Returns the project manager object for currently open database.
|
|
89
|
-
OpenPage(pageName) --> Bool # Switches to indicated page in DaVinci Resolve. Input can be one of ("media", "cut", "edit", "fusion", "color", "fairlight", "deliver").
|
|
90
|
-
GetCurrentPage() --> String # Returns the page currently displayed in the main window. Returned value can be one of ("media", "cut", "edit", "fusion", "color", "fairlight", "deliver", None).
|
|
89
|
+
OpenPage(pageName) --> Bool # Switches to indicated page in DaVinci Resolve. Input can be one of ("media", "photo", "cut", "edit", "fusion", "color", "fairlight", "deliver").
|
|
90
|
+
GetCurrentPage() --> String # Returns the page currently displayed in the main window. Returned value can be one of ("media", "photo", "cut", "edit", "fusion", "color", "fairlight", "deliver", None).
|
|
91
91
|
GetProductName() --> string # Returns product name.
|
|
92
92
|
GetVersion() --> [version fields] # Returns list of product version fields in [major, minor, patch, build, suffix] format.
|
|
93
93
|
GetVersionString() --> string # Returns product version in "major.minor.patch[suffix].build" format.
|
|
@@ -174,13 +174,13 @@ Project
|
|
|
174
174
|
SaveAsNewRenderPreset(presetName) --> Bool # Creates new render preset by given name if presetName(string) is unique.
|
|
175
175
|
DeleteRenderPreset(presetName) --> Bool # Delete render preset by provided name.
|
|
176
176
|
SetRenderSettings({settings}) --> Bool # Sets given settings for rendering. Settings is a dict, with support for the keys:
|
|
177
|
-
# Refer to "Looking up render settings"
|
|
177
|
+
# Refer to section "Looking up render settings" for information on supported settings
|
|
178
178
|
GetRenderJobStatus(jobId) --> {status info} # Returns a dict with job status and completion percentage of the job by given jobId (string).
|
|
179
179
|
GetQuickExportRenderPresets() --> [preset_name..] # Returns a list of Quick Export render presets by name
|
|
180
180
|
RenderWithQuickExport(preset_name, {param_dict})--> {status info} # Starts a quick export render for the current active timeline. preset_name from GetQuickExportRenderPresets list. param_dict supports render settings keys "TargetDir", "CustomName", "VideoQuality", and "EnableUpload".
|
|
181
181
|
# "EnableUpload" key enables direct upload for supported web presets.
|
|
182
182
|
# Returns a dict with job status and time taken to render, or an error string if render has failed or not attempted
|
|
183
|
-
# Refer to "Looking up Render Settings"
|
|
183
|
+
# Refer to section "Looking up Render Settings" for information on the above supported settings
|
|
184
184
|
GetSetting(settingName) --> string # Returns value of project setting (indicated by settingName, string). Check the section below for more information.
|
|
185
185
|
SetSetting(settingName, settingValue) --> Bool # Sets the project setting (indicated by settingName, string) to the value (settingValue, string). Check the section below for more information.
|
|
186
186
|
GetRenderFormats() --> {render formats..} # Returns a dict (format -> file extension) of available render formats.
|
|
@@ -200,7 +200,11 @@ Project
|
|
|
200
200
|
AddColorGroup(groupName) --> ColorGroup # Creates a new ColorGroup. groupName must be a unique string.
|
|
201
201
|
DeleteColorGroup(colorGroup) --> Bool # Deletes the given color group and sets clips to ungrouped.
|
|
202
202
|
ApplyFairlightPresetToCurrentTimeline(name) --> Bool # Apply Fairlight Preset of given name to the current timeline, returns True if successful, False otherwise.
|
|
203
|
+
ResetIntellisearchAnalysis() --> Bool # Clears Intellisearch analysis data. Returns True if successful.
|
|
204
|
+
# Refer to section "Studio and AI Scripting APIs" for prerequisites.
|
|
203
205
|
GenerateSpeech({speechGenerationSettings}, timecode) --> MediaPoolItem # Generates an audio MediaPoolItem based on the given speechGenerationSettings and adds it to the timeline at the stated timecode if "AddToTimeline" is True. Returns the newly generated MediaPoolItem.
|
|
206
|
+
# Refer to section "Speech Generation Settings" for information on supported settings
|
|
207
|
+
# Refer to section "Studio and AI Scripting APIs" for prerequisites.
|
|
204
208
|
|
|
205
209
|
MediaStorage
|
|
206
210
|
GetMountedVolumeList() --> [paths...] # Returns list of folder paths corresponding to mounted volumes displayed in Resolve’s Media Storage.
|
|
@@ -253,6 +257,7 @@ MediaPool
|
|
|
253
257
|
GetUniqueId() --> string # Returns a unique ID for the media pool
|
|
254
258
|
CreateStereoClip(LeftMediaPoolItem,
|
|
255
259
|
RightMediaPoolItem) --> MediaPoolItem # Takes in two existing media pool items and creates a new 3D stereoscopic media pool entry replacing the input media in the media pool.
|
|
260
|
+
# Refer to section "Studio and AI Scripting APIs" for prerequisites.
|
|
256
261
|
AutoSyncAudio([MediaPoolItems], {audioSyncSettings}) --> Bool # Syncs audio for specified [MediaPoolItems] (list). The list must contain a minimum of two MediaPoolItems - at least one video and one audio clip.
|
|
257
262
|
# Returns True if successful. Refer to 'Audio Sync Settings' section for details.
|
|
258
263
|
GetSelectedClips() --> [MediaPoolItems] # Returns the current selected MediaPoolItems
|
|
@@ -266,12 +271,22 @@ Folder
|
|
|
266
271
|
GetUniqueId() --> string # Returns a unique ID for the media pool folder
|
|
267
272
|
Export(filePath) --> bool # Returns true if export of DRB folder to filePath is successful, false otherwise
|
|
268
273
|
TranscribeAudio(useSpeakerDetection=None) --> Bool # Transcribes audio of the MediaPoolItems within the folder and nested folders. Returns True if successful; False otherwise
|
|
274
|
+
# Accepts an optional boolean argument to use speaker detection when transcribing. If no argument is specified, use the project's setting.
|
|
275
|
+
# Refer to section "Studio and AI Scripting APIs" for prerequisites.
|
|
269
276
|
ClearTranscription() --> Bool # Clears audio transcription of the MediaPoolItems within the folder and nested folders. Returns True if successful; False otherwise.
|
|
277
|
+
# Refer to section "Studio and AI Scripting APIs" for prerequisites.
|
|
270
278
|
PerformAudioClassification() --> Bool # Analyzes and classifies the audio of the MediaPoolItems within the folder and nested folders into categories and subcategories.
|
|
279
|
+
# Refer to section "Studio and AI Scripting APIs" for prerequisites.
|
|
271
280
|
ClearAudioClassification() --> Bool # Clears audio classification of the MediaPoolItems within the folder and nested folders.
|
|
281
|
+
# Refer to section "Studio and AI Scripting APIs" for prerequisites.
|
|
272
282
|
RemoveMotionBlur({deblurOption}) --> [[MediaPoolItem, MediaPoolItem]...] # Applies motion deblur on MediaPoolItems in the folder. Returns a list of pairs mapping original to newly created MediaPoolItems.
|
|
283
|
+
# Refer to section "Motion Deblur Settings" for information on supported settings
|
|
284
|
+
# Refer to section "Studio and AI Scripting APIs" for prerequisites.
|
|
273
285
|
AnalyzeForIntellisearch(identifyFaces, isBetterMode) --> Bool # Performs Intellisearch analysis on all MediaPoolItems in the folder. identifyFaces specifies whether to identify faces; isBetterMode specifies whether to use Better mode. Returns True if required packages are installed and analysis is successful.
|
|
286
|
+
# Refer to section "Studio and AI Scripting APIs" for prerequisites.
|
|
274
287
|
AnalyzeForSlate(markerColor) --> Bool # Performs Slate analysis on all MediaPoolItems in the folder using the current settings and specified markerColor. Returns True if required packages are installed and analysis is successful.
|
|
288
|
+
# Refer to section "Analyze Slate Settings" for information on markerColor
|
|
289
|
+
# Refer to section "Studio and AI Scripting APIs" for prerequisites.
|
|
275
290
|
|
|
276
291
|
MediaPoolItem
|
|
277
292
|
GetName() --> string # Returns the clip name.
|
|
@@ -312,18 +327,28 @@ MediaPoolItem
|
|
|
312
327
|
ReplaceClipPreserveSubClip(filePath) --> Bool # Replaces the underlying asset and metadata of a video or audio clip with the specified absolute clip path, preserving original sub clip extents.
|
|
313
328
|
GetUniqueId() --> string # Returns a unique ID for the media pool item
|
|
314
329
|
TranscribeAudio(useSpeakerDetection=None) --> Bool # Transcribes audio of the MediaPoolItem. Returns True if successful; False otherwise
|
|
330
|
+
# Accepts an optional boolean argument to use speaker detection when transcribing. If no argument is specified, use the project's setting.
|
|
331
|
+
# Refer to section "Studio and AI Scripting APIs" for prerequisites.
|
|
315
332
|
ClearTranscription() --> Bool # Clears audio transcription of the MediaPoolItem. Returns True if successful; False otherwise.
|
|
333
|
+
# Refer to section "Studio and AI Scripting APIs" for prerequisites.
|
|
316
334
|
PerformAudioClassification() --> Bool # Analyzes and classifies the audio of a MediaPoolItem into categories and subcategories.
|
|
335
|
+
# Refer to section "Studio and AI Scripting APIs" for prerequisites.
|
|
317
336
|
ClearAudioClassification() --> Bool # Clears audio classification of the MediaPoolItem.
|
|
318
|
-
|
|
319
|
-
AnalyzeForIntellisearch(identifyFaces, isBetterMode) --> Bool # Performs Intellisearch analysis on the MediaPoolItem. identifyFaces specifies whether to identify faces; isBetterMode specifies whether to use Better mode. Returns True if required packages are installed and analysis is successful.
|
|
320
|
-
AnalyzeForSlate(markerColor) --> Bool # Performs Slate analysis on the MediaPoolItem using the current settings and specified markerColor. Returns True if required packages are installed and analysis is successful.
|
|
337
|
+
# Refer to section "Studio and AI Scripting APIs" for prerequisites.
|
|
321
338
|
GetAudioMapping() --> json formatted string # Returns a string with MediaPoolItem's audio mapping information. Check 'Audio Mapping' section below for more information.
|
|
322
339
|
GetMarkInOut() --> {mark} # Returns dict of in/out marks set (keys omitted if not set), example:
|
|
323
340
|
# {'video': {'in': 0, 'out': 134}, 'audio': {'in': 0, 'out': 134}}
|
|
324
341
|
SetMarkInOut(in, out, type="all") --> Bool # Sets mark in/out of type "video", "audio" or "all" (default).
|
|
325
342
|
ClearMarkInOut(type="all") --> Bool # Clears mark in/out of type "video", "audio" or "all" (default).
|
|
326
343
|
MonitorGrowingFile() --> Bool # Monitor a file as long as it keeps growing (stops if the file does not grow for some time).
|
|
344
|
+
RemoveMotionBlur({deblurOption}) --> MediaPoolItem # Applies motion deblur on the MediaPoolItem. Returns the newly created MediaPoolItem.
|
|
345
|
+
# Refer to section "Motion Deblur Settings" for information on supported settings.
|
|
346
|
+
# Refer to section "Studio and AI Scripting APIs" for prerequisites.
|
|
347
|
+
AnalyzeForIntellisearch(identifyFaces, isBetterMode) --> Bool # Performs Intellisearch analysis on the MediaPoolItem. identifyFaces specifies whether to identify faces; isBetterMode specifies whether to use Better mode. Returns True if required packages are installed and analysis is successful.
|
|
348
|
+
# Refer to section "Studio and AI Scripting APIs" for prerequisites.
|
|
349
|
+
AnalyzeForSlate(markerColor) --> Bool # Performs Slate analysis on the MediaPoolItem using the current settings and specified markerColor. Returns True if required packages are installed and analysis is successful.
|
|
350
|
+
# Refer to section "Analyze Slate Settings" for information on markerColor
|
|
351
|
+
# Refer to section "Studio and AI Scripting APIs" for prerequisites.
|
|
327
352
|
|
|
328
353
|
Timeline
|
|
329
354
|
GetName() --> string # Returns the timeline name.
|
|
@@ -407,12 +432,15 @@ Timeline
|
|
|
407
432
|
CreateSubtitlesFromAudio({autoCaptionSettings}) --> Bool # Creates subtitles from audio for the timeline.
|
|
408
433
|
# Takes in optional dictionary {autoCaptionSettings}. Check 'Auto Caption Settings' subsection below for more information.
|
|
409
434
|
# Returns True on success, False otherwise.
|
|
435
|
+
# Refer to section "Studio and AI Scripting APIs" for prerequisites.
|
|
410
436
|
DetectSceneCuts() --> Bool # Detects and makes scene cuts along the timeline. Returns True if successful, False otherwise.
|
|
411
437
|
ConvertTimelineToStereo() --> Bool # Converts timeline to stereo. Returns True if successful; False otherwise.
|
|
438
|
+
# Refer to section "Studio and AI Scripting APIs" for prerequisites.
|
|
412
439
|
GetNodeGraph() --> Graph # Returns the timeline's node graph object.
|
|
413
440
|
AnalyzeDolbyVision([timelineItems]=[], --> Bool # Analyzes Dolby Vision on clips present on the timeline. Returns True if analysis start is successful; False otherwise.
|
|
414
441
|
analysisType=NONE) # if [timelineItems] is empty, analysis performed on all items. Else, analysis performed on [timelineItems] only.
|
|
415
442
|
# set analysisType to resolve.DLB_BLEND_SHOTS for blend setting
|
|
443
|
+
# Refer to section "Studio and AI Scripting APIs" for prerequisites.
|
|
416
444
|
GetMediaPoolItem() --> MediaPoolItem # Returns the media pool item corresponding to the timeline
|
|
417
445
|
GetMarkInOut() --> {mark} # Returns dict of in/out marks set (keys omitted if not set), example:
|
|
418
446
|
# {'video': {'in': 0, 'out': 134}, 'audio': {'in': 0, 'out': 134}}
|
|
@@ -420,6 +448,7 @@ Timeline
|
|
|
420
448
|
ClearMarkInOut(type="all") --> Bool # Clears mark in/out of type "video", "audio" or "all" (default).
|
|
421
449
|
GetVoiceIsolationState(trackIndex) --> {VoiceIsolationState} # Returns the Voice Isolation State as a dict {isEnabled, amount}, of the given track index
|
|
422
450
|
SetVoiceIsolationState(trackIndex, {VoiceIsolationState}) --> Bool # Sets Voice Isolation state of audio track with given trackIndex (int) to the given VoiceIsolationState of {isEnabled (bool), amount (int)}. amount is in range of [0, 100] and 1 <= trackIndex <= GetTrackCount("audio"). Returns True if successful.
|
|
451
|
+
# Refer to section "Studio and AI Scripting APIs" for prerequisites.
|
|
423
452
|
|
|
424
453
|
TimelineItem
|
|
425
454
|
GetName() --> string # Returns the item name.
|
|
@@ -438,7 +467,7 @@ TimelineItem
|
|
|
438
467
|
GetSourceStartFrame() --> int # Returns the start frame position of the media pool clip in the timeline clip.
|
|
439
468
|
GetSourceStartTime() --> float # Returns the start time position of the media pool clip in the timeline clip.
|
|
440
469
|
SetProperty(propertyKey, propertyValue) --> Bool # Sets the value of property "propertyKey" to value "propertyValue"
|
|
441
|
-
# Refer to "Looking up Timeline item properties" for more information
|
|
470
|
+
# Refer to section "Looking up Timeline item properties" for more information
|
|
442
471
|
GetProperty(propertyKey) --> int/[key:value] # returns the value of the specified key
|
|
443
472
|
# if no key is specified, the method returns a dictionary(python) or table(lua) for all supported keys
|
|
444
473
|
AddMarker(frameId, color, name, note, duration, --> Bool # Creates a new marker at given frameId position and with given marker information. 'customData' is optional and helps to attach user specific data to the marker.
|
|
@@ -471,8 +500,11 @@ TimelineItem
|
|
|
471
500
|
GetVersionNameList(versionType) --> [names...] # Returns a list of all color versions for the given versionType (0 - local, 1 - remote).
|
|
472
501
|
GetMediaPoolItem() --> MediaPoolItem # Returns the media pool item corresponding to the timeline item if one exists.
|
|
473
502
|
GetStereoConvergenceValues() --> {keyframes...} # Returns a dict (offset -> value) of keyframe offsets and respective convergence values.
|
|
503
|
+
# Refer to section "Studio and AI Scripting APIs" for prerequisites.
|
|
474
504
|
GetStereoLeftFloatingWindowParams() --> {keyframes...} # For the LEFT eye -> returns a dict (offset -> dict) of keyframe offsets and respective floating window params. Value at particular offset includes the left, right, top and bottom floating window values.
|
|
505
|
+
# Refer to section "Studio and AI Scripting APIs" for prerequisites.
|
|
475
506
|
GetStereoRightFloatingWindowParams() --> {keyframes...} # For the RIGHT eye -> returns a dict (offset -> dict) of keyframe offsets and respective floating window params. Value at particular offset includes the left, right, top and bottom floating window values.
|
|
507
|
+
# Refer to section "Studio and AI Scripting APIs" for prerequisites.
|
|
476
508
|
SetCDL([CDL map]) --> Bool # Keys of map are: "NodeIndex", "Slope", "Offset", "Power", "Saturation", where 1 <= NodeIndex <= total number of nodes.
|
|
477
509
|
# Example python code - SetCDL({"NodeIndex" : "1", "Slope" : "0.5 0.4 0.2", "Offset" : "0.4 0.3 0.2", "Power" : "0.6 0.7 0.8", "Saturation" : "0.65"})
|
|
478
510
|
AddTake(mediaPoolItem, startFrame, endFrame) --> Bool # Adds mediaPoolItem as a new take. Initializes a take selector for the timeline item if needed. By default, the full clip extents is added. startFrame (int) and endFrame (int) are optional arguments used to specify the extents.
|
|
@@ -489,9 +521,12 @@ TimelineItem
|
|
|
489
521
|
GetUniqueId() --> string # Returns a unique ID for the timeline item
|
|
490
522
|
LoadBurnInPreset(presetName) --> Bool # Loads user defined data burn in preset for clip when supplied presetName (string). Returns true if successful.
|
|
491
523
|
CreateMagicMask(mode) --> Bool # Returns True if magic mask was created successfully, False otherwise. mode can "F" (forward), "B" (backward), or "BI" (bidirection)
|
|
524
|
+
# Refer to section "Studio and AI Scripting APIs" for prerequisites.
|
|
492
525
|
RegenerateMagicMask() --> Bool # Returns True if magic mask was regenerated successfully, False otherwise.
|
|
526
|
+
# Refer to section "Studio and AI Scripting APIs" for prerequisites.
|
|
493
527
|
Stabilize() --> Bool # Returns True if stabilization was successful, False otherwise
|
|
494
528
|
SmartReframe() --> Bool # Performs Smart Reframe. Returns True if successful, False otherwise.
|
|
529
|
+
# Refer to section "Studio and AI Scripting APIs" for prerequisites.
|
|
495
530
|
GetNodeGraph(layerIdx) --> Graph # Returns the clip's node graph object at layerIdx (int, optional). Returns the first layer if layerIdx is skipped. 1 <= layerIdx <= project.GetSetting("nodeStackLayers").
|
|
496
531
|
GetColorGroup() --> ColorGroup # Returns the clip's color group if one exists.
|
|
497
532
|
AssignToColorGroup(ColorGroup) --> Bool # Returns True if TiItem to successfully assigned to given ColorGroup. ColorGroup must be an existing group in the current project.
|
|
@@ -510,6 +545,7 @@ TimelineItem
|
|
|
510
545
|
SetFusionOutputCache(cache_value) --> Bool # Sets caching to auto, enabled or disabled. Equivalent to clip context menu action 'Render Cache Fusion Output'.
|
|
511
546
|
GetVoiceIsolationState() --> {VoiceIsolationState} # Returns the Voice Isolation State as a dict {isEnabled, amount}, of the timelineItem
|
|
512
547
|
SetVoiceIsolationState({VoiceIsolationState}) --> Bool # Sets Voice Isolation state of the timelineItem to the given VoiceIsolationState of {isEnabled (bool), amount (int)}. amount is in range of [0, 100]. Returns True if successful.
|
|
548
|
+
# Refer to section "Studio and AI Scripting APIs" for prerequisites.
|
|
513
549
|
ResetAllNodeColors() --> Bool # Reset node color for all nodes in the active version of the clip. Returns True if successful.
|
|
514
550
|
|
|
515
551
|
Gallery
|
|
@@ -538,7 +574,7 @@ Graph
|
|
|
538
574
|
# The lutPath can be an absolute path, or a relative path (based off custom LUT paths or the master LUT path).
|
|
539
575
|
# The operation is successful for valid lut paths that Resolve has already discovered (see Project.RefreshLUTList).
|
|
540
576
|
GetLUT(nodeIndex) --> String # Gets relative LUT path based on the node index provided, 1 <= nodeIndex <= total number of nodes.
|
|
541
|
-
SetNodeCacheMode(nodeIndex, cache_value) --> Bool # Sets the cache mode type on the node mapping the node index provided. Refer to "Cache Mode"
|
|
577
|
+
SetNodeCacheMode(nodeIndex, cache_value) --> Bool # Sets the cache mode type on the node mapping the node index provided. Refer to section "Cache Mode" below to find the possible values of cache_value.
|
|
542
578
|
GetNodeCacheMode(nodeIndex) --> cache_value # Returns the cache mode type on the node mapping the node index provided.
|
|
543
579
|
GetNodeLabel(nodeIndex) --> string # Returns the label of the node at nodeIndex.
|
|
544
580
|
GetToolsInNode(nodeIndex) --> [toolsList] # Returns toolsList (list of strings) of the tools used in the node indicated by given nodeIndex (int).
|
|
@@ -960,6 +996,39 @@ as a single argument.
|
|
|
960
996
|
|
|
961
997
|
Getting the values for the keys that uses constants will return the number which is in the constant
|
|
962
998
|
|
|
999
|
+
Studio and AI Scripting APIs
|
|
1000
|
+
----------------------------
|
|
1001
|
+
The DaVinci Resolve scripting APIs cover a common superset of functions for both the Free and Studio versions of the application.
|
|
1002
|
+
|
|
1003
|
+
API calls can return with a False status (or an appropriate error status) when:
|
|
1004
|
+
* the function references a Studio function from the free DaVinci Resolve version.
|
|
1005
|
+
* the minimum system requirements of the function are not satisfied. To check if your system is capable, invoke the function from the GUI and check for error dialogs.
|
|
1006
|
+
* the requisite Extras have not been downloaded.
|
|
1007
|
+
|
|
1008
|
+
The following functions require one or more Extras downloads:
|
|
1009
|
+
* AnalyzeForIntellisearch(identifyFaces, isBetterMode=False) requires AI IntelliSearch - Faster.
|
|
1010
|
+
* AnalyzeForIntellisearch(identifyFaces, isBetterMode=True) requires AI IntelliSearch - Better.
|
|
1011
|
+
* AnalyzeForSlate(markerColor) requires AI Slate ID.
|
|
1012
|
+
* Transcription workflows with extended language models. Languages from built in models will be used as a fallback if unavailable.
|
|
1013
|
+
* GenerateSpeech({speechGenerationSettings}, timecode) requires AI Speech Generator.
|
|
1014
|
+
|
|
1015
|
+
For a successful API call, the required package will need to be installed before script invocation. Go to the DaVinci Resolve Studio application menu, open the Extras Download Manager and install the required package.
|
|
1016
|
+
|
|
1017
|
+
Motion Deblur Settings
|
|
1018
|
+
-----------------------------------
|
|
1019
|
+
This section covers the supported settings for the method RemoveMotionBlur({deblurOption})
|
|
1020
|
+
|
|
1021
|
+
The deblurOption setting is a dictionary containing the following keys:
|
|
1022
|
+
- "FileName": string
|
|
1023
|
+
- "Format": string (example: "mov", "mp4").
|
|
1024
|
+
- "Codec": string (example: "H264", "ProRes422")
|
|
1025
|
+
- "EncodingProfile": string (example: "Main10"). Can only be set for H.264 and H.265.
|
|
1026
|
+
- "UseExtremeMode": bool
|
|
1027
|
+
- "UseMarkInMarkOut": bool
|
|
1028
|
+
- "RenderAtSourceRes": bool
|
|
1029
|
+
- "UseMoreGpuMemory": bool
|
|
1030
|
+
- "Encoder" : string (Native or MainConcept). Can only be set for H.265
|
|
1031
|
+
|
|
963
1032
|
ExportLUT notes
|
|
964
1033
|
---------------
|
|
965
1034
|
The following section covers additional notes for TimelineItem.ExportLUT(exportType, path).
|
|
@@ -970,6 +1039,43 @@ Supported values for 'exportType' (enum) are:
|
|
|
970
1039
|
- resolve.EXPORT_LUT_65PTCUBE
|
|
971
1040
|
- resolve.EXPORT_LUT_PANASONICVLUT
|
|
972
1041
|
|
|
1042
|
+
Analyze Slate Settings
|
|
1043
|
+
-----------------------------------
|
|
1044
|
+
This section covers the supported settings for the method AnalyzeForSlate(markerColor)
|
|
1045
|
+
markerColor can be one of the following constants:
|
|
1046
|
+
- resolve.MARKER_BLUE
|
|
1047
|
+
- resolve.MARKER_CYAN
|
|
1048
|
+
- resolve.MARKER_GREEN
|
|
1049
|
+
- resolve.MARKER_YELLOW
|
|
1050
|
+
- resolve.MARKER_RED
|
|
1051
|
+
- resolve.MARKER_PINK
|
|
1052
|
+
- resolve.MARKER_PURPLE
|
|
1053
|
+
- resolve.MARKER_FUCHSIA
|
|
1054
|
+
- resolve.MARKER_ROSE
|
|
1055
|
+
- resolve.MARKER_LAVENDER
|
|
1056
|
+
- resolve.MARKER_SKY
|
|
1057
|
+
- resolve.MARKER_MINT
|
|
1058
|
+
- resolve.MARKER_LEMON
|
|
1059
|
+
- resolve.MARKER_SAND
|
|
1060
|
+
- resolve.MARKER_COCOA
|
|
1061
|
+
- resolve.MARKER_CREAM
|
|
1062
|
+
|
|
1063
|
+
Speech Generation Settings
|
|
1064
|
+
-----------------------------------
|
|
1065
|
+
This section covers the supported settings for the method GenerateSpeech({speechGenerationSettings}, timecode)
|
|
1066
|
+
|
|
1067
|
+
The speechGenerationSettings is a dictionary containing the following keys:
|
|
1068
|
+
- "TextInput": string # Max 350 chars
|
|
1069
|
+
- "VoiceModel": string (example: "Female 1", "Male 1", "Custom Voice").
|
|
1070
|
+
- "CustomVoiceFile": string "Full Path of Voice File"
|
|
1071
|
+
- "Speed": int
|
|
1072
|
+
- "Variation": int
|
|
1073
|
+
- "Pitch": int
|
|
1074
|
+
- "GenerationID": int
|
|
1075
|
+
- "Filename" : string
|
|
1076
|
+
- "AddToTimeline" : bool
|
|
1077
|
+
- "AudioTrack": int
|
|
1078
|
+
|
|
973
1079
|
Deprecated Resolve API Functions
|
|
974
1080
|
--------------------------------
|
|
975
1081
|
The following API functions are deprecated.
|