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,539 @@
1
+ /**
2
+ * Vocabulary Intent Overlay
3
+ *
4
+ * Maps cinematographer vocabulary terms to tool selection intents.
5
+ * This overlay works with the existing CINEMATOGRAPHER_VOCABULARY to provide
6
+ * tool selection guidance without modifying the core vocabulary.
7
+ *
8
+ * The intent signals are used by the ToolResolver to select the appropriate
9
+ * DaVinci Resolve tool for each adjustment.
10
+ *
11
+ * @module drx/vocabulary-intents
12
+ */
13
+
14
+ // ═══════════════════════════════════════════════════════════════════════════════
15
+ // CONTRAST INTENT MAPPINGS
16
+ // ═══════════════════════════════════════════════════════════════════════════════
17
+
18
+ /**
19
+ * Terms that indicate specific contrast tool preferences
20
+ */
21
+ const CONTRAST_INTENTS = {
22
+ // Punchy/Snappy/Dynamic → Lift/Gain Spread
23
+ punchy: 'punchy',
24
+ punchier: 'punchy',
25
+ punch: 'punchy',
26
+ snappy: 'snappy',
27
+ snappier: 'snappy',
28
+ pop: 'punchy',
29
+ popping: 'punchy',
30
+ poppy: 'punchy',
31
+ dynamic: 'dynamic',
32
+ dynamic_range: 'dynamic',
33
+ bold: 'punchy',
34
+ bolder: 'punchy',
35
+ crisp: 'punchy',
36
+ crisper: 'punchy',
37
+ crispy: 'punchy',
38
+ hard: 'punchy',
39
+ harder: 'punchy',
40
+ harsh: 'punchy',
41
+ harsher: 'punchy',
42
+ aggressive_contrast: 'punchy',
43
+ high_contrast: 'punchy',
44
+
45
+ // Filmic/Organic → Log Wheels or Curves
46
+ filmic: 'filmic',
47
+ filmic_contrast: 'filmic',
48
+ organic: 'organic',
49
+ film: 'filmic',
50
+ film_contrast: 'filmic',
51
+ cinematic: 'filmic',
52
+ cinematic_contrast: 'filmic',
53
+ log: 'filmic',
54
+ log_contrast: 'filmic',
55
+ s_curve: 'filmic',
56
+
57
+ // Soft/Gentle → Contrast Corrector
58
+ soft: 'soft',
59
+ softer: 'soft',
60
+ softest: 'soft',
61
+ gentle: 'gentle',
62
+ gentler: 'gentle',
63
+ subtle: 'subtle',
64
+ light_contrast: 'subtle',
65
+ medium_contrast: 'soft',
66
+ broadcast_contrast: 'broadcast',
67
+ broadcast: 'broadcast',
68
+
69
+ // Flat/Low → Negative contrast, same tools
70
+ flat: 'soft',
71
+ flatter: 'soft',
72
+ flattest: 'soft',
73
+ low_contrast: 'soft',
74
+ no_contrast: 'soft',
75
+ compressed: 'soft',
76
+
77
+ // Crushed → Lift/Gain with shadow focus
78
+ crushed: 'punchy',
79
+ crushing: 'punchy',
80
+ clipped: 'punchy',
81
+
82
+ // Lifted/Milky → Lift-focused
83
+ milky: 'soft',
84
+ lifted: 'soft',
85
+ lifted_blacks: 'soft',
86
+ lifted_shadows: 'soft',
87
+ raised_blacks: 'soft',
88
+
89
+ // Dense/Thick
90
+ dense: 'punchy',
91
+ denser: 'punchy',
92
+ density: 'punchy',
93
+ thick: 'punchy',
94
+ thicker: 'punchy',
95
+ weighted: 'punchy',
96
+ heavy: 'punchy',
97
+ heavier: 'punchy',
98
+ };
99
+
100
+ // ═══════════════════════════════════════════════════════════════════════════════
101
+ // EXPOSURE INTENT MAPPINGS
102
+ // ═══════════════════════════════════════════════════════════════════════════════
103
+
104
+ /**
105
+ * Terms that indicate specific exposure tool preferences
106
+ */
107
+ const EXPOSURE_INTENTS = {
108
+ // Overall/Global → Offset
109
+ bright: 'overall',
110
+ brighter: 'overall',
111
+ brighten: 'overall',
112
+ brightened: 'overall',
113
+ dark: 'overall',
114
+ darker: 'overall',
115
+ darken: 'overall',
116
+ darkened: 'overall',
117
+ exposure: 'overall',
118
+ exposed: 'overall',
119
+ underexposed: 'correction',
120
+ overexposed: 'correction',
121
+
122
+ // Highlight-focused → Gain
123
+ hot: 'highlights',
124
+ hotter: 'highlights',
125
+ blown: 'highlights',
126
+ clipped_highlights: 'highlights',
127
+ highlight: 'highlights',
128
+ highlights: 'highlights',
129
+
130
+ // Shadow-focused → Lift
131
+ shadow: 'shadows',
132
+ shadows: 'shadows',
133
+ shadow_detail: 'shadows',
134
+ crushed_shadows: 'shadows',
135
+
136
+ // Midtone-focused → Gamma
137
+ midtone: 'midtones',
138
+ midtones: 'midtones',
139
+ middle_gray: 'midtones',
140
+ gray: 'midtones',
141
+
142
+ // Balanced/Natural → Lift/Gamma/Gain combo
143
+ natural: 'balanced',
144
+ natural_light: 'balanced',
145
+ balanced: 'balanced',
146
+ even: 'even',
147
+
148
+ // Film terms → Balanced/Filmic approach
149
+ stop: 'overall', // "one stop brighter"
150
+ stops: 'overall',
151
+ ev: 'overall', // Exposure value
152
+ iso: 'overall',
153
+ };
154
+
155
+ // ═══════════════════════════════════════════════════════════════════════════════
156
+ // TEMPERATURE INTENT MAPPINGS
157
+ // ═══════════════════════════════════════════════════════════════════════════════
158
+
159
+ /**
160
+ * Terms that indicate specific temperature tool preferences
161
+ */
162
+ const TEMPERATURE_INTENTS = {
163
+ // Global temperature → Temperature Slider
164
+ warm: 'global',
165
+ warmer: 'global',
166
+ warmth: 'global',
167
+ cool: 'global',
168
+ cooler: 'global',
169
+ cold: 'global',
170
+ colder: 'global',
171
+ neutral: 'global',
172
+ daylight: 'global',
173
+ tungsten: 'global',
174
+ white_balance: 'correction',
175
+ wb: 'correction',
176
+
177
+ // Split looks → Lift/Gain Split
178
+ teal: 'split',
179
+ teal_orange: 'split',
180
+ teal_and_orange: 'split',
181
+ blockbuster: 'split',
182
+ complementary: 'split',
183
+ split_tone: 'split',
184
+ split_toning: 'split',
185
+ cross_processed: 'split',
186
+ cross_process: 'split',
187
+
188
+ // Cinematic → Log Wheels or Split
189
+ cinematic: 'cinematic',
190
+ cinematic_warmth: 'cinematic',
191
+ film_warmth: 'filmic',
192
+ filmic: 'filmic',
193
+
194
+ // Highlight-only temperature
195
+ warm_highlights: 'highlightOnly',
196
+ golden_highlights: 'highlightOnly',
197
+ sunset_highlights: 'highlightOnly',
198
+ cool_highlights: 'highlightOnly',
199
+
200
+ // Shadow-only temperature
201
+ cool_shadows: 'shadowOnly',
202
+ teal_shadows: 'shadowOnly',
203
+ blue_shadows: 'shadowOnly',
204
+ warm_shadows: 'shadowOnly',
205
+
206
+ // Light source references often need global
207
+ candlelight: 'global',
208
+ candlelit: 'global',
209
+ firelight: 'global',
210
+ moonlight: 'global',
211
+ moonlit: 'global',
212
+ golden: 'global',
213
+ golden_hour: 'global',
214
+ blue_hour: 'global',
215
+ magic_hour: 'global',
216
+ amber: 'global',
217
+ honey: 'global',
218
+ sepia: 'global',
219
+ };
220
+
221
+ // ═══════════════════════════════════════════════════════════════════════════════
222
+ // SATURATION INTENT MAPPINGS
223
+ // ═══════════════════════════════════════════════════════════════════════════════
224
+
225
+ /**
226
+ * Terms that indicate specific saturation tool preferences
227
+ */
228
+ const SATURATION_INTENTS = {
229
+ // Global saturation → Saturation Slider
230
+ saturated: 'global',
231
+ saturation: 'global',
232
+ desaturated: 'global',
233
+ desaturation: 'global',
234
+ desat: 'global',
235
+ oversaturated: 'global',
236
+ undersaturated: 'global',
237
+
238
+ // Protected/Smart → Color Boost
239
+ vibrant: 'smart',
240
+ vibrance: 'smart',
241
+ vibrancy: 'smart',
242
+ vivid: 'smart',
243
+ vividness: 'smart',
244
+ rich: 'smart',
245
+ richer: 'smart',
246
+ richness: 'smart',
247
+ lush: 'smart',
248
+ lusher: 'smart',
249
+ juicy: 'smart',
250
+ natural: 'natural',
251
+ natural_color: 'natural',
252
+ true_color: 'natural',
253
+ accurate_color: 'natural',
254
+ boosted: 'smart',
255
+ boosted_color: 'smart',
256
+ enhanced: 'smart',
257
+ enhanced_color: 'smart',
258
+
259
+ // Skin-safe → Color Boost
260
+ skin_safe: 'skinSafe',
261
+ protect_skin: 'skinSafe',
262
+ skin_tone: 'skinSafe',
263
+
264
+ // Muted/Subtle → Simple slider (or smart for pull-back)
265
+ muted: 'global',
266
+ muted_colors: 'global',
267
+ subdued: 'global',
268
+ restrained: 'global',
269
+ subtle_color: 'global',
270
+ pastel: 'global',
271
+ pastels: 'global',
272
+
273
+ // Extreme → Simple slider
274
+ monochrome: 'global',
275
+ monochromatic: 'global',
276
+ black_and_white: 'global',
277
+ bw: 'global',
278
+ grayscale: 'global',
279
+ colorless: 'global',
280
+
281
+ // Zone-based
282
+ hdr_saturation: 'zone',
283
+ zone_saturation: 'zone',
284
+ };
285
+
286
+ // ═══════════════════════════════════════════════════════════════════════════════
287
+ // LOOK/STYLE INTENT MAPPINGS
288
+ // These terms imply multiple tool choices
289
+ // ═══════════════════════════════════════════════════════════════════════════════
290
+
291
+ /**
292
+ * Complex look terms that imply multiple intent choices
293
+ */
294
+ const LOOK_INTENTS = {
295
+ // Film stock looks
296
+ kodak: {
297
+ contrast: 'filmic',
298
+ temperature: 'global',
299
+ saturation: 'smart',
300
+ },
301
+ fuji: {
302
+ contrast: 'filmic',
303
+ temperature: 'global',
304
+ saturation: 'smart',
305
+ },
306
+ portra: {
307
+ contrast: 'soft',
308
+ temperature: 'global',
309
+ saturation: 'natural',
310
+ },
311
+ velvia: {
312
+ contrast: 'punchy',
313
+ saturation: 'global',
314
+ },
315
+ kodachrome: {
316
+ contrast: 'punchy',
317
+ saturation: 'smart',
318
+ },
319
+ cinestill: {
320
+ contrast: 'filmic',
321
+ temperature: 'global',
322
+ saturation: 'smart',
323
+ },
324
+ eterna: {
325
+ contrast: 'filmic',
326
+ temperature: 'global',
327
+ saturation: 'natural',
328
+ },
329
+
330
+ // Process looks
331
+ bleach_bypass: {
332
+ contrast: 'punchy',
333
+ saturation: 'global',
334
+ },
335
+ skip_bleach: {
336
+ contrast: 'punchy',
337
+ saturation: 'global',
338
+ },
339
+ cross_processed: {
340
+ contrast: 'filmic',
341
+ temperature: 'split',
342
+ saturation: 'smart',
343
+ },
344
+ technicolor: {
345
+ contrast: 'punchy',
346
+ saturation: 'global',
347
+ temperature: 'global',
348
+ },
349
+
350
+ // Style looks
351
+ cinematic: {
352
+ contrast: 'filmic',
353
+ temperature: 'cinematic',
354
+ saturation: 'smart',
355
+ },
356
+ blockbuster: {
357
+ contrast: 'punchy',
358
+ temperature: 'split',
359
+ saturation: 'smart',
360
+ },
361
+ documentary: {
362
+ contrast: 'soft',
363
+ temperature: 'correction',
364
+ saturation: 'natural',
365
+ },
366
+ commercial: {
367
+ contrast: 'punchy',
368
+ saturation: 'smart',
369
+ },
370
+ broadcast: {
371
+ contrast: 'broadcast',
372
+ saturation: 'global',
373
+ },
374
+ noir: {
375
+ contrast: 'punchy',
376
+ saturation: 'global',
377
+ },
378
+ vintage: {
379
+ contrast: 'soft',
380
+ temperature: 'global',
381
+ saturation: 'natural',
382
+ },
383
+ retro: {
384
+ contrast: 'soft',
385
+ temperature: 'global',
386
+ saturation: 'natural',
387
+ },
388
+ moody: {
389
+ contrast: 'filmic',
390
+ saturation: 'natural',
391
+ },
392
+ dreamy: {
393
+ contrast: 'soft',
394
+ saturation: 'natural',
395
+ },
396
+ };
397
+
398
+ // ═══════════════════════════════════════════════════════════════════════════════
399
+ // INTENT EXTRACTION FUNCTIONS
400
+ // ═══════════════════════════════════════════════════════════════════════════════
401
+
402
+ /**
403
+ * Extract intents from a vocabulary term or list of terms
404
+ * @param {string|string[]} terms - Vocabulary term(s)
405
+ * @returns {Object} Intent object { contrast, exposure, temperature, saturation }
406
+ */
407
+ function extractIntents(terms) {
408
+ const termList = Array.isArray(terms) ? terms : [terms];
409
+ const intents = {};
410
+
411
+ for (const term of termList) {
412
+ const normalized = term.toLowerCase().replace(/[\s-]+/g, '_');
413
+
414
+ // Check each intent category
415
+ if (CONTRAST_INTENTS[normalized] && !intents.contrast) {
416
+ intents.contrast = CONTRAST_INTENTS[normalized];
417
+ }
418
+ if (EXPOSURE_INTENTS[normalized] && !intents.exposure) {
419
+ intents.exposure = EXPOSURE_INTENTS[normalized];
420
+ }
421
+ if (TEMPERATURE_INTENTS[normalized] && !intents.temperature) {
422
+ intents.temperature = TEMPERATURE_INTENTS[normalized];
423
+ }
424
+ if (SATURATION_INTENTS[normalized] && !intents.saturation) {
425
+ intents.saturation = SATURATION_INTENTS[normalized];
426
+ }
427
+
428
+ // Check look intents (these can set multiple)
429
+ if (LOOK_INTENTS[normalized]) {
430
+ const lookIntent = LOOK_INTENTS[normalized];
431
+ for (const [key, value] of Object.entries(lookIntent)) {
432
+ if (!intents[key]) {
433
+ intents[key] = value;
434
+ }
435
+ }
436
+ }
437
+ }
438
+
439
+ return intents;
440
+ }
441
+
442
+ /**
443
+ * Extract intents from a user request string
444
+ * Parses the request for known vocabulary terms and extracts their intents
445
+ * @param {string} request - User request string
446
+ * @returns {Object} Intent object
447
+ */
448
+ function extractIntentsFromRequest(request) {
449
+ if (!request) return {};
450
+
451
+ // Normalize and tokenize
452
+ const normalized = request.toLowerCase();
453
+ const words = normalized.split(/[\s,;.!?]+/).filter(w => w.length > 2);
454
+
455
+ // Also check multi-word phrases
456
+ const phrases = [];
457
+ for (let i = 0; i < words.length - 1; i++) {
458
+ phrases.push(words[i] + '_' + words[i + 1]);
459
+ if (i < words.length - 2) {
460
+ phrases.push(words[i] + '_' + words[i + 1] + '_' + words[i + 2]);
461
+ }
462
+ }
463
+
464
+ const allTerms = [...words, ...phrases];
465
+ return extractIntents(allTerms);
466
+ }
467
+
468
+ /**
469
+ * Get the intent for a specific adjustment type from a term
470
+ * @param {string} term - Vocabulary term
471
+ * @param {string} adjustmentType - 'contrast', 'exposure', 'temperature', 'saturation'
472
+ * @returns {string|null} Intent or null
473
+ */
474
+ function getIntentForAdjustment(term, adjustmentType) {
475
+ const normalized = term.toLowerCase().replace(/[\s-]+/g, '_');
476
+
477
+ switch (adjustmentType) {
478
+ case 'contrast':
479
+ return CONTRAST_INTENTS[normalized] || null;
480
+ case 'exposure':
481
+ return EXPOSURE_INTENTS[normalized] || null;
482
+ case 'temperature':
483
+ return TEMPERATURE_INTENTS[normalized] || null;
484
+ case 'saturation':
485
+ return SATURATION_INTENTS[normalized] || null;
486
+ default:
487
+ return null;
488
+ }
489
+ }
490
+
491
+ /**
492
+ * Check if a term has any associated intents
493
+ * @param {string} term - Vocabulary term
494
+ * @returns {boolean}
495
+ */
496
+ function hasIntent(term) {
497
+ const normalized = term.toLowerCase().replace(/[\s-]+/g, '_');
498
+ return !!(
499
+ CONTRAST_INTENTS[normalized] ||
500
+ EXPOSURE_INTENTS[normalized] ||
501
+ TEMPERATURE_INTENTS[normalized] ||
502
+ SATURATION_INTENTS[normalized] ||
503
+ LOOK_INTENTS[normalized]
504
+ );
505
+ }
506
+
507
+ /**
508
+ * Get all intents for debugging/inspection
509
+ * @returns {Object} All intent mappings
510
+ */
511
+ function getAllIntents() {
512
+ return {
513
+ contrast: CONTRAST_INTENTS,
514
+ exposure: EXPOSURE_INTENTS,
515
+ temperature: TEMPERATURE_INTENTS,
516
+ saturation: SATURATION_INTENTS,
517
+ looks: LOOK_INTENTS,
518
+ };
519
+ }
520
+
521
+ // ═══════════════════════════════════════════════════════════════════════════════
522
+ // EXPORTS
523
+ // ═══════════════════════════════════════════════════════════════════════════════
524
+
525
+ module.exports = {
526
+ // Intent maps
527
+ CONTRAST_INTENTS,
528
+ EXPOSURE_INTENTS,
529
+ TEMPERATURE_INTENTS,
530
+ SATURATION_INTENTS,
531
+ LOOK_INTENTS,
532
+
533
+ // Functions
534
+ extractIntents,
535
+ extractIntentsFromRequest,
536
+ getIntentForAdjustment,
537
+ hasIntent,
538
+ getAllIntents,
539
+ };