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
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Tool Registry Descriptor — drx-parameters
3
+ *
4
+ * Single entry describing the parameter library as a whole,
5
+ * rather than 400+ individual parameters.
6
+ */
7
+
8
+ let paramCount = 0;
9
+ let version = '1.0.0';
10
+
11
+ try {
12
+ const params = require('./index');
13
+ paramCount = params.TOTAL_KNOWN_PARAMS || params.getKnownParamCount?.() || 0;
14
+ version = params.VERSION || '1.0.0';
15
+ } catch {
16
+ // Safe fallback
17
+ }
18
+
19
+ module.exports = {
20
+ source: 'drx-parameters',
21
+ version: '0.1.0',
22
+ capabilities: [
23
+ {
24
+ id: 'drxParameters.library',
25
+ name: 'DRX Parameter Library',
26
+ description: `Complete DaVinci Resolve parameter definitions library with ${paramCount || '400+'} parameters. Includes parameter IDs, ranges, validation, codec (protobuf encoding/decoding), and corrector types (Lift, Gain, Gamma, Offset, Contrast, Log Wheels, HDR Zones, Curves, etc.)`,
27
+ type: 'api-method',
28
+ category: 'params.library',
29
+ source: 'drx-parameters',
30
+ tags: ['parameters', 'resolve', 'drx', 'codec', 'validation', 'color'],
31
+ availability: 'static',
32
+ parameterNames: [
33
+ 'CORRECTOR_TYPES', 'PARAMETER_IDS', 'PARAMETER_RANGES',
34
+ 'encodeParameter', 'validateParameter', 'autoCorrect',
35
+ ],
36
+ },
37
+ ],
38
+ };
@@ -0,0 +1,371 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * DRX Analyzer Tool
4
+ *
5
+ * Analyzes DaVinci Resolve DRX files to extract:
6
+ * - All parameter IDs and their values
7
+ * - Corrector types used
8
+ * - Node structure
9
+ * - Unknown/undocumented parameters
10
+ *
11
+ * Usage: node drx-analyzer.js <path-to-drx-file>
12
+ *
13
+ * @module drx-parameters/tools/drx-analyzer
14
+ */
15
+
16
+ const fs = require('fs');
17
+ const path = require('path');
18
+ const { execFileSync } = require('child_process');
19
+
20
+ // Import known parameters
21
+ let KNOWN_PARAMS;
22
+ try {
23
+ const paramIds = require('../parameter-ids');
24
+ KNOWN_PARAMS = {};
25
+
26
+ // Build reverse lookup from all parameter groups
27
+ for (const [groupName, group] of Object.entries({
28
+ LIFT: paramIds.LIFT,
29
+ GAIN: paramIds.GAIN,
30
+ GAMMA: paramIds.GAMMA,
31
+ OFFSET: paramIds.OFFSET,
32
+ SATURATION: paramIds.SATURATION,
33
+ TEMP_TINT: paramIds.TEMP_TINT,
34
+ CONTRAST: paramIds.CONTRAST,
35
+ LOG_WHEELS: paramIds.LOG_WHEELS,
36
+ HUE: paramIds.HUE,
37
+ LUM_MIX: paramIds.LUM_MIX,
38
+ SAT_VS_SAT: paramIds.SAT_VS_SAT,
39
+ HDR_ZONE: paramIds.HDR_ZONE,
40
+ CURVES: paramIds.CURVES,
41
+ })) {
42
+ for (const [key, id] of Object.entries(group)) {
43
+ KNOWN_PARAMS[id] = `${groupName}.${key}`;
44
+ }
45
+ }
46
+ } catch (e) {
47
+ // Fallback if module not found
48
+ KNOWN_PARAMS = {
49
+ 100663320: 'LIFT.R',
50
+ 100663321: 'LIFT.G',
51
+ 100663322: 'LIFT.B',
52
+ 100663323: 'LIFT.MASTER',
53
+ 100663325: 'GAIN.R',
54
+ 100663326: 'GAIN.G',
55
+ 100663327: 'GAIN.B',
56
+ 100663328: 'GAIN.MASTER',
57
+ 100663330: 'GAMMA.R',
58
+ 100663331: 'GAMMA.G',
59
+ 100663332: 'GAMMA.B',
60
+ 100663333: 'GAMMA.MASTER',
61
+ 100663421: 'OFFSET.R',
62
+ 100663422: 'OFFSET.G',
63
+ 100663423: 'OFFSET.B',
64
+ 100663301: 'SATURATION.PRIMARY',
65
+ 137363470: 'QUALIFIER.HUE_CENTER',
66
+ 137363471: 'QUALIFIER.HUE_WIDTH',
67
+ 137363472: 'QUALIFIER.HUE_SYM',
68
+ 137363473: 'QUALIFIER.HUE_SOFT',
69
+ 137363474: 'QUALIFIER.SAT_HIGH',
70
+ 137363475: 'QUALIFIER.SAT_LOW',
71
+ 137363476: 'QUALIFIER.SAT_HIGH_SOFT',
72
+ 137363477: 'QUALIFIER.SAT_LOW_SOFT',
73
+ 137363478: 'QUALIFIER.LUM_HIGH',
74
+ 137363479: 'QUALIFIER.LUM_LOW',
75
+ 137363480: 'QUALIFIER.LUM_HIGH_SOFT',
76
+ 137363481: 'QUALIFIER.LUM_LOW_SOFT',
77
+ 2248147137: 'CONTRAST',
78
+ 2248147136: 'PIVOT',
79
+ 2248147221: 'TEMP_TINT.TEMPERATURE',
80
+ 2248147222: 'TEMP_TINT.TINT',
81
+ 2248147219: 'TEMP_TINT.MIDTONE_DETAIL',
82
+ };
83
+ }
84
+
85
+ // Corrector type names
86
+ const CORRECTOR_NAMES = {
87
+ 1: 'Primary',
88
+ 2: 'Qualifier', // Was 'Contrast' — corrected 2026-03-22
89
+ 3: 'WindowSoftness', // Was 'SatVsSat' — softness mask shape (0x0870xxxx)
90
+ 4: 'PowerWindow', // Was 'Hue' — corrected 2026-03-22
91
+ 5: 'LumMix',
92
+ 6: 'Offset',
93
+ 9: 'MatteFinesse/HDRZone', // Shared — Matte Finesse (0x0C30xxxx) + HDR zone legacy (0x0C30001B)
94
+ 18: 'Curves',
95
+ };
96
+
97
+ // Presence marker IDs
98
+ const PRESENCE_MARKERS = {
99
+ 0x88300001: 'CONTRAST',
100
+ 0x8870001e: 'SATURATION',
101
+ 0x88500010: 'HUE',
102
+ 0x88b00012: 'LUM_MIX',
103
+ 0x88d00014: 'OFFSET',
104
+ 0x88f0000d: 'CURVES',
105
+ };
106
+
107
+ // Parse varint
108
+ function parseVarint(buf, offset) {
109
+ let val = 0n;
110
+ let shift = 0n;
111
+ while (offset < buf.length) {
112
+ const b = BigInt(buf[offset++]);
113
+ val |= (b & 0x7fn) << shift;
114
+ if (!(b & 0x80n)) break;
115
+ shift += 7n;
116
+ }
117
+ return { value: Number(val), offset };
118
+ }
119
+
120
+ // Decompress ZSTD data
121
+ function decompressZstd(compressedData) {
122
+ const tmpIn = `/tmp/drx_analyze_${Date.now()}.zst`;
123
+ const tmpOut = `/tmp/drx_analyze_${Date.now()}.bin`;
124
+
125
+ try {
126
+ fs.writeFileSync(tmpIn, compressedData);
127
+ execFileSync('zstd', ['-d', tmpIn, '-o', tmpOut, '-f'], { stdio: 'ignore' });
128
+ const result = fs.readFileSync(tmpOut);
129
+ fs.unlinkSync(tmpIn);
130
+ fs.unlinkSync(tmpOut);
131
+ return result;
132
+ } catch (e) {
133
+ try { fs.unlinkSync(tmpIn); } catch {}
134
+ try { fs.unlinkSync(tmpOut); } catch {}
135
+ return null;
136
+ }
137
+ }
138
+
139
+ // Extract parameters from binary data
140
+ function extractParameters(buf) {
141
+ const params = [];
142
+ const correctors = [];
143
+ const unknownIds = new Set();
144
+
145
+ // Search for parameter patterns
146
+ for (let i = 0; i < buf.length - 2; i++) {
147
+ // Look for corrector type markers (0x0a followed by length, then 0x08 type)
148
+ if (buf[i] === 0x0a && buf[i + 2] === 0x08) {
149
+ const len = buf[i + 1];
150
+ if (len > 5 && len < 150) {
151
+ const typeResult = parseVarint(buf, i + 3);
152
+ if (typeResult.value >= 1 && typeResult.value <= 20) {
153
+ correctors.push({
154
+ type: typeResult.value,
155
+ name: CORRECTOR_NAMES[typeResult.value] || `Unknown(${typeResult.value})`,
156
+ offset: i,
157
+ });
158
+ }
159
+ }
160
+ }
161
+
162
+ // Look for parameter blocks (0x1a length 0x08 paramId)
163
+ if (buf[i] === 0x1a) {
164
+ const len = buf[i + 1];
165
+ if (len > 5 && len < 25 && buf[i + 2] === 0x08) {
166
+ const paramResult = parseVarint(buf, i + 3);
167
+ const paramId = paramResult.value;
168
+
169
+ // Check if this looks like a valid parameter ID
170
+ const isValidRange =
171
+ (paramId >= 100663296 && paramId < 100664000) || // Primary
172
+ (paramId >= 137363456 && paramId < 137364000) || // Contrast
173
+ (paramId >= 139460608 && paramId < 139461000) || // Hue
174
+ (paramId >= 147849216 && paramId < 147850000) || // LumMix
175
+ (paramId >= 149946368 && paramId < 149947000) || // SatVsSat
176
+ (paramId >= 204472320 && paramId < 205521000) || // Curves/HDR
177
+ (paramId >= 2248147000 && paramId < 2248148000); // Temp/Tint (negative)
178
+
179
+ if (isValidRange) {
180
+ // Try to find float value
181
+ let value = null;
182
+ const searchEnd = Math.min(i + 2 + len, buf.length - 4);
183
+ for (let j = paramResult.offset; j < searchEnd; j++) {
184
+ if (buf[j] === 0x0d) { // fixed32 marker
185
+ value = buf.readFloatLE(j + 1);
186
+ break;
187
+ }
188
+ }
189
+
190
+ const name = KNOWN_PARAMS[paramId];
191
+ if (!name) {
192
+ unknownIds.add(paramId);
193
+ }
194
+
195
+ params.push({
196
+ id: paramId,
197
+ hex: '0x' + paramId.toString(16),
198
+ name: name || 'UNKNOWN',
199
+ value,
200
+ offset: i,
201
+ });
202
+ }
203
+ }
204
+ }
205
+
206
+ // Look for presence markers
207
+ if (buf[i] === 0x08) {
208
+ const result = parseVarint(buf, i + 1);
209
+ const markerId = result.value;
210
+ if (PRESENCE_MARKERS[markerId]) {
211
+ params.push({
212
+ id: markerId,
213
+ hex: '0x' + markerId.toString(16),
214
+ name: `PRESENCE_${PRESENCE_MARKERS[markerId]}`,
215
+ value: null,
216
+ offset: i,
217
+ isPresenceMarker: true,
218
+ });
219
+ }
220
+ }
221
+ }
222
+
223
+ return { params, correctors, unknownIds };
224
+ }
225
+
226
+ // Parse DRX file
227
+ function analyzeDRX(filePath) {
228
+ console.log('='.repeat(60));
229
+ console.log('DRX ANALYZER');
230
+ console.log('='.repeat(60));
231
+ console.log('');
232
+ console.log('File:', filePath);
233
+ console.log('');
234
+
235
+ const content = fs.readFileSync(filePath, 'utf8');
236
+
237
+ // Check if it's XML format
238
+ if (content.startsWith('<?xml')) {
239
+ console.log('Format: XML (Resolve 18+)');
240
+
241
+ // Extract metadata
242
+ const labelMatch = content.match(/<Label>([^<]+)<\/Label>/);
243
+ const widthMatch = content.match(/<Width>(\d+)<\/Width>/);
244
+ const heightMatch = content.match(/<Height>(\d+)<\/Height>/);
245
+ const tcMatch = content.match(/<RecTC>([^<]+)<\/RecTC>/);
246
+
247
+ if (labelMatch) console.log('Label:', labelMatch[1]);
248
+ if (widthMatch && heightMatch) console.log('Resolution:', widthMatch[1] + 'x' + heightMatch[1]);
249
+ if (tcMatch) console.log('Timecode:', tcMatch[1]);
250
+ console.log('');
251
+
252
+ // Extract Body elements
253
+ const bodyMatches = content.matchAll(/<Body>([^<]+)<\/Body>/g);
254
+ let versionNum = 0;
255
+
256
+ for (const match of bodyMatches) {
257
+ versionNum++;
258
+ console.log('-'.repeat(40));
259
+ console.log(`VERSION ${versionNum}`);
260
+ console.log('-'.repeat(40));
261
+
262
+ const hexData = match[1];
263
+ const buf = Buffer.from(hexData, 'hex');
264
+
265
+ // Check for ZSTD compression (magic: 28 B5 2F FD)
266
+ const isZstd = buf.length > 5 && buf.slice(1, 5).toString('hex') === '28b52ffd';
267
+
268
+ let bodyData;
269
+ if (isZstd) {
270
+ console.log('Compression: ZSTD');
271
+ bodyData = decompressZstd(buf.slice(1));
272
+ if (!bodyData) {
273
+ console.log('ERROR: Failed to decompress ZSTD data');
274
+ continue;
275
+ }
276
+ console.log('Decompressed size:', bodyData.length, 'bytes');
277
+ } else {
278
+ bodyData = buf;
279
+ console.log('Compression: None');
280
+ console.log('Size:', buf.length, 'bytes');
281
+ }
282
+
283
+ console.log('');
284
+
285
+ // Extract parameters
286
+ const { params, correctors, unknownIds } = extractParameters(bodyData);
287
+
288
+ // Show correctors
289
+ if (correctors.length > 0) {
290
+ console.log('CORRECTOR TYPES:');
291
+ const uniqueCorrectors = [...new Map(correctors.map(c => [c.type, c])).values()];
292
+ for (const c of uniqueCorrectors) {
293
+ console.log(` - Type ${c.type}: ${c.name}`);
294
+ }
295
+ console.log('');
296
+ }
297
+
298
+ // Show parameters
299
+ if (params.length > 0) {
300
+ console.log('PARAMETERS:');
301
+ console.log('');
302
+ console.log('| ID | Hex | Name | Value |');
303
+ console.log('|----|-----|------|-------|');
304
+
305
+ for (const p of params) {
306
+ const valueStr = p.value !== null ? p.value.toFixed(6) : 'N/A';
307
+ const marker = p.isPresenceMarker ? ' [marker]' : '';
308
+ console.log(`| ${p.id} | ${p.hex} | ${p.name}${marker} | ${valueStr} |`);
309
+ }
310
+ console.log('');
311
+ }
312
+
313
+ // Show unknown IDs
314
+ if (unknownIds.size > 0) {
315
+ console.log('UNKNOWN PARAMETER IDS (need documentation):');
316
+ for (const id of unknownIds) {
317
+ console.log(` - ${id} (0x${id.toString(16)})`);
318
+ }
319
+ console.log('');
320
+ }
321
+ }
322
+ } else {
323
+ console.log('Format: Binary (older format)');
324
+ const buf = fs.readFileSync(filePath);
325
+
326
+ // Try ZSTD decompression
327
+ let bodyData = buf;
328
+ if (buf.slice(0, 4).toString('hex') === '28b52ffd') {
329
+ bodyData = decompressZstd(buf);
330
+ if (!bodyData) {
331
+ console.log('ERROR: Failed to decompress');
332
+ return;
333
+ }
334
+ }
335
+
336
+ const { params, correctors, unknownIds } = extractParameters(bodyData);
337
+
338
+ // Output results
339
+ if (correctors.length > 0) {
340
+ console.log('CORRECTOR TYPES:');
341
+ for (const c of correctors) {
342
+ console.log(` - Type ${c.type}: ${c.name}`);
343
+ }
344
+ console.log('');
345
+ }
346
+
347
+ if (params.length > 0) {
348
+ console.log('PARAMETERS:');
349
+ for (const p of params) {
350
+ const valueStr = p.value !== null ? p.value.toFixed(6) : 'N/A';
351
+ console.log(` ${p.name} (${p.hex}): ${valueStr}`);
352
+ }
353
+ }
354
+
355
+ if (unknownIds.size > 0) {
356
+ console.log('');
357
+ console.log('UNKNOWN IDS:', [...unknownIds].map(id => `0x${id.toString(16)}`).join(', '));
358
+ }
359
+ }
360
+
361
+ console.log('');
362
+ console.log('='.repeat(60));
363
+ }
364
+
365
+ // Main
366
+ if (process.argv.length < 3) {
367
+ console.log('Usage: node drx-analyzer.js <path-to-drx-file>');
368
+ process.exit(1);
369
+ }
370
+
371
+ analyzeDRX(process.argv[2]);