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 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 files,
13
- session scratch space, or the configured `davinci-resolve-mcp-analysis` project
14
- root. Preserve the chain from camera original to final delivery.
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
- [![Version](https://img.shields.io/badge/version-2.23.1-blue.svg)](https://github.com/samuelgursky/davinci-resolve-mcp/releases)
3
+ [![Version](https://img.shields.io/badge/version-2.24.1-blue.svg)](https://github.com/samuelgursky/davinci-resolve-mcp/releases)
4
+ [![npm](https://img.shields.io/npm/v/davinci-resolve-mcp.svg?label=npm&color=CB3837)](https://www.npmjs.com/package/davinci-resolve-mcp)
4
5
  [![API Coverage](https://img.shields.io/badge/API%20Coverage-100%25-brightgreen.svg)](docs/reference/api-coverage.md)
5
6
  [![Tools](https://img.shields.io/badge/MCP%20Tools-32%20(329%20full)-blue.svg)](#server-modes)
6
7
  [![Tested](https://img.shields.io/badge/Live%20Tested-98.5%25-green.svg)](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
+ [![Local control panel](docs/images/control-panel/01-overview.png)](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, confirmed Resolve metadata publishing, session-only defaults, existing-report reuse, chat-context visual analysis by default in `analyze_media` with opt-out, optional transcription |
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` uses in-chat visual analysis by default when the MCP client supports sampling/image messages. Pass `include_visuals=false` for technical-only or privacy-sensitive runs. If in-chat vision is unavailable, analysis continues with local technical/motion evidence and reports the skipped visual layer. `media_analysis.publish_clip_metadata` can publish confirmed analysis summaries, comments, keywords, people, and high-confidence slate fields back to Resolve clip metadata while preserving existing human-entered fields by default.
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 [command = "--help", ...args] = process.argv.slice(2);
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 read-only project, selected-clip, bin, or file analysis. The
112
- Analyze Media prompt defaults to chat-context visual analysis when the MCP
113
- client supports sampling/image messages, while allowing `include_visuals=false`
114
- for technical-only or privacy-sensitive runs. It also encodes session-only
115
- defaults, optional transcription, and finished-video editorial guardrails.
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, chat-context vision, marker
158
- review, or source range checks only when that missing evidence changes the
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, session-only execution, chat-context visual review, and
397
- timeline-level editorial helpers.
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`, `query_index`,
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 file/clip analysis defaults to session-only: scratch artifacts are
410
- removed after structured reports are returned to the MCP response. `persist=true`
411
- keeps reports under the project analysis root, and `keep_artifacts=true`
412
- preserves a session scratch run for inspection. Persisted analysis refreshes the
413
- local SQLite search index automatically unless `auto_build_index=false` is set;
414
- `build_index` remains the manual rebuild action for existing reports. `quick`
415
- uses ffprobe metadata; `standard` adds ffmpeg read-through checks,
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 requires explicit opt-in. The `analyze_media` prompt opts into
427
- visual analysis by default and uses `vision.provider="chat_context"` when the
428
- MCP client supports sampling; pass `include_visuals=false` to opt out. For
429
- direct `media_analysis` tool calls, set `vision.enabled=true` explicitly when
430
- visual interpretation is needed. Standard/deep runs prioritize first/last usable
431
- frames plus before/after cut-boundary frames; those sampled frames are sent to
432
- the current chat/sampling model and the response is stored in the default
433
- structured JSON shape. If chat-context vision is unavailable, continue with
434
- technical/motion analysis and ask whether the user wants setup steps or a
435
- no-visual run. The local mock providers are for tests and do not send frames
436
- off-machine.
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; only call `add_sync_event_markers` after the
442
- user explicitly approves marker writes, and pass `confirm=true`.
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, defaults to `dry_run=true`,
447
- and writes Resolve metadata only when called with `confirm=true`.
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, and can request
450
- chat-context vision for marker/frame mismatch review.
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
+ ![Control panel overview](../images/control-panel/01-overview.png)
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
+ ![Analyze view](../images/control-panel/06-analyze.png)
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
+ ![Review bin grid](../images/control-panel/02-review-bin-grid.png)
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
+ ![Clip detail with shot strip](../images/control-panel/03-clip-detail.png)
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
+ ![Transcript view with word-level timing](../images/control-panel/04-transcript.png)
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
+ ![Shot detail with V2 fields and frames](../images/control-panel/05-shot-detail.png)
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
+ ![Setup / Resolve diagnostic](../images/control-panel/07-diagnostics-resolve.png)
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
+ ![Preferences / Analysis defaults](../images/control-panel/08-preferences-analysis.png)
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
- chat-context vision for visual/editorial analysis when the MCP client supports
101
- sampling; pass `include_visuals=false` for a no-visual run. Use direct assistant
102
- inspection when the user provides or requests specific still/contact-sheet
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