davinci-resolve-mcp 2.23.1 → 2.24.1
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/AGENTS.md +26 -3
- package/CHANGELOG.md +108 -0
- package/README.md +9 -3
- package/bin/davinci-resolve-mcp.mjs +4 -1
- package/docs/SKILL.md +71 -36
- package/docs/guides/control-panel.md +128 -0
- package/docs/guides/editorial-decision-guide.md +4 -4
- package/docs/guides/media-analysis-guide.md +147 -26
- package/docs/reference/api-coverage.md +12 -4
- package/install.py +1 -1
- package/package.json +1 -1
- package/src/analysis_dashboard.py +7418 -1372
- package/src/granular/common.py +1 -1
- package/src/server.py +1775 -517
- package/src/utils/analysis_memory.py +746 -0
- package/src/utils/media_analysis.py +1967 -215
- package/src/utils/media_analysis_jobs.py +6 -1
- package/src/utils/sync_detection.py +5 -3
package/AGENTS.md
CHANGED
|
@@ -9,12 +9,35 @@ kernel-action counts, release notes, or long reference tables here.
|
|
|
9
9
|
Never modify, transcode, convert, proxy, relink, replace, or create derivatives
|
|
10
10
|
of source media unless the user explicitly asks for that exact operation.
|
|
11
11
|
|
|
12
|
-
Analysis workflows may read source media, but outputs must go to sidecar
|
|
13
|
-
session scratch space, or the configured
|
|
14
|
-
root.
|
|
12
|
+
Analysis workflows may read source media, but file outputs must go to sidecar
|
|
13
|
+
files, session scratch space, or the configured
|
|
14
|
+
`davinci-resolve-mcp-analysis` project root. Resolve-target analysis should run
|
|
15
|
+
visual analysis, transcription, metadata writeback, and Media Pool marker
|
|
16
|
+
writeback by default unless the user opts out; those writes are Resolve project
|
|
17
|
+
database changes, not source-media changes. Preserve the chain from camera
|
|
18
|
+
original to final delivery.
|
|
15
19
|
|
|
16
20
|
See `docs/guides/media-analysis-guide.md` for the full source-safe workflow.
|
|
17
21
|
|
|
22
|
+
## Media Analysis Defaults Are Mandatory
|
|
23
|
+
|
|
24
|
+
Do not translate source-safe into underpowered, read-only, no-writeback analysis.
|
|
25
|
+
When the user asks to analyze Resolve media, run the requested analysis directly
|
|
26
|
+
with visual analysis, transcription, persisted artifacts, metadata writeback, and
|
|
27
|
+
Media Pool marker writeback enabled by default. Do not add
|
|
28
|
+
`include_visuals=false`, `include_transcription=false`,
|
|
29
|
+
`publish_metadata=false`, `timed_markers=no`, `session_only=true`, or
|
|
30
|
+
`dry_run=true` unless the user explicitly asks for that opt-out, the target is a
|
|
31
|
+
raw file path that cannot receive Resolve project writeback. Vision uses
|
|
32
|
+
`host_chat_paths` by default — analyze actions return a deferred payload with
|
|
33
|
+
absolute `frame_paths` and a JSON schema; the host chat must read those frames
|
|
34
|
+
as local images, produce JSON per the schema, and call
|
|
35
|
+
`media_analysis(action="commit_vision", params={clip_id, visual, vision_token})`
|
|
36
|
+
to merge the result and trigger metadata + Media Pool clip-marker writeback.
|
|
37
|
+
Not completing `commit_vision` leaves the analysis in
|
|
38
|
+
`pending_host_vision_analysis` — that is a failure mode, not a success. Users
|
|
39
|
+
must explicitly opt out with `include_visuals=false` for a technical-only run.
|
|
40
|
+
|
|
18
41
|
## Frame-Referenced Color Work
|
|
19
42
|
|
|
20
43
|
Before applying a grade, look, shot match, LUT, CDL, DRX, or copied grade to an
|
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,114 @@
|
|
|
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.24.1
|
|
6
|
+
|
|
7
|
+
**`npx davinci-resolve-mcp` no longer breaks MCP clients when invoked without a
|
|
8
|
+
subcommand.** The npm bootstrapper previously defaulted to `--help`, which wrote
|
|
9
|
+
usage text to stdout and exited 0. MCP stdio clients (Hermes Agent, Claude
|
|
10
|
+
Desktop, Cursor, etc.) read that as malformed JSON-RPC, retried three times,
|
|
11
|
+
then dropped the connection. `bin/davinci-resolve-mcp.mjs` now defaults to the
|
|
12
|
+
`server` subcommand when no arguments are supplied. Explicit `--help`, `-h`,
|
|
13
|
+
`help`, `--version`, and `-v` continue to print to stdout as before, and
|
|
14
|
+
existing configs that already pass `server` explicitly are unaffected. Reported
|
|
15
|
+
in [#41](https://github.com/samuelgursky/davinci-resolve-mcp/issues/41).
|
|
16
|
+
|
|
17
|
+
## What's New in v2.24.0
|
|
18
|
+
|
|
19
|
+
**Host-chat vision protocol (V2)** — `analyze_*` actions now use
|
|
20
|
+
`vision.provider="host_chat_paths"` by default. The analyze response is a
|
|
21
|
+
deferred payload with absolute `frame_paths`, a per-shot `shot_table`, and a
|
|
22
|
+
JSON schema; the host chat reads each frame as a local image, produces JSON per
|
|
23
|
+
the schema, and calls `media_analysis(action="commit_vision", params={clip_id,
|
|
24
|
+
visual, vision_token})` to finalize. `commit_vision` merges the visual report,
|
|
25
|
+
rebuilds Media Pool clip markers, publishes metadata to Resolve, and preserves
|
|
26
|
+
human corrections via `corrections.json`. Skipping the commit leaves the run in
|
|
27
|
+
`pending_host_vision_analysis` — surfaced explicitly rather than silently
|
|
28
|
+
downgraded. The legacy `chat_context`/`mcp_sampling` providers still resolve to
|
|
29
|
+
the same host-chat path.
|
|
30
|
+
|
|
31
|
+
**Trust-by-default analysis defaults** — `analyze_media` defaults to
|
|
32
|
+
`include_transcription=true`, `persist=true`, `publish_metadata=true`, and
|
|
33
|
+
`timed_markers="ask"` so source-safe no longer means underpowered. Agents that
|
|
34
|
+
need a technical-only or read-only run must explicitly pass
|
|
35
|
+
`include_visuals=false`, `include_transcription=false`, `publish_metadata=false`,
|
|
36
|
+
`timed_markers="no"`, `session_only=true`, or `dry_run=true`. The
|
|
37
|
+
`analyze_media` prompt and SKILL.md spell out the anti-regression rule.
|
|
38
|
+
|
|
39
|
+
**Control panel: Review surface (Phase B)** — The local browser control panel
|
|
40
|
+
gains a Review tab backed by new endpoints: `/api/clips`, `/api/clips/<id>`,
|
|
41
|
+
`/api/clips/<id>/shots`, `/api/clips/<id>/shots/<index>`,
|
|
42
|
+
`/api/clips/<id>/frames/<n>`, `/api/clips/<id>/transcript`,
|
|
43
|
+
`/api/clips/<id>/corrections`, `/api/clips/combined`, `/api/clips/export`,
|
|
44
|
+
`/api/panel_state`, `/api/update/status`, `/api/update/apply`, and
|
|
45
|
+
`/api/resolve/open_clip`. The UI ships a bin grid with thumbnails, a clip
|
|
46
|
+
detail with shot strip, a shot detail with grouped V2 fields + frame grid,
|
|
47
|
+
inline correction editors per subjective field, transcript correction +
|
|
48
|
+
regeneration, an Open-in-Resolve bridge, and 2-second chat ↔ panel state
|
|
49
|
+
polling.
|
|
50
|
+
|
|
51
|
+
**Control panel MCP actions** — `resolve_control.open_control_panel`,
|
|
52
|
+
`control_panel_status`, and `close_control_panel` manage the local panel
|
|
53
|
+
subprocess via a pidfile. `save_state` / `restore_state` snapshot and restore
|
|
54
|
+
Resolve playhead + selection state. `get_panel_state`, `set_panel_state`, and
|
|
55
|
+
`session_start_context` share panel focus between chat and the UI through
|
|
56
|
+
`panel_state.json`.
|
|
57
|
+
|
|
58
|
+
**Correction tools** — New `media_analysis` actions for editing analysis
|
|
59
|
+
without re-running it: `update_shot_field`, `update_clip_field`,
|
|
60
|
+
`get_field_history`, `revert_field`, `list_corrections`. Writes land in
|
|
61
|
+
`{clip_dir}/corrections.json` with append-only changelog + provenance
|
|
62
|
+
(mirrors the V2 DB schema). `commit_vision` merges corrections on top of the
|
|
63
|
+
fresh visual report so human edits survive re-analysis.
|
|
64
|
+
|
|
65
|
+
**Media Pool item open-in-viewer** — `media_pool_item.open_in_viewer` selects
|
|
66
|
+
a clip on the Media page and loads it into the source viewer, optionally
|
|
67
|
+
setting mark in/out and bringing Resolve to the foreground via OS-level
|
|
68
|
+
window activation. Useful for chat → Resolve hand-off.
|
|
69
|
+
|
|
70
|
+
**Source-trust prompt grading** — `source_trust` parameter
|
|
71
|
+
(`auto`/`filename`/`low`/`medium`/`high`) on analyze actions tunes the vision
|
|
72
|
+
prompt to hedge identity/intent/value for archival or thin-evidence clips.
|
|
73
|
+
|
|
74
|
+
**Analysis memory layer** — New `src/utils/analysis_memory.py` introduces
|
|
75
|
+
per-project memory + heartbeat + bin summary + soul scaffolding under the
|
|
76
|
+
analysis root. `regenerate_bin_summary_from_manifest` aggregates per-clip
|
|
77
|
+
fields (primary use, select potential, style, energy arc, top tags/locations)
|
|
78
|
+
into a bin briefing. Auto-initialized on analyze.
|
|
79
|
+
|
|
80
|
+
**Control-panel polish** — Diagnostics + Overview restyled with a status-pill
|
|
81
|
+
design system, navbar dropdowns fixed so top-level buttons no longer navigate
|
|
82
|
+
on their own, Preferences consolidated (Dashboard Convenience + Storage pages
|
|
83
|
+
removed), summary-style enum renamed to `full`/`concise`/`creative`/
|
|
84
|
+
`technical` with backwards compat, navbar version badge + update modal,
|
|
85
|
+
source-trust dropdown wired through.
|
|
86
|
+
|
|
87
|
+
**Server-side bug fixes** — `commit_vision` auto-publish now reflects per-row
|
|
88
|
+
status correctly (no silent-lie pending), compact analyze responses by default
|
|
89
|
+
(`verbose: true` for the full manifest), `resolve_output_root` skips slug
|
|
90
|
+
append when the configured base already terminates in the slug, frame sampler
|
|
91
|
+
reserves per-shot budget so shot starts aren't starved by flash candidates,
|
|
92
|
+
and machine markers are no longer written to Resolve (V2 architecture).
|
|
93
|
+
|
|
94
|
+
**Path hardening for GUI launches** — `media_analysis` now augments `PATH`
|
|
95
|
+
with the standard tool dirs (`/opt/homebrew/bin`, `/usr/local/bin`, etc.) so
|
|
96
|
+
ffprobe/ffmpeg resolve even when the MCP server is launched by a GUI app
|
|
97
|
+
(Claude.app, Dock/Spotlight) that inherits launchd's bare PATH.
|
|
98
|
+
|
|
99
|
+
**Documentation** — `AGENTS.md` adds the "Media Analysis Defaults Are
|
|
100
|
+
Mandatory" section. `docs/SKILL.md` rewrites the `analyze_media` prompt
|
|
101
|
+
guidance for the host-chat-paths protocol and adds the anti-regression rule.
|
|
102
|
+
`docs/guides/media-analysis-guide.md` covers the deferred vision payload and
|
|
103
|
+
commit step.
|
|
104
|
+
|
|
105
|
+
**Validation**: static import checks, API parity audit, focused
|
|
106
|
+
media-analysis + marker/range/v232/v233 unit tests, npm CLI smoke,
|
|
107
|
+
`npm pack --dry-run`, and `git diff --check` all passed. No source media was
|
|
108
|
+
modified. Resolve scripting behavior is additive (new actions; existing
|
|
109
|
+
actions unchanged); live Resolve validation covered the control-panel +
|
|
110
|
+
open_in_viewer + commit_vision auto-publish + corrections-merge paths during
|
|
111
|
+
the V2 push sessions logged in MEMORY.md.
|
|
112
|
+
|
|
5
113
|
## What's New in v2.23.1
|
|
6
114
|
|
|
7
115
|
**Control panel navigation fixes** — The local browser control panel now keeps
|
package/README.md
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# DaVinci Resolve MCP Server
|
|
2
2
|
|
|
3
|
-
[](https://github.com/samuelgursky/davinci-resolve-mcp/releases)
|
|
4
|
+
[](https://www.npmjs.com/package/davinci-resolve-mcp)
|
|
4
5
|
[](docs/reference/api-coverage.md)
|
|
5
6
|
[-blue.svg)](#server-modes)
|
|
6
7
|
[](docs/reference/api-coverage.md#test-results)
|
|
@@ -10,6 +11,10 @@
|
|
|
10
11
|
|
|
11
12
|
A Model Context Protocol (MCP) server that lets AI assistants control DaVinci Resolve Studio through the official Scripting API. It provides full API coverage plus guarded workflow helpers for editing, media pool organization, render setup, review markers, grading, Fusion, Fairlight, project lifecycle tasks, extension authoring, and source-safe media analysis.
|
|
12
13
|
|
|
14
|
+
[](docs/guides/control-panel.md)
|
|
15
|
+
|
|
16
|
+
A local browser control panel ships with the server for inspecting Resolve state, running source-safe analysis, drilling into analyzed clips and shots, and editing analysis output inline. See the [Control Panel Guide](docs/guides/control-panel.md) for the full tour.
|
|
17
|
+
|
|
13
18
|
## Quick Start
|
|
14
19
|
|
|
15
20
|
```bash
|
|
@@ -73,7 +78,7 @@ The compound server is recommended unless you specifically need the granular one
|
|
|
73
78
|
|------|-----------------------------------|
|
|
74
79
|
| App and project control | Launch/reconnect, page switching, project CRUD, project folders, databases, cloud project wrappers, settings, presets, archives |
|
|
75
80
|
| Media pool and ingest | Safe import, image sequences, multicam prep timelines, bin organization, metadata normalization, metadata field inventory, marks, annotations, relink/proxy/full-resolution guards |
|
|
76
|
-
| Media analysis | Source-safe file/clip/bin/project analysis, 2-pop/slate-clap sync-event detection,
|
|
81
|
+
| Media analysis | Source-safe file/clip/bin/project analysis, 2-pop/slate-clap sync-event detection, default Resolve metadata and Media Pool marker writeback, persisted analysis artifacts, existing-report reuse, host_chat_paths visual analysis (finalized per clip with `commit_vision`, works with any vision-capable MCP client) with opt-out, transcription with opt-out |
|
|
77
82
|
| Timeline editing and conform | Track/item probing, title text key scans/writes, copy/move/duplicate helpers, range operations, gaps/overlaps, source ranges, checked interchange exports/imports |
|
|
78
83
|
| Review annotations | Timeline/item/clip markers, custom data, flags, clip color, copy/move/sync cleanup, review reports, marker thumbnail review |
|
|
79
84
|
| Color and grading | Node graph probing, CDL validation, grade copy, DRX/LUT helpers, versions, Gallery stills, color groups |
|
|
@@ -103,7 +108,7 @@ The default server is a local stdio process launched by your MCP client; it does
|
|
|
103
108
|
|
|
104
109
|
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).
|
|
105
110
|
|
|
106
|
-
`analyze_media`
|
|
111
|
+
`analyze_media` executes directly by default, persists inspectable reports/artifacts under the analysis root, requests host-chat visual analysis via the `host_chat_paths` protocol (analyze returns absolute frame paths + a JSON schema; the host chat reads each frame as an image and calls `media_analysis(action="commit_vision", ...)` to finalize), runs transcription through the configured local backend, and writes analysis summaries plus source-time Media Pool clip markers back to the Resolve project. Pass `include_visuals=false`, `include_transcription=false`, `publish_metadata=false`, `timed_markers=no`, or `dry_run=true` only when you want to opt out of those default behaviors. Skipping `commit_vision` leaves the run in `pending_host_vision_analysis` — surfaced as a failure mode, not silently downgraded.
|
|
107
112
|
|
|
108
113
|
## Documentation
|
|
109
114
|
|
|
@@ -113,6 +118,7 @@ For method-by-method status, see [API Coverage and Test Results](docs/reference/
|
|
|
113
118
|
| [API Coverage and Test Results](docs/reference/api-coverage.md) | Key stats, API coverage table, live-test status, full method reference |
|
|
114
119
|
| [Kernel Action Coverage](docs/kernels/README.md) | Current guarded workflow action map |
|
|
115
120
|
| [AI Skill Reference](docs/SKILL.md) | Operational context for AI assistants using the compound server |
|
|
121
|
+
| [Control Panel Guide](docs/guides/control-panel.md) | Local browser panel tour: Overview, Review (bin/clip/shot), Analyze, Setup, Preferences |
|
|
116
122
|
| [Media Analysis Guide](docs/guides/media-analysis-guide.md) | Source-safe FFprobe, FFmpeg, Whisper, sidecar, and analysis-root workflows |
|
|
117
123
|
| [Multicam Setup Helper Guide](docs/guides/multicam-setup-guide.md) | Stacked timeline prep, helper/API boundary, and Resolve UI conversion steps |
|
|
118
124
|
| [Editorial Decision Guide](docs/guides/editorial-decision-guide.md) | Project-owned editorial craft guidance for analysis and timeline decisions |
|
|
@@ -336,7 +336,10 @@ function commandControlPanel(args) {
|
|
|
336
336
|
}
|
|
337
337
|
|
|
338
338
|
function main() {
|
|
339
|
-
const
|
|
339
|
+
const argv = process.argv.slice(2);
|
|
340
|
+
// No args → run the MCP stdio server. Anything printed to stdout would
|
|
341
|
+
// otherwise be parsed as JSON-RPC by MCP clients and break the connection.
|
|
342
|
+
const [command = "server", ...args] = argv;
|
|
340
343
|
|
|
341
344
|
try {
|
|
342
345
|
if (command === "--help" || command === "-h" || command === "help") {
|
package/docs/SKILL.md
CHANGED
|
@@ -108,11 +108,28 @@ tool accepts an `action` string and an optional `params` object.
|
|
|
108
108
|
|
|
109
109
|
The compound server also registers MCP prompts. Use `davinci_resolve_workflow`
|
|
110
110
|
as the compact operating brief, and use `analyze_media` as a slash-command style
|
|
111
|
-
entry point for
|
|
112
|
-
Analyze Media prompt
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
111
|
+
entry point for source-safe project, selected-clip, bin, file, or sequence
|
|
112
|
+
analysis. The Analyze Media prompt executes directly by default, persists
|
|
113
|
+
inspectable reports/artifacts under the project analysis root, requests
|
|
114
|
+
`host_chat_paths` visual analysis (frames are extracted to disk and the host
|
|
115
|
+
chat finalizes each clip via `media_analysis(action="commit_vision", ...)`),
|
|
116
|
+
runs local transcription through the configured backend, and writes metadata
|
|
117
|
+
plus source-time Media Pool markers back to the Resolve project unless the
|
|
118
|
+
user opts out.
|
|
119
|
+
|
|
120
|
+
Anti-regression rule: do not silently downgrade media analysis. Source-safe
|
|
121
|
+
means source media stays untouched; it does not mean no visuals, no transcript,
|
|
122
|
+
no persisted report, no metadata writeback, or no Media Pool markers. Do not
|
|
123
|
+
add `include_visuals=false`, `include_transcription=false`,
|
|
124
|
+
`publish_metadata=false`, `timed_markers=no`, `session_only=true`, or
|
|
125
|
+
`dry_run=true` unless the user explicitly asks for that opt-out, the target is a
|
|
126
|
+
raw file path that cannot receive Resolve project writeback. The host_chat_paths
|
|
127
|
+
vision protocol is: `analyze_*` returns a deferred payload with absolute
|
|
128
|
+
`frame_paths` and a JSON schema; you must read those frames as images (Claude
|
|
129
|
+
Code's Read tool handles JPG/PNG natively), produce the JSON, and call
|
|
130
|
+
`commit_vision` for each clip. Skipping `commit_vision` leaves the run in
|
|
131
|
+
`pending_host_vision_analysis` — surface that explicitly; do not call the
|
|
132
|
+
analysis complete.
|
|
116
133
|
|
|
117
134
|
## Local Control Panel
|
|
118
135
|
|
|
@@ -154,9 +171,9 @@ contains useful evidence:
|
|
|
154
171
|
Reuse prior analysis unless it is stale, incomplete, or missing the modality the
|
|
155
172
|
user is asking for. For example, do not re-run visual analysis just because the
|
|
156
173
|
edit task is new if a current report already has keyframes, motion variance, and
|
|
157
|
-
usable visual descriptions. Add transcription,
|
|
158
|
-
review, or source range checks only when that missing
|
|
159
|
-
decision. Use `force_refresh=true` only when the user asks for a fresh read or
|
|
174
|
+
usable visual descriptions. Add transcription, host_chat_paths vision (followed
|
|
175
|
+
by commit_vision), marker review, or source range checks only when that missing
|
|
176
|
+
evidence changes the decision. Use `force_refresh=true` only when the user asks for a fresh read or
|
|
160
177
|
when cache signatures show the source, prompt, depth, or requested modality has
|
|
161
178
|
changed.
|
|
162
179
|
|
|
@@ -393,26 +410,28 @@ Key actions: `add(frame, color, name, note, duration)`, `get_all`, `delete_by_co
|
|
|
393
410
|
**`media_analysis`** — Project-scoped media intelligence and guarded metadata publishing.
|
|
394
411
|
|
|
395
412
|
Media Analysis and editorial-assist actions (v2.17.0+) add source-safe planning,
|
|
396
|
-
report reuse,
|
|
397
|
-
|
|
413
|
+
report reuse, persisted analysis execution, host_chat_paths visual review
|
|
414
|
+
(finalized per clip via `commit_vision`), transcription, default Resolve
|
|
415
|
+
metadata/marker writeback, and timeline-level editorial helpers.
|
|
398
416
|
|
|
399
417
|
Key actions: `capabilities`, `install_guidance`, `resolve_output_root`, `plan`,
|
|
400
418
|
`analyze_file`, `analyze_clip`, `analyze_bin`, `analyze_project`,
|
|
401
419
|
`detect_sync_events`, `add_sync_event_markers`, `publish_clip_metadata`,
|
|
402
|
-
`summarize`, `get_report`, `build_index`, `index_status`,
|
|
403
|
-
`start_batch_job`, `run_batch_job_slice`, `batch_job_status`,
|
|
420
|
+
`commit_vision`, `summarize`, `get_report`, `build_index`, `index_status`,
|
|
421
|
+
`query_index`, `start_batch_job`, `run_batch_job_slice`, `batch_job_status`,
|
|
404
422
|
`list_batch_jobs`, `cancel_batch_job`, `resume_batch_job`,
|
|
405
423
|
`review_timeline_markers`, and `cleanup_artifacts`.
|
|
406
424
|
The tool never installs
|
|
407
425
|
dependencies and validates that outputs stay under
|
|
408
426
|
`davinci-resolve-mcp-analysis` project roots rather than beside source media.
|
|
409
|
-
Executed
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
local SQLite search index automatically unless
|
|
414
|
-
`build_index` remains the manual rebuild action
|
|
415
|
-
uses ffprobe metadata; `standard` adds ffmpeg
|
|
427
|
+
Executed Resolve-target analysis defaults to running, persisting inspectable
|
|
428
|
+
artifacts, and publishing metadata plus Media Pool clip markers. Use
|
|
429
|
+
`dry_run=true`, `publish_metadata=false`, `timed_markers=no`, or
|
|
430
|
+
`session_only=true` with `keep_artifacts=false` to disable those defaults for a
|
|
431
|
+
run. Persisted analysis refreshes the local SQLite search index automatically unless
|
|
432
|
+
`auto_build_index=false` is set; `build_index` remains the manual rebuild action
|
|
433
|
+
for existing reports. `quick` uses ffprobe metadata; `standard` adds ffmpeg
|
|
434
|
+
read-through checks,
|
|
416
435
|
cut-boundary analysis from full-stream scene detection, flash-frame candidates,
|
|
417
436
|
motion/variance scoring, analysis keyframes, and sidecar reports.
|
|
418
437
|
By default, planning checks the active project's analysis root for existing
|
|
@@ -423,31 +442,47 @@ hash, and requested modalities. Use `force_refresh=true` for a fresh read,
|
|
|
423
442
|
`max_report_age_days` for freshness limits, and `reuse_policy="fresh"` when
|
|
424
443
|
unsigned older reports should not be reused. Pass `reuse_existing=false` only
|
|
425
444
|
when the user explicitly wants to ignore memory.
|
|
426
|
-
Transcription
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
445
|
+
Transcription, visual analysis, metadata writeback, and Media Pool marker
|
|
446
|
+
writeback are default-on. Vision uses
|
|
447
|
+
`vision.provider="host_chat_paths"`: analyze actions extract representative
|
|
448
|
+
frames to disk under the project analysis root and return a deferred payload
|
|
449
|
+
containing absolute `frame_paths`, a `shot_table` mapping each detected shot
|
|
450
|
+
range to its in-shot `frame_indices`, the JSON schema, and a `commit_action`.
|
|
451
|
+
The host chat must read those frames as local images, produce JSON per the
|
|
452
|
+
schema (including one `shot_descriptions` entry per `shot_index` in the
|
|
453
|
+
`shot_table`, grounded only in the frames listed for that shot), and call
|
|
454
|
+
`media_analysis(action="commit_vision", params={clip_id, visual,
|
|
455
|
+
vision_token})` per clip to merge the visual report, rebuild Media Pool clip
|
|
456
|
+
markers, and publish vision-dependent metadata to Resolve. Each Resolve shot
|
|
457
|
+
marker inherits its description from `shot_descriptions[shot_index]`; missing
|
|
458
|
+
entries fall back to an in-range `analysis_keyframe` and finally to a
|
|
459
|
+
clip-summary-tagged fallback — never to a neighbour shot's description. The manifest exposes
|
|
460
|
+
`vision_pending=True` and `pending_action` so callers know what is incomplete.
|
|
461
|
+
Pass `include_visuals=false`, `include_transcription=false`,
|
|
462
|
+
`publish_metadata=false`, or `timed_markers=no` to opt out. Agents must not add
|
|
463
|
+
those opt-out flags preemptively; use them only when requested or when a target
|
|
464
|
+
boundary requires it. Standard/deep runs prioritize first/last usable frames
|
|
465
|
+
plus before/after cut-boundary frames as the sampled set. Skipping
|
|
466
|
+
`commit_vision` leaves the run in `pending_host_vision_analysis` — that is a
|
|
467
|
+
failure mode to surface, not a silent downgrade. The local mock providers are
|
|
468
|
+
for tests and do not send frames off-machine.
|
|
437
469
|
Use `detect_sync_events` before multicam setup, deliverable QC, or single-camera
|
|
438
470
|
sync review when the user needs likely 2-pop or slate-clap locations. It reads
|
|
439
471
|
source audio through FFmpeg/FFprobe only, returns advisory frames/timecodes and
|
|
440
472
|
per-file `record_offset` suggestions, and never installs FFmpeg automatically.
|
|
441
|
-
It also returns marker suggestions;
|
|
442
|
-
|
|
473
|
+
It also returns marker suggestions; `add_sync_event_markers` remains an explicit
|
|
474
|
+
marker-write action for standalone sync detections.
|
|
443
475
|
Use `publish_clip_metadata` when the user wants analysis to become searchable
|
|
444
476
|
inside Resolve. It analyzes or reuses reports, proposes field-specific merges
|
|
445
477
|
for `Description`, `Comments`, `Keywords`, `People`, and optional slate-derived
|
|
446
|
-
fields, stores provenance in third-party metadata,
|
|
447
|
-
|
|
478
|
+
fields, stores provenance in third-party metadata, and writes metadata plus
|
|
479
|
+
source-time markers by default for executed Resolve-target analysis. Disable a
|
|
480
|
+
write run with `dry_run=true`, `publish_metadata=false`, or `timed_markers=no`.
|
|
448
481
|
`review_timeline_markers` creates a labeled
|
|
449
|
-
Resolve-rendered marker contact sheet plus JSON sidecar
|
|
450
|
-
|
|
482
|
+
Resolve-rendered marker contact sheet plus JSON sidecar; with
|
|
483
|
+
`vision.enabled=true` it returns a host_chat_paths review payload (image_path +
|
|
484
|
+
prompt) so the host chat can read the sheet and answer inline — no commit step
|
|
485
|
+
required for marker review.
|
|
451
486
|
|
|
452
487
|
Before calling `analyze_*`, prefer `summarize` and `get_report` to discover
|
|
453
488
|
existing reports for the active project. If reports exist, use them as the
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
# Local Control Panel
|
|
2
|
+
|
|
3
|
+
The DaVinci Resolve MCP ships with a local, single-user browser control panel for
|
|
4
|
+
inspecting Resolve state, running source-safe media analysis, drilling into
|
|
5
|
+
analyzed clips and shots, fixing analysis output inline, and managing
|
|
6
|
+
preferences.
|
|
7
|
+
|
|
8
|
+
The panel is a local HTTP server (default `http://127.0.0.1:8765`). It does not
|
|
9
|
+
expose a network listener beyond loopback and does not modify source media.
|
|
10
|
+
|
|
11
|
+
## Launching the panel
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
# From source
|
|
15
|
+
venv/bin/python -m src.control_panel
|
|
16
|
+
|
|
17
|
+
# From the npm package
|
|
18
|
+
npx davinci-resolve-mcp control-panel
|
|
19
|
+
|
|
20
|
+
# From a chat client via MCP
|
|
21
|
+
resolve_control(action="open_control_panel")
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Once running, you can `resolve_control(action="control_panel_status")` to check
|
|
25
|
+
the pidfile or `resolve_control(action="close_control_panel")` to stop it.
|
|
26
|
+
|
|
27
|
+
## Tour
|
|
28
|
+
|
|
29
|
+
### Overview
|
|
30
|
+
|
|
31
|
+

|
|
32
|
+
|
|
33
|
+
The Overview tab is the at-a-glance summary for the active project: Resolve
|
|
34
|
+
connection state, source clip counts, analysis progress, search index size,
|
|
35
|
+
and the source-media safety status.
|
|
36
|
+
|
|
37
|
+
### Analysis → Analyze
|
|
38
|
+
|
|
39
|
+

|
|
40
|
+
|
|
41
|
+
The Analyze view inventories the Resolve media pool read-only and lets you
|
|
42
|
+
queue source-safe analysis jobs. Filters cover bin, media type, clip status,
|
|
43
|
+
and analysis status. Resolve media stays read-only; analysis outputs land under
|
|
44
|
+
the configured analysis root.
|
|
45
|
+
|
|
46
|
+
### Analysis → Review (bin grid)
|
|
47
|
+
|
|
48
|
+

|
|
49
|
+
|
|
50
|
+
The Review surface is the browser for analyzed clips. Each card shows a
|
|
51
|
+
representative thumbnail, summary one-liner, primary use, shot count, and tags.
|
|
52
|
+
Click into a card to drill down.
|
|
53
|
+
|
|
54
|
+
### Clip detail
|
|
55
|
+
|
|
56
|
+

|
|
57
|
+
|
|
58
|
+
The clip view shows the full summary, tags, editorial notes, and a strip of
|
|
59
|
+
every detected shot with thumbnails. From here you can open the clip in
|
|
60
|
+
Resolve, jump to the transcript, or click into any shot for the full V2 field
|
|
61
|
+
breakdown.
|
|
62
|
+
|
|
63
|
+
### Transcript
|
|
64
|
+
|
|
65
|
+

|
|
66
|
+
|
|
67
|
+
The transcript view is reachable from the clip detail (top-right `Transcript`
|
|
68
|
+
button). Each segment shows its start timecode, the cleaned sentence, and the
|
|
69
|
+
word-level transcription beneath. The segment filter narrows by text; clicking
|
|
70
|
+
a segment can jump the Resolve playhead to that source time. `Re-transcribe
|
|
71
|
+
with words` re-runs the configured local transcription backend (Whisper by
|
|
72
|
+
default) without re-doing visual analysis, and `corrections.json` captures
|
|
73
|
+
inline edits so they survive future re-runs.
|
|
74
|
+
|
|
75
|
+
### Shot detail with inline correction
|
|
76
|
+
|
|
77
|
+

|
|
78
|
+
|
|
79
|
+
The shot view shows every V2 schema field (shot size, framing, camera height,
|
|
80
|
+
motion direction, lens character, lighting, composition notes, and more)
|
|
81
|
+
alongside the frames the vision pass actually saw. Each subjective field is
|
|
82
|
+
editable inline — edits land in `corrections.json` with an append-only
|
|
83
|
+
changelog and are merged on top of the next re-analysis so human notes survive
|
|
84
|
+
fresh vision runs. `Open in Resolve` bounces you straight to the clip in the
|
|
85
|
+
source viewer with the shot's mark in/out set.
|
|
86
|
+
|
|
87
|
+
### Setup → Resolve diagnostic
|
|
88
|
+
|
|
89
|
+

|
|
90
|
+
|
|
91
|
+
The Resolve diagnostic page reports the live connection, product/version,
|
|
92
|
+
active page, project identity, and media pool inventory. Useful when chat
|
|
93
|
+
sessions need to confirm Resolve is reachable before issuing scripted
|
|
94
|
+
operations.
|
|
95
|
+
|
|
96
|
+
### Preferences → Analysis
|
|
97
|
+
|
|
98
|
+

|
|
99
|
+
|
|
100
|
+
Server-wide analysis defaults: vision on/off, transcription default, slate
|
|
101
|
+
detection, source-trust grading (`auto` / `filename` / `low` / `medium` /
|
|
102
|
+
`high`), default analysis depth, default sample frame count, persistence
|
|
103
|
+
behavior, summary style, and report format. These are the defaults the
|
|
104
|
+
`analyze_media` prompt uses when not overridden per call.
|
|
105
|
+
|
|
106
|
+
## Chat ↔ panel state sharing
|
|
107
|
+
|
|
108
|
+
The panel and chat share focus state through `panel_state.json` (under the
|
|
109
|
+
active project's analysis root). MCP actions:
|
|
110
|
+
|
|
111
|
+
- `media_analysis(action="get_panel_state")` — read current focus (project,
|
|
112
|
+
clip, shot)
|
|
113
|
+
- `media_analysis(action="set_panel_state", params={...})` — set focus from
|
|
114
|
+
chat
|
|
115
|
+
- `media_analysis(action="session_start_context")` — bootstrap a chat session
|
|
116
|
+
with the panel's current focus
|
|
117
|
+
|
|
118
|
+
The dashboard polls `/api/panel_state` every 2 seconds, so changes from chat
|
|
119
|
+
appear in the UI without a refresh.
|
|
120
|
+
|
|
121
|
+
## Open in Resolve
|
|
122
|
+
|
|
123
|
+
The shot view and clip view both have an Open-in-Resolve action. Under the
|
|
124
|
+
hood this calls `media_pool_item(action="open_in_viewer", params={clip_id,
|
|
125
|
+
mark_in, mark_out})`, which selects the clip on the Media page, loads it into
|
|
126
|
+
the source viewer, sets mark in/out, and brings Resolve to the foreground via
|
|
127
|
+
an OS-level window activation (AppleScript on macOS, PowerShell `AppActivate`
|
|
128
|
+
on Windows, wmctrl/xdotool on Linux).
|
|
@@ -97,10 +97,10 @@ verify it against a Resolve-rendered frame:
|
|
|
97
97
|
- Keep marker notes concrete enough that another editor can act on them.
|
|
98
98
|
|
|
99
99
|
Use contact sheets for orientation and review. `analyze_media` defaults to
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
review.
|
|
100
|
+
host_chat_paths vision: analyze actions return frame_paths and a schema, and the
|
|
101
|
+
host chat finalizes per-clip visual analysis via `commit_vision`. Pass
|
|
102
|
+
`include_visuals=false` for a no-visual run. Use direct assistant inspection
|
|
103
|
+
when the user provides or requests specific still/contact-sheet review.
|
|
104
104
|
|
|
105
105
|
## Edit Variant Safety
|
|
106
106
|
|