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 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
- [![Version](https://img.shields.io/badge/version-2.71.0-blue.svg)](https://github.com/samuelgursky/davinci-resolve-mcp/releases)
3
+ [![Version](https://img.shields.io/badge/version-2.72.0-blue.svg)](https://github.com/samuelgursky/davinci-resolve-mcp/releases)
4
4
  [![npm](https://img.shields.io/npm/v/davinci-resolve-mcp.svg?label=npm&color=CB3837)](https://www.npmjs.com/package/davinci-resolve-mcp)
5
5
  [![API Coverage](https://img.shields.io/badge/API%20Coverage-100%25-brightgreen.svg)](docs/reference/api-coverage.md)
6
6
  [![Tools](https://img.shields.io/badge/MCP%20Tools-34%20(341%20full)-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 | **336/336** (100%) |
256
- | Methods Live Tested | **331/336** (98.5%) |
257
- | Live Test Pass Rate | **331/331** (100%) |
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
  ```
@@ -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/ # 5-phase live API test suite + Resolve 20 delta (331/331 pass)
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 | **33** compound (default) / **341** granular |
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 | **336/336** (100%) |
12
- | Methods Live Tested | **331/336** (98.5%) |
13
- | Live Test Pass Rate | **331/331** (100%) |
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 beta APIs are intentionally deferred until stable |
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 33rd compound tool is `timeline_versioning` (C6) — an MCP-level workflow
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
- | **Total** | **331/331** | **100%** | **98.5% of current API methods tested live** |
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.0
13
+ **Verified on:** DaVinci Resolve Studio 21.0.2
14
14
 
15
- **Totals:** 22 missing capabilities, 20 bugs / unreliable behaviors.
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:** 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.
318
- - **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.
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: 5 May 2026
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" section for information for supported 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" section for information on the above supported 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
- RemoveMotionBlur({deblurOption}) --> MediaPoolItem # Applies motion deblur on the MediaPoolItem. Returns the newly created MediaPoolItem.
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" section below to find the possible values of cache_value.
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.