davinci-resolve-mcp 2.57.4 → 2.58.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 (328) hide show
  1. package/AGENTS.md +20 -0
  2. package/CHANGELOG.md +197 -2
  3. package/LICENSE +1 -1
  4. package/README.md +73 -1
  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/docs/reference/api-limitations.md +38 -1
  21. package/install.py +27 -4
  22. package/package.json +23 -2
  23. package/resolve-advanced/README.md +194 -0
  24. package/resolve-advanced/package.json +50 -0
  25. package/resolve-advanced/server/black-balance.mjs +92 -0
  26. package/resolve-advanced/server/capabilities.mjs +86 -0
  27. package/resolve-advanced/server/cdl-io.mjs +76 -0
  28. package/resolve-advanced/server/contrast-normalize.mjs +180 -0
  29. package/resolve-advanced/server/db-patch.mjs +91 -0
  30. package/resolve-advanced/server/deliverable-entities.mjs +86 -0
  31. package/resolve-advanced/server/deliverable-qc.mjs +270 -0
  32. package/resolve-advanced/server/editorial.mjs +370 -0
  33. package/resolve-advanced/server/exposure-level.mjs +129 -0
  34. package/resolve-advanced/server/extract-frames.mjs +196 -0
  35. package/resolve-advanced/server/ffprobe-media.mjs +88 -0
  36. package/resolve-advanced/server/gamut-legal.mjs +112 -0
  37. package/resolve-advanced/server/grade-body-patch.mjs +246 -0
  38. package/resolve-advanced/server/grade-transfer.mjs +66 -0
  39. package/resolve-advanced/server/group-grade-read.mjs +137 -0
  40. package/resolve-advanced/server/index.mjs +105 -0
  41. package/resolve-advanced/server/lib.mjs +84 -0
  42. package/resolve-advanced/server/libs.mjs +65 -0
  43. package/resolve-advanced/server/lineage-db.mjs +479 -0
  44. package/resolve-advanced/server/lut-apply.mjs +61 -0
  45. package/resolve-advanced/server/match-to-reference.mjs +173 -0
  46. package/resolve-advanced/server/media-inventory.mjs +169 -0
  47. package/resolve-advanced/server/media-ops.mjs +243 -0
  48. package/resolve-advanced/server/node-meta-db.mjs +62 -0
  49. package/resolve-advanced/server/node-provenance.mjs +102 -0
  50. package/resolve-advanced/server/offline-ref-db.mjs +420 -0
  51. package/resolve-advanced/server/offline-ref.mjs +179 -0
  52. package/resolve-advanced/server/project-db.mjs +233 -0
  53. package/resolve-advanced/server/provenance-audit.mjs +210 -0
  54. package/resolve-advanced/server/qc-frame.mjs +224 -0
  55. package/resolve-advanced/server/qc-sampler.mjs +67 -0
  56. package/resolve-advanced/server/readback.mjs +77 -0
  57. package/resolve-advanced/server/render-manifest.mjs +93 -0
  58. package/resolve-advanced/server/reverse-clip-db.mjs +270 -0
  59. package/resolve-advanced/server/runner-apply-contract.mjs +64 -0
  60. package/resolve-advanced/server/runner.mjs +244 -0
  61. package/resolve-advanced/server/saturation-match.mjs +108 -0
  62. package/resolve-advanced/server/scope-read.mjs +257 -0
  63. package/resolve-advanced/server/season-look.mjs +96 -0
  64. package/resolve-advanced/server/shot-intent.mjs +82 -0
  65. package/resolve-advanced/server/shot-match.mjs +147 -0
  66. package/resolve-advanced/server/skin-match.mjs +205 -0
  67. package/resolve-advanced/server/spec-compile.mjs +217 -0
  68. package/resolve-advanced/server/tone-curve-transfer.mjs +184 -0
  69. package/resolve-advanced/server/tool-catalog.mjs +265 -0
  70. package/resolve-advanced/server/tools/audio.mjs +54 -0
  71. package/resolve-advanced/server/tools/audio_plan.mjs +58 -0
  72. package/resolve-advanced/server/tools/capabilities.mjs +16 -0
  73. package/resolve-advanced/server/tools/color_trace.mjs +165 -0
  74. package/resolve-advanced/server/tools/conform.mjs +291 -0
  75. package/resolve-advanced/server/tools/deliverable.mjs +105 -0
  76. package/resolve-advanced/server/tools/drp.mjs +232 -0
  77. package/resolve-advanced/server/tools/drt.mjs +200 -0
  78. package/resolve-advanced/server/tools/drx.mjs +943 -0
  79. package/resolve-advanced/server/tools/editorial.mjs +69 -0
  80. package/resolve-advanced/server/tools/fairlight.mjs +108 -0
  81. package/resolve-advanced/server/tools/fusion.mjs +64 -0
  82. package/resolve-advanced/server/tools/media.mjs +102 -0
  83. package/resolve-advanced/server/tools/offline_ref.mjs +123 -0
  84. package/resolve-advanced/server/tools/pipeline.mjs +137 -0
  85. package/resolve-advanced/server/tools/project_db.mjs +200 -0
  86. package/resolve-advanced/server/tools/project_read.mjs +212 -0
  87. package/resolve-advanced/server/tools/provenance.mjs +73 -0
  88. package/resolve-advanced/server/verify-grade.mjs +113 -0
  89. package/resolve-advanced/server/white-balance-match.mjs +122 -0
  90. package/resolve-advanced/vendor/audio/format-converter.js +330 -0
  91. package/resolve-advanced/vendor/audio/split.js +173 -0
  92. package/resolve-advanced/vendor/audio/trim.js +188 -0
  93. package/resolve-advanced/vendor/audio-fairlight/index.js +391 -0
  94. package/resolve-advanced/vendor/conform-qc/adapters/frame-sampler.js +56 -0
  95. package/resolve-advanced/vendor/conform-qc/adapters/local-ffmpeg-sampler.js +65 -0
  96. package/resolve-advanced/vendor/conform-qc/adapters/rendernode-ffmpeg-sampler.js +50 -0
  97. package/resolve-advanced/vendor/conform-qc/adapters/resolve/driver.py +176 -0
  98. package/resolve-advanced/vendor/conform-qc/adapters/resolve-driver.js +61 -0
  99. package/resolve-advanced/vendor/conform-qc/adapters/resolve-headless-driver.js +86 -0
  100. package/resolve-advanced/vendor/conform-qc/adapters/vision-validator.js +75 -0
  101. package/resolve-advanced/vendor/conform-qc/cli.js +63 -0
  102. package/resolve-advanced/vendor/conform-qc/compare/advisory.js +106 -0
  103. package/resolve-advanced/vendor/conform-qc/compare/decode.js +36 -0
  104. package/resolve-advanced/vendor/conform-qc/compare/index.js +61 -0
  105. package/resolve-advanced/vendor/conform-qc/compare/locate.js +70 -0
  106. package/resolve-advanced/vendor/conform-qc/compare/metrics.js +409 -0
  107. package/resolve-advanced/vendor/conform-qc/docs/runbook.md +72 -0
  108. package/resolve-advanced/vendor/conform-qc/index.js +49 -0
  109. package/resolve-advanced/vendor/conform-qc/knowledge/index.js +110 -0
  110. package/resolve-advanced/vendor/conform-qc/ops/conform-core.js +137 -0
  111. package/resolve-advanced/vendor/conform-qc/ops/conform-diff.js +109 -0
  112. package/resolve-advanced/vendor/conform-qc/ops/insert.js +108 -0
  113. package/resolve-advanced/vendor/conform-qc/ops/local-conform.js +61 -0
  114. package/resolve-advanced/vendor/conform-qc/ops/patch.js +80 -0
  115. package/resolve-advanced/vendor/conform-qc/ops/trigger.js +32 -0
  116. package/resolve-advanced/vendor/conform-qc/ops/verify.js +105 -0
  117. package/resolve-advanced/vendor/conform-qc/ops/workflow.js +30 -0
  118. package/resolve-advanced/vendor/conform-qc/oracle/emulate.js +155 -0
  119. package/resolve-advanced/vendor/conform-qc/oracle/index.js +38 -0
  120. package/resolve-advanced/vendor/conform-qc/oracle/resolve.js +196 -0
  121. package/resolve-advanced/vendor/conform-qc/package.json +16 -0
  122. package/resolve-advanced/vendor/conform-qc/packaging/emit-aaf.js +30 -0
  123. package/resolve-advanced/vendor/conform-qc/packaging/emit-fcp7.js +64 -0
  124. package/resolve-advanced/vendor/conform-qc/packaging/index.js +169 -0
  125. package/resolve-advanced/vendor/conform-qc/packaging/media-ops.js +56 -0
  126. package/resolve-advanced/vendor/conform-qc/packaging/otio.js +50 -0
  127. package/resolve-advanced/vendor/conform-qc/packaging/relink.js +50 -0
  128. package/resolve-advanced/vendor/conform-qc/packaging/surgical-relink.js +195 -0
  129. package/resolve-advanced/vendor/conform-qc/parse/index.js +54 -0
  130. package/resolve-advanced/vendor/conform-qc/parse/merge-dto.js +27 -0
  131. package/resolve-advanced/vendor/conform-qc/parse/xmeml-geometry.js +256 -0
  132. package/resolve-advanced/vendor/conform-qc/reference/burnin-ocr.js +100 -0
  133. package/resolve-advanced/vendor/conform-qc/reference/sidecar.js +37 -0
  134. package/resolve-advanced/vendor/conform-qc/repair/analysis.js +62 -0
  135. package/resolve-advanced/vendor/conform-qc/repair/index.js +78 -0
  136. package/resolve-advanced/vendor/conform-qc/repair/media-analysis.js +139 -0
  137. package/resolve-advanced/vendor/conform-qc/repair/media-index.js +135 -0
  138. package/resolve-advanced/vendor/conform-qc/repair/strategies.js +250 -0
  139. package/resolve-advanced/vendor/conform-qc/report/index.js +133 -0
  140. package/resolve-advanced/vendor/conform-qc/roles/index.js +96 -0
  141. package/resolve-advanced/vendor/conform-qc/synthetic/generate.js +233 -0
  142. package/resolve-advanced/vendor/conform-qc/test/advisory.test.js +85 -0
  143. package/resolve-advanced/vendor/conform-qc/test/cli.test.js +39 -0
  144. package/resolve-advanced/vendor/conform-qc/test/compare.test.js +152 -0
  145. package/resolve-advanced/vendor/conform-qc/test/conform-diff.test.js +70 -0
  146. package/resolve-advanced/vendor/conform-qc/test/emulate.test.js +51 -0
  147. package/resolve-advanced/vendor/conform-qc/test/frame-sampler.test.js +30 -0
  148. package/resolve-advanced/vendor/conform-qc/test/geometry.test.js +112 -0
  149. package/resolve-advanced/vendor/conform-qc/test/knowledge.test.js +56 -0
  150. package/resolve-advanced/vendor/conform-qc/test/lifecycle.test.js +110 -0
  151. package/resolve-advanced/vendor/conform-qc/test/local-ffmpeg-sampler.test.js +66 -0
  152. package/resolve-advanced/vendor/conform-qc/test/locate.test.js +63 -0
  153. package/resolve-advanced/vendor/conform-qc/test/media-analysis.test.js +63 -0
  154. package/resolve-advanced/vendor/conform-qc/test/media-index-normalized.test.js +65 -0
  155. package/resolve-advanced/vendor/conform-qc/test/media-index-origin.test.js +53 -0
  156. package/resolve-advanced/vendor/conform-qc/test/metrics-fast.test.js +91 -0
  157. package/resolve-advanced/vendor/conform-qc/test/oracle-reverse.test.js +86 -0
  158. package/resolve-advanced/vendor/conform-qc/test/oracle.test.js +136 -0
  159. package/resolve-advanced/vendor/conform-qc/test/p0-acceptance.test.js +60 -0
  160. package/resolve-advanced/vendor/conform-qc/test/p1-acceptance.test.js +75 -0
  161. package/resolve-advanced/vendor/conform-qc/test/p45-patch-acceptance.test.js +102 -0
  162. package/resolve-advanced/vendor/conform-qc/test/packaging.test.js +133 -0
  163. package/resolve-advanced/vendor/conform-qc/test/parse-stubs.test.js +28 -0
  164. package/resolve-advanced/vendor/conform-qc/test/repair-strategies.test.js +128 -0
  165. package/resolve-advanced/vendor/conform-qc/test/repair.test.js +84 -0
  166. package/resolve-advanced/vendor/conform-qc/test/report.test.js +52 -0
  167. package/resolve-advanced/vendor/conform-qc/test/resolve-readback.test.js +71 -0
  168. package/resolve-advanced/vendor/conform-qc/test/roles.test.js +107 -0
  169. package/resolve-advanced/vendor/conform-qc/test/runbook.test.js +30 -0
  170. package/resolve-advanced/vendor/conform-qc/test/scale-residual.test.js +40 -0
  171. package/resolve-advanced/vendor/conform-qc/test/sidecar.test.js +51 -0
  172. package/resolve-advanced/vendor/conform-qc/test/smoke.test.js +87 -0
  173. package/resolve-advanced/vendor/conform-qc/test/surgical-relink.test.js +73 -0
  174. package/resolve-advanced/vendor/conform-qc/test/synthetic.test.js +98 -0
  175. package/resolve-advanced/vendor/conform-qc/test/verify.test.js +93 -0
  176. package/resolve-advanced/vendor/conform-qc/test/vision-validator.test.js +43 -0
  177. package/resolve-advanced/vendor/conform-qc/test/workflow-driver.test.js +46 -0
  178. package/resolve-advanced/vendor/conform-qc/toolset/index.js +53 -0
  179. package/resolve-advanced/vendor/drp-format/README.md +116 -0
  180. package/resolve-advanced/vendor/drp-format/__tests__/_resolve-verify.js +39 -0
  181. package/resolve-advanced/vendor/drp-format/__tests__/add-media-clip.test.js +30 -0
  182. package/resolve-advanced/vendor/drp-format/__tests__/assemble-timeline.test.js +68 -0
  183. package/resolve-advanced/vendor/drp-format/__tests__/author-project.test.js +57 -0
  184. package/resolve-advanced/vendor/drp-format/__tests__/composition-text.test.js +98 -0
  185. package/resolve-advanced/vendor/drp-format/__tests__/diff.test.js +272 -0
  186. package/resolve-advanced/vendor/drp-format/__tests__/effect-filters-compressed.test.js +143 -0
  187. package/resolve-advanced/vendor/drp-format/__tests__/fixtures/p0-3-session30-empty-effectfilters.drp +0 -0
  188. package/resolve-advanced/vendor/drp-format/__tests__/fixtures/retimed-timemap-50pct.hex +1 -0
  189. package/resolve-advanced/vendor/drp-format/__tests__/fixtures/retimed-timemap-dynamic.hex +1 -0
  190. package/resolve-advanced/vendor/drp-format/__tests__/inject-grades.test.js +238 -0
  191. package/resolve-advanced/vendor/drp-format/__tests__/keyed-dict.test.js +85 -0
  192. package/resolve-advanced/vendor/drp-format/__tests__/lut-refs.test.js +119 -0
  193. package/resolve-advanced/vendor/drp-format/__tests__/media-blobs.test.js +25 -0
  194. package/resolve-advanced/vendor/drp-format/__tests__/media-timemap.test.js +119 -0
  195. package/resolve-advanced/vendor/drp-format/__tests__/place-fusion-title.test.js +52 -0
  196. package/resolve-advanced/vendor/drp-format/__tests__/place-generator.test.js +40 -0
  197. package/resolve-advanced/vendor/drp-format/__tests__/place-transition.test.js +48 -0
  198. package/resolve-advanced/vendor/drp-format/__tests__/protobuf-wire.test.js +64 -0
  199. package/resolve-advanced/vendor/drp-format/__tests__/relink-media.test.js +106 -0
  200. package/resolve-advanced/vendor/drp-format/__tests__/splice-clips.test.js +256 -0
  201. package/resolve-advanced/vendor/drp-format/assemble-timeline.js +65 -0
  202. package/resolve-advanced/vendor/drp-format/author-project.js +118 -0
  203. package/resolve-advanced/vendor/drp-format/composition-text.js +213 -0
  204. package/resolve-advanced/vendor/drp-format/curves-encoder.js +763 -0
  205. package/resolve-advanced/vendor/drp-format/diff.js +310 -0
  206. package/resolve-advanced/vendor/drp-format/drp-packager.js +201 -0
  207. package/resolve-advanced/vendor/drp-format/drp-validator.js +809 -0
  208. package/resolve-advanced/vendor/drp-format/effect-encoder.js +640 -0
  209. package/resolve-advanced/vendor/drp-format/extract-lut-refs.js +119 -0
  210. package/resolve-advanced/vendor/drp-format/grade-encoder.example.js +133 -0
  211. package/resolve-advanced/vendor/drp-format/grade-encoder.js +401 -0
  212. package/resolve-advanced/vendor/drp-format/grade-encoder.test.js +171 -0
  213. package/resolve-advanced/vendor/drp-format/grade-encoder.verify.js +249 -0
  214. package/resolve-advanced/vendor/drp-format/grade-node-extractor.js +495 -0
  215. package/resolve-advanced/vendor/drp-format/grade-parameter-decoder.js +774 -0
  216. package/resolve-advanced/vendor/drp-format/index.js +174 -0
  217. package/resolve-advanced/vendor/drp-format/inject-grades.js +219 -0
  218. package/resolve-advanced/vendor/drp-format/keyed-dict.js +227 -0
  219. package/resolve-advanced/vendor/drp-format/marker-encoder.js +532 -0
  220. package/resolve-advanced/vendor/drp-format/media-blobs.js +53 -0
  221. package/resolve-advanced/vendor/drp-format/media-timemap.js +164 -0
  222. package/resolve-advanced/vendor/drp-format/mp-folder-builder.js +293 -0
  223. package/resolve-advanced/vendor/drp-format/node-tree-encoder.js +1246 -0
  224. package/resolve-advanced/vendor/drp-format/package.json +18 -0
  225. package/resolve-advanced/vendor/drp-format/place-fusion-title.js +131 -0
  226. package/resolve-advanced/vendor/drp-format/place-generator.js +77 -0
  227. package/resolve-advanced/vendor/drp-format/place-transition.js +91 -0
  228. package/resolve-advanced/vendor/drp-format/power-window-encoder.js +776 -0
  229. package/resolve-advanced/vendor/drp-format/protobuf-wire.js +111 -0
  230. package/resolve-advanced/vendor/drp-format/qualifier-encoder.js +706 -0
  231. package/resolve-advanced/vendor/drp-format/relink-media.js +218 -0
  232. package/resolve-advanced/vendor/drp-format/rich-title-encoder.js +447 -0
  233. package/resolve-advanced/vendor/drp-format/seq-container-builder.js +572 -0
  234. package/resolve-advanced/vendor/drp-format/seq-surgery.js +155 -0
  235. package/resolve-advanced/vendor/drp-format/splice-clips.js +445 -0
  236. package/resolve-advanced/vendor/drp-format/templates/empty-project.drp +0 -0
  237. package/resolve-advanced/vendor/drp-format/templates/fusion-title.xml +56 -0
  238. package/resolve-advanced/vendor/drp-format/templates/generator-solid-color.xml +21 -0
  239. package/resolve-advanced/vendor/drp-format/templates/media-clip-h264.drp +0 -0
  240. package/resolve-advanced/vendor/drp-format/templates/transition-cross-dissolve.xml +22 -0
  241. package/resolve-advanced/vendor/drp-format/tool-registry.descriptor.js +80 -0
  242. package/resolve-advanced/vendor/drp-format/utils/safe-archive.js +54 -0
  243. package/resolve-advanced/vendor/drp-format/xml-builder.js +759 -0
  244. package/resolve-advanced/vendor/drt-format/__tests__/_resolve-verify.js +21 -0
  245. package/resolve-advanced/vendor/drt-format/__tests__/build.test.js +113 -0
  246. package/resolve-advanced/vendor/drt-format/__tests__/multi-format.test.js +93 -0
  247. package/resolve-advanced/vendor/drt-format/__tests__/parse-real-resolve21.test.js +51 -0
  248. package/resolve-advanced/vendor/drt-format/__tests__/parse.test.js +134 -0
  249. package/resolve-advanced/vendor/drt-format/__tests__/resolve-versions.test.js +120 -0
  250. package/resolve-advanced/vendor/drt-format/__tests__/schema-fingerprint.test.js +62 -0
  251. package/resolve-advanced/vendor/drt-format/__tests__/smoke.test.js +27 -0
  252. package/resolve-advanced/vendor/drt-format/__tests__/validate.test.js +109 -0
  253. package/resolve-advanced/vendor/drt-format/capabilities.js +69 -0
  254. package/resolve-advanced/vendor/drt-format/capability-domains.js +56 -0
  255. package/resolve-advanced/vendor/drt-format/drt-builder.js +42 -0
  256. package/resolve-advanced/vendor/drt-format/drt-parser.js +164 -0
  257. package/resolve-advanced/vendor/drt-format/drt-validator.js +98 -0
  258. package/resolve-advanced/vendor/drt-format/index.js +45 -0
  259. package/resolve-advanced/vendor/drt-format/package.json +17 -0
  260. package/resolve-advanced/vendor/drt-format/resolve-versions.js +153 -0
  261. package/resolve-advanced/vendor/drt-format/schema-fingerprint.js +74 -0
  262. package/resolve-advanced/vendor/drt-format/templates/drt-project-shell.xml +124 -0
  263. package/resolve-advanced/vendor/drx-codec/__tests__/curves-roundtrip.test.js +148 -0
  264. package/resolve-advanced/vendor/drx-codec/__tests__/fixtures/p2-1-face-refinement.drx +58 -0
  265. package/resolve-advanced/vendor/drx-codec/__tests__/fixtures/p2-1-filmgrain.drx +58 -0
  266. package/resolve-advanced/vendor/drx-codec/__tests__/fixtures/p2-1-glow.drx +58 -0
  267. package/resolve-advanced/vendor/drx-codec/__tests__/fixtures/p2-1-lens-flare.drx +58 -0
  268. package/resolve-advanced/vendor/drx-codec/__tests__/fixtures/p2-3-beauty-25.drx +58 -0
  269. package/resolve-advanced/vendor/drx-codec/__tests__/fixtures/p2-3-beauty-75.drx +58 -0
  270. package/resolve-advanced/vendor/drx-codec/__tests__/fixtures/p5-1-node-no-lut.drx +58 -0
  271. package/resolve-advanced/vendor/drx-codec/__tests__/fixtures/p5-1-node-with-lut.drx +58 -0
  272. package/resolve-advanced/vendor/drx-codec/__tests__/hsl-curves-roundtrip.test.js +117 -0
  273. package/resolve-advanced/vendor/drx-codec/__tests__/lut-refs-roundtrip.test.js +112 -0
  274. package/resolve-advanced/vendor/drx-codec/__tests__/matte-roundtrip.test.js +167 -0
  275. package/resolve-advanced/vendor/drx-codec/__tests__/ofx-roundtrip.test.js +215 -0
  276. package/resolve-advanced/vendor/drx-codec/__tests__/ofx-slugs-discovery.test.js +149 -0
  277. package/resolve-advanced/vendor/drx-codec/__tests__/power-window-roundtrip.test.js +230 -0
  278. package/resolve-advanced/vendor/drx-codec/__tests__/qualifier-roundtrip.test.js +226 -0
  279. package/resolve-advanced/vendor/drx-codec/cdl-exporter.js +470 -0
  280. package/resolve-advanced/vendor/drx-codec/color-nlp-parser.js +833 -0
  281. package/resolve-advanced/vendor/drx-codec/data/color-nlp-action-mappings.json +2232 -0
  282. package/resolve-advanced/vendor/drx-codec/drx-generator.js +4123 -0
  283. package/resolve-advanced/vendor/drx-codec/drx-merger.js +320 -0
  284. package/resolve-advanced/vendor/drx-codec/drx-parser.js +1808 -0
  285. package/resolve-advanced/vendor/drx-codec/extract-custom-curves.js +215 -0
  286. package/resolve-advanced/vendor/drx-codec/extract-hsl-curves.js +180 -0
  287. package/resolve-advanced/vendor/drx-codec/extract-lut-refs.js +158 -0
  288. package/resolve-advanced/vendor/drx-codec/extract-matte-finesse.js +83 -0
  289. package/resolve-advanced/vendor/drx-codec/extract-ofx-params.js +226 -0
  290. package/resolve-advanced/vendor/drx-codec/extract-power-window.js +184 -0
  291. package/resolve-advanced/vendor/drx-codec/extract-qualifier.js +99 -0
  292. package/resolve-advanced/vendor/drx-codec/index.js +109 -0
  293. package/resolve-advanced/vendor/drx-codec/node-layout.js +249 -0
  294. package/resolve-advanced/vendor/drx-codec/resolved-drx-generator.js +393 -0
  295. package/resolve-advanced/vendor/drx-codec/tool-resolver.js +974 -0
  296. package/resolve-advanced/vendor/drx-codec/training-examples.js +548 -0
  297. package/resolve-advanced/vendor/drx-codec/vocabulary-intents.js +539 -0
  298. package/resolve-advanced/vendor/drx-parameters/CALIBRATION-STATUS.md +319 -0
  299. package/resolve-advanced/vendor/drx-parameters/DRX-VALUE-SCALING.md +251 -0
  300. package/resolve-advanced/vendor/drx-parameters/calibrated-ranges.json +17737 -0
  301. package/resolve-advanced/vendor/drx-parameters/corrector-types.js +120 -0
  302. package/resolve-advanced/vendor/drx-parameters/index.js +193 -0
  303. package/resolve-advanced/vendor/drx-parameters/parameter-codec.js +451 -0
  304. package/resolve-advanced/vendor/drx-parameters/parameter-ids.js +1292 -0
  305. package/resolve-advanced/vendor/drx-parameters/parameter-ranges.js +570 -0
  306. package/resolve-advanced/vendor/drx-parameters/parameter-validator.js +392 -0
  307. package/resolve-advanced/vendor/drx-parameters/resolvefx-registry.json +14973 -0
  308. package/resolve-advanced/vendor/drx-parameters/tool-registry.descriptor.js +38 -0
  309. package/resolve-advanced/vendor/drx-parameters/tools/drx-analyzer.js +371 -0
  310. package/resolve-advanced/vendor/fairlight/index.js +833 -0
  311. package/resolve-advanced/vendor/fusion-codec/composition-generator.js +401 -0
  312. package/resolve-advanced/vendor/fusion-codec/templates/blur-region.js +103 -0
  313. package/resolve-advanced/vendor/fusion-codec/templates/color-correct.js +87 -0
  314. package/resolve-advanced/vendor/fusion-codec/templates/film-grain.js +106 -0
  315. package/resolve-advanced/vendor/fusion-codec/templates/lower-third.js +241 -0
  316. package/resolve-advanced/vendor/fusion-codec/templates/picture-in-picture.js +188 -0
  317. package/resolve-advanced/vendor/fusion-codec/templates/text-overlay.js +161 -0
  318. package/resolve-advanced/vendor/fusion-codec/templates/title-card.js +184 -0
  319. package/resolve-advanced/vendor/fusion-codec/templates/vignette.js +107 -0
  320. package/resolve-advanced/vendor/fusion-codec/templates/watermark.js +101 -0
  321. package/scripts/agent-rules/README.md +68 -0
  322. package/src/analysis_dashboard.py +233 -1
  323. package/src/granular/common.py +1 -1
  324. package/src/server.py +479 -29
  325. package/src/utils/api_truth.py +117 -0
  326. package/src/utils/cut_ir.py +1 -1
  327. package/src/utils/failure_tracker.py +0 -2
  328. package/src/utils/timeline_xml.py +405 -0
@@ -104,6 +104,23 @@ in success and in error responses.
104
104
  effect parameter. Higher-level wrappers should probe before assuming a
105
105
  control exists.
106
106
 
107
+ ## Advanced (offline) server — declarative `.comp` authoring
108
+
109
+ The actions above build a Fusion comp on a timeline item in a *running* Resolve.
110
+ The companion advanced server (`davinci-resolve-advanced`, see
111
+ `resolve-advanced/README.md`) authors Fusion compositions **offline, no Resolve
112
+ running**, via the `fusion` tool:
113
+
114
+ - `generate` / `generate_from_template` — write a `.comp` from a declarative spec
115
+ or a named template (`list_templates`).
116
+ - `to_api_calls` — compile a spec into the ordered tool-creation / input /
117
+ connection calls the live server then replays.
118
+
119
+ Rule of thumb: author and verify the comp offline, then apply it live with
120
+ `fusion_comp` `safe_add_tool` → `safe_set_inputs` → `safe_connect_tools` (the
121
+ `to_api_calls` output maps directly onto those). See the `resolve-fusion` skill
122
+ (`.claude/skills/fusion.md`) and the `/fusion_workflow` prompt.
123
+
107
124
  ## Live Probe
108
125
 
109
126
  Run the live boundary probe with:
@@ -120,6 +120,26 @@ params={"confirm": true, ...})`.
120
120
  the installed DaVinci Resolve 20 Manual, Edit > Chapter 42, "Multicam
121
121
  Editing," for the current UI workflow.
122
122
 
123
+ ## Advanced (offline) server — media front-end / ingest verification
124
+
125
+ The actions above import and organize media in a *running* Resolve. The companion
126
+ advanced server (`davinci-resolve-advanced`, see `resolve-advanced/README.md`)
127
+ handles the front-end / assistant-editor ingest layer **offline, no Resolve
128
+ running**, via the `media` tool (needs ffmpeg + ffprobe on PATH for the probing
129
+ actions):
130
+
131
+ - `ingest_verify` — hash seal / verify / dupes-by-hash (chain-of-custody).
132
+ - `media_inventory` — fps / codec / colorspace / TC + card-gap report.
133
+ - `sync` — picture↔sound TC alignment + drift / MOS detection.
134
+ - `relink_manifest`, `rename_plan` (**refuses camera originals**) /
135
+ `reel_normalize`, `turnover_package`, `project_hygiene`.
136
+
137
+ Rule of thumb: verify and inventory the card offline *before* importing, then
138
+ import/organize live. `media` also serves the delivery side (see the
139
+ `resolve-delivery` skill). See the `resolve-media-pool` skill
140
+ (`.claude/skills/media-pool.md`) and the `/media_pool_workflow` prompt. Never
141
+ rename or derive camera originals without explicit approval.
142
+
123
143
  ## Live Evidence
124
144
 
125
145
  Final validation ran on May 9, 2026 with DaVinci Resolve Studio 20.3.2.9 and
@@ -64,6 +64,38 @@ All actions are under `render(action=...)`.
64
64
  existing `render_presets` tool, but the live kernel probe does not fabricate
65
65
  arbitrary preset files.
66
66
 
67
+ ## Advanced (offline) server — deliverable QC, media front-end, provenance
68
+
69
+ The live actions above plan and drive renders in a *running* Resolve. The
70
+ companion advanced server (`davinci-resolve-advanced`, see
71
+ `resolve-advanced/README.md`) QCs the **finished render** and manages media/
72
+ provenance with **no Resolve running**. It is report-only —
73
+ **`gate: review`, never auto-pass-clear.**
74
+
75
+ - **`deliverable`** — `deliverable_qc` (ffprobe a render vs its spec → pass/fail
76
+ **per field**), `loudness_qc` (ebur128 LUFS/true-peak/LRA),
77
+ `reframe_blanking_check`, `conform_completeness` (every intended shot present),
78
+ `re_delivery_diff`, `render_manifest` (build/reconcile), `expand_deliverable`
79
+ (texted/textless/stems/slate/leader entities).
80
+ - **`media`** (front-end / AE) — `ingest_verify` (hash seal/verify/dupes),
81
+ `media_inventory` (fps/codec/colorspace/TC + card gaps), `sync` (picture↔sound
82
+ TC + drift/MOS), `relink_manifest`, `rename_plan` (**refuses camera
83
+ originals**) / `reel_normalize`, `turnover_package`, `project_hygiene`.
84
+ - **`provenance`** (audit) — `grade_provenance` ("why is this graded this way"),
85
+ `gallery_lineage`, `cdl_export` / `cdl_diff` (round-trip asserted),
86
+ `revision_tracking`, `episode_report`.
87
+
88
+ Rules an agent must know:
89
+
90
+ - QC tools **refuse rather than fabricate** — a "refused" result means missing
91
+ file, wrong spec, or a metric it cannot honestly compute.
92
+ - Deliverable gates never auto-clear; surface the per-field verdict to a human.
93
+ - **Deps.** `deliverable`/`media` QC needs **ffmpeg + ffprobe on PATH** (GPL, not
94
+ bundled) — call the advanced `capabilities` tool for status + install hints.
95
+
96
+ See the `resolve-delivery` skill (`.claude/skills/delivery.md`) for the
97
+ craft ↔ live ↔ offline routing.
98
+
67
99
  ## Live Evidence
68
100
 
69
101
  Final validation ran on May 9, 2026 with DaVinci Resolve Studio 20.3.2.9 and
@@ -84,6 +84,45 @@ Supported aliases include `aaf`, `drt`, `edl`, `edl_cdl`, `edl_sdl`,
84
84
  - Export and import helpers require temp paths by default because they write
85
85
  interchange artifacts.
86
86
 
87
+ ## Advanced (offline) server — the conform QC engine
88
+
89
+ The live actions above operate on a *running* Resolve. The companion advanced
90
+ server (`davinci-resolve-advanced`, see `resolve-advanced/README.md`) does the
91
+ finishing-grade conform work with **no Resolve running**, against `.drt`/`.drp`
92
+ files and the project DB.
93
+
94
+ - **`conform`** — offline conform/relink QC with **frame-oracle math, not
95
+ filename matching** (it catches a clip relinked to the wrong-but-similarly-named
96
+ source). Also: reverse/retimed subclip DB repair (reversed `source_start` =
97
+ `masterFrames − 1 − endoffset`, live-validated), sequence lineage store + diff +
98
+ rollback (hashed snapshots), and per-cut frame QC (oracle-frame vs
99
+ reference-render, scale-corrected, red/yellow/cyan verdicts).
100
+ - **`color_trace`** — cross-project clip matching → a trace plan for carrying
101
+ grades across a re-conform (pairs with the color kernel's `drx grade_transfer`).
102
+ - **`offline_ref`** — offline-reference clips have **no scripting API** but live
103
+ inside `.drp`/`.drt` as `<OfflineClip>` entries; patch them here.
104
+ - **`editorial`** — `parse_interchange` (EDL/OTIO/XMEML; **AAF = honest refuse**),
105
+ `turnover_changelist` (moved/retimed/replaced/new/gone with timing guards),
106
+ `conform_manifest`, `marker_roundtrip`.
107
+ - **`drt` / `project_db`** — timeline file authoring and DB patching.
108
+
109
+ Gotchas the live path shares:
110
+
111
+ - **XML import via the scripting API goes _offline_** (missing-media/generators
112
+ abort). Use `import_timeline_checked` with media **sanitize** (FCP7/FCPXML) so
113
+ the API imports with links intact, then exact-path relink. Restart a running MCP
114
+ server to pick up the sanitize fix.
115
+ - **`.drt` version.** For DaVinci Resolve 19.1.3, set `DbPrjVer` 17 → 16 when
116
+ authoring a `.drt`.
117
+ - **`project_db` patches** require the project **CLOSED** plus
118
+ `iConfirmProjectClosed:true`; writes auto-back-up and read-back verify. Resolve
119
+ caches open projects — **fully quit and relaunch** after patching.
120
+ - **Deps.** `better-sqlite3` gates lineage/reverse/DB; `sharp`/ffmpeg gate frame
121
+ compare — call the advanced `capabilities` tool.
122
+
123
+ See the `resolve-conform` skill (`.claude/skills/conform.md`) for the
124
+ craft ↔ live ↔ offline routing.
125
+
87
126
  ## Live Probe
88
127
 
89
128
  Run the live boundary probe with:
@@ -180,6 +180,23 @@ Some behavior depends on Resolve's current page or bridge state:
180
180
  if Resolve loses current timeline state, the harness records the bridge
181
181
  condition separately.
182
182
 
183
+ ## Advanced (offline) server — editorial interchange + changelist
184
+
185
+ The kernel above restructures a *running* timeline. The companion advanced server
186
+ (`davinci-resolve-advanced`, see `resolve-advanced/README.md`) authors/diffs
187
+ timelines and reasons over editorial interchange with **no Resolve running**:
188
+
189
+ - **`editorial`** — `parse_interchange` (EDL/OTIO/XMEML; **AAF = honest refuse**),
190
+ `turnover_changelist` (moved/retimed/replaced/new/gone between two cuts, with
191
+ timing silent-lie guards), `conform_manifest`, `marker_roundtrip`.
192
+ - **`drt`** — `.drt` timeline file authoring + structural diff.
193
+
194
+ Use these to answer "what changed between v3 and v4" or to hand a conform an
195
+ accurate change list without opening either timeline. For conforming/relinking
196
+ that change list, see the Timeline Conform / Interchange kernel and the
197
+ `resolve-conform` skill; for the edit ↔ offline routing, see the `resolve-edit`
198
+ skill (`.claude/skills/timeline-edit.md`).
199
+
183
200
  ## Development Guardrails
184
201
 
185
202
  - Use disposable projects and synthetic media for live validation.
@@ -35,11 +35,15 @@ Every release bump must update all version surfaces:
35
35
  `venv/bin/python scripts/gen_api_limitations.py`. The
36
36
  `tests.test_api_limitations_doc` drift guard fails the suite if it is stale.
37
37
  - `docs/SKILL.md` when tool discovery, examples, or behavior changed
38
- - `docs/guides/control-panel.md` when the control panel UI changed, plus
38
+ - `docs/guides/control-panel.md` check EVERY release, not only when the
39
+ panel "changed": panel surfaces grow transitively (new tools, new docs pages,
40
+ new diagnostics cards), so review the guide for accuracy and update it plus
39
41
  regenerated screenshots: start the panel against a project with analysis
40
42
  data, then run `venv/bin/python scripts/regen_panel_screenshots.py`.
41
43
  The `tests.test_panel_docs_drift` guard fails the suite (and the publish
42
- workflow) when the guide drifts from the panel's navigation or screenshots.
44
+ workflow) when the guide drifts from the panel's navigation or screenshots
45
+ but the guard checks presence, not prose accuracy; the human pass is the
46
+ accuracy check.
43
47
  - Git tag, e.g. `v2.4.1`
44
48
  - GitHub Release notes
45
49
 
@@ -54,17 +58,35 @@ Always run static checks before release:
54
58
  venv/bin/python tests/test_import.py
55
59
  venv/bin/python scripts/audit_api_parity.py
56
60
  venv/bin/python scripts/gen_api_limitations.py --check
57
- venv/bin/python -m unittest tests.test_static_undefined_names tests.test_action_list_drift tests.test_panel_docs_drift
61
+ node scripts/agent-rules/generate.mjs --check
62
+ venv/bin/python -m unittest tests.test_static_undefined_names tests.test_action_list_drift tests.test_panel_docs_drift tests.test_doc_tool_counts tests.test_agent_rules_drift
58
63
  node bin/davinci-resolve-mcp.mjs --help
59
64
  node bin/davinci-resolve-mcp.mjs --version
60
65
  npm pack --dry-run
61
66
  git diff --check
62
67
  ```
63
68
 
64
- The three drift guards (undefined names in `src/`, tool action lists vs
65
- dispatch, control-panel guide vs panel navigation/screenshots) also run in the
66
- `Publish npm package` workflow on every `v*` tag, so a stale doc or drifted
67
- action list fails the publish — fix the drift rather than bypassing the gate.
69
+ The drift guards (undefined names in `src/`, tool action lists vs dispatch,
70
+ control-panel guide vs panel navigation/screenshots, api-limitations vs the
71
+ api_truth ledger, and **tool counts across the docs vs reality**
72
+ `test_doc_tool_counts`) also run in the `Publish npm package` workflow on every
73
+ `v*` tag, so a stale doc or drifted action list fails the publish — fix the drift
74
+ rather than bypassing the gate.
75
+
76
+ `test_doc_tool_counts` statically counts the compound (`src/server.py`), granular
77
+ (`src/granular/`), and Node advanced (`resolve-advanced/server/index.mjs`) tools and
78
+ asserts the numbers quoted in README, `resolve-advanced/README.md`, `docs/contributing.md`,
79
+ `docs/SKILL.md`, `docs/reference/api-coverage.md`, and `.github/copilot-instructions.md`
80
+ still match. When you add/remove a tool, update those docs to the counts the test prints.
81
+
82
+ The cross-platform agent rule files (`.cursor/rules/*`, `.github/instructions/*`,
83
+ `.windsurf/rules/*`, `.cursorrules`, `.windsurfrules`, the `AGENTS.md` domain-routing
84
+ block, and `.github/copilot-instructions.md`) are **generated** by
85
+ `scripts/agent-rules/generate.mjs`, which parses those same counts from their
86
+ canonical docs. After a count or tool-routing change, run
87
+ `node scripts/agent-rules/generate.mjs` and commit the result;
88
+ `test_agent_rules_drift` fails the suite (and publish) if the committed files are
89
+ stale. See `scripts/agent-rules/README.md`.
68
90
 
69
91
  Run focused unit tests for the changed surface. For recent timeline/marker
70
92
  helpers, this usually includes:
@@ -17,7 +17,7 @@ Complete Resolve scripting API coverage, live-test status, and method-by-method
17
17
 
18
18
  ## API Coverage
19
19
 
20
- Every non-deprecated method in the DaVinci Resolve Scripting API is covered. The default compound server exposes **33 tools** that group related operations by action parameter, keeping LLM context windows lean. The full granular server provides **341 individual tools** for power users. Both modes cover all 13 API object classes. MCP-level kernel actions are tracked separately in [Kernel Action Coverage](../kernels/README.md).
20
+ Every non-deprecated method in the DaVinci Resolve Scripting API is covered. The default compound server exposes **34 tools** that group related operations by action parameter, keeping LLM context windows lean. The full granular server provides **341 individual tools** for power users. Both modes cover all 13 API object classes. MCP-level kernel actions are tracked separately in [Kernel Action Coverage](../kernels/README.md).
21
21
 
22
22
  The 33rd compound tool is `timeline_versioning` (C6) — an MCP-level workflow
23
23
  tool, not a wrapper around a Resolve API method. It surfaces the
@@ -12,7 +12,7 @@ that none exists).
12
12
 
13
13
  **Verified on:** DaVinci Resolve Studio 21.0.0
14
14
 
15
- **Totals:** 14 missing capabilities, 10 bugs / unreliable behaviors.
15
+ **Totals:** 18 missing capabilities, 11 bugs / unreliable behaviors.
16
16
 
17
17
  The authoritative source is the runtime-queryable `api_truth` ledger
18
18
  (`resolve_control api_truth "<query>"`); this document is generated from
@@ -141,6 +141,34 @@ equivalent, blocking full automation.
141
141
  - **Workaround / current handling:** Create Smart/Power Bins in the Resolve UI; only regular bins are scriptable.
142
142
  - **Tags:** missing-method, media-pool, bins
143
143
 
144
+ ### Per-subtitle text content and timing editing
145
+
146
+ - **Object:** `TimelineItem (subtitle track)`
147
+ - **Behavior:** TimelineItem on a subtitle track exposes only 21 standard transform/composite properties (Pan, Tilt, ZoomX, Opacity, Crop, etc.). There are no methods to get or set subtitle text (GetText/SetText), start time, end time, or duration for individual subtitle items. Subtitles created via CreateSubtitlesFromAudio or imported via the Resolve UI cannot have their content or timing read or modified programmatically. Verified via dir() and GetProperty() on Resolve 21.0.0.48.
148
+ - **Workaround / current handling:** No workaround exists — subtitle text and timing are completely inaccessible from the scripting API. Must be edited in the Resolve UI.
149
+ - **Tags:** missing-method, subtitle, text, timing
150
+
151
+ ### Subtitle track styling and presets
152
+
153
+ - **Object:** `TimelineItem / Timeline / Project`
154
+ - **Behavior:** There is no API method to set or query subtitle font family, font size, text color, background color, outline, shadow, position, alignment, or to apply/query subtitle style presets. TimelineItem.GetProperty() on subtitle items returns only transform/composite keys. Timeline.GetSetting() and Project.GetSetting() return None for all probed subtitle-style keys (e.g. 'subtitleFontName', 'subtitleFontSize', 'subtitleTextColor', 'subtitleBackgroundColor', 'subtitlePosition', 'subtitleAlignment', 'subtitlePreset', 'subtitleStyle'). Verified via dir(), GetProperty(), and GetSetting() on Resolve 21.0.0.48.
155
+ - **Workaround / current handling:** No workaround exists — subtitle styling is UI-only. Burn-in overlays via Fusion titles are a visual alternative but do not produce proper subtitle tracks.
156
+ - **Tags:** missing-method, subtitle, style, preset
157
+
158
+ ### Speech recognition engine selection and SRT import
159
+
160
+ - **Object:** `Timeline`
161
+ - **Behavior:** Timeline.CreateSubtitlesFromAudio(autoCaptionSettings) always uses the built-in Resolve speech recognition engine. There is no API parameter to select an alternative provider (e.g. whisper-cli, Google Speech, AWS Transcribe). The language selection via resolve.AUTO_CAPTION_LANGUAGE_* is the only customization; the engine itself cannot be changed. Furthermore, there is no API method to import an SRT file into a subtitle track programmatically — File -> Import -> Subtitle is UI-only.
162
+ - **Workaround / current handling:** No workaround exists for provider selection or SRT import. External transcripts must be converted to SRT and imported through the Resolve UI.
163
+ - **Tags:** missing-method, subtitle, transcription, speech-recognition, asr
164
+
165
+ ### Media Pool folder rename
166
+
167
+ - **Object:** `MediaPool`
168
+ - **Behavior:** MediaPool exposes AddSubFolder(name), DeleteSubFolders([names]), and MoveFolders([names], targetFolder) but no RenameSubFolder(oldName, newName) method. Folders can be created, deleted, and moved, but their names cannot be changed through the API. Verified via dir() on Resolve 21.0.0.
169
+ - **Workaround / current handling:** Delete and recreate the folder with the desired name, or rename in the Resolve UI.
170
+ - **Tags:** missing-method, media-pool, folder
171
+
144
172
  ## Bugs / Unreliable Behavior (please fix)
145
173
 
146
174
  Methods that exist but misbehave — silent failures, unreliable return
@@ -220,3 +248,12 @@ values, or automation-hostile modal prompts.
220
248
  - **Behavior:** The Python bridge returns a callable for ANY attribute name, so hasattr(obj, 'TotallyMadeUpMethod') is always True and getattr never raises. This makes capability detection by hasattr impossible — verified on 21.0.0 (hasattr reported SetStart, Razor, AddNode, GenerateProxy, AddSmartBin etc. as present though none exist). Only dir() lists the real methods.
221
249
  - **Workaround / current handling:** Never probe method existence with hasattr/getattr; test membership against dir(obj) instead. Calling a fabricated method typically returns None/False with no error.
222
250
  - **Tags:** bridge, introspection, silent-failure
251
+
252
+ ### MediaPoolItem.SetClipProperty('Reel Name', ...)
253
+
254
+ - **Object:** `MediaPoolItem`
255
+ - **Signature:** `(propertyName, propertyValue) -> bool`
256
+ - **Behavior:** Setting the 'Reel Name' clip property returns True but the value is silently dropped on read-back when the project is configured to derive reel names automatically (General Options > 'Assist using reel names from the:' set to source clip file / embedding / filename pattern). The same True-but-unpersisted behavior occurs via SetMetadata('Reel Name', ...). Other clip properties on the same clip (e.g. 'Comments') write and persist normally, so this is field-specific, not a bridge/permission failure. Verified on Resolve 21.0.0; reported as issue #77.
257
+ - **Workaround / current handling:** After writing 'Reel Name', read it back with GetClipProperty('Reel Name') and refuse to report success on mismatch; surface the project-setting gate to the caller (server._verify_clip_property_writeback).
258
+ - **Reference:** [issue #77](https://github.com/samuelgursky/davinci-resolve-mcp/issues/77)
259
+ - **Tags:** unreliable-return, silent-failure, metadata, reel-name
package/install.py CHANGED
@@ -35,7 +35,7 @@ from src.utils.update_check import (
35
35
 
36
36
  # ─── Version ──────────────────────────────────────────────────────────────────
37
37
 
38
- VERSION = "2.57.4"
38
+ VERSION = "2.58.0"
39
39
  # Only hard floor: mcp[cli] requires Python 3.10+. There is no upper bound —
40
40
  # Resolve's scripting bridge loads into newer interpreters on recent builds
41
41
  # (Python 3.14 verified against Resolve Studio 20.3.2). Older Resolve builds
@@ -666,14 +666,37 @@ def write_client_config(client, python_path, server_path, api_path, lib_path, dr
666
666
  return True, str(config_path)
667
667
 
668
668
 
669
+ def build_advanced_entry(server_path):
670
+ """Build the config entry for the optional 'davinci-resolve-advanced' server.
671
+
672
+ This is the Node, beyond-the-scripting-API sibling (file/.drp/.drt/.drx
673
+ authoring + conform + editorial, no live Resolve required). It ships in the
674
+ same package as a second bin. Opt-in: include it only if you want the
675
+ file-level tools alongside the live server.
676
+ """
677
+ project_dir = Path(server_path).resolve().parents[1] # .../src/server.py -> repo root
678
+ advanced_bin = project_dir / "bin" / "davinci-resolve-advanced-mcp.mjs"
679
+ return {"command": "node", "args": [str(advanced_bin)]}
680
+
681
+
669
682
  def generate_manual_config(python_path, server_path, api_path, lib_path):
670
683
  """Generate config snippets for manual setup."""
671
684
  entry = build_server_entry(python_path, server_path, api_path, lib_path)
672
685
  zed_entry = build_zed_entry(python_path, server_path, api_path, lib_path)
673
686
  opencode_entry = build_opencode_entry(python_path, server_path, api_path, lib_path)
674
-
675
- standard = json.dumps({"mcpServers": {"davinci-resolve": entry}}, indent=2)
676
- vscode_fmt = json.dumps({"servers": {"davinci-resolve": entry}}, indent=2)
687
+ advanced = build_advanced_entry(server_path)
688
+
689
+ # Standard snippet includes BOTH servers: the live Python server and the
690
+ # optional Node 'advanced' server (file-level, no Resolve). Drop the
691
+ # advanced entry if you only want live control.
692
+ standard = json.dumps({"mcpServers": {
693
+ "davinci-resolve": entry,
694
+ "davinci-resolve-advanced": advanced,
695
+ }}, indent=2)
696
+ vscode_fmt = json.dumps({"servers": {
697
+ "davinci-resolve": entry,
698
+ "davinci-resolve-advanced": advanced,
699
+ }}, indent=2)
677
700
  zed_fmt = json.dumps({"context_servers": {"davinci-resolve": zed_entry}}, indent=2)
678
701
  opencode_fmt = json.dumps({"mcp": {"davinci-resolve": opencode_entry}}, indent=2)
679
702
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "davinci-resolve-mcp",
3
- "version": "2.57.4",
3
+ "version": "2.58.0",
4
4
  "description": "NPM bootstrapper for the DaVinci Resolve MCP Server.",
5
5
  "license": "MIT",
6
6
  "author": "Samuel Gursky <samgursky@gmail.com>",
@@ -14,11 +14,32 @@
14
14
  },
15
15
  "type": "module",
16
16
  "bin": {
17
- "davinci-resolve-mcp": "./bin/davinci-resolve-mcp.mjs"
17
+ "davinci-resolve-mcp": "./bin/davinci-resolve-mcp.mjs",
18
+ "davinci-resolve-advanced-mcp": "./bin/davinci-resolve-advanced-mcp.mjs"
19
+ },
20
+ "dependencies": {
21
+ "@modelcontextprotocol/sdk": "^1.27.1",
22
+ "adm-zip": "^0.5.16",
23
+ "fast-xml-parser": "^5.7.3",
24
+ "fzstd": "^0.1.1",
25
+ "jszip": "^3.10.1",
26
+ "uuid": "^9.0.0",
27
+ "zod": "^3.25.76",
28
+ "zstd-codec": "^0.1.5"
29
+ },
30
+ "optionalDependencies": {
31
+ "better-sqlite3": "^11.0.0",
32
+ "js-yaml": "^4.1.0",
33
+ "pg": "^8.11.0",
34
+ "sharp": "^0.33.0"
18
35
  },
19
36
  "files": [
20
37
  "bin/",
21
38
  "src/**/*.py",
39
+ "resolve-advanced/server/**/*.mjs",
40
+ "resolve-advanced/vendor/**",
41
+ "resolve-advanced/package.json",
42
+ "resolve-advanced/README.md",
22
43
  "docs/**/*.md",
23
44
  "docs/reference/resolve_scripting_api.txt",
24
45
  "examples/**/*.md",
@@ -0,0 +1,194 @@
1
+ # davinci-resolve-advanced-mcp
2
+
3
+ The **beyond-the-API** half of `davinci-resolve-mcp`: a Node MCP server that authors and edits
4
+ DaVinci Resolve **files** (`.drp` / `.drt` / `.drx`) and applies DB/XML-level changes (Fairlight
5
+ routing, offline-reference, conform, color-group grade read) — **with no DaVinci Resolve running.**
6
+
7
+ It ships as a second `bin` inside the `davinci-resolve-mcp` npm package (one install, two servers):
8
+
9
+ ```
10
+ bin/davinci-resolve-mcp.mjs → Python, live, sanctioned scripting API (drives Resolve)
11
+ bin/davinci-resolve-advanced-mcp.mjs → Node, beyond-API file/DB authoring (no Resolve required) [this]
12
+ ```
13
+
14
+ Runs cloud or local — the file tools never touch Resolve.
15
+
16
+ ## Two ways to use it
17
+
18
+ - **As an MCP server** (the bin above) — point any MCP client at it.
19
+ - **As a library** — `import` the engine directly. The package exposes a public API surface
20
+ (`server/lib.mjs`, wired via `package.json` `main`/`exports`), grouped as **codec** (offline
21
+ `.drp/.drt/.drx`), **grading** (deterministic compute cores), **pipeline** (the DB-as-truth
22
+ foundation), **tools** (the MCP tool handlers), and **mcp** (the stdio server entry). The MCP
23
+ server is a thin shell over these same exports.
24
+
25
+ ## Usage
26
+
27
+ **As a library — a grading core.** You extract display-referred frames per clip (ffmpeg, your
28
+ call); the engine computes the grade offline and writes an apply-ready `.drx`. Applying it in
29
+ Resolve (via the scripting API) is the caller's job.
30
+
31
+ ```js
32
+ import { computeSkinMatch } from 'davinci-resolve-advanced-mcp';
33
+
34
+ const { grades, report, warnings } = await computeSkinMatch(
35
+ [
36
+ { id: 'B_0008', png: '/frames/B_0008.png', group: 'Guest' },
37
+ { id: 'C_0016', png: '/frames/C_0016.png', group: 'Guest' },
38
+ ],
39
+ { outDir: '/out/skin' },
40
+ );
41
+ // grades[].drxPath → apply in Resolve; warnings flag over-corrections; low-skin clips are skipped, not faked.
42
+ ```
43
+
44
+ **The DB-as-truth pipeline** (via the `pipeline` tool handler — same API the MCP server exposes).
45
+ Compile YAML specs into the canonical DB, plan a run, execute a deterministic stage (you supply the
46
+ tool inputs), then read decoded state back and check drift:
47
+
48
+ ```js
49
+ import { pipelineTool } from 'davinci-resolve-advanced-mcp';
50
+ const call = (action, args) => pipelineTool.handler({ action, args });
51
+
52
+ const dbPath = '/proj/project.db';
53
+ const now = new Date().toISOString(); // the tool takes an explicit timestamp
54
+
55
+ await call('compile', { dbPath, now, yamlDir: '/proj/specs' }); // YAML → resolved entity tree
56
+ const { runId, stages } = await call('plan', { dbPath, episodeSlug: 'e012', now });
57
+
58
+ // Deterministic stages run now (you pass the tool args); Resolve-apply stages return an action plan.
59
+ await call('execute_stage', {
60
+ dbPath, runId, stageIndex: 0, now,
61
+ toolArgs: { tool: 'gamut_legal', args: { clips: [{ id: 'f', png: '/frames/f.png' }] } },
62
+ });
63
+
64
+ // Pull decoded actual state up and flag intent↔actual drift.
65
+ await call('readback', {
66
+ dbPath, entitySlug: 'e012.group.Host', now,
67
+ facts: { 'look.lut': 'Kodak_5219' }, pushFields: [{ field: 'look.lut' }],
68
+ });
69
+ ```
70
+
71
+ ## Tools (18)
72
+
73
+ `drp` · `drt` · `drx` · `offline_ref` · `conform` · `color_trace` · `fusion` · `audio` ·
74
+ `audio_plan` · `fairlight` · `project_db` · `project_read` · `pipeline` · `capabilities` ·
75
+ `deliverable` · `media` · `editorial` · `provenance`
76
+
77
+ Each dispatches on an `action`. Highlights:
78
+
79
+ - **`drx`** — per-clip grade (`.drx`) codec: `parse`, `generate`, `generate_from_request`,
80
+ `export_cdl`, `merge`, plus the **grading/QC catalog** below.
81
+ - **`drp` / `drt`** — project / timeline file authoring + editing + grade injection + structural diff.
82
+ - **`conform`** — offline conform/relink QC engine (frame-oracle math, not filename matching),
83
+ reverse-clip DB repair, sequence lineage store + diff, per-cut frame QC.
84
+ - **`color_trace`** — cross-project clip matching → a trace plan for carrying grades across a re-conform.
85
+ - **`project_read` / `project_db`** — read/patch the Resolve project DB (SQLite or Postgres).
86
+ - **`pipeline`** — the DB-as-truth pipeline foundation (see below).
87
+ - **`deliverable`** — deliverable QC / compliance: `deliverable_qc` (ffprobe a render vs its spec →
88
+ pass/fail per field), `loudness_qc` (ebur128 LUFS/true-peak/LRA), `reframe_blanking_check`,
89
+ `conform_completeness`, `re_delivery_diff`, `render_manifest` (build/reconcile), `expand_deliverable`
90
+ (texted/textless/stems/slate/leader entities). Report-only (`gate: review` — never auto-pass-clear).
91
+ - **`media`** — media front-end / AE: `ingest_verify` (hash seal/verify/dupes-by-hash), `media_inventory`
92
+ (fps/codec/colorspace/TC + card gaps), `sync` (TC picture↔sound + drift/MOS), `relink_manifest`,
93
+ `rename_plan` (refuses camera originals) / `reel_normalize`, `turnover_package`, `project_hygiene`.
94
+ - **`editorial`** — editorial integrity: `parse_interchange` (EDL/OTIO/XMEML; AAF = honest refuse),
95
+ `turnover_changelist` (moved/retimed/replaced/new/gone + timing silent-lie guards), `conform_manifest`,
96
+ `marker_roundtrip`.
97
+ - **`provenance`** — provenance / audit: `gallery_lineage`, `grade_provenance` ("why is this graded this
98
+ way"), `cdl_export` (+ `cdl_diff`, round-trip asserted), `revision_tracking`, `episode_report`.
99
+
100
+ ### Grading / QC catalog (`drx` actions — all local, deterministic, no Resolve)
101
+
102
+ Frame-stats → arithmetic → `.drx` grade. Frame extraction and grade **apply** are the caller's job;
103
+ these compute the grade offline. Each carries guards that refuse to fabricate a match rather than emit
104
+ a silent no-op.
105
+
106
+ | Action | What |
107
+ |---|---|
108
+ | `level_clips` | within-camera exposure/WB drift → a group hero (whole-frame mean) |
109
+ | `skin_match` | cross-camera skin-tone cohesion (skin-gated mean; throws on log/wrong-space frames) |
110
+ | `shot_match` | b-roll cohesion — gray-world `neutralize` or `hero` match (per-channel median) |
111
+ | `white_balance_match` | WB from a known-neutral patch (gray card) — accurate, not gray-world guess |
112
+ | `contrast_normalize` | match black/white points to a hero (affine gain+offset) |
113
+ | `match_to_reference` | affine mean-std transfer toward an approved still (skin-line gated, luma-preserve) |
114
+ | `saturation_match` | skin/overall saturation cohesion toward a hero |
115
+ | `black_balance` | neutralize a shadow colour cast (p1 black point, offset-only) |
116
+ | `cdl_io` | import ASC CDL (`.cc`/`.ccc`/`.cdl`) → `.drx` |
117
+ | `grade_transfer` | lossless Body copy — a `.drp` group / `.drx` look → an apply-ready `.drx` |
118
+ | `relayout` | programmatic "Cleanup Node Graph" (the UI command has no API) — rewrite node x/y to Resolve's clean row, grade byte-preserved. Live recipe: grab → `relayout` → reset grade → apply (same-structure applies keep the old layout). Bulk whole-project sweep: `project_db` `relayout_node_graphs` |
119
+ | `author_look` / `carry_look` | version an approved season/host look + plan carrying it across episodes |
120
+ | `lut_apply` | attach a named `.cube` LUT to a node (Body-LUT write path, round-trip asserted) |
121
+ | `scope_read` | frame readouts: parade balance, vectorscope skin-line, black-balance, %clip/%crush + intent signals |
122
+ | `intent_tags` | derive L1 shot-intent tags (low_key, monochromatic, motivated_warm) to exclude from neutralize |
123
+ | `verify_grade` | intended vs applied `.drx` → landed/drifted/missing/unverifiable |
124
+ | `extract_frames` | ffmpeg display-referred frame extraction (hard log-refuse) |
125
+ | `gamut_legal` | broadcast-legal + hard-clip QC (measurement only, no grade emitted) |
126
+
127
+ ### Pipeline foundation (`pipeline` tool — DB-as-truth)
128
+
129
+ A canonical local **SQLite project DB** is the source of truth; **YAML authoring compiles into it**
130
+ (4-layer inheritance: type → series → episode → deliverable, with validation); a **runner** reads the
131
+ resolved `pipeline:` and executes stages with gates + provenance; **readback** records decoded actual
132
+ state and flags intent↔actual **drift**. Deterministic stages run in Node; Resolve-apply stages emit an
133
+ action plan for the live agent (Node can't drive Resolve). Actions: `compile`, `list_entities`,
134
+ `get_entity`, `ancestry`, `catalog`, `plan`, `execute_stage`, `approve_gate`, `mark_applied`,
135
+ `readback`, `get_run`, `list_runs`, `provenance`, `drift`.
136
+
137
+ ## Layout
138
+ - `vendor/` — vendored, MIT copies of the format libraries (CommonJS):
139
+ - `drp-format/` — `.drp` project authoring/editing + grade injection + structural diff
140
+ - `drt-format/` — `.drt` timeline authoring (delegates to drp-format)
141
+ - `drx-codec/` — per-clip DRX grade parse/generate, CDL export, node-tree/curves/qualifier/window codecs
142
+ - `drx-parameters/` — calibrated parameter ranges/ids consumed by drx-codec
143
+ - `conform-qc/` — the offline conform/relink QC engine
144
+ - `server/` — the MCP server, tools, grading cores, and the DB-as-truth pipeline foundation
145
+ - `test/` — offline unit suite (`npm test`); `.prettierrc.json` — formatting config
146
+ - `package.json` — manifest; intentionally CommonJS (no `"type": "module"`) so the vendored libs load
147
+ under the repo's `type: module` root.
148
+
149
+ ## Requirements & optional features
150
+
151
+ The **core is pure-JS / MIT with zero required native modules or bundled binaries** — `drp`, `drt`,
152
+ `drx` (incl. the grading catalog needs `sharp`, see below), `offline_ref`, `fusion`, `audio_plan`,
153
+ `conform` (core), `color_trace`, `project_read`, `capabilities` all work out of the box, cloud or local.
154
+
155
+ A few features need something the **user installs themselves** (call the `capabilities` tool for live
156
+ status + install hints):
157
+
158
+ | Feature | Needs | Why not bundled / Install |
159
+ |---|---|---|
160
+ | `audio` (split/trim/convert), conform frame ops | **ffmpeg + ffprobe on PATH** | FFmpeg binaries are **GPL** — bundling them would taint this MIT package. `brew install ffmpeg` / `apt install ffmpeg` / `choco install ffmpeg`. |
161
+ | grading/QC catalog, `conform.verify` (frame compare) | `sharp` (optional) | native module; `npm i sharp` |
162
+ | `pipeline` (project DB), `fairlight` live-DB path, conform lineage/reverse | `better-sqlite3` (optional) | native module; `npm i better-sqlite3`. (The `.drp`-zip Fairlight path needs none.) |
163
+ | YAML authoring (`pipeline compile` from a YAML dir) | `js-yaml` (optional) | pure JS; `npm i js-yaml` |
164
+
165
+ Missing features fail with a clear, actionable message rather than crashing; the server logs a one-line
166
+ "needs setup" summary to stderr at startup.
167
+
168
+ ## Provenance & license
169
+ Vendored libraries are clean offline format-interop and deterministic compute code: no secrets, no
170
+ external service coupling, no network calls, no LLM dependency. Where a feature can take a second
171
+ opinion from an AI (the conform engine's advisory `VisionValidator`), it does so only through a
172
+ host-injected adapter — the engine ships the interface and a deterministic fake, never a concrete
173
+ LLM client. Licensed **MIT** under this repo's root `LICENSE` (Copyright DaVinci Resolve MCP
174
+ Contributors and Bradford Operations LLC).
175
+
176
+ > The bundled `vendor/drp-format/templates/media-clip-h264.drp` uses a neutral synthetic source
177
+ > (`/Media/sample.mp4`) — scrubbed of any personal path / third-party clip reference.
178
+
179
+ DRX write paths were calibrated live against DaVinci Resolve 19 Studio (2026-07): primaries use one
180
+ unified `space: 'ui' | 'drx'` value-space flag (panel units by default), and the structural writes —
181
+ power windows (circle/linear/gradient + polygon/curve vertex shapes), HSL/RGB/luma qualifiers, HDR
182
+ zones, ColorSlice globals, blur/key/motion-effects palettes, sat/lum-axis HSL curves, and hue-axis
183
+ HSL curves (single- **and** multi-band, via a canonical bezier-cage emitter that replicates Resolve's
184
+ own serialization; edge-on-band-slot geometry passes through raw) — are panel-readback-verified.
185
+ OFX/ResolveFX plugin params are read AND write verified (params are self-describing
186
+ on the wire; writes render-confirmed live — see the ResolveFX registry for the full
187
+ plugin universe, measured ranges, and per-plugin enum vocabularies). HDR zone
188
+ DEFINITIONS (custom Max Range/falloff), Motion Effects scales, and the tracker-data
189
+ blob are decoded and (where applicable) write-verified. Still experimental to write:
190
+ Color Warper on Resolve 19 (the pin-list wire format is R21's). Per-control status
191
+ lives in `vendor/drx-parameters/CALIBRATION-STATUS.md` — capabilities are flagged
192
+ honestly, not overclaimed.
193
+ The grading catalog and pipeline foundation are unit-tested offline; their Resolve **apply** is the
194
+ caller's job and is validated live separately.
@@ -0,0 +1,50 @@
1
+ {
2
+ "name": "davinci-resolve-advanced-mcp",
3
+ "version": "0.0.0-dev",
4
+ "private": true,
5
+ "license": "MIT",
6
+ "description": "Beyond-the-API DaVinci Resolve MCP — offline .drp/.drt/.drx authoring/editing. Sibling Node server to the Python davinci-resolve-mcp. Dev-local package.json; deps promote to the repo root at packaging.",
7
+ "comment_commonjs": "Intentionally NO \"type\": \"module\" — the vendored libs are CommonJS (require()). The repo root is type:module, so this nested manifest scopes resolve-advanced/**/*.js back to CommonJS.",
8
+ "comment_exports": "Public library surface so a downstream consumer can import the codec/grading/pipeline API, not just spawn the MCP bin. `.` = the lib barrel; `./mcp` = the stdio server entry. Still private:true — publish name/registry + un-privating are a parked decision.",
9
+ "main": "./server/lib.mjs",
10
+ "exports": {
11
+ ".": "./server/lib.mjs",
12
+ "./mcp": "./server/index.mjs",
13
+ "./package.json": "./package.json"
14
+ },
15
+ "files": [
16
+ "server/**/*.mjs",
17
+ "vendor/**",
18
+ "README.md"
19
+ ],
20
+ "dependencies": {
21
+ "@modelcontextprotocol/sdk": "^1.27.1",
22
+ "adm-zip": "^0.5.16",
23
+ "fast-xml-parser": "^5.7.3",
24
+ "fzstd": "^0.1.1",
25
+ "jszip": "^3.10.1",
26
+ "uuid": "^9.0.0",
27
+ "zod": "^3.25.76",
28
+ "zstd-codec": "^0.1.5"
29
+ },
30
+ "optionalDependencies": {
31
+ "better-sqlite3": "^11.10.0",
32
+ "js-yaml": "^4.3.0",
33
+ "pg": "^8.22.0",
34
+ "sharp": "^0.33.0"
35
+ },
36
+ "peerDependenciesMeta": {
37
+ "_comment": "audio (split/trim/convert) + conform frame ops need system ffmpeg/ffprobe on PATH (NOT bundled — FFmpeg binaries are GPL; this package stays MIT). Install ffmpeg yourself: brew install ffmpeg."
38
+ },
39
+ "scripts": {
40
+ "test": "node --test vendor/drp-format/__tests__/ vendor/drt-format/__tests__/ vendor/drx-codec/__tests__/ test/",
41
+ "test:libs": "node --test vendor/drp-format/__tests__/ vendor/drt-format/__tests__/ vendor/drx-codec/__tests__/",
42
+ "test:server": "node --test test/"
43
+ },
44
+ "engines": {
45
+ "node": ">=18.0.0"
46
+ },
47
+ "devDependencies": {
48
+ "prettier": "^3.9.4"
49
+ }
50
+ }