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,392 @@
1
+ /**
2
+ * DRX Parameter Validation
3
+ *
4
+ * Validates parameter values against DaVinci Resolve limits
5
+ * and professional colorist recommendations.
6
+ *
7
+ * @module drx-parameters/parameter-validator
8
+ */
9
+
10
+ const { PARAMETER_RANGES, getRange, clamp, isDefault } = require('./parameter-ranges');
11
+ const { CORRECTOR_TYPES } = require('./corrector-types');
12
+
13
+ /**
14
+ * Validation severity levels
15
+ */
16
+ const SEVERITY = {
17
+ ERROR: 'error', // Invalid value that won't work
18
+ WARNING: 'warning', // Value outside recommended range
19
+ INFO: 'info', // Informational note
20
+ };
21
+
22
+ /**
23
+ * Professional recommended limits (more conservative than absolute limits)
24
+ * Based on colorist best practices for maintaining image quality
25
+ */
26
+ const PROFESSIONAL_LIMITS = {
27
+ // Gain should rarely exceed 2x to avoid clipping
28
+ gain: { r: { max: 2.0 }, g: { max: 2.0 }, b: { max: 2.0 }, master: { max: 2.0 } },
29
+
30
+ // Lift extremes crush blacks or lift fog
31
+ lift: { r: { min: -0.5, max: 0.5 }, g: { min: -0.5, max: 0.5 }, b: { min: -0.5, max: 0.5 }, master: { min: -0.3, max: 0.3 } },
32
+
33
+ // Gamma extremes look unnatural
34
+ gamma: { r: { min: -0.3, max: 0.3 }, g: { min: -0.3, max: 0.3 }, b: { min: -0.3, max: 0.3 }, master: { min: -0.3, max: 0.3 } },
35
+
36
+ // Saturation over 2x is rarely professional
37
+ saturation: { master: { max: 2.0 } },
38
+
39
+ // Extreme contrast loses detail
40
+ contrast: { master: { min: 0.7, max: 1.5 } },
41
+
42
+ // Large temperature shifts look unnatural
43
+ temperature: { master: { min: -2000, max: 2000 } },
44
+
45
+ // Tint extremes are green/magenta push
46
+ tint: { master: { min: -50, max: 50 } },
47
+ };
48
+
49
+ /**
50
+ * Broadcast safe limits (legal video levels)
51
+ * For Rec.709 SDR delivery
52
+ */
53
+ const BROADCAST_LIMITS = {
54
+ // Gain must not exceed 1.0 for legal highlights (100%)
55
+ gain: { r: { max: 1.0 }, g: { max: 1.0 }, b: { max: 1.0 }, master: { max: 1.0 } },
56
+
57
+ // Lift below 0 is illegal (below 0 IRE)
58
+ lift: { r: { min: 0.0 }, g: { min: 0.0 }, b: { min: 0.0 }, master: { min: 0.0 } },
59
+
60
+ // Saturation should be moderate for broadcast
61
+ saturation: { master: { max: 1.2 } },
62
+ };
63
+
64
+ /**
65
+ * Validation result object
66
+ */
67
+ class ValidationResult {
68
+ constructor() {
69
+ this.valid = true;
70
+ this.issues = [];
71
+ }
72
+
73
+ addIssue(severity, control, channel, message, value, limit) {
74
+ this.issues.push({ severity, control, channel, message, value, limit });
75
+ if (severity === SEVERITY.ERROR) {
76
+ this.valid = false;
77
+ }
78
+ }
79
+
80
+ hasErrors() {
81
+ return this.issues.some(i => i.severity === SEVERITY.ERROR);
82
+ }
83
+
84
+ hasWarnings() {
85
+ return this.issues.some(i => i.severity === SEVERITY.WARNING);
86
+ }
87
+
88
+ getErrors() {
89
+ return this.issues.filter(i => i.severity === SEVERITY.ERROR);
90
+ }
91
+
92
+ getWarnings() {
93
+ return this.issues.filter(i => i.severity === SEVERITY.WARNING);
94
+ }
95
+
96
+ toJSON() {
97
+ return {
98
+ valid: this.valid,
99
+ errorCount: this.getErrors().length,
100
+ warningCount: this.getWarnings().length,
101
+ issues: this.issues,
102
+ };
103
+ }
104
+ }
105
+
106
+ /**
107
+ * Validate a single parameter value against absolute limits
108
+ * @param {string} control - Control name
109
+ * @param {string} channel - Channel name
110
+ * @param {number} value - Value to validate
111
+ * @returns {ValidationResult}
112
+ */
113
+ function validateParameter(control, channel, value) {
114
+ const result = new ValidationResult();
115
+ const range = getRange(control, channel);
116
+
117
+ if (!range) {
118
+ result.addIssue(
119
+ SEVERITY.WARNING,
120
+ control,
121
+ channel,
122
+ `Unknown parameter ${control}.${channel}`,
123
+ value,
124
+ null
125
+ );
126
+ return result;
127
+ }
128
+
129
+ // Check absolute limits
130
+ if (value < range.min) {
131
+ result.addIssue(
132
+ SEVERITY.ERROR,
133
+ control,
134
+ channel,
135
+ `Value ${value} below minimum ${range.min}`,
136
+ value,
137
+ range.min
138
+ );
139
+ } else if (value > range.max) {
140
+ result.addIssue(
141
+ SEVERITY.ERROR,
142
+ control,
143
+ channel,
144
+ `Value ${value} above maximum ${range.max}`,
145
+ value,
146
+ range.max
147
+ );
148
+ }
149
+
150
+ return result;
151
+ }
152
+
153
+ /**
154
+ * Validate parameters against professional recommendations
155
+ * @param {object} params - Semantic parameters object
156
+ * @returns {ValidationResult}
157
+ */
158
+ function validateProfessional(params) {
159
+ const result = new ValidationResult();
160
+
161
+ for (const [control, channels] of Object.entries(params)) {
162
+ const limits = PROFESSIONAL_LIMITS[control];
163
+ if (!limits) continue;
164
+
165
+ for (const [channel, value] of Object.entries(channels)) {
166
+ const channelLimits = limits[channel];
167
+ if (!channelLimits) continue;
168
+
169
+ if (channelLimits.min !== undefined && value < channelLimits.min) {
170
+ result.addIssue(
171
+ SEVERITY.WARNING,
172
+ control,
173
+ channel,
174
+ `Value ${value.toFixed(3)} below recommended minimum ${channelLimits.min}`,
175
+ value,
176
+ channelLimits.min
177
+ );
178
+ }
179
+
180
+ if (channelLimits.max !== undefined && value > channelLimits.max) {
181
+ result.addIssue(
182
+ SEVERITY.WARNING,
183
+ control,
184
+ channel,
185
+ `Value ${value.toFixed(3)} above recommended maximum ${channelLimits.max}`,
186
+ value,
187
+ channelLimits.max
188
+ );
189
+ }
190
+ }
191
+ }
192
+
193
+ return result;
194
+ }
195
+
196
+ /**
197
+ * Validate parameters for broadcast delivery
198
+ * @param {object} params - Semantic parameters object
199
+ * @returns {ValidationResult}
200
+ */
201
+ function validateBroadcast(params) {
202
+ const result = new ValidationResult();
203
+
204
+ for (const [control, channels] of Object.entries(params)) {
205
+ const limits = BROADCAST_LIMITS[control];
206
+ if (!limits) continue;
207
+
208
+ for (const [channel, value] of Object.entries(channels)) {
209
+ const channelLimits = limits[channel];
210
+ if (!channelLimits) continue;
211
+
212
+ if (channelLimits.min !== undefined && value < channelLimits.min) {
213
+ result.addIssue(
214
+ SEVERITY.ERROR,
215
+ control,
216
+ channel,
217
+ `Value ${value.toFixed(3)} below broadcast legal minimum ${channelLimits.min}`,
218
+ value,
219
+ channelLimits.min
220
+ );
221
+ }
222
+
223
+ if (channelLimits.max !== undefined && value > channelLimits.max) {
224
+ result.addIssue(
225
+ SEVERITY.ERROR,
226
+ control,
227
+ channel,
228
+ `Value ${value.toFixed(3)} above broadcast legal maximum ${channelLimits.max}`,
229
+ value,
230
+ channelLimits.max
231
+ );
232
+ }
233
+ }
234
+ }
235
+
236
+ return result;
237
+ }
238
+
239
+ /**
240
+ * Validate all parameters against absolute limits
241
+ * @param {object} params - Semantic parameters object
242
+ * @returns {ValidationResult}
243
+ */
244
+ function validateAll(params) {
245
+ const result = new ValidationResult();
246
+
247
+ for (const [control, channels] of Object.entries(params)) {
248
+ for (const [channel, value] of Object.entries(channels)) {
249
+ const paramResult = validateParameter(control, channel, value);
250
+ result.issues.push(...paramResult.issues);
251
+ if (paramResult.hasErrors()) {
252
+ result.valid = false;
253
+ }
254
+ }
255
+ }
256
+
257
+ return result;
258
+ }
259
+
260
+ /**
261
+ * Auto-correct parameters to valid range
262
+ * @param {object} params - Semantic parameters object
263
+ * @returns {object} Corrected parameters
264
+ */
265
+ function autoCorrect(params) {
266
+ const corrected = {};
267
+
268
+ for (const [control, channels] of Object.entries(params)) {
269
+ corrected[control] = {};
270
+
271
+ for (const [channel, value] of Object.entries(channels)) {
272
+ corrected[control][channel] = clamp(control, channel, value);
273
+ }
274
+ }
275
+
276
+ return corrected;
277
+ }
278
+
279
+ /**
280
+ * Check if grade has any non-default values
281
+ * @param {object} params - Semantic parameters object
282
+ * @param {number} tolerance - Tolerance for floating point comparison
283
+ * @returns {boolean}
284
+ */
285
+ function hasActualGrade(params, tolerance = 0.001) {
286
+ for (const [control, channels] of Object.entries(params)) {
287
+ for (const [channel, value] of Object.entries(channels)) {
288
+ if (!isDefault(control, channel, value, tolerance)) {
289
+ return true;
290
+ }
291
+ }
292
+ }
293
+ return false;
294
+ }
295
+
296
+ /**
297
+ * Get a summary of what adjustments are present
298
+ * @param {object} params - Semantic parameters object
299
+ * @param {number} tolerance - Tolerance for floating point comparison
300
+ * @returns {object} Summary of adjustments
301
+ */
302
+ function getAdjustmentSummary(params, tolerance = 0.001) {
303
+ const summary = {
304
+ hasLift: false,
305
+ hasGamma: false,
306
+ hasGain: false,
307
+ hasOffset: false,
308
+ hasSaturation: false,
309
+ hasContrast: false,
310
+ hasTemperature: false,
311
+ hasTint: false,
312
+ adjustmentCount: 0,
313
+ nonNeutralParams: [],
314
+ };
315
+
316
+ const controlFlags = {
317
+ lift: 'hasLift',
318
+ gamma: 'hasGamma',
319
+ gain: 'hasGain',
320
+ offset: 'hasOffset',
321
+ saturation: 'hasSaturation',
322
+ contrast: 'hasContrast',
323
+ temperature: 'hasTemperature',
324
+ tint: 'hasTint',
325
+ };
326
+
327
+ for (const [control, channels] of Object.entries(params)) {
328
+ for (const [channel, value] of Object.entries(channels)) {
329
+ if (!isDefault(control, channel, value, tolerance)) {
330
+ summary.adjustmentCount++;
331
+ summary.nonNeutralParams.push({ control, channel, value });
332
+
333
+ if (controlFlags[control]) {
334
+ summary[controlFlags[control]] = true;
335
+ }
336
+ }
337
+ }
338
+ }
339
+
340
+ return summary;
341
+ }
342
+
343
+ /**
344
+ * Calculate the visual impact score of a grade
345
+ * Higher score = more aggressive adjustments
346
+ * @param {object} params - Semantic parameters object
347
+ * @returns {number} Impact score (0-100)
348
+ */
349
+ function calculateImpactScore(params) {
350
+ const { getVisualImpactWeight, getRange } = require('./parameter-ranges');
351
+ let totalScore = 0;
352
+ let maxScore = 0;
353
+
354
+ for (const [control, channels] of Object.entries(params)) {
355
+ const weight = getVisualImpactWeight(control);
356
+
357
+ for (const [channel, value] of Object.entries(channels)) {
358
+ const range = getRange(control, channel);
359
+ if (!range) continue;
360
+
361
+ // Calculate normalized deviation from default
362
+ const defaultVal = range.default;
363
+ const maxDeviation = Math.max(
364
+ Math.abs(range.max - defaultVal),
365
+ Math.abs(defaultVal - range.min)
366
+ );
367
+ const deviation = Math.abs(value - defaultVal);
368
+ const normalizedDeviation = deviation / maxDeviation;
369
+
370
+ totalScore += normalizedDeviation * weight;
371
+ maxScore += weight;
372
+ }
373
+ }
374
+
375
+ if (maxScore === 0) return 0;
376
+ return Math.round((totalScore / maxScore) * 100);
377
+ }
378
+
379
+ module.exports = {
380
+ SEVERITY,
381
+ PROFESSIONAL_LIMITS,
382
+ BROADCAST_LIMITS,
383
+ ValidationResult,
384
+ validateParameter,
385
+ validateProfessional,
386
+ validateBroadcast,
387
+ validateAll,
388
+ autoCorrect,
389
+ hasActualGrade,
390
+ getAdjustmentSummary,
391
+ calculateImpactScore,
392
+ };