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,171 @@
1
+ /**
2
+ * Tests for DaVinci Resolve Grade Body Encoder
3
+ *
4
+ * Verifies encoding against real examples extracted from DaVinci Resolve projects.
5
+ */
6
+
7
+ const {
8
+ encodeGradeBody,
9
+ encodeVarint,
10
+ encodeFloat,
11
+ encodeDouble,
12
+ encodeNeutralGrade,
13
+ decodeVarint,
14
+ decodeFloat
15
+ } = require('./grade-encoder');
16
+
17
+ // Color codes for terminal output
18
+ const GREEN = '\x1b[32m';
19
+ const RED = '\x1b[31m';
20
+ const RESET = '\x1b[0m';
21
+ const YELLOW = '\x1b[33m';
22
+
23
+ function assert(condition, message) {
24
+ if (!condition) {
25
+ console.log(`${RED}✗ FAIL${RESET}: ${message}`);
26
+ throw new Error(`Assertion failed: ${message}`);
27
+ }
28
+ console.log(`${GREEN}✓ PASS${RESET}: ${message}`);
29
+ }
30
+
31
+ function assertEqual(actual, expected, message) {
32
+ if (actual !== expected) {
33
+ console.log(`${RED}✗ FAIL${RESET}: ${message}`);
34
+ console.log(` Expected: ${expected}`);
35
+ console.log(` Actual: ${actual}`);
36
+ throw new Error(`Assertion failed: ${message}`);
37
+ }
38
+ console.log(`${GREEN}✓ PASS${RESET}: ${message}`);
39
+ }
40
+
41
+ console.log('\n=== Grade Body Encoder Tests ===\n');
42
+
43
+ // Test 1: Varint Encoding
44
+ console.log('Test Group: Varint Encoding');
45
+ assertEqual(encodeVarint(1).toString('hex'), '01', 'Varint: 1');
46
+ assertEqual(encodeVarint(127).toString('hex'), '7f', 'Varint: 127');
47
+ assertEqual(encodeVarint(128).toString('hex'), '8001', 'Varint: 128');
48
+ assertEqual(encodeVarint(1920).toString('hex'), '800f', 'Varint: 1920 (width)');
49
+ assertEqual(encodeVarint(1080).toString('hex'), 'b808', 'Varint: 1080 (height)');
50
+ assertEqual(encodeVarint(45).toString('hex'), '2d', 'Varint: 45 (typical length)');
51
+ console.log('');
52
+
53
+ // Test 2: Float Encoding
54
+ console.log('Test Group: Float Encoding');
55
+ assertEqual(encodeFloat(1.0), '0000803f', 'Float: 1.0 (neutral)');
56
+ assertEqual(encodeFloat(0.9), '6666663f', 'Float: 0.9 (-10% adjustment)');
57
+ // Verify decoding works
58
+ assert(Math.abs(decodeFloat('0000803f') - 1.0) < 0.0001, 'Float decode: 1.0');
59
+ assert(Math.abs(decodeFloat('6666663f') - 0.9) < 0.0001, 'Float decode: 0.9');
60
+ console.log('');
61
+
62
+ // Test 3: Double Encoding
63
+ console.log('Test Group: Double Encoding');
64
+ const doubleResult = encodeDouble(1.0);
65
+ assertEqual(doubleResult.length, 16, 'Double: correct length (16 hex chars = 8 bytes)');
66
+ assertEqual(doubleResult, '000000000000f03f', 'Double: 1.0');
67
+ console.log('');
68
+
69
+ // Test 4: Varint Decoding (for verification)
70
+ console.log('Test Group: Varint Decoding');
71
+ const decoded1920 = decodeVarint('800f', 0);
72
+ assertEqual(decoded1920.value, 1920, 'Decode varint: 1920');
73
+ assertEqual(decoded1920.bytesRead, 2, 'Decode varint: 1920 bytes read');
74
+
75
+ const decoded1080 = decodeVarint('b808', 0);
76
+ assertEqual(decoded1080.value, 1080, 'Decode varint: 1080');
77
+ assertEqual(decoded1080.bytesRead, 2, 'Decode varint: 1080 bytes read');
78
+ console.log('');
79
+
80
+ // Test 5: Neutral Grade Body Structure
81
+ console.log('Test Group: Neutral Grade Body Structure');
82
+
83
+ // Real example from DaVinci Resolve project:
84
+ // 800a2d10011a2208800f10b8081d0000803f20800f28b808350000803f38800f40b80848ffffffff0f6086d0ccb0db321001208aceccb0db32
85
+
86
+ const neutralGrade = encodeNeutralGrade({ width: 1920, height: 1080 });
87
+
88
+ // Verify header
89
+ assert(neutralGrade.startsWith('800a'), 'Neutral grade: starts with 800a header');
90
+
91
+ // Verify length byte (should be 2d = 45 for typical neutral grade structure)
92
+ const lengthHex = neutralGrade.substr(4, 2);
93
+ console.log(`${YELLOW}INFO${RESET}: Length byte = 0x${lengthHex} (${parseInt(lengthHex, 16)} bytes)`);
94
+
95
+ // Verify it contains expected patterns
96
+ assert(neutralGrade.includes('10011a22'), 'Neutral grade: contains version and field 3 tag');
97
+ assert(neutralGrade.includes('08800f'), 'Neutral grade: contains width 1920');
98
+ assert(neutralGrade.includes('10b808'), 'Neutral grade: contains height 1080');
99
+ assert(neutralGrade.includes('0000803f'), 'Neutral grade: contains 1.0 floats');
100
+ assert(neutralGrade.includes('ffffffff0f'), 'Neutral grade: contains flags');
101
+
102
+ console.log(`${YELLOW}INFO${RESET}: Generated neutral grade (length ${neutralGrade.length / 2} bytes):`);
103
+ console.log(`${YELLOW}INFO${RESET}: ${neutralGrade.substr(0, 80)}...`);
104
+ console.log('');
105
+
106
+ // Test 6: Grade with Adjustment
107
+ console.log('Test Group: Grade with Primary Adjustment');
108
+
109
+ const adjustedGrade = encodeGradeBody({
110
+ hasCorrection: true,
111
+ primaryAdjustment: 0.9,
112
+ width: 1920,
113
+ height: 1080
114
+ });
115
+
116
+ assert(adjustedGrade.startsWith('800a'), 'Adjusted grade: starts with 800a header');
117
+ assert(adjustedGrade.includes('6666663f'), 'Adjusted grade: contains 0.9 adjustment value');
118
+ console.log(`${YELLOW}INFO${RESET}: Generated adjusted grade (length ${adjustedGrade.length / 2} bytes):`);
119
+ console.log(`${YELLOW}INFO${RESET}: ${adjustedGrade.substr(0, 80)}...`);
120
+ console.log('');
121
+
122
+ // Test 7: Different Resolutions
123
+ console.log('Test Group: Different Resolutions');
124
+
125
+ const uhd4k = encodeNeutralGrade({ width: 3840, height: 2160 });
126
+ assert(uhd4k.startsWith('800a'), 'UHD 4K grade: valid header');
127
+ assert(uhd4k.includes(encodeVarint(3840).toString('hex')), 'UHD 4K grade: contains 3840 width');
128
+ assert(uhd4k.includes(encodeVarint(2160).toString('hex')), 'UHD 4K grade: contains 2160 height');
129
+
130
+ const hd720 = encodeNeutralGrade({ width: 1280, height: 720 });
131
+ assert(hd720.startsWith('800a'), 'HD 720p grade: valid header');
132
+ assert(hd720.includes(encodeVarint(1280).toString('hex')), 'HD 720p grade: contains 1280 width');
133
+ assert(hd720.includes(encodeVarint(720).toString('hex')), 'HD 720p grade: contains 720 height');
134
+ console.log('');
135
+
136
+ // Test 8: Structure Validation
137
+ console.log('Test Group: Structure Validation');
138
+
139
+ // Verify the structure matches the documented format
140
+ const gradeHex = encodeNeutralGrade({ width: 1920, height: 1080 });
141
+
142
+ let pos = 0;
143
+ // Header
144
+ assertEqual(gradeHex.substr(pos, 4), '800a', 'Structure: correct header');
145
+ pos += 4;
146
+
147
+ // Length (varint)
148
+ const lengthByte = gradeHex.substr(pos, 2);
149
+ const length = parseInt(lengthByte, 16);
150
+ assert(length > 0, `Structure: valid length (${length} bytes)`);
151
+ pos += 2;
152
+
153
+ // Field 2 tag (0x10 = field 2, wire type 0)
154
+ assertEqual(gradeHex.substr(pos, 2), '10', 'Structure: field 2 tag');
155
+ pos += 2;
156
+
157
+ // Version value (0x01)
158
+ assertEqual(gradeHex.substr(pos, 2), '01', 'Structure: version = 1');
159
+ pos += 2;
160
+
161
+ // Field 3 tag (0x1a = field 3, wire type 2 = length-delimited)
162
+ assertEqual(gradeHex.substr(pos, 2), '1a', 'Structure: field 3 tag');
163
+ pos += 2;
164
+
165
+ console.log(`${YELLOW}INFO${RESET}: Structure validation complete at position ${pos / 2} bytes`);
166
+ console.log('');
167
+
168
+ // Summary
169
+ console.log('=================================');
170
+ console.log(`${GREEN}All tests passed!${RESET}`);
171
+ console.log('=================================\n');
@@ -0,0 +1,249 @@
1
+ /**
2
+ * Grade Encoder Verification Script
3
+ *
4
+ * Compares generated grade bodies with real examples from DaVinci Resolve projects
5
+ * to verify structural correctness and compatibility.
6
+ */
7
+
8
+ const {
9
+ encodeNeutralGrade,
10
+ encodeGradeBody,
11
+ decodeVarint,
12
+ decodeFloat
13
+ } = require('./grade-encoder');
14
+
15
+ // Color codes
16
+ const GREEN = '\x1b[32m';
17
+ const RED = '\x1b[31m';
18
+ const YELLOW = '\x1b[33m';
19
+ const BLUE = '\x1b[34m';
20
+ const RESET = '\x1b[0m';
21
+
22
+ console.log('\n=== Grade Body Verification Against Real DaVinci Resolve Examples ===\n');
23
+
24
+ // Real examples extracted from DaVinci Resolve 19.1.3 project files
25
+ const realExamples = [
26
+ {
27
+ name: 'Neutral 1920x1080 #1',
28
+ hex: '800a2d10011a2208800f10b8081d0000803f20800f28b808350000803f38800f40b80848ffffffff0f6086d0ccb0db321001208aceccb0db32',
29
+ description: 'Standard neutral grade at HD resolution'
30
+ },
31
+ {
32
+ name: 'Neutral 1920x1080 #2',
33
+ hex: '800a2d10011a2208800f10b8081d0000803f20800f28b808350000803f38800f40b80848ffffffff0f60acfba8b4db32100120f4f9a8b4db32',
34
+ description: 'Another neutral grade with different timestamp'
35
+ },
36
+ {
37
+ name: 'Adjusted 1920x1080',
38
+ hex: '800a2d10011a2208800f10b8081d0000803f20800f28b8083513da8b3f38800f40b80848ffffffff0f60bceecacea32c100120baeecacea32c',
39
+ description: 'Grade with primary adjustment (0x13da8b3f)'
40
+ }
41
+ ];
42
+
43
+ console.log('Analyzing Real Examples:\n');
44
+
45
+ realExamples.forEach((example, idx) => {
46
+ console.log(`${BLUE}Example ${idx + 1}: ${example.name}${RESET}`);
47
+ console.log(`Description: ${example.description}`);
48
+ console.log(`Hex: ${example.hex.substr(0, 60)}...`);
49
+ console.log('');
50
+
51
+ // Parse the structure
52
+ let pos = 0;
53
+ const hex = example.hex;
54
+
55
+ // Header
56
+ const header = hex.substr(pos, 4);
57
+ pos += 4;
58
+ console.log(` Header: 0x${header} ${header === '800a' ? GREEN + '✓ Uncompressed' + RESET : RED + '✗ Unknown' + RESET}`);
59
+
60
+ // Length
61
+ const lengthHex = hex.substr(pos, 2);
62
+ const length = parseInt(lengthHex, 16);
63
+ pos += 2;
64
+ console.log(` Length: ${length} bytes (0x${lengthHex})`);
65
+
66
+ // Field 2: Version
67
+ const field2Tag = hex.substr(pos, 2);
68
+ pos += 2;
69
+ const version = hex.substr(pos, 2);
70
+ pos += 2;
71
+ console.log(` Field 2 (tag 0x${field2Tag}): Version = ${parseInt(version, 16)}`);
72
+
73
+ // Field 3: Nested data
74
+ const field3Tag = hex.substr(pos, 2);
75
+ pos += 2;
76
+ const nestedLength = parseInt(hex.substr(pos, 2), 16);
77
+ pos += 2;
78
+ console.log(` Field 3 (tag 0x${field3Tag}): Nested data (${nestedLength} bytes)`);
79
+
80
+ // Parse nested structure
81
+ const nestedStart = pos;
82
+
83
+ // Width (field 1)
84
+ pos += 2; // Skip tag
85
+ const widthResult = decodeVarint(hex.substr(pos), 0);
86
+ pos += widthResult.bytesRead * 2;
87
+ console.log(` Width: ${widthResult.value}px`);
88
+
89
+ // Height (field 2)
90
+ pos += 2; // Skip tag
91
+ const heightResult = decodeVarint(hex.substr(pos), 0);
92
+ pos += heightResult.bytesRead * 2;
93
+ console.log(` Height: ${heightResult.value}px`);
94
+
95
+ // Unity float (field 3)
96
+ pos += 2; // Skip tag
97
+ const unityHex = hex.substr(pos, 8);
98
+ const unity = decodeFloat(unityHex);
99
+ pos += 8;
100
+ console.log(` Unity: ${unity.toFixed(6)} (0x${unityHex})`);
101
+
102
+ // Source width (field 4)
103
+ pos += 2; // Skip tag
104
+ const srcWidthResult = decodeVarint(hex.substr(pos), 0);
105
+ pos += srcWidthResult.bytesRead * 2;
106
+ console.log(` Source Width: ${srcWidthResult.value}px`);
107
+
108
+ // Source height (field 5)
109
+ pos += 2; // Skip tag
110
+ const srcHeightResult = decodeVarint(hex.substr(pos), 0);
111
+ pos += srcHeightResult.bytesRead * 2;
112
+ console.log(` Source Height: ${srcHeightResult.value}px`);
113
+
114
+ // Primary adjustment (field 6)
115
+ pos += 2; // Skip tag
116
+ const adjHex = hex.substr(pos, 8);
117
+ const adjustment = decodeFloat(adjHex);
118
+ pos += 8;
119
+ console.log(` Primary Adj: ${adjustment.toFixed(6)} (0x${adjHex}) ${adjustment === 1.0 ? '- NEUTRAL' : adjustment < 1.0 ? '- DARKER' : '- BRIGHTER'}`);
120
+
121
+ console.log('');
122
+ });
123
+
124
+ console.log('\n' + '='.repeat(70) + '\n');
125
+ console.log('Generating Our Own Grade Bodies:\n');
126
+
127
+ // Generate neutral grade
128
+ const ourNeutral = encodeNeutralGrade({ width: 1920, height: 1080 });
129
+ console.log(`${BLUE}Our Neutral Grade (1920x1080):${RESET}`);
130
+ console.log(`Hex: ${ourNeutral.substr(0, 60)}...`);
131
+ console.log(`Length: ${ourNeutral.length / 2} bytes`);
132
+ console.log('');
133
+
134
+ // Compare structure
135
+ console.log('Structural Comparison with Real Example #1:');
136
+ const real1 = realExamples[0].hex;
137
+ const maxCompare = Math.min(real1.length, ourNeutral.length);
138
+
139
+ let matchCount = 0;
140
+ let mismatchStart = -1;
141
+
142
+ for (let i = 0; i < maxCompare; i += 2) {
143
+ const realByte = real1.substr(i, 2);
144
+ const ourByte = ourNeutral.substr(i, 2);
145
+
146
+ if (realByte === ourByte) {
147
+ matchCount += 2;
148
+ } else if (mismatchStart === -1) {
149
+ mismatchStart = i;
150
+ }
151
+ }
152
+
153
+ console.log(` Matching bytes: ${matchCount / 2} / ${maxCompare / 2}`);
154
+ console.log(` Match percentage: ${((matchCount / maxCompare) * 100).toFixed(1)}%`);
155
+
156
+ if (mismatchStart !== -1) {
157
+ console.log(` First mismatch at byte ${mismatchStart / 2}:`);
158
+ console.log(` Real: ${real1.substr(mismatchStart, 20)}...`);
159
+ console.log(` Ours: ${ourNeutral.substr(mismatchStart, 20)}...`);
160
+
161
+ // The mismatch is likely in the timestamp field
162
+ if (mismatchStart > 50) {
163
+ console.log(` ${YELLOW}Note: Mismatch likely due to timestamp difference (expected)${RESET}`);
164
+ }
165
+ }
166
+
167
+ // Check header and structure
168
+ console.log('');
169
+ console.log('Key Structure Checks:');
170
+ const checks = [
171
+ {
172
+ name: 'Header (800a)',
173
+ real: real1.substr(0, 4),
174
+ ours: ourNeutral.substr(0, 4),
175
+ critical: true
176
+ },
177
+ {
178
+ name: 'Version tag (10)',
179
+ real: real1.substr(6, 2),
180
+ ours: ourNeutral.substr(6, 2),
181
+ critical: true
182
+ },
183
+ {
184
+ name: 'Version value (01)',
185
+ real: real1.substr(8, 2),
186
+ ours: ourNeutral.substr(8, 2),
187
+ critical: true
188
+ },
189
+ {
190
+ name: 'Field 3 tag (1a)',
191
+ real: real1.substr(10, 2),
192
+ ours: ourNeutral.substr(10, 2),
193
+ critical: true
194
+ },
195
+ {
196
+ name: 'Width encoding (800f)',
197
+ real: real1.substr(16, 4),
198
+ ours: ourNeutral.substr(16, 4),
199
+ critical: true
200
+ },
201
+ {
202
+ name: 'Height encoding (b808)',
203
+ real: real1.substr(22, 4),
204
+ ours: ourNeutral.substr(22, 4),
205
+ critical: true
206
+ },
207
+ {
208
+ name: 'Unity float (0000803f)',
209
+ real: real1.substr(28, 8),
210
+ ours: ourNeutral.substr(28, 8),
211
+ critical: true
212
+ },
213
+ {
214
+ name: 'Primary adj (0000803f)',
215
+ real: real1.substr(48, 8),
216
+ ours: ourNeutral.substr(48, 8),
217
+ critical: true
218
+ }
219
+ ];
220
+
221
+ let passCount = 0;
222
+ let criticalFails = 0;
223
+
224
+ checks.forEach(check => {
225
+ const match = check.real === check.ours;
226
+ const status = match ? `${GREEN}✓ PASS${RESET}` : `${RED}✗ FAIL${RESET}`;
227
+
228
+ if (match) passCount++;
229
+ if (!match && check.critical) criticalFails++;
230
+
231
+ console.log(` ${status} ${check.name.padEnd(25)} Real: ${check.real.padEnd(10)} Ours: ${check.ours}`);
232
+ });
233
+
234
+ console.log('');
235
+ console.log('='.repeat(70));
236
+ console.log(`Results: ${passCount}/${checks.length} checks passed`);
237
+
238
+ if (criticalFails === 0) {
239
+ console.log(`${GREEN}✓ All critical structure checks passed!${RESET}`);
240
+ console.log(`${GREEN}✓ Generated grades are compatible with DaVinci Resolve format${RESET}`);
241
+ } else {
242
+ console.log(`${RED}✗ ${criticalFails} critical checks failed${RESET}`);
243
+ console.log(`${RED}✗ Review implementation for compatibility issues${RESET}`);
244
+ }
245
+
246
+ console.log('');
247
+ console.log('Note: Timestamp differences are expected and do not affect compatibility.');
248
+ console.log('='.repeat(70));
249
+ console.log('');