davinci-resolve-mcp 2.57.5 → 2.59.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 (331) hide show
  1. package/AGENTS.md +20 -0
  2. package/CHANGELOG.md +209 -2
  3. package/LICENSE +1 -1
  4. package/README.md +76 -11
  5. package/bin/davinci-resolve-advanced-mcp.mjs +20 -0
  6. package/docs/README.md +19 -0
  7. package/docs/SKILL.md +62 -1
  8. package/docs/contributing.md +1 -1
  9. package/docs/guides/control-panel.md +9 -0
  10. package/docs/kernels/README.md +21 -0
  11. package/docs/kernels/audio-fairlight-kernel.md +22 -0
  12. package/docs/kernels/color-grade-kernel.md +51 -0
  13. package/docs/kernels/fusion-composition-kernel.md +17 -0
  14. package/docs/kernels/media-pool-ingest-kernel.md +20 -0
  15. package/docs/kernels/render-deliver-kernel.md +32 -0
  16. package/docs/kernels/timeline-conform-interchange-kernel.md +39 -0
  17. package/docs/kernels/timeline-edit-kernel.md +17 -0
  18. package/docs/process/release-process.md +29 -7
  19. package/docs/reference/api-coverage.md +1 -1
  20. package/install.py +35 -4
  21. package/package.json +23 -2
  22. package/resolve-advanced/README.md +199 -0
  23. package/resolve-advanced/package.json +50 -0
  24. package/resolve-advanced/server/aaf.mjs +104 -0
  25. package/resolve-advanced/server/author-interchange.mjs +152 -0
  26. package/resolve-advanced/server/black-balance.mjs +92 -0
  27. package/resolve-advanced/server/capabilities.mjs +86 -0
  28. package/resolve-advanced/server/cdl-io.mjs +76 -0
  29. package/resolve-advanced/server/contrast-normalize.mjs +180 -0
  30. package/resolve-advanced/server/db-patch.mjs +91 -0
  31. package/resolve-advanced/server/deliverable-entities.mjs +86 -0
  32. package/resolve-advanced/server/deliverable-qc.mjs +270 -0
  33. package/resolve-advanced/server/editorial.mjs +382 -0
  34. package/resolve-advanced/server/exposure-level.mjs +129 -0
  35. package/resolve-advanced/server/extract-frames.mjs +196 -0
  36. package/resolve-advanced/server/ffprobe-media.mjs +88 -0
  37. package/resolve-advanced/server/gamut-legal.mjs +112 -0
  38. package/resolve-advanced/server/grade-body-patch.mjs +246 -0
  39. package/resolve-advanced/server/grade-transfer.mjs +66 -0
  40. package/resolve-advanced/server/group-grade-read.mjs +137 -0
  41. package/resolve-advanced/server/index.mjs +105 -0
  42. package/resolve-advanced/server/lib.mjs +84 -0
  43. package/resolve-advanced/server/libs.mjs +65 -0
  44. package/resolve-advanced/server/lineage-db.mjs +479 -0
  45. package/resolve-advanced/server/lut-apply.mjs +61 -0
  46. package/resolve-advanced/server/match-to-reference.mjs +173 -0
  47. package/resolve-advanced/server/media-inventory.mjs +169 -0
  48. package/resolve-advanced/server/media-ops.mjs +243 -0
  49. package/resolve-advanced/server/node-meta-db.mjs +62 -0
  50. package/resolve-advanced/server/node-provenance.mjs +102 -0
  51. package/resolve-advanced/server/offline-ref-db.mjs +420 -0
  52. package/resolve-advanced/server/offline-ref.mjs +179 -0
  53. package/resolve-advanced/server/project-db.mjs +233 -0
  54. package/resolve-advanced/server/provenance-audit.mjs +210 -0
  55. package/resolve-advanced/server/prproj.mjs +262 -0
  56. package/resolve-advanced/server/qc-frame.mjs +224 -0
  57. package/resolve-advanced/server/qc-sampler.mjs +67 -0
  58. package/resolve-advanced/server/readback.mjs +77 -0
  59. package/resolve-advanced/server/render-manifest.mjs +93 -0
  60. package/resolve-advanced/server/reverse-clip-db.mjs +270 -0
  61. package/resolve-advanced/server/runner-apply-contract.mjs +64 -0
  62. package/resolve-advanced/server/runner.mjs +244 -0
  63. package/resolve-advanced/server/saturation-match.mjs +108 -0
  64. package/resolve-advanced/server/scope-read.mjs +257 -0
  65. package/resolve-advanced/server/season-look.mjs +96 -0
  66. package/resolve-advanced/server/sequences.mjs +86 -0
  67. package/resolve-advanced/server/shot-intent.mjs +82 -0
  68. package/resolve-advanced/server/shot-match.mjs +147 -0
  69. package/resolve-advanced/server/skin-match.mjs +205 -0
  70. package/resolve-advanced/server/spec-compile.mjs +217 -0
  71. package/resolve-advanced/server/tone-curve-transfer.mjs +184 -0
  72. package/resolve-advanced/server/tool-catalog.mjs +265 -0
  73. package/resolve-advanced/server/tools/audio.mjs +54 -0
  74. package/resolve-advanced/server/tools/audio_plan.mjs +58 -0
  75. package/resolve-advanced/server/tools/capabilities.mjs +16 -0
  76. package/resolve-advanced/server/tools/color_trace.mjs +165 -0
  77. package/resolve-advanced/server/tools/conform.mjs +291 -0
  78. package/resolve-advanced/server/tools/deliverable.mjs +105 -0
  79. package/resolve-advanced/server/tools/drp.mjs +232 -0
  80. package/resolve-advanced/server/tools/drt.mjs +208 -0
  81. package/resolve-advanced/server/tools/drx.mjs +943 -0
  82. package/resolve-advanced/server/tools/editorial.mjs +142 -0
  83. package/resolve-advanced/server/tools/fairlight.mjs +108 -0
  84. package/resolve-advanced/server/tools/fusion.mjs +64 -0
  85. package/resolve-advanced/server/tools/media.mjs +102 -0
  86. package/resolve-advanced/server/tools/offline_ref.mjs +123 -0
  87. package/resolve-advanced/server/tools/pipeline.mjs +137 -0
  88. package/resolve-advanced/server/tools/project_db.mjs +200 -0
  89. package/resolve-advanced/server/tools/project_read.mjs +212 -0
  90. package/resolve-advanced/server/tools/provenance.mjs +73 -0
  91. package/resolve-advanced/server/verify-grade.mjs +113 -0
  92. package/resolve-advanced/server/white-balance-match.mjs +122 -0
  93. package/resolve-advanced/vendor/audio/format-converter.js +330 -0
  94. package/resolve-advanced/vendor/audio/split.js +173 -0
  95. package/resolve-advanced/vendor/audio/trim.js +188 -0
  96. package/resolve-advanced/vendor/audio-fairlight/index.js +391 -0
  97. package/resolve-advanced/vendor/conform-qc/adapters/frame-sampler.js +56 -0
  98. package/resolve-advanced/vendor/conform-qc/adapters/local-ffmpeg-sampler.js +65 -0
  99. package/resolve-advanced/vendor/conform-qc/adapters/rendernode-ffmpeg-sampler.js +50 -0
  100. package/resolve-advanced/vendor/conform-qc/adapters/resolve/driver.py +176 -0
  101. package/resolve-advanced/vendor/conform-qc/adapters/resolve-driver.js +61 -0
  102. package/resolve-advanced/vendor/conform-qc/adapters/resolve-headless-driver.js +86 -0
  103. package/resolve-advanced/vendor/conform-qc/adapters/vision-validator.js +75 -0
  104. package/resolve-advanced/vendor/conform-qc/cli.js +63 -0
  105. package/resolve-advanced/vendor/conform-qc/compare/advisory.js +106 -0
  106. package/resolve-advanced/vendor/conform-qc/compare/decode.js +36 -0
  107. package/resolve-advanced/vendor/conform-qc/compare/index.js +61 -0
  108. package/resolve-advanced/vendor/conform-qc/compare/locate.js +70 -0
  109. package/resolve-advanced/vendor/conform-qc/compare/metrics.js +409 -0
  110. package/resolve-advanced/vendor/conform-qc/docs/runbook.md +72 -0
  111. package/resolve-advanced/vendor/conform-qc/index.js +49 -0
  112. package/resolve-advanced/vendor/conform-qc/knowledge/index.js +110 -0
  113. package/resolve-advanced/vendor/conform-qc/ops/conform-core.js +137 -0
  114. package/resolve-advanced/vendor/conform-qc/ops/conform-diff.js +109 -0
  115. package/resolve-advanced/vendor/conform-qc/ops/insert.js +108 -0
  116. package/resolve-advanced/vendor/conform-qc/ops/local-conform.js +61 -0
  117. package/resolve-advanced/vendor/conform-qc/ops/patch.js +80 -0
  118. package/resolve-advanced/vendor/conform-qc/ops/trigger.js +32 -0
  119. package/resolve-advanced/vendor/conform-qc/ops/verify.js +105 -0
  120. package/resolve-advanced/vendor/conform-qc/ops/workflow.js +30 -0
  121. package/resolve-advanced/vendor/conform-qc/oracle/emulate.js +155 -0
  122. package/resolve-advanced/vendor/conform-qc/oracle/index.js +38 -0
  123. package/resolve-advanced/vendor/conform-qc/oracle/resolve.js +196 -0
  124. package/resolve-advanced/vendor/conform-qc/package.json +16 -0
  125. package/resolve-advanced/vendor/conform-qc/packaging/emit-aaf.js +30 -0
  126. package/resolve-advanced/vendor/conform-qc/packaging/emit-fcp7.js +64 -0
  127. package/resolve-advanced/vendor/conform-qc/packaging/index.js +169 -0
  128. package/resolve-advanced/vendor/conform-qc/packaging/media-ops.js +56 -0
  129. package/resolve-advanced/vendor/conform-qc/packaging/otio.js +50 -0
  130. package/resolve-advanced/vendor/conform-qc/packaging/relink.js +50 -0
  131. package/resolve-advanced/vendor/conform-qc/packaging/surgical-relink.js +195 -0
  132. package/resolve-advanced/vendor/conform-qc/parse/index.js +54 -0
  133. package/resolve-advanced/vendor/conform-qc/parse/merge-dto.js +27 -0
  134. package/resolve-advanced/vendor/conform-qc/parse/xmeml-geometry.js +256 -0
  135. package/resolve-advanced/vendor/conform-qc/reference/burnin-ocr.js +100 -0
  136. package/resolve-advanced/vendor/conform-qc/reference/sidecar.js +37 -0
  137. package/resolve-advanced/vendor/conform-qc/repair/analysis.js +62 -0
  138. package/resolve-advanced/vendor/conform-qc/repair/index.js +78 -0
  139. package/resolve-advanced/vendor/conform-qc/repair/media-analysis.js +139 -0
  140. package/resolve-advanced/vendor/conform-qc/repair/media-index.js +135 -0
  141. package/resolve-advanced/vendor/conform-qc/repair/strategies.js +250 -0
  142. package/resolve-advanced/vendor/conform-qc/report/index.js +133 -0
  143. package/resolve-advanced/vendor/conform-qc/roles/index.js +96 -0
  144. package/resolve-advanced/vendor/conform-qc/synthetic/generate.js +233 -0
  145. package/resolve-advanced/vendor/conform-qc/test/advisory.test.js +85 -0
  146. package/resolve-advanced/vendor/conform-qc/test/cli.test.js +39 -0
  147. package/resolve-advanced/vendor/conform-qc/test/compare.test.js +152 -0
  148. package/resolve-advanced/vendor/conform-qc/test/conform-diff.test.js +70 -0
  149. package/resolve-advanced/vendor/conform-qc/test/emulate.test.js +51 -0
  150. package/resolve-advanced/vendor/conform-qc/test/frame-sampler.test.js +30 -0
  151. package/resolve-advanced/vendor/conform-qc/test/geometry.test.js +112 -0
  152. package/resolve-advanced/vendor/conform-qc/test/knowledge.test.js +56 -0
  153. package/resolve-advanced/vendor/conform-qc/test/lifecycle.test.js +110 -0
  154. package/resolve-advanced/vendor/conform-qc/test/local-ffmpeg-sampler.test.js +66 -0
  155. package/resolve-advanced/vendor/conform-qc/test/locate.test.js +63 -0
  156. package/resolve-advanced/vendor/conform-qc/test/media-analysis.test.js +63 -0
  157. package/resolve-advanced/vendor/conform-qc/test/media-index-normalized.test.js +65 -0
  158. package/resolve-advanced/vendor/conform-qc/test/media-index-origin.test.js +53 -0
  159. package/resolve-advanced/vendor/conform-qc/test/metrics-fast.test.js +91 -0
  160. package/resolve-advanced/vendor/conform-qc/test/oracle-reverse.test.js +86 -0
  161. package/resolve-advanced/vendor/conform-qc/test/oracle.test.js +136 -0
  162. package/resolve-advanced/vendor/conform-qc/test/p0-acceptance.test.js +60 -0
  163. package/resolve-advanced/vendor/conform-qc/test/p1-acceptance.test.js +75 -0
  164. package/resolve-advanced/vendor/conform-qc/test/p45-patch-acceptance.test.js +102 -0
  165. package/resolve-advanced/vendor/conform-qc/test/packaging.test.js +133 -0
  166. package/resolve-advanced/vendor/conform-qc/test/parse-stubs.test.js +28 -0
  167. package/resolve-advanced/vendor/conform-qc/test/repair-strategies.test.js +128 -0
  168. package/resolve-advanced/vendor/conform-qc/test/repair.test.js +84 -0
  169. package/resolve-advanced/vendor/conform-qc/test/report.test.js +52 -0
  170. package/resolve-advanced/vendor/conform-qc/test/resolve-readback.test.js +71 -0
  171. package/resolve-advanced/vendor/conform-qc/test/roles.test.js +107 -0
  172. package/resolve-advanced/vendor/conform-qc/test/runbook.test.js +30 -0
  173. package/resolve-advanced/vendor/conform-qc/test/scale-residual.test.js +40 -0
  174. package/resolve-advanced/vendor/conform-qc/test/sidecar.test.js +51 -0
  175. package/resolve-advanced/vendor/conform-qc/test/smoke.test.js +87 -0
  176. package/resolve-advanced/vendor/conform-qc/test/surgical-relink.test.js +73 -0
  177. package/resolve-advanced/vendor/conform-qc/test/synthetic.test.js +98 -0
  178. package/resolve-advanced/vendor/conform-qc/test/verify.test.js +93 -0
  179. package/resolve-advanced/vendor/conform-qc/test/vision-validator.test.js +43 -0
  180. package/resolve-advanced/vendor/conform-qc/test/workflow-driver.test.js +46 -0
  181. package/resolve-advanced/vendor/conform-qc/toolset/index.js +53 -0
  182. package/resolve-advanced/vendor/drp-format/README.md +116 -0
  183. package/resolve-advanced/vendor/drp-format/__tests__/_resolve-verify.js +39 -0
  184. package/resolve-advanced/vendor/drp-format/__tests__/add-media-clip.test.js +30 -0
  185. package/resolve-advanced/vendor/drp-format/__tests__/assemble-timeline.test.js +68 -0
  186. package/resolve-advanced/vendor/drp-format/__tests__/author-project.test.js +57 -0
  187. package/resolve-advanced/vendor/drp-format/__tests__/composition-text.test.js +98 -0
  188. package/resolve-advanced/vendor/drp-format/__tests__/diff.test.js +272 -0
  189. package/resolve-advanced/vendor/drp-format/__tests__/effect-filters-compressed.test.js +143 -0
  190. package/resolve-advanced/vendor/drp-format/__tests__/fixtures/p0-3-session30-empty-effectfilters.drp +0 -0
  191. package/resolve-advanced/vendor/drp-format/__tests__/fixtures/retimed-timemap-50pct.hex +1 -0
  192. package/resolve-advanced/vendor/drp-format/__tests__/fixtures/retimed-timemap-dynamic.hex +1 -0
  193. package/resolve-advanced/vendor/drp-format/__tests__/inject-grades.test.js +238 -0
  194. package/resolve-advanced/vendor/drp-format/__tests__/keyed-dict.test.js +85 -0
  195. package/resolve-advanced/vendor/drp-format/__tests__/lut-refs.test.js +119 -0
  196. package/resolve-advanced/vendor/drp-format/__tests__/media-blobs.test.js +25 -0
  197. package/resolve-advanced/vendor/drp-format/__tests__/media-timemap.test.js +119 -0
  198. package/resolve-advanced/vendor/drp-format/__tests__/place-fusion-title.test.js +52 -0
  199. package/resolve-advanced/vendor/drp-format/__tests__/place-generator.test.js +40 -0
  200. package/resolve-advanced/vendor/drp-format/__tests__/place-transition.test.js +48 -0
  201. package/resolve-advanced/vendor/drp-format/__tests__/protobuf-wire.test.js +64 -0
  202. package/resolve-advanced/vendor/drp-format/__tests__/relink-media.test.js +106 -0
  203. package/resolve-advanced/vendor/drp-format/__tests__/splice-clips.test.js +256 -0
  204. package/resolve-advanced/vendor/drp-format/assemble-timeline.js +65 -0
  205. package/resolve-advanced/vendor/drp-format/author-project.js +118 -0
  206. package/resolve-advanced/vendor/drp-format/composition-text.js +213 -0
  207. package/resolve-advanced/vendor/drp-format/curves-encoder.js +763 -0
  208. package/resolve-advanced/vendor/drp-format/diff.js +310 -0
  209. package/resolve-advanced/vendor/drp-format/drp-packager.js +201 -0
  210. package/resolve-advanced/vendor/drp-format/drp-validator.js +809 -0
  211. package/resolve-advanced/vendor/drp-format/effect-encoder.js +640 -0
  212. package/resolve-advanced/vendor/drp-format/extract-lut-refs.js +119 -0
  213. package/resolve-advanced/vendor/drp-format/grade-encoder.example.js +133 -0
  214. package/resolve-advanced/vendor/drp-format/grade-encoder.js +401 -0
  215. package/resolve-advanced/vendor/drp-format/grade-encoder.test.js +171 -0
  216. package/resolve-advanced/vendor/drp-format/grade-encoder.verify.js +249 -0
  217. package/resolve-advanced/vendor/drp-format/grade-node-extractor.js +495 -0
  218. package/resolve-advanced/vendor/drp-format/grade-parameter-decoder.js +774 -0
  219. package/resolve-advanced/vendor/drp-format/index.js +174 -0
  220. package/resolve-advanced/vendor/drp-format/inject-grades.js +219 -0
  221. package/resolve-advanced/vendor/drp-format/keyed-dict.js +227 -0
  222. package/resolve-advanced/vendor/drp-format/marker-encoder.js +532 -0
  223. package/resolve-advanced/vendor/drp-format/media-blobs.js +53 -0
  224. package/resolve-advanced/vendor/drp-format/media-timemap.js +164 -0
  225. package/resolve-advanced/vendor/drp-format/mp-folder-builder.js +293 -0
  226. package/resolve-advanced/vendor/drp-format/node-tree-encoder.js +1246 -0
  227. package/resolve-advanced/vendor/drp-format/package.json +18 -0
  228. package/resolve-advanced/vendor/drp-format/place-fusion-title.js +131 -0
  229. package/resolve-advanced/vendor/drp-format/place-generator.js +77 -0
  230. package/resolve-advanced/vendor/drp-format/place-transition.js +91 -0
  231. package/resolve-advanced/vendor/drp-format/power-window-encoder.js +776 -0
  232. package/resolve-advanced/vendor/drp-format/protobuf-wire.js +111 -0
  233. package/resolve-advanced/vendor/drp-format/qualifier-encoder.js +706 -0
  234. package/resolve-advanced/vendor/drp-format/relink-media.js +218 -0
  235. package/resolve-advanced/vendor/drp-format/rich-title-encoder.js +447 -0
  236. package/resolve-advanced/vendor/drp-format/seq-container-builder.js +572 -0
  237. package/resolve-advanced/vendor/drp-format/seq-surgery.js +155 -0
  238. package/resolve-advanced/vendor/drp-format/splice-clips.js +445 -0
  239. package/resolve-advanced/vendor/drp-format/templates/empty-project.drp +0 -0
  240. package/resolve-advanced/vendor/drp-format/templates/fusion-title.xml +56 -0
  241. package/resolve-advanced/vendor/drp-format/templates/generator-solid-color.xml +21 -0
  242. package/resolve-advanced/vendor/drp-format/templates/media-clip-h264.drp +0 -0
  243. package/resolve-advanced/vendor/drp-format/templates/transition-cross-dissolve.xml +22 -0
  244. package/resolve-advanced/vendor/drp-format/tool-registry.descriptor.js +80 -0
  245. package/resolve-advanced/vendor/drp-format/utils/safe-archive.js +54 -0
  246. package/resolve-advanced/vendor/drp-format/xml-builder.js +759 -0
  247. package/resolve-advanced/vendor/drt-format/__tests__/_resolve-verify.js +21 -0
  248. package/resolve-advanced/vendor/drt-format/__tests__/build.test.js +113 -0
  249. package/resolve-advanced/vendor/drt-format/__tests__/multi-format.test.js +93 -0
  250. package/resolve-advanced/vendor/drt-format/__tests__/parse-real-resolve21.test.js +51 -0
  251. package/resolve-advanced/vendor/drt-format/__tests__/parse.test.js +134 -0
  252. package/resolve-advanced/vendor/drt-format/__tests__/resolve-versions.test.js +120 -0
  253. package/resolve-advanced/vendor/drt-format/__tests__/schema-fingerprint.test.js +62 -0
  254. package/resolve-advanced/vendor/drt-format/__tests__/smoke.test.js +27 -0
  255. package/resolve-advanced/vendor/drt-format/__tests__/validate.test.js +109 -0
  256. package/resolve-advanced/vendor/drt-format/capabilities.js +69 -0
  257. package/resolve-advanced/vendor/drt-format/capability-domains.js +56 -0
  258. package/resolve-advanced/vendor/drt-format/drt-builder.js +42 -0
  259. package/resolve-advanced/vendor/drt-format/drt-parser.js +164 -0
  260. package/resolve-advanced/vendor/drt-format/drt-validator.js +98 -0
  261. package/resolve-advanced/vendor/drt-format/index.js +45 -0
  262. package/resolve-advanced/vendor/drt-format/package.json +17 -0
  263. package/resolve-advanced/vendor/drt-format/resolve-versions.js +153 -0
  264. package/resolve-advanced/vendor/drt-format/schema-fingerprint.js +74 -0
  265. package/resolve-advanced/vendor/drt-format/templates/drt-project-shell.xml +124 -0
  266. package/resolve-advanced/vendor/drx-codec/__tests__/curves-roundtrip.test.js +148 -0
  267. package/resolve-advanced/vendor/drx-codec/__tests__/fixtures/p2-1-face-refinement.drx +58 -0
  268. package/resolve-advanced/vendor/drx-codec/__tests__/fixtures/p2-1-filmgrain.drx +58 -0
  269. package/resolve-advanced/vendor/drx-codec/__tests__/fixtures/p2-1-glow.drx +58 -0
  270. package/resolve-advanced/vendor/drx-codec/__tests__/fixtures/p2-1-lens-flare.drx +58 -0
  271. package/resolve-advanced/vendor/drx-codec/__tests__/fixtures/p2-3-beauty-25.drx +58 -0
  272. package/resolve-advanced/vendor/drx-codec/__tests__/fixtures/p2-3-beauty-75.drx +58 -0
  273. package/resolve-advanced/vendor/drx-codec/__tests__/fixtures/p5-1-node-no-lut.drx +58 -0
  274. package/resolve-advanced/vendor/drx-codec/__tests__/fixtures/p5-1-node-with-lut.drx +58 -0
  275. package/resolve-advanced/vendor/drx-codec/__tests__/hsl-curves-roundtrip.test.js +117 -0
  276. package/resolve-advanced/vendor/drx-codec/__tests__/lut-refs-roundtrip.test.js +112 -0
  277. package/resolve-advanced/vendor/drx-codec/__tests__/matte-roundtrip.test.js +167 -0
  278. package/resolve-advanced/vendor/drx-codec/__tests__/ofx-roundtrip.test.js +215 -0
  279. package/resolve-advanced/vendor/drx-codec/__tests__/ofx-slugs-discovery.test.js +149 -0
  280. package/resolve-advanced/vendor/drx-codec/__tests__/power-window-roundtrip.test.js +230 -0
  281. package/resolve-advanced/vendor/drx-codec/__tests__/qualifier-roundtrip.test.js +226 -0
  282. package/resolve-advanced/vendor/drx-codec/cdl-exporter.js +470 -0
  283. package/resolve-advanced/vendor/drx-codec/color-nlp-parser.js +833 -0
  284. package/resolve-advanced/vendor/drx-codec/data/color-nlp-action-mappings.json +2232 -0
  285. package/resolve-advanced/vendor/drx-codec/drx-generator.js +4123 -0
  286. package/resolve-advanced/vendor/drx-codec/drx-merger.js +320 -0
  287. package/resolve-advanced/vendor/drx-codec/drx-parser.js +1808 -0
  288. package/resolve-advanced/vendor/drx-codec/extract-custom-curves.js +215 -0
  289. package/resolve-advanced/vendor/drx-codec/extract-hsl-curves.js +180 -0
  290. package/resolve-advanced/vendor/drx-codec/extract-lut-refs.js +158 -0
  291. package/resolve-advanced/vendor/drx-codec/extract-matte-finesse.js +83 -0
  292. package/resolve-advanced/vendor/drx-codec/extract-ofx-params.js +226 -0
  293. package/resolve-advanced/vendor/drx-codec/extract-power-window.js +184 -0
  294. package/resolve-advanced/vendor/drx-codec/extract-qualifier.js +99 -0
  295. package/resolve-advanced/vendor/drx-codec/index.js +109 -0
  296. package/resolve-advanced/vendor/drx-codec/node-layout.js +249 -0
  297. package/resolve-advanced/vendor/drx-codec/resolved-drx-generator.js +393 -0
  298. package/resolve-advanced/vendor/drx-codec/tool-resolver.js +974 -0
  299. package/resolve-advanced/vendor/drx-codec/training-examples.js +548 -0
  300. package/resolve-advanced/vendor/drx-codec/vocabulary-intents.js +539 -0
  301. package/resolve-advanced/vendor/drx-parameters/CALIBRATION-STATUS.md +319 -0
  302. package/resolve-advanced/vendor/drx-parameters/DRX-VALUE-SCALING.md +251 -0
  303. package/resolve-advanced/vendor/drx-parameters/calibrated-ranges.json +17737 -0
  304. package/resolve-advanced/vendor/drx-parameters/corrector-types.js +120 -0
  305. package/resolve-advanced/vendor/drx-parameters/index.js +193 -0
  306. package/resolve-advanced/vendor/drx-parameters/parameter-codec.js +451 -0
  307. package/resolve-advanced/vendor/drx-parameters/parameter-ids.js +1292 -0
  308. package/resolve-advanced/vendor/drx-parameters/parameter-ranges.js +570 -0
  309. package/resolve-advanced/vendor/drx-parameters/parameter-validator.js +392 -0
  310. package/resolve-advanced/vendor/drx-parameters/resolvefx-registry.json +14973 -0
  311. package/resolve-advanced/vendor/drx-parameters/tool-registry.descriptor.js +38 -0
  312. package/resolve-advanced/vendor/drx-parameters/tools/drx-analyzer.js +371 -0
  313. package/resolve-advanced/vendor/fairlight/index.js +833 -0
  314. package/resolve-advanced/vendor/fusion-codec/composition-generator.js +401 -0
  315. package/resolve-advanced/vendor/fusion-codec/templates/blur-region.js +103 -0
  316. package/resolve-advanced/vendor/fusion-codec/templates/color-correct.js +87 -0
  317. package/resolve-advanced/vendor/fusion-codec/templates/film-grain.js +106 -0
  318. package/resolve-advanced/vendor/fusion-codec/templates/lower-third.js +241 -0
  319. package/resolve-advanced/vendor/fusion-codec/templates/picture-in-picture.js +188 -0
  320. package/resolve-advanced/vendor/fusion-codec/templates/text-overlay.js +161 -0
  321. package/resolve-advanced/vendor/fusion-codec/templates/title-card.js +184 -0
  322. package/resolve-advanced/vendor/fusion-codec/templates/vignette.js +107 -0
  323. package/resolve-advanced/vendor/fusion-codec/templates/watermark.js +101 -0
  324. package/scripts/agent-rules/README.md +68 -0
  325. package/src/analysis_dashboard.py +233 -1
  326. package/src/granular/common.py +1 -1
  327. package/src/server.py +656 -25
  328. package/src/utils/api_truth.py +21 -0
  329. package/src/utils/cut_ir.py +1 -1
  330. package/src/utils/failure_tracker.py +0 -2
  331. package/src/utils/timeline_xml.py +405 -0
package/AGENTS.md CHANGED
@@ -112,3 +112,23 @@ for Resolve scripting; 3.13/3.14 are accepted and verified on Resolve Studio
112
112
  live-validation guidance in `docs/process/release-process.md`.
113
113
  - For docs changes, keep the README concise and move durable detail into
114
114
  dedicated files under `docs/`.
115
+
116
+ <!-- BEGIN GENERATED: domain-routing -->
117
+ <!-- GENERATED by scripts/agent-rules/generate.mjs — edit that, not this file. -->
118
+ ## Domain Routing
119
+
120
+ Per-domain routers pair the live tools with their offline (advanced-server)
121
+ counterparts. Every domain is available on demand in ANY MCP client as a slash
122
+ prompt (`/color_grade_workflow`, `/timeline_edit_workflow`, `/conform_workflow`,
123
+ `/delivery_workflow`, `/analyze_media`) and, in Claude Code, as a `.claude/skills/`
124
+ skill. Full per-action depth lives in `docs/kernels/`.
125
+
126
+ - **Color / Grade** (`/color_grade_workflow`, skill `resolve-color`) — grading, correcting, shot matching, developing looks, or applying/modifying LUTs, CDLs, DRX grades, or copied grades. Live: timeline_item_color. Offline: drx. Depth: docs/kernels/color-grade-kernel.md + docs/guides/color-decision-guide.md.
127
+ - **Timeline Edit** (`/timeline_edit_workflow`, skill `resolve-edit`) — cutting, trimming, pacing, duplicating/moving clips, copying ranges, building variants, tightening a cut, or generating an editorial changelist. Live: timeline. Offline: editorial. Depth: docs/kernels/timeline-edit-kernel.md + docs/guides/editorial-decision-guide.md.
128
+ - **Conform / Interchange** (`/conform_workflow`, skill `resolve-conform`) — importing/relinking editorial, checking a conform against a reference, repairing reversed/retimed subclips, tracing grades across a re-conform, or QCing a conformed timeline. Live: timeline. Offline: conform. Depth: docs/kernels/timeline-conform-interchange-kernel.md.
129
+ - **Delivery / Deliverable QC** (`/delivery_workflow`, skill `resolve-delivery`) — preparing render jobs, validating render settings, QCing a finished render vs spec, building render manifests, expanding texted/textless/stems deliverables, verifying media ingest, or producing a provenance/episode report. Live: render. Offline: deliverable. Depth: docs/kernels/render-deliver-kernel.md.
130
+ - **Fusion Composition** (`/fusion_workflow`, skill `resolve-fusion`) — building or editing Fusion comps — titles, motion graphics, VFX, merges, masks, trackers. Live: fusion_comp. Offline: fusion. Depth: docs/kernels/fusion-composition-kernel.md.
131
+ - **Audio / Fairlight** (`/audio_workflow`, skill `resolve-audio`) — setting audio properties, syncing audio, isolating voice, generating subtitles, planning Fairlight tracks/buses, checking loudness, routing buses, or splitting/trimming/converting audio. Live: timeline. Offline: audio_plan. Depth: docs/kernels/audio-fairlight-kernel.md.
132
+ - **Media Pool / Ingest** (`/media_pool_workflow`, skill `resolve-media-pool`) — importing media, building multicam timelines, organizing/relinking clips, normalizing metadata, or verifying/inventorying a card before ingest. Live: media_pool. Offline: media. Depth: docs/kernels/media-pool-ingest-kernel.md + docs/guides/multicam-setup-guide.md.
133
+ - **Media Analysis** (`/analyze_media`, skill `resolve-media-analysis`) — reading or analyzing source media (technical, visual, or transcription) to inform Resolve actions. Live: media_analysis. Offline: media. Depth: docs/kernels/README.md + docs/guides/media-analysis-guide.md.
134
+ <!-- END GENERATED: domain-routing -->
package/CHANGELOG.md CHANGED
@@ -2,6 +2,213 @@
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.59.0
6
+
7
+ First-class conform ingest for **AAF** and **DRP**, an offline **Premiere `.prproj`** reader with
8
+ a conform bridge, and a unified sequence enumerator — so an editorial turnover in any of these
9
+ formats can be previewed, picked, and brought into Resolve. Everything keeps the honest-refuse
10
+ philosophy: no format is ever faked; an unreadable file yields a clear, actionable error.
11
+
12
+ ### Added
13
+
14
+ - **AAF** — offline preview via the advanced server's `editorial.parse_interchange` (format `aaf`)
15
+ and `list_sequences`, backed by the pure-Python `aaf2` (pyaaf2) reader (shelled out from Node;
16
+ honest-refuses with an install/convert hint when unavailable). Live AAF import now works through
17
+ `timeline.import_timeline_checked` — the XML sanitize pass is skipped for the binary format and,
18
+ when `relink_search_roots` is passed, a post-import media-pool relink runs (fuzzy-relink parity
19
+ via `RelinkClips`), reported in a `relink` block.
20
+ - **DRP** — `drt.list_sequences` enumerates the timelines inside a `.drp`/`.drt`
21
+ (`[{id, name, eventCount}]`) to drive a picker; `timeline.import_from_drp` extracts the chosen
22
+ timelines (offline zip surgery → temp `.drt`) and imports each into a running Resolve.
23
+ - **Premiere `.prproj`** — a from-scratch offline reader (gunzip + object-reference-graph walk, no
24
+ new dependencies) exposed through `parse_interchange` / `list_sequences`. Derives cuts, source
25
+ in/out, timeline positions, speed/retime, reverse, transitions, markers, and media paths. Effects
26
+ and Lumetri color are not translated (the Premiere→Resolve semantic gap, flagged not faked).
27
+ - **Conform bridge** — `editorial.convert_to_interchange` authors OTIO / EDL / DRT that Resolve
28
+ imports, from normalized events or a parsed source. This lets a `.prproj` be conformed into
29
+ Resolve with no Premiere in the loop.
30
+ - **Unified enumeration** — `editorial.list_sequences(path)` is one picker entry point across
31
+ xml/edl/otio/drt/drp/aaf/prproj.
32
+
33
+ ### Dependencies
34
+
35
+ - New optional-but-default `requirements.txt` pins `pyaaf2` (pure-Python, MIT, ~1 MB) for the
36
+ offline AAF reader; the installer points the advanced server's `AAF_PROBE_PYTHON` at the project
37
+ venv so it works out of the box. Without it, AAF preview honest-refuses; nothing else needs it.
38
+
39
+ ### Validation
40
+
41
+ - Static checks, drift guards, and focused unit tests pass (advanced Node suite 455 pass / 9 skip;
42
+ new `test_import_from_drp.py` and `prproj-bridge.test.mjs` / `aaf-sequences.test.mjs`). Offline
43
+ AAF parse validated end-to-end against a real `aaf2`-authored AAF.
44
+ - **Not yet live-validated in Resolve**: AAF import, the post-import relink, `import_from_drp`, and
45
+ importing an authored OTIO/DRT from a real `.prproj`. These paths are offline-tested (fake Resolve)
46
+ and guarded; confirm against a live session with disposable projects before relying on them.
47
+
48
+ ## What's New in v2.58.0
49
+
50
+ Major expansion of the optional **advanced** Node server (`davinci-resolve-advanced-mcp`,
51
+ bundled in the same package) — the beyond-the-API sibling that edits Resolve files
52
+ (`.drp`/`.drt`/`.drx`) offline. It grows from 14 to **18 tools** and adds a deterministic,
53
+ offline grading/QC/finishing catalog. All new capability is offline, deterministic, and
54
+ carries silent-lie guards (it refuses to fabricate a result). None of it touches the live
55
+ Python server or its tool counts.
56
+
57
+ ### Added
58
+
59
+ - **Grading catalog** (`drx` actions): `scope_read` (frame readouts — RGB parade, vectorscope
60
+ skin-line, black-balance, %clip/%crush + shot-intent signals), `intent_tags`, `verify_grade`
61
+ (intended vs applied → landed/drifted/missing/unverifiable), `extract_frames` (display-referred,
62
+ hard log-refuse), `match_to_reference`, `saturation_match`, `black_balance`, `tone_curve_transfer`
63
+ (luma CDF matching), `skin_match` v2 (luma-preserving skin-line metric), `author_look` / `carry_look`
64
+ (season-look authoring), and `lut_apply` — a reverse-engineered Body-LUT write path that attaches a
65
+ named `.cube` to a grade node with a round-trip assert.
66
+ - **`deliverable` tool** — deliverable QC/compliance: `deliverable_qc` (ffprobe vs spec, pass/fail per
67
+ field), `loudness_qc` (EBU R128), `reframe_blanking_check`, `render_manifest` (checksum/reconcile),
68
+ `conform_completeness`, `re_delivery_diff`, `expand_deliverable` (texted/textless/stems entities).
69
+ - **`media` tool** — media front-end / AE: `ingest_verify` (hash seal/verify/dupes), `media_inventory`,
70
+ `sync` (TC), `relink_manifest`, `rename_plan` / `reel_normalize` (refuses camera originals),
71
+ `turnover_package`, `project_hygiene`.
72
+ - **`editorial` tool** — editorial integrity: `parse_interchange` (EDL/OTIO/XMEML), `turnover_changelist`
73
+ with timing silent-lie guards, `conform_manifest`, `marker_roundtrip`.
74
+ - **`provenance` tool** — provenance/audit: `gallery_lineage`, `grade_provenance`, `cdl_export` (+diff),
75
+ `revision_tracking`, `episode_report`.
76
+ - **Node-labeling / provenance** on every auto-emitted grade node (`AUTO:<tool> v<n> → <source>`),
77
+ a **runner→apply contract** (stage → live-server action mapping), and runner **stage-resume**.
78
+ The pipeline records per-episode decoded facts, drift, and provenance (`readback`) — the
79
+ substrate the maintainers' managed application mines for cross-episode insights (see the
80
+ README's Bradford Post Assistant note).
81
+ - **DRX value-space calibration (Phase 1)** — one unified `space: 'ui' | 'drx'` flag on `drx`
82
+ `generate`/`merge`: `'ui'` (the default) takes Resolve panel numbers for every primary
83
+ (lift ×2, gamma ×4, gain 1:1, offset panel-delta ÷25, saturation 0–100 ÷50 — factors
84
+ calibrated by live panel readback against Resolve 19 Studio); `'drx'` takes raw internal
85
+ floats losslessly. 28 scalar/wheel/affine controls confirmed aligned. Factor reference in
86
+ `resolve-advanced/vendor/drx-parameters/DRX-VALUE-SCALING.md`; coverage ledger in
87
+ `CALIBRATION-STATUS.md` alongside it.
88
+ - **DRX structural write fidelity (Phase 2)** — the structural write paths (windows,
89
+ qualifiers, HDR zones, HSL curves, ColorSlice, Color Warper) were audited against live
90
+ Resolve and rebuilt where broken; items marked live-verified below were confirmed by
91
+ applying a generated `.drx` and reading the Resolve panel:
92
+ - **Power windows** — true live-calibrated transform scales (rotate −UI°/180, size
93
+ 1+(UI−50)×0.08, aspect (50−UI)/50, pan/tilt ×4096, softness ×16) replace placeholder
94
+ conventions the registry's old ranges clamped to garbage; linear softness masks and
95
+ gradient params now route to their real corrector blocks. Live-verified exact.
96
+ - **HDR zones** — multi-zone grades now write every zone into the single
97
+ `ZONE_ADJUSTMENTS` param (previously only the last zone survived the encode).
98
+ Live-verified with two zones exact.
99
+ - **Qualifiers** — HSL ranges live-verified exact; RGB and luma modes newly reachable via
100
+ `rgbQualifier` / `lumaQualifier` (mode flags corrected to their real varint wire form;
101
+ the Qualifier palette switches modes correctly). RGB live-verified exact.
102
+ - **ColorSlice** — new write path for the six global controls (identity scale, Hue stored
103
+ negated). Live-verified exact.
104
+ - **HSL curves** — sat/lum-axis curves write correctly with per-curve meta
105
+ (`hslCurveMeta`); hue-axis curves are a strict bezier control cage, and a canonical
106
+ emitter (`canonicalizeHueAxisPoints`) reproduces Resolve's own serialization —
107
+ live-verified single- AND multi-band at multiple positions and values. Known-bad
108
+ geometry (a bump edge landing exactly on a band slot) passes through raw instead
109
+ and now surfaces a `warnings` array on the `generate`/`merge` result ("renders
110
+ FLAT"). Because a malformed wrapped cage can crash Resolve 19 outright, caller-built
111
+ pre-wrapped point lists (x outside [0,1]) are **refused** unless
112
+ `allowWrappedHueCage:true` (the verbatim re-encode escape hatch). `generate` and
113
+ `merge` share the same `space:'ui'` default, and every bundled matcher emitter pins
114
+ `space` explicitly.
115
+ - **Polygon/curve window shapes** — new ct6 vertex-ring write path; geometry renders and
116
+ masks exactly as one window row.
117
+ - **Color Warper** — new pin-list write path matching the Resolve 21 wire format;
118
+ round-trips exactly but Resolve 19 ignores it (version-gated — pending an R21 verify).
119
+
120
+ ### Fixed
121
+
122
+ - `drx` `parse` now reads back custom curves / HSL curves / qualifiers / power windows through the tool
123
+ (the augmentation passed the node params object instead of the flat corrector parameters).
124
+ - **Two long-standing DRX "known bugs" resolved as not encoder bugs** (live panel readback):
125
+ `hueRotate` stores `(UI−50)/50` (input 60 → panel Hue 60.00), and `contrastHighRange` is
126
+ stored `1−UI` **by Resolve itself** (input 0.70 → panel ↑Rng 0.700; low range is 1:1).
127
+ Both now round-trip in `space:'drx'` via normalizer compensation; the old bug-locking test
128
+ was replaced with correct assertions.
129
+ - Vestigial `satVsSat` registry ranges removed — they silently clamped real gradient-window
130
+ writes (the 0x08F000xx ids belong to the gradient window; the real Sat-vs-Sat curve is an
131
+ HSL spline).
132
+ - **Blur / Key / Motion Effects palettes decoded AND writable** (the last unswept native
133
+ palettes): the registry's legacy "Curves corrector (Type 18)" grouping was measured
134
+ wrong — those ids are the Key palette (ct9, identity scales) and the Motion Effects
135
+ palette (a newly identified corrector type 15). Blur-palette radius/H-V ratio store as
136
+ (UI−0.5)×2 (two-point fit). New `gradeParams.blur` / `key` / `motionEffects` write
137
+ paths, panel-readback-verified (Frames varint = frames×2 confirmed); all named in the
138
+ registry and locked by a new fixture + calibration/write tests; the sweep grade decodes
139
+ with zero unknown_ params.
140
+ - **3D-qualifier selection volume blob decoded** (the last offline-reachable opaque blob):
141
+ a packed header + float32 sample point cloud — the keyer's chroma-plane stroke path,
142
+ now lifted as `qualifier3d` with a per-sample decode locked by test.
143
+ - **Programmatic "Cleanup Node Graph"** — Resolve's node-layout tidy is UI-only (no
144
+ scripting API); a before/after Project.db diff proved it rewrites only the per-node
145
+ x/y position varints in the graded version Body, and direct injection of rewritten
146
+ positions was live-verified to render with the grade intact. Two productized paths:
147
+ - `drx` `relayout` — rewrites node positions in a `.drx` to Resolve's own clean-row
148
+ layout (or explicit `positions`), byte-preserving everything else (labels, keyframes,
149
+ OFX). Live single-clip recipe (verified on a production clip): grab still → `relayout`
150
+ → `reset_all_grades` → `ApplyGradeFromDRX`. The reset is required — a same-structure
151
+ apply silently keeps the existing node layout (new `api_truth` entry).
152
+ - `project_db` `relayout_node_graphs` — whole-project sweep over every graded version
153
+ row (closed project, dry-run, auto-backup, per-row read-back verify, undecodable rows
154
+ skipped and reported, already-clean rows left untouched). Resolve caches open projects
155
+ in memory, so the patch is only visible after a full quit + relaunch — the result
156
+ says so explicitly.
157
+
158
+ ### Documentation
159
+
160
+ - Advanced-server section + tool table updated to 18 tools; `resolve-advanced/README.md` catalog expanded.
161
+ - **Control panel learns about the advanced server** (read-only): Setup → **Advanced**
162
+ (live capability card — pure-JS core + ffmpeg/sharp/better-sqlite3 status with install
163
+ hints), Setup → **Conform QC** (lineage-sidecar browser: snapshots, diff-vs-previous,
164
+ per-cut frame-QC verdicts with tallies), and Docs → **Advanced Server** (the full
165
+ 18-tool catalog rendered in-panel). Backed by a deliberate read-only Node bridge
166
+ (`resolve-advanced/scripts/panel-bridge.mjs` — capabilities + lineage
167
+ list/show/diff/verdicts only; ingest/QC/patches stay with the MCP tools) and two new
168
+ panel endpoints (`/api/advanced/capabilities`, `/api/advanced/lineage`). Degrades
169
+ gracefully when Node.js is absent.
170
+ - `docs/SKILL.md` gains an advanced-server operating section (value-space rules, hue-axis
171
+ guard/warnings, relayout recipes, closed-project DB-patch + quit/relaunch discipline) plus
172
+ DRX-apply gotchas and a session-start MCP-update note (surface `update_decision` once;
173
+ applying updates stays with `install.py` / the control panel).
174
+ - New DRX calibration docs: `CALIBRATION-STATUS.md` (per-control coverage ledger — what is
175
+ confirmed, how it was verified, and what remains experimental) and a corrected
176
+ `DRX-VALUE-SCALING.md` (offset ÷25, saturation ÷50, contrast 1:1, affine hue/contrast-range
177
+ mappings).
178
+
179
+ ### Validation
180
+
181
+ - Full offline Node suite green (671 tests / 650 pass, legacy live harnesses skip cleanly) +
182
+ doc-count drift guard. DRX write paths live-verified against DaVinci Resolve 19.1.3 Studio
183
+ by panel readback (windows, qualifiers, HDR zones, ColorSlice, HSL curves); Color Warper
184
+ write is R21-format and pends an R21 verify. Resolve-behavior validation for the offline
185
+ QC/finishing tools remains gated on real footage (they compute/plan; apply stays in the
186
+ live server) — no live Python-server behavior changed in this release.
187
+
188
+ ### Cross-platform agent guidance
189
+
190
+ Also in this release: per-domain agent routing between the live Python server and the
191
+ offline advanced server, available in every IDE — not just Claude Code. No tool counts
192
+ change (compound 34 / granular 341 / advanced 18).
193
+
194
+ - **7 per-domain MCP prompts** (`color_grade_workflow`, `timeline_edit_workflow`,
195
+ `conform_workflow`, `delivery_workflow`, `fusion_workflow`, `audio_workflow`,
196
+ `media_pool_workflow`) — slash commands in *every* MCP client, each routing a task
197
+ across its live tools and its offline advanced-server counterpart (compute offline,
198
+ apply live).
199
+ - **9 Claude Code skills** (`.claude/skills/`): a `resolve-mcp` index plus eight domain
200
+ routers (color, edit, conform, delivery, fusion, audio, media-pool, media-analysis).
201
+ Thin bridges to the kernels; all 18 advanced tools are routed.
202
+ - **Generated cross-platform rule files** from a single manifest
203
+ (`scripts/agent-rules/generate.mjs`): `.cursor/rules/*`, `.github/instructions/*` +
204
+ `.github/copilot-instructions.md`, `.windsurf/rules/*`, `.clinerules`, `.roo/rules/*`,
205
+ `.continue/rules/*`, and an `AGENTS.md` domain-routing block. Tool/action counts are
206
+ parsed from their canonical docs so they cannot drift; a stale generated file fails
207
+ `tests/test_agent_rules_drift.py`.
208
+ - Every kernel with an offline counterpart gained an "Advanced (offline) server" section.
209
+ Fixed stale tool counts / doc paths that had drifted in `.github/copilot-instructions.md`,
210
+ `.clinerules`, `.cursorrules`, and `.windsurfrules`.
211
+
5
212
  ## What's New in v2.57.5
6
213
 
7
214
  Fixes a silent data-loss bug on Reel Name writes (issue #77) and bundles the
@@ -1715,8 +1922,8 @@ coverage, the destructive hook, update hardening, and update history.
1715
1922
  **Validation** — `tests/test_import.py`, `scripts/audit_api_parity.py`,
1716
1923
  `node bin/davinci-resolve-mcp.mjs --version`, `npm pack --dry-run`, and
1717
1924
  `git diff --check` all pass. 375 focused unit tests pass. Live Resolve
1718
- validation covered the D1–F2 surface end-to-end against project CKY /
1719
- Timeline 7 (D1 `retryable`, D2 XML descriptions, D3 partial-success on
1925
+ validation covered the D1–F2 surface end-to-end against a live production
1926
+ project / Timeline 7 (D1 `retryable`, D2 XML descriptions, D3 partial-success on
1720
1927
  plans + CAPS_REFUSAL manifests, E1 8 MCP resource URIs, E2 escalation on
1721
1928
  3× repeated failure, E3 `prefer_handle` job handoff with
1722
1929
  `batch_job_status` polling, F1 provenance block) — 6/6 PASS on the
package/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2025-2026 DaVinci Resolve MCP Contributors
3
+ Copyright (c) 2025-2026 DaVinci Resolve MCP Contributors and Bradford Operations LLC
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
package/README.md CHANGED
@@ -1,9 +1,10 @@
1
1
  # DaVinci Resolve MCP Server
2
2
 
3
- [![Version](https://img.shields.io/badge/version-2.57.5-blue.svg)](https://github.com/samuelgursky/davinci-resolve-mcp/releases)
3
+ [![Version](https://img.shields.io/badge/version-2.59.0-blue.svg)](https://github.com/samuelgursky/davinci-resolve-mcp/releases)
4
4
  [![npm](https://img.shields.io/npm/v/davinci-resolve-mcp.svg?label=npm&color=CB3837)](https://www.npmjs.com/package/davinci-resolve-mcp)
5
5
  [![API Coverage](https://img.shields.io/badge/API%20Coverage-100%25-brightgreen.svg)](docs/reference/api-coverage.md)
6
6
  [![Tools](https://img.shields.io/badge/MCP%20Tools-34%20(341%20full)-blue.svg)](#server-modes)
7
+ [![Advanced](https://img.shields.io/badge/Advanced%20(offline)-18%20tools-blueviolet.svg)](#server-modes)
7
8
  [![Tested](https://img.shields.io/badge/Live%20Tested-98.5%25-green.svg)](docs/reference/api-coverage.md#test-results)
8
9
  [![DaVinci Resolve](https://img.shields.io/badge/DaVinci%20Resolve-18.5+-darkred.svg)](https://www.blackmagicdesign.com/products/davinciresolve)
9
10
  [![Python](https://img.shields.io/badge/python-3.10+-green.svg)](https://www.python.org/downloads/)
@@ -54,6 +55,78 @@ The command starts a localhost server and opens the control panel in your browse
54
55
 
55
56
  The compound server is recommended unless you specifically need the granular one-tool-per-method surface.
56
57
 
58
+ ### Advanced server — beyond the scripting API (optional, Node)
59
+
60
+ The same package ships a second, optional MCP server: **`davinci-resolve-advanced-mcp`** (bin
61
+ `bin/davinci-resolve-advanced-mcp.mjs`). Where the Python server drives a *live* Resolve over the
62
+ sanctioned scripting API, the advanced server does what the API **can't** — it reads and edits Resolve
63
+ **files** (`.drp` / `.drt` / `.drx`) and applies DB/XML-level changes **with no Resolve running**, so it
64
+ runs cloud *or* local. 18 tools: `drp`, `drt`, `drx` (per-clip grade codec **plus a deterministic,
65
+ offline grading/QC catalog** — within-camera + cross-camera skin (v2 skin-line metric) + b-roll +
66
+ neutral-patch WB matching, match-to-reference, saturation/black-balance, contrast-normalize, ASC CDL
67
+ import, lossless grade-transfer + season-look authoring, named-LUT attach, scope reads + intent tags,
68
+ verify-grade, display-referred frame extraction, broadcast-legal QC), `offline_ref`,
69
+ `conform` (frame-oracle conform/relink QC + lineage), `color_trace` (carry grades across a re-conform),
70
+ `fusion`, `audio_plan`, `fairlight` (bus routing), `audio`, `project_read`, `project_db`, `pipeline`
71
+ (a **DB-as-truth pipeline**: compile YAML project specs into a canonical SQLite DB, then run stages with
72
+ gates, provenance, and intent↔actual drift detection), `capabilities`, `deliverable` (deliverable QC /
73
+ compliance), `media` (media front-end / AE ingest), `editorial` (editorial integrity / changelist),
74
+ `provenance` (provenance / audit / episode report). It can also be consumed **as a
75
+ library** (importable engine API), not just spawned as a server.
76
+
77
+ DRX grade writes are **live-calibrated against Resolve Studio**: grade params take Resolve's
78
+ on-screen panel units by default (`space: 'ui' | 'drx'`), and the structural writes (power windows,
79
+ qualifiers, HDR zones, HSL curves, ColorSlice, blur/key/motion-effects) are panel-readback-verified —
80
+ per-control status in `resolve-advanced/vendor/drx-parameters/CALIBRATION-STATUS.md`. It also closes
81
+ a UI-only gap: **programmatic "Cleanup Node Graph"** (`drx` `relayout` for one clip, `project_db`
82
+ `relayout_node_graphs` for a whole project) — node layout tidied, grade content byte-preserved.
83
+
84
+ Add it alongside the live server (both ship in one `npm install`):
85
+
86
+ ```json
87
+ {
88
+ "mcpServers": {
89
+ "davinci-resolve": { "command": "<python>", "args": ["<path>/src/server.py"] },
90
+ "davinci-resolve-advanced": { "command": "node", "args": ["<path>/bin/davinci-resolve-advanced-mcp.mjs"] }
91
+ }
92
+ }
93
+ ```
94
+
95
+ `install.py` prints both entries. The core is pure-JS/MIT with no required native modules; a few features
96
+ need user-installed tools (ffmpeg for `audio`, `sharp`/`better-sqlite3` for some paths) — call the
97
+ `capabilities` tool for live status and install hints.
98
+
99
+ ### Bradford Post Assistant — managed application (closed beta)
100
+
101
+ The maintainers also build **Bradford Post Assistant**, a desktop application on top of this
102
+ open foundation. Where the MCP servers give an agent hands, Post Assistant is the working
103
+ copilot around them — an on-device AI assistant for post-production where client material
104
+ never leaves the workstation:
105
+
106
+ - **A post-production copilot** — a desktop app that sits alongside DaVinci Resolve and
107
+ watches the session live (timeline, grades, and frames — not just API calls), with an
108
+ embedded AI assistant and agent runtime, local media analysis (transcription, frame
109
+ analysis, editorial intelligence), and in-app conform QC.
110
+ - **Memory** — persistent, encrypted on-device assistant memory plus cross-episode learning
111
+ mined from your pipeline's decoded facts (season-look drift, per-camera correction priors,
112
+ hero-frame libraries, conform path-map reuse), with accumulation managed for you and a
113
+ reviewed-insight workflow.
114
+ - **Self-contained by design** — Post Assistant wires everything itself: this MCP for
115
+ Resolve control, the Bradford API for its extended services, and your choice of LLM
116
+ provider. Nothing to configure by hand, no separate clients to manage, and the app keeps
117
+ itself (and its bundled MCP) current with signed auto-updates.
118
+ - **An extended professional toolset** — grade surgery on live projects, 22+ adaptive grade
119
+ families, a curated looks library, delivery-spec validation, editorial pacing/cleanup
120
+ analysis, natural-language color direction, and Fusion composition authoring — delivered
121
+ through the managed Bradford API.
122
+ - **Production workflows** — the raw tools composed into finished, real-world flows
123
+ (turnover → conform → QC → delivery, season-look carry, episode reporting) with the
124
+ guardrails and approvals a client-facing shop expects.
125
+
126
+ It is currently in **closed beta** — you can request access at
127
+ [bradfordoperations.com/software/post-assistant](https://www.bradfordoperations.com/software/post-assistant).
128
+ The open-source servers are complete and fully functional on their own.
129
+
57
130
  ## What You Can Do
58
131
 
59
132
  ```text
@@ -99,7 +172,8 @@ The default server is a local stdio process launched by your MCP client; it does
99
172
 
100
173
  | Metric | Value |
101
174
  |--------|-------|
102
- | MCP Tools | **32** compound / **341** granular |
175
+ | MCP Tools | **34** compound / **341** granular (live server) |
176
+ | Advanced (offline) tools | **18** — .drp/.drt/.drx + DB authoring, no Resolve running |
103
177
  | Kernel Actions | **136** guarded workflow actions across 9 compound tools |
104
178
  | API Methods Covered | **336/336** (100%) |
105
179
  | Methods Live Tested | **331/336** (98.5%) |
@@ -162,12 +236,3 @@ Samuel Gursky (samgursky@gmail.com)
162
236
 
163
237
  - Blackmagic Design for DaVinci Resolve and its scripting API
164
238
  - The Model Context Protocol team for enabling AI assistant integration
165
- - Anthropic for Claude Code, used extensively in development and testing
166
-
167
- ### Community contributions
168
-
169
- - [@rgxdev](https://github.com/rgxdev) — configurable Media Pool inventory walk
170
- (exclude bins + inventory limit), [#69](https://github.com/samuelgursky/davinci-resolve-mcp/pull/69) (v2.53.0)
171
- - [@swayll](https://github.com/swayll) — Source Track Selector investigation
172
- ([#74](https://github.com/samuelgursky/davinci-resolve-mcp/issues/74)); confirmed
173
- + documented API limitation (v2.57.1)
@@ -0,0 +1,20 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * davinci-resolve-advanced-mcp — entry point.
4
+ *
5
+ * The Node, beyond-the-API sibling bin to davinci-resolve-mcp. Authors/edits
6
+ * DaVinci Resolve files (.drp/.drt/.drx) offline — no Resolve, cloud or local.
7
+ *
8
+ * Boots the stdio MCP server in resolve-advanced/server. (During dev the
9
+ * vendored libs + deps live under resolve-advanced/; Phase 4 promotes deps to
10
+ * the repo root for the published package.)
11
+ */
12
+
13
+ import { fileURLToPath } from 'node:url';
14
+ import path from 'node:path';
15
+
16
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
17
+ const serverEntry = path.resolve(__dirname, '..', 'resolve-advanced', 'server', 'index.mjs');
18
+
19
+ const { startServer } = await import(serverEntry);
20
+ await startServer();
package/docs/README.md CHANGED
@@ -41,6 +41,25 @@ ignored scratch folders such as `docs/_scratch/`.
41
41
  - [Project Lifecycle](kernels/project-lifecycle-kernel.md)
42
42
  - [Extension Authoring](kernels/extension-authoring-kernel.md)
43
43
 
44
+ ## Claude Code Skills
45
+
46
+ Per-domain skills in `.claude/skills/` route craft ↔ live tools ↔ offline
47
+ advanced tools automatically when an agent works in that domain. They are thin
48
+ bridges — the authoritative depth stays in the kernels and guides above.
49
+
50
+ - `resolve-mcp` (`.claude/skills/resolve.md`) — orientation/index: the map to the domain skills below (self-trigger; not an auto-loader)
51
+ - `resolve-color` (`.claude/skills/color-grade.md`) — grading, looks, shot match, LUT/CDL/DRX
52
+ - `resolve-edit` (`.claude/skills/timeline-edit.md`) — cutting, ranges, variants, changelist
53
+ - `resolve-conform` (`.claude/skills/conform.md`) — conform, relink, finishing QC, grade tracing
54
+ - `resolve-delivery` (`.claude/skills/delivery.md`) — render, deliverable QC, media/provenance
55
+ - `resolve-fusion` (`.claude/skills/fusion.md`) — Fusion comps (titles, motion graphics, VFX)
56
+ - `resolve-audio` (`.claude/skills/audio.md`) — audio/Fairlight tracks, buses, loudness, sync
57
+ - `resolve-media-pool` (`.claude/skills/media-pool.md`) — media pool ingest, organize, multicam
58
+ - `resolve-media-analysis` (`.claude/skills/media-analysis.md`) — source-safe media intelligence
59
+
60
+ The offline half of every one is the advanced server; see
61
+ [Advanced Server](../resolve-advanced/README.md).
62
+
44
63
  ## Authoring References
45
64
 
46
65
  - [Fuse + DCTL Authoring](authoring/fuse-dctl-authoring.md)
package/docs/SKILL.md CHANGED
@@ -17,6 +17,16 @@ DaVinci Resolve must be running with **Preferences > General > "External scripti
17
17
  using"** set to **Local**. The server auto-launches Resolve if it is not running,
18
18
  but that first connection can take up to 60 seconds.
19
19
 
20
+ **Session-start update note.** The first `resolve_control(action="get_version")`
21
+ of a session returns an `mcp` block with the cached update check
22
+ (`mcp.update` + `mcp.update_decision`). If `update_decision.action` is
23
+ `"notify"` or `"prompt"`, tell the user ONCE that a newer MCP release is
24
+ available (version + one-line pointer). Do not repeat it, do not auto-apply,
25
+ and do not treat it as an error — updates are applied by the user via
26
+ `python install.py` or the control panel's Settings page. If the user asks to
27
+ check on demand, use `resolve_control(action="mcp_update_status",
28
+ params={"force_check": true})`.
29
+
20
30
  Workflow Integration plugins/scripts are a separate Resolve-hosted UI mechanism.
21
31
  They are not required for this MCP server, but `docs/integrations/workflow-integrations.md`
22
32
  summarizes when they are useful for optional in-Resolve panels, UIManager
@@ -103,12 +113,55 @@ before mutating Resolve state.
103
113
 
104
114
  | Mode | Entry point | Tool count | Use when |
105
115
  |---|---|---|---|
106
- | Compound (default) | `src/server.py` | 32 tools | Most workflows — keeps context lean |
116
+ | Compound (default) | `src/server.py` | 34 tools | Most workflows — keeps context lean |
107
117
  | Granular (full) | `src/server.py --full` | 341 tools | Power users needing one tool per API method |
108
118
 
109
119
  This skill document covers the **compound server** (the default). Each compound
110
120
  tool accepts an `action` string and an optional `params` object.
111
121
 
122
+ ### The advanced server (`davinci-resolve-advanced-mcp`)
123
+
124
+ The same package ships an optional third surface: an offline Node server (18
125
+ tools, typically registered as `davinci-resolve-advanced`) that edits Resolve
126
+ **files** (`.drp`/`.drt`/`.drx`) and patches the project DB — no running Resolve
127
+ required. Rule of thumb: drive a *live session* with the Python server; compute
128
+ grades, QC, conform math, and file-level edits with the advanced server, then
129
+ apply results through the live server. Full catalog: `resolve-advanced/README.md`.
130
+
131
+ Operating rules an agent must know:
132
+
133
+ - **Grade value space.** `drx` `generate`/`merge` default to `space:'ui'` —
134
+ params are Resolve PANEL units (lift/gamma/gain/offset panel numbers,
135
+ saturation 0–100 neutral 50). Pass `space:'drx'` only for raw internal floats
136
+ (e.g. re-encoding decoded values). Decoded values are ground truth only for
137
+ the calibrated native set — check the `valueFidelity` marker on `parse`
138
+ results; per-control status is `resolve-advanced/vendor/drx-parameters/CALIBRATION-STATUS.md`.
139
+ - **Hue-axis curves.** Naive `[0,1]` point lists are canonicalized into the
140
+ verified bezier cage automatically. Pre-wrapped lists (x outside `[0,1]`) are
141
+ REFUSED unless `allowWrappedHueCage:true` (malformed cages can crash Resolve
142
+ 19). If a `generate`/`merge` result carries a `warnings` array, the curve was
143
+ passed through raw and will render FLAT — tell the user, don't ship it silently.
144
+ - **Node-graph relayout** (programmatic "Cleanup Node Graph"; the UI command
145
+ has no API). Single clip, live: `gallery_stills.grab_and_export` → advanced
146
+ `drx(action="relayout")` → `graph.reset_all_grades` → `safe_apply_drx` with
147
+ EXPLICIT item indices (the reset is required — a same-structure apply keeps
148
+ the old layout). Whole project, offline: `project_db(action="relayout_node_graphs")`.
149
+ - **project_db patches** require the project CLOSED in Resolve plus
150
+ `iConfirmProjectClosed:true`; every write auto-backs-up and read-back
151
+ verifies. Resolve caches open projects in memory: after patching, fully QUIT
152
+ and relaunch Resolve or the patch will not be visible.
153
+ - **Guards are load-bearing.** Advanced tools refuse rather than fabricate
154
+ (silent-lie guards): a thrown "refused" error usually means wrong input space,
155
+ log-encoded frames, or missing media — read the message before retrying.
156
+ Optional native deps (`better-sqlite3`, `sharp`, ffmpeg) gate some actions;
157
+ call the advanced `capabilities` tool for live status and install hints.
158
+
159
+ Per-domain depth for both servers lives in the kernels (`docs/kernels/`), each of
160
+ which carries an "Advanced (offline) server" section where an offline counterpart
161
+ exists. Claude Code skills in `.claude/skills/` (`resolve-color`, `resolve-edit`,
162
+ `resolve-conform`, `resolve-delivery`, `resolve-media-analysis`) route
163
+ craft ↔ live ↔ offline automatically when working in that domain.
164
+
112
165
  The compound server also registers MCP prompts. Use `davinci_resolve_workflow`
113
166
  as the compact operating brief, and use `analyze_media` as a slash-command style
114
167
  entry point for source-safe project, selected-clip, bin, file, or sequence
@@ -1157,6 +1210,14 @@ Key actions: `get_num_nodes(source?)`, `set_lut(node_index, lut_path, source?)`,
1157
1210
  `1`=source timecode aligned, `2`=start frames aligned,
1158
1211
  `reset_all_grades(source?)`
1159
1212
 
1213
+ DRX-apply gotchas (also apply to `timeline_item_color.safe_apply_drx`): ALWAYS pass
1214
+ `track_type`/`track_index`/`item_index` explicitly — the default target is video track 1
1215
+ item 0, NOT the current clip — and grab a still/`.drx` backup first (`safe_apply_drx` does
1216
+ not snapshot). When the applied `.drx` has the same node structure/ids as the target's
1217
+ current graph, Resolve keeps the existing node-editor layout (positions in the `.drx` are
1218
+ silently ignored); to re-layout a graph programmatically, reset the grade first, then
1219
+ apply (see the advanced server's `drx` `relayout` and `api_truth`).
1220
+
1160
1221
  **`color_group`** — Manage color groups.
1161
1222
 
1162
1223
  Key actions: `list`, `get_name(group_name)`, `set_name(group_name, new_name)`,
@@ -63,7 +63,7 @@ This MCP server controls DaVinci Resolve via its Scripting API. Some tools perfo
63
63
  davinci-resolve-mcp/
64
64
  ├── install.py # Universal installer (macOS/Windows/Linux)
65
65
  ├── src/
66
- │ ├── server.py # Compound MCP server — 32 tools (default)
66
+ │ ├── server.py # Compound MCP server — 34 tools (default)
67
67
  │ ├── resolve_mcp_server.py # Thin full-server entrypoint — 341 tools
68
68
  │ ├── granular/ # Modular full-server implementation
69
69
  │ └── utils/ # Platform detection, Resolve connection helpers
@@ -184,6 +184,15 @@ created, and render time against the active tier, and the AI-ops ledger
184
184
  sizes for the active project.
185
185
  - **Tools** — runtime helpers (ffprobe, ffmpeg, Whisper backends, OpenCV)
186
186
  with ready/missing status and copyable install commands.
187
+ - **Advanced** — live capability status for the optional offline Node server
188
+ (`davinci-resolve-advanced-mcp`): the pure-JS core plus each user-installed
189
+ helper (ffmpeg, sharp, better-sqlite3) with what it enables and how to
190
+ install it. The full tool catalog is available under Docs → Advanced Server.
191
+ - **Conform QC** — read-only browser for a conform lineage sidecar: point at
192
+ the `.db` the advanced server's `conform` tool writes to inspect snapshots,
193
+ diff a snapshot against its predecessor, and review per-cut frame-QC
194
+ verdicts (MATCH / OFFSET / WRONG / REF_OFFLINE / UNREADABLE) with tallies.
195
+ Ingest and QC runs stay with the MCP tools; the panel never writes.
187
196
  - **Media Pool History** — the provenance log for destructive media-pool
188
197
  operations (deletes, replaces, relinks), kept separate from timeline brain
189
198
  edits.
@@ -21,6 +21,27 @@ Current kernel coverage: **136 actions** across **9 compound MCP tools**.
21
21
  | Project lifecycle | `project_manager` | `project_capabilities`, `probe_project_lifecycle`, `probe_project_settings`, `safe_project_create`, `safe_project_export`, `safe_project_import`, `safe_project_archive`, `safe_project_restore`, `safe_project_delete`, `safe_set_project_settings`, `project_settings_snapshot`, `database_capabilities`, `safe_set_current_database`, `preset_lifecycle_probe`, `project_boundary_report` |
22
22
  | Extension authoring | `script_plugin` | `extension_capabilities`, `probe_fuse_lifecycle`, `probe_dctl_lifecycle`, `probe_script_lifecycle`, `safe_install_extension`, `safe_remove_extension`, `refresh_or_restart_required`, `extension_boundary_report` |
23
23
 
24
+ ## Advanced (offline) server
25
+
26
+ The kernels above wrap the **live** Python server (`davinci-resolve`), which
27
+ drives a running Resolve. A companion **advanced** server
28
+ (`davinci-resolve-advanced`, 18 tools — see `resolve-advanced/README.md`) does
29
+ the beyond-API, **no-Resolve-running** half: it authors/edits `.drp`/`.drt`/`.drx`
30
+ files, patches the project DB, and computes grades, conform QC, and deliverable
31
+ QC offline. The rule of thumb is *compute offline, apply live*. Kernels that have
32
+ an offline counterpart carry an "Advanced (offline) server" section linking the
33
+ two:
34
+
35
+ - Color / Grade → `drx` grading/QC catalog + relayout
36
+ - Timeline Conform / Interchange → `conform`, `color_trace`, `offline_ref`, `editorial`
37
+ - Render / Deliver → `deliverable`, `media`, `provenance`
38
+ - Timeline Edit → `editorial` (interchange + changelist), `drt`
39
+
40
+ Per-domain Claude Code skills route craft ↔ live ↔ offline automatically and live
41
+ in `.claude/skills/`: `resolve-color`, `resolve-edit`, `resolve-conform`,
42
+ `resolve-delivery` (plus `resolve-media-analysis`). `docs/SKILL.md` is the
43
+ top-level brief for both servers.
44
+
24
45
  Helper-tool details that need more than an action list live in guides. See
25
46
  [Multicam Setup Helper Guide](../guides/multicam-setup-guide.md) for the
26
47
  `media_pool.setup_multicam_timeline` helper/API boundary and Resolve UI
@@ -68,6 +68,28 @@ All kernel actions are exposed through `timeline`.
68
68
  - The public API does not expose full Fairlight mix automation curves or plugin
69
69
  parameter graphs.
70
70
 
71
+ ## Advanced (offline) server — Fairlight planning + bus routing
72
+
73
+ The actions above drive audio on a *running* Resolve. The companion advanced
74
+ server (`davinci-resolve-advanced`, see `resolve-advanced/README.md`) plans and
75
+ patches audio **offline, no Resolve running**:
76
+
77
+ - **`audio_plan`** (pure Node) — `list_templates`, `select_template`,
78
+ `track_plan`, `analyze_coverage`, `check_loudness` (against R128/ATSC/streaming
79
+ targets). Plan the Fairlight track/bus layout before building it live.
80
+ - **`fairlight`** — Fairlight **bus routing**, which has *no scripting API*: it
81
+ patches the `FLStudioModelBA` blob directly. `read_buses_from_blob` (offline
82
+ codec); `read_buses_from_db`, `expand_buses`, `export_template` /
83
+ `import_template`, `backup`, `restore` (DB path — needs optional
84
+ `better-sqlite3`; project CLOSED + quit/relaunch, like other DB patches).
85
+ - **`audio`** — offline ffmpeg ops: `split` (silence/TC/intervals), `trim`,
86
+ `convert` (needs ffmpeg on PATH — GPL, not bundled). Align/loudness-measure are
87
+ not yet vendored.
88
+
89
+ Rule of thumb: plan/measure offline, apply mix/track changes live; use
90
+ `fairlight` for bus work the scripting API can't reach. See the `resolve-audio`
91
+ skill (`.claude/skills/audio.md`) and the `/audio_workflow` prompt.
92
+
71
93
  ## Live Probe
72
94
 
73
95
  Run the live boundary probe with: