davinci-resolve-mcp 2.23.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.
Files changed (92) hide show
  1. package/AGENTS.md +85 -0
  2. package/CHANGELOG.md +802 -0
  3. package/CLAUDE.md +15 -0
  4. package/LICENSE +21 -0
  5. package/README.md +159 -0
  6. package/SECURITY.md +53 -0
  7. package/bin/davinci-resolve-mcp.mjs +376 -0
  8. package/docs/README.md +56 -0
  9. package/docs/SKILL.md +1145 -0
  10. package/docs/authoring/fuse-dctl-authoring.md +242 -0
  11. package/docs/authoring/script-plugin-authoring.md +195 -0
  12. package/docs/contributing.md +82 -0
  13. package/docs/guides/color-decision-guide.md +387 -0
  14. package/docs/guides/editorial-decision-guide.md +136 -0
  15. package/docs/guides/media-analysis-guide.md +615 -0
  16. package/docs/guides/multicam-setup-guide.md +138 -0
  17. package/docs/install.md +198 -0
  18. package/docs/integrations/workflow-integrations.md +120 -0
  19. package/docs/kernels/README.md +28 -0
  20. package/docs/kernels/audio-fairlight-kernel.md +86 -0
  21. package/docs/kernels/color-grade-kernel.md +103 -0
  22. package/docs/kernels/extension-authoring-kernel.md +101 -0
  23. package/docs/kernels/fusion-composition-kernel.md +91 -0
  24. package/docs/kernels/media-pool-ingest-kernel.md +147 -0
  25. package/docs/kernels/project-lifecycle-kernel.md +120 -0
  26. package/docs/kernels/render-deliver-kernel.md +92 -0
  27. package/docs/kernels/review-annotation-kernel.md +110 -0
  28. package/docs/kernels/timeline-conform-interchange-kernel.md +99 -0
  29. package/docs/kernels/timeline-edit-kernel.md +189 -0
  30. package/docs/notes/codec-plugin-notes.md +136 -0
  31. package/docs/notes/dctl-notes.md +234 -0
  32. package/docs/notes/fusion-template-notes.md +136 -0
  33. package/docs/notes/lut-notes.md +136 -0
  34. package/docs/notes/openfx-notes.md +120 -0
  35. package/docs/process/release-process.md +152 -0
  36. package/docs/reference/api-coverage.md +488 -0
  37. package/docs/reference/resolve_scripting_api.txt +1012 -0
  38. package/examples/README.md +53 -0
  39. package/examples/markers/README.md +81 -0
  40. package/examples/media/README.md +94 -0
  41. package/examples/timeline/README.md +98 -0
  42. package/install.py +1196 -0
  43. package/package.json +52 -0
  44. package/scripts/audit_api_parity.py +275 -0
  45. package/scripts/live_media_analysis_polish_probe.py +65 -0
  46. package/src/__init__.py +3 -0
  47. package/src/analysis_dashboard.py +4936 -0
  48. package/src/control_panel.py +13 -0
  49. package/src/granular/__init__.py +17 -0
  50. package/src/granular/common.py +727 -0
  51. package/src/granular/folder.py +287 -0
  52. package/src/granular/gallery.py +306 -0
  53. package/src/granular/graph.py +309 -0
  54. package/src/granular/media_pool.py +679 -0
  55. package/src/granular/media_pool_item.py +852 -0
  56. package/src/granular/media_storage.py +179 -0
  57. package/src/granular/project.py +1594 -0
  58. package/src/granular/resolve_control.py +521 -0
  59. package/src/granular/timeline.py +1074 -0
  60. package/src/granular/timeline_item.py +2251 -0
  61. package/src/resolve_mcp_server.py +43 -0
  62. package/src/server.py +15691 -0
  63. package/src/utils/__init__.py +3 -0
  64. package/src/utils/app_control.py +319 -0
  65. package/src/utils/audio_fairlight_live_probe.py +263 -0
  66. package/src/utils/cdl.py +20 -0
  67. package/src/utils/cloud_operations.py +192 -0
  68. package/src/utils/color_grade_live_probe.py +444 -0
  69. package/src/utils/dctl_templates.py +368 -0
  70. package/src/utils/extension_authoring_live_probe.py +292 -0
  71. package/src/utils/fuse_templates.py +1968 -0
  72. package/src/utils/fusion_composition_live_probe.py +284 -0
  73. package/src/utils/layout_presets.py +333 -0
  74. package/src/utils/mcp_stdio.py +32 -0
  75. package/src/utils/media_analysis.py +3618 -0
  76. package/src/utils/media_analysis_jobs.py +796 -0
  77. package/src/utils/media_pool_ingest_live_probe.py +592 -0
  78. package/src/utils/multicam.py +393 -0
  79. package/src/utils/object_inspection.py +287 -0
  80. package/src/utils/platform.py +157 -0
  81. package/src/utils/project_lifecycle_live_probe.py +376 -0
  82. package/src/utils/project_properties.py +601 -0
  83. package/src/utils/render_deliver_live_probe.py +384 -0
  84. package/src/utils/resolve_connection.py +77 -0
  85. package/src/utils/review_annotation_live_probe.py +352 -0
  86. package/src/utils/script_templates.py +1193 -0
  87. package/src/utils/sync_detection.py +887 -0
  88. package/src/utils/timeline_conform_live_probe.py +280 -0
  89. package/src/utils/timeline_kernel_live_probe.py +1091 -0
  90. package/src/utils/timeline_kernel_probe.py +185 -0
  91. package/src/utils/timeline_title_text.py +87 -0
  92. package/src/utils/update_check.py +610 -0
@@ -0,0 +1,387 @@
1
+ # Resolve Color Decision Guide
2
+
3
+ This guide is the project-owned color correction and grading context for the
4
+ DaVinci Resolve MCP. It defines what an agent can actually create through the
5
+ public Resolve scripting API, what it can only apply as an opaque grade artifact,
6
+ and how to make color decisions without pretending the API exposes the full Color
7
+ page UI.
8
+
9
+ ## API Reality
10
+
11
+ The public Resolve scripting API supports useful color automation, but it does
12
+ not expose most interactive Color page controls as editable parameters.
13
+
14
+ ### Directly Creatable Or Controllable
15
+
16
+ These are the safest surfaces for procedural color work:
17
+
18
+ - CDL values on an existing node:
19
+ - `NodeIndex`
20
+ - `Slope`
21
+ - `Offset`
22
+ - `Power`
23
+ - `Saturation`
24
+ - Color versions:
25
+ - add, rename, delete, load, and snapshot local or remote grade versions
26
+ - Color groups:
27
+ - create/delete groups
28
+ - assign/remove timeline items
29
+ - inspect group pre-clip and post-clip node graph availability
30
+ - Existing node graph state:
31
+ - count nodes
32
+ - read node labels, LUTs, cache state, enabled state, and tools
33
+ - set LUT on an existing node
34
+ - enable/disable an existing node
35
+ - set node cache mode
36
+ - LUT and DCTL assets:
37
+ - author/install MCP-marked DCTL files
38
+ - refresh regular LUT/DCTL discovery
39
+ - export LUTs from existing grades
40
+ - apply discovered LUT paths to existing nodes
41
+ - Gallery and still assets:
42
+ - grab stills
43
+ - import/export stills and `.drx` grade files
44
+ - label and delete stills
45
+ - Full-grade transfer:
46
+ - copy an existing grade to other timeline items
47
+ - apply a `.drx` grade to a graph
48
+ - reset all grades on a graph
49
+
50
+ ### Opaque Full-Grade Operations
51
+
52
+ These can represent fully featured Resolve grades, but the MCP cannot inspect or
53
+ edit every internal decision inside them:
54
+
55
+ - `CopyGrades([timelineItems])`
56
+ - `ApplyGradeFromDRX(path, gradeMode)`
57
+ - imported Gallery stills / `.drx` files
58
+ - exported LUTs
59
+ - existing node graphs created manually in Resolve
60
+
61
+ Treat these as whole-grade artifacts. They can include complex node trees,
62
+ windows, qualifiers, curves, keys, OFX, and tracking if they already exist in
63
+ the source grade, but the MCP is applying or copying them as a package.
64
+
65
+ Important: `ApplyGradeFromDRX` replaces the target graph. It is not an append
66
+ operation. Create a version snapshot before applying it.
67
+
68
+ ### Not Directly Creatable From Structured Params
69
+
70
+ Do not claim the MCP can build these from scratch through the public API:
71
+
72
+ - new serial, parallel, layer, or outside nodes
73
+ - node reordering or mixer construction
74
+ - Lift/Gamma/Gain wheel values
75
+ - offset/log/HDR palette values
76
+ - custom curves or HSL curves
77
+ - qualifiers
78
+ - power windows
79
+ - tracker/window animation
80
+ - Color Warper changes
81
+ - detailed OFX or ResolveFX parameter edits in the Color page
82
+ - a fully editable node tree from JSON
83
+
84
+ If the user asks for one of these, the agent should either propose a manual
85
+ Resolve workflow, use a prebuilt `.drx`/still/LUT/DCTL artifact, or state that
86
+ the current API does not expose that control.
87
+
88
+ ## Correction Priorities
89
+
90
+ Use this order when making or recommending corrections:
91
+
92
+ 1. Technical transform and color management
93
+ 2. Exposure and contrast
94
+ 3. White balance and neutral placement
95
+ 4. Skin tone and memory colors
96
+ 5. Shot-to-shot continuity
97
+ 6. Creative look
98
+ 7. Output legality and deliverable constraints
99
+
100
+ Do not chase a look before the image is technically coherent. Do not make a shot
101
+ match by destroying the thing that matters most in that shot, usually the face,
102
+ the product, or the story point.
103
+
104
+ ## Colorist Judgment Principles
105
+
106
+ The API can move values, but color decisions still need colorist judgment:
107
+
108
+ - start from representative frames, not metadata alone
109
+ - use both scopes and eyes when available; neither is enough alone
110
+ - establish black point, white point, and density before chasing style
111
+ - protect faces, skin tone, products, and story-critical details before the
112
+ background
113
+ - judge memory colors deliberately: skin, sky, foliage, snow, practical lights,
114
+ and known neutrals may be corrected or intentionally bent, but not ignored
115
+ - use the focus technique for exposure decisions: push darker/brighter or
116
+ warmer/cooler far enough to find the boundary, then settle back to the useful
117
+ point
118
+ - prefer restraint when the media is fragile, highly compressed, 8-bit, noisy,
119
+ clipped, or already display-referred
120
+ - when the request is mood-based, such as "dusk", "noir", "warm", or "clean",
121
+ translate that into observable targets: density, highlight level, shadow color,
122
+ saturation, skin protection, and continuity across cuts
123
+
124
+ If a requested look requires secondaries, windows, curves, texture, or selective
125
+ relighting, say so. A CDL can suggest the direction, but it is not a substitute
126
+ for a full interactive color pass.
127
+
128
+ ## What CDL Is Good For
129
+
130
+ CDL is the main procedural correction surface available to the MCP. Use it for
131
+ simple, reversible primary moves:
132
+
133
+ - small exposure balance through `Slope`
134
+ - black/mid/white density shaping through `Offset`, `Power`, and `Slope`
135
+ - gentle RGB balance shifts
136
+ - global saturation trims
137
+ - broad shot matching when a node already exists
138
+
139
+ CDL is not a replacement for:
140
+
141
+ - curved highlight roll-off
142
+ - qualified skin isolation
143
+ - windowed relighting
144
+ - hue-specific curve work
145
+ - texture, halation, glow, grain, or OFX looks
146
+ - full scene-level creative grading
147
+
148
+ Prefer conservative CDL values. Large CDL moves can break skin, clip channels,
149
+ or create unnatural color separation.
150
+
151
+ ## What LUTs And DCTLs Are Good For
152
+
153
+ Use LUTs and DCTLs when the desired transform can be expressed as a reusable
154
+ mathematical or lookup-based operation:
155
+
156
+ - camera/log to viewing transform
157
+ - show LUT or creative contrast/saturation curve
158
+ - color matrix or channel operation
159
+ - technical IDT/ODT-style transform
160
+ - repeatable look preview
161
+
162
+ Use DCTL authoring only for transforms that are appropriate to code. DCTLs can
163
+ be powerful, but they are not a substitute for tracked windows, qualifiers, or
164
+ hand-shaped secondaries.
165
+
166
+ Regular LUT/DCTL installs require `project_settings(action="refresh_luts")`.
167
+ ACES IDT/ODT DCTLs require a Resolve restart.
168
+
169
+ ## What DRX Is Good For
170
+
171
+ Use `.drx` and Gallery stills for full Resolve grades:
172
+
173
+ - prebuilt node trees
174
+ - manually created grades
175
+ - complex secondaries
176
+ - tracked windows
177
+ - OFX-based looks
178
+ - show looks that should be reused exactly
179
+
180
+ Before applying DRX:
181
+
182
+ - save or snapshot the current grade version
183
+ - confirm the target graph can be replaced
184
+ - use `grade_mode=0` unless source-timecode or start-frame alignment is
185
+ explicitly needed
186
+ - verify the result visually with a still, thumbnail, or Gallery export
187
+
188
+ ## Frame Comparison Requirements
189
+
190
+ For creative grading, shot matching, look development, or changing an existing
191
+ grade, compare pictures at matched timecodes whenever the API can safely provide
192
+ them:
193
+
194
+ - untreated or bypass frame: the source without the active grade, captured by
195
+ loading a clean version or temporarily disabling grade nodes, then restoring
196
+ the previous state
197
+ - current frame: the active creative baseline before the requested change
198
+ - after frame: the same timecode after the change
199
+
200
+ Use untreated frames as diagnostic evidence, not as permission to discard an
201
+ existing grade. If a current grade exists, it is the creative baseline. The
202
+ untreated frame explains what the image is made of; the current frame explains
203
+ what the colorist or user already chose.
204
+
205
+ All frame references must be Resolve-rendered and written only to sidecar,
206
+ session scratch, or the configured analysis root. Never create derivatives next
207
+ to source media. Record the frame, timecode, marker, contact sheet, or still path
208
+ that informed the decision.
209
+
210
+ If untreated/current/after comparison is not available through the API in the
211
+ moment, say which part is unavailable and whether the user wants a blind/global
212
+ pass. Do not imply that a grade was reviewed if no rendered frames were checked.
213
+
214
+ ## Safe Color Workflow
215
+
216
+ Before changing color:
217
+
218
+ - switch to the Color page when required
219
+ - call `timeline_item_color(action="grade_boundary_report")`
220
+ - call `timeline_item_color(action="grade_version_snapshot")`
221
+ - call `timeline_item_color(action="probe_node_graph")`
222
+ - check whether the item is in a color group and whether group pre-clip or
223
+ post-clip grades may affect the rendered result
224
+ - check whether the requested action is direct, opaque, or unsupported
225
+ - inspect representative Resolve-rendered frames for the target shot or shots
226
+ before writing grade changes
227
+ - use timeline thumbnails, contact sheets, marker frames, Gallery stills, or
228
+ existing visual analysis reports as the frame reference
229
+ - when there is an existing grade, capture current treated frames before making
230
+ the adjustment
231
+ - when useful for diagnosis, capture untreated/bypass frames at the same
232
+ timecodes and then restore the original active version or node-enabled state
233
+ - note the reference frame, timecode, marker, or contact sheet used to make the
234
+ decision
235
+ - if frame review is unavailable, ask before applying a blind/global look unless
236
+ the user explicitly requested blind/global grading
237
+
238
+ For sequence-wide creative looks:
239
+
240
+ - confirm the target scope first: current clip, selected clips, current timeline,
241
+ duplicated timeline, color group, or every timeline using the same media
242
+ - duplicate the timeline unless the user explicitly wants an in-place/global pass
243
+ - create recoverable local grade versions across the whole target set before
244
+ applying the look:
245
+ - reference/base version: a clean version used for diagnosis and A/B
246
+ - current/baseline version: the active creative grade before the new request
247
+ - requested look version: the active version that receives the new pass
248
+ - do not call a reference version "ungraded" unless it is truly ungraded; if the
249
+ best available base is `Version 1`, name or report it as a `Version 1`
250
+ reference when its grade state has not been verified
251
+ - batch repeated version, group, and CDL operations through a single Resolve
252
+ script or bulk helper when practical; avoid one tool call per clip per step
253
+ - use color groups when multiple clips should share scene-level intent, but keep
254
+ per-shot balance and matching on clip versions
255
+
256
+ Use this group structure when it fits the work:
257
+
258
+ - group pre-clip: shared normalization or input trim, when the clips genuinely
259
+ need the same upstream correction
260
+ - clip: shot-specific balance, exposure, skin, sky, and continuity decisions
261
+ - group post-clip: shared creative look or output trim for the sequence
262
+
263
+ Do not use groups as a shortcut around reviewing shots. A group look can establish
264
+ the broad direction, but clip-level review remains responsible for faces,
265
+ highlights, skies, foliage, and outliers.
266
+
267
+ For small corrections:
268
+
269
+ - use `timeline_item_color(action="safe_set_cdl", params={...})`
270
+ - dry-run first when possible
271
+ - target an existing node index
272
+ - read back grade state afterward, including node tools when exposed
273
+
274
+ For adjusting an existing grade:
275
+
276
+ - treat the current grade as the creative baseline, not disposable state
277
+ - inspect the active version, available local/remote versions, node count, LUTs,
278
+ cache state, color group membership, and representative frames
279
+ - create or switch to a clearly named adjustment version before changing values
280
+ - make incremental changes through supported controls such as CDL, LUT assignment
281
+ on existing nodes, node enable/cache state, or accepted grade-copy workflows
282
+ - avoid `reset_all_grades`, DRX application, or copied whole-grade replacement
283
+ unless the user explicitly accepts replacement semantics
284
+ - explain whether the change adjusted the existing grade, copied a grade, or
285
+ replaced a graph-level artifact
286
+ - do not describe Resolve's default one-node graph as an existing creative grade;
287
+ distinguish "default/empty node graph" from "active grade tools present"
288
+
289
+ For matching:
290
+
291
+ - choose a hero/reference shot
292
+ - copy the grade only when the reference grade is already valid
293
+ - otherwise apply a conservative CDL match and review visually
294
+ - use color groups for shared scene-level intent when appropriate
295
+ - compare against the hero shot and the adjacent cuts, not just the shot in
296
+ isolation
297
+
298
+ For look development:
299
+
300
+ - prefer a plan first: CDL, LUT/DCTL, DRX, or manual Resolve work
301
+ - generate DCTL/LUT assets only when the transform is suitable for code
302
+ - use DRX/stills for complex hand-built looks
303
+ - start with hero frames for the look, then test the look on outlier shots before
304
+ applying it broadly
305
+ - sampling is acceptable for a fast first-pass direction, not final approval; for
306
+ short sequences, inspect every target shot before handoff
307
+ - for long sequences where full review is not feasible in the current turn,
308
+ clearly separate sampled look development from final validation and report the
309
+ remaining unreviewed scope
310
+
311
+ After changing color:
312
+
313
+ - grab or export after frames for visual confirmation when useful
314
+ - compare against the same untreated/current reference frames or reference shot
315
+ - confirm no obvious clipping, bad skin tone, or mismatch was introduced
316
+ - check whether the intended effect actually reads as requested, and revise if
317
+ the first pass is only technically different rather than creatively successful
318
+ - re-probe grade versions and node graph state when the change should have
319
+ modified node tools, LUTs, cache, or enabled state
320
+ - keep the original grade recoverable through versions or Gallery stills
321
+ - confirm the active version at handoff and note whether a reference/base version
322
+ was created, assumed from an existing version, or unavailable
323
+
324
+ ## Review Notes And Handoff
325
+
326
+ Assistant-style documentation makes automated color work easier to trust:
327
+
328
+ - report the active version before and after the operation
329
+ - report the target scope and whether the operation happened on the original
330
+ timeline, a duplicated timeline, a color group, or selected clips
331
+ - report any created reference/current/look versions and whether the reference
332
+ was verified as truly ungraded
333
+ - report whether the node graph was default/empty, carried active tools, used a
334
+ LUT, or belonged to a color group
335
+ - report the operation type: CDL adjustment, LUT assignment, copied grade, DRX
336
+ replacement, DCTL/LUT asset creation, or review only
337
+ - report the frame references used for the decision and whether they were
338
+ untreated, current, or after frames
339
+ - report known limits, such as compressed source, clipped highlights, missing
340
+ thumbnails, unavailable Gallery export, or unsupported node construction
341
+ - use timeline markers, clip colors, or notes for review flags when the API
342
+ supports them and the user wants persistent review state
343
+
344
+ Do not promise node labels or node colors unless the available API path can
345
+ actually write them. Existing labels, LUTs, tools, and cache state can be
346
+ inspected and reported.
347
+
348
+ ## Agent Response Rules
349
+
350
+ When answering a color request, classify the requested operation:
351
+
352
+ - Direct API grade: CDL, LUT assignment, version, group, cache, enable/disable
353
+ - Opaque full grade: copy grade, apply DRX, import/export stills
354
+ - Asset authoring: LUT or DCTL creation/install
355
+ - Review only: stills, thumbnails, visual analysis, boundary reports
356
+ - Unsupported direct control: windows, qualifiers, curves, wheels, node-tree
357
+ construction, tracker controls, OFX parameter edits
358
+
359
+ Then explain the safest available route. Be explicit about limitations. A good
360
+ answer sounds like:
361
+
362
+ > "I can make this as a conservative CDL correction, or apply/copy a full grade
363
+ > from a DRX/still. I cannot construct the windowed qualifier node tree directly
364
+ > through the public API."
365
+
366
+ Do not invent Color page controls that are not exposed. Do not imply that a LUT,
367
+ DCTL, or CDL is equivalent to a full colorist pass.
368
+
369
+ ## Useful MCP Calls
370
+
371
+ - `resolve_control(action="open_page", params={"page": "color"})`
372
+ - `timeline_item_color(action="grade_boundary_report", params={...})`
373
+ - `timeline_item_color(action="probe_grade_item", params={...})`
374
+ - `timeline_item_color(action="probe_node_graph", params={...})`
375
+ - `timeline_item_color(action="grade_version_snapshot", params={...})`
376
+ - `timeline_item_color(action="safe_set_cdl", params={...})`
377
+ - `timeline_item_color(action="safe_copy_grade", params={...})`
378
+ - `timeline_item_color(action="safe_apply_drx", params={...})`
379
+ - `timeline_item_color(action="safe_export_lut", params={...})`
380
+ - `graph(action="set_lut", params={...})`
381
+ - `graph(action="apply_grade_from_drx", params={...})`
382
+ - `gallery_stills(action="grab_and_export", params={...})`
383
+ - `dctl(action="install", params={...})`
384
+ - `project_settings(action="refresh_luts")`
385
+
386
+ Use `safe_*`, probe, snapshot, and dry-run actions before mutation whenever they
387
+ exist.
@@ -0,0 +1,136 @@
1
+ # Resolve Editorial Decision Guide
2
+
3
+ This guide is the project-owned editorial context for the DaVinci Resolve MCP.
4
+ Use it when analysis moves from "what is in the media?" to "what should the edit
5
+ do next?" It is deliberately self-contained so the MCP does not depend on any
6
+ personal or external skill library.
7
+
8
+ ## Core Priorities
9
+
10
+ Editorial decisions should serve this order:
11
+
12
+ 1. Emotion and story
13
+ 2. Clarity of thought or action
14
+ 3. Rhythm and timing
15
+ 4. Eye trace and screen geography
16
+ 5. Continuity and technical polish
17
+ 6. Coverage variety
18
+
19
+ Good coverage is useful only when it helps the viewer understand, feel, or
20
+ anticipate something. When those goals conflict, keep the moment that carries
21
+ the clearest emotional or narrative charge.
22
+
23
+ ## Analysis Memory
24
+
25
+ Before running new analysis or suggesting edits, inspect what the active project
26
+ already knows:
27
+
28
+ - `media_analysis(action="summarize")`
29
+ - `media_analysis(action="get_report")` for known manifests or clip reports
30
+ - `timeline(action="probe_timeline_structure")`
31
+ - `timeline(action="story_spine_report")`
32
+ - `timeline(action="source_range_report")`
33
+ - `timeline_markers(action="get_all")`
34
+ - `media_analysis(action="review_timeline_markers")` when marker imagery matters
35
+
36
+ Reuse existing reports unless they are stale, incomplete, or missing a modality
37
+ the user explicitly needs. A new request for edit advice is not automatically a
38
+ reason to re-run visual analysis if the prior report already has current
39
+ technical data, motion/keyframe evidence, and useful visual descriptions.
40
+
41
+ ## Frame Choice
42
+
43
+ Find the decisive frame, not just the technically clean frame. Useful cut points
44
+ often occur when a face changes intention, a hand completes a thought, a gaze
45
+ lands, a movement resolves, or the audience has received the needed information.
46
+
47
+ For dialogue and reaction:
48
+
49
+ - Prefer the reaction when it carries the meaning.
50
+ - Let sound lead picture when the incoming idea needs setup.
51
+ - Let picture lead sound when surprise, reveal, or anticipation matters.
52
+ - Avoid cutting away before a thought has landed unless compression is the
53
+ point.
54
+
55
+ For movement:
56
+
57
+ - Cut on completed or motivated motion.
58
+ - Use motion peaks as candidates, then verify the frame visually.
59
+ - Treat scene detection and variance as guardrails, not the editor.
60
+
61
+ ## Sound First
62
+
63
+ For interviews, dialogue, comedy, and short-form editorial, build the audio spine
64
+ before chasing visual variety:
65
+
66
+ - Premise: what the viewer needs to understand first
67
+ - Setup: the pressure, context, or contrast
68
+ - Turn: the new idea, contradiction, reveal, or escalation
69
+ - Button: the final image, line, beat, or release
70
+
71
+ When trimming, preserve complete thoughts and clean transitions in breath,
72
+ tone, and room sound. Visual cutaways can hide picture edits, but they cannot
73
+ fix a broken idea.
74
+
75
+ ## Finished-Video Guardrails
76
+
77
+ When analyzing an already-finished video, do not treat every detected cut as an
78
+ edit instruction. Use black frames, flash frames, scene-change clusters, silence,
79
+ and motion spikes to find regions that need verification.
80
+
81
+ Finished-video analysis should produce:
82
+
83
+ - Likely scene or section boundaries
84
+ - Ranges to avoid because of black, flash, silence, or corrupt frames
85
+ - Audio-led story beats
86
+ - Visual evidence at markers and cut points
87
+ - Questions where the image contradicts the label or transcript
88
+
89
+ ## Marker And Contact-Sheet Review
90
+
91
+ Markers are memory, not truth. When a marker name, note, or beat label matters,
92
+ verify it against a Resolve-rendered frame:
93
+
94
+ - Generate a marker contact sheet.
95
+ - Compare each label with the visible frame.
96
+ - Rename, move, or downgrade markers that do not match the image.
97
+ - Keep marker notes concrete enough that another editor can act on them.
98
+
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.
104
+
105
+ ## Edit Variant Safety
106
+
107
+ Before making or changing a timeline variant:
108
+
109
+ - Check timeline start frame and timecode; many Resolve timelines start at
110
+ `01:00:00:00`, often frame `108000` at 30 fps.
111
+ - Prefer dry runs for range-based operations.
112
+ - Keep source media untouched.
113
+ - Use positioned appends and explicit source ranges.
114
+
115
+ After changing a variant:
116
+
117
+ - Run `timeline(action="detect_gaps_overlaps")`.
118
+ - Run `timeline(action="source_range_report")`.
119
+ - Review thumbnails at important markers and cut points.
120
+ - Confirm the audio spine still reads.
121
+
122
+ ## Response Shape
123
+
124
+ When reporting analysis back to the user, make it editor-usable:
125
+
126
+ - What was analyzed
127
+ - Whether prior analysis was reused or refreshed
128
+ - Technical warnings that affect editing
129
+ - Motion and variance summary
130
+ - Visual content and best moments
131
+ - Transcript or sound notes
132
+ - Avoid ranges
133
+ - Concrete next actions
134
+
135
+ Avoid overclaiming from sparse evidence. If the tool only sampled a few frames,
136
+ say so and recommend the specific next verification step.