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,184 @@
1
+ /**
2
+ * Title Card Template — Full-frame title with background
3
+ *
4
+ * Clean title card with main title, optional subtitle,
5
+ * over a solid or gradient background. Fades in/out.
6
+ */
7
+
8
+ module.exports = {
9
+ label: 'Title Card',
10
+ description: 'Full-frame title card with main title, optional subtitle, and fade transitions.',
11
+ parameters: {
12
+ title: { type: 'string', default: 'Title', description: 'Main title text' },
13
+ subtitle: { type: 'string', default: '', description: 'Optional subtitle text' },
14
+ font: { type: 'string', default: 'Futura', description: 'Font family' },
15
+ titleSize: { type: 'number', default: 0.1, description: 'Title font size (0-1)' },
16
+ textColor: { type: 'object', default: { r: 1, g: 1, b: 1 }, description: 'Text color RGB' },
17
+ bgColor: { type: 'object', default: { r: 0.02, g: 0.02, b: 0.04 }, description: 'Background color RGB' },
18
+ fadeIn: { type: 'number', default: 24, description: 'Fade in duration (frames)' },
19
+ fadeOut: { type: 'number', default: 24, description: 'Fade out duration (frames)' },
20
+ holdDuration: { type: 'number', default: 72, description: 'Hold duration (frames)' },
21
+ width: { type: 'number', default: 1920, description: 'Frame width' },
22
+ height: { type: 'number', default: 1080, description: 'Frame height' },
23
+ },
24
+
25
+ generate(params = {}) {
26
+ const {
27
+ title = 'Title',
28
+ subtitle = '',
29
+ font = 'Futura',
30
+ titleSize = 0.1,
31
+ textColor = { r: 1, g: 1, b: 1 },
32
+ bgColor = { r: 0.02, g: 0.02, b: 0.04 },
33
+ fadeIn = 24,
34
+ fadeOut = 24,
35
+ holdDuration = 72,
36
+ width = 1920,
37
+ height = 1080,
38
+ } = params;
39
+
40
+ const totalDuration = fadeIn + holdDuration + fadeOut;
41
+ const hasSubtitle = subtitle && subtitle.length > 0;
42
+
43
+ // Vertical positioning: center title, subtitle below
44
+ const titleY = hasSubtitle ? 0.54 : 0.5;
45
+ const subtitleY = 0.42;
46
+
47
+ const nodes = [
48
+ // Background
49
+ {
50
+ type: 'Background',
51
+ name: 'BG_Title',
52
+ inputs: {
53
+ TopLeftRed: bgColor.r,
54
+ TopLeftGreen: bgColor.g,
55
+ TopLeftBlue: bgColor.b,
56
+ TopLeftAlpha: 1,
57
+ Width: width,
58
+ Height: height,
59
+ UseFrameFormatSettings: 0,
60
+ },
61
+ viewX: 0, viewY: 0,
62
+ },
63
+
64
+ // Main title
65
+ {
66
+ type: 'TextPlus',
67
+ name: 'Text_Title',
68
+ inputs: {
69
+ StyledText: title,
70
+ Font: font,
71
+ Style: 'Bold',
72
+ Size: titleSize,
73
+ Center: { x: 0.5, y: titleY },
74
+ Red1: textColor.r,
75
+ Green1: textColor.g,
76
+ Blue1: textColor.b,
77
+ HorizontalJustificationNew: 1, // center
78
+ VerticalJustificationNew: 1,
79
+ Width: width,
80
+ Height: height,
81
+ Tracking: 0.05, // slightly wide tracking for titles
82
+ },
83
+ viewX: 0, viewY: 33,
84
+ },
85
+
86
+ // Merge title over background
87
+ {
88
+ type: 'Merge',
89
+ name: 'Merge_Title',
90
+ inputs: {},
91
+ connections: {
92
+ Background: 'BG_Title.Output',
93
+ Foreground: 'Text_Title.Output',
94
+ },
95
+ viewX: 220, viewY: 0,
96
+ },
97
+ ];
98
+
99
+ let lastMerge = 'Merge_Title';
100
+
101
+ // Subtitle (optional)
102
+ if (hasSubtitle) {
103
+ nodes.push({
104
+ type: 'TextPlus',
105
+ name: 'Text_Subtitle',
106
+ inputs: {
107
+ StyledText: subtitle,
108
+ Font: font,
109
+ Style: 'Regular',
110
+ Size: titleSize * 0.45,
111
+ Center: { x: 0.5, y: subtitleY },
112
+ Red1: textColor.r * 0.7,
113
+ Green1: textColor.g * 0.7,
114
+ Blue1: textColor.b * 0.7,
115
+ HorizontalJustificationNew: 1,
116
+ VerticalJustificationNew: 1,
117
+ Tracking: 0.12,
118
+ Width: width,
119
+ Height: height,
120
+ },
121
+ viewX: 110, viewY: 66,
122
+ });
123
+
124
+ nodes.push({
125
+ type: 'Merge',
126
+ name: 'Merge_Subtitle',
127
+ inputs: {},
128
+ connections: {
129
+ Background: 'Merge_Title.Output',
130
+ Foreground: 'Text_Subtitle.Output',
131
+ },
132
+ viewX: 330, viewY: 0,
133
+ });
134
+
135
+ lastMerge = 'Merge_Subtitle';
136
+ }
137
+
138
+ // Final merge with MediaIn (so title card composites over video if present)
139
+ nodes.splice(0, 0, {
140
+ type: 'MediaIn',
141
+ name: 'MediaIn1',
142
+ inputs: {},
143
+ viewX: -110, viewY: 0,
144
+ });
145
+
146
+ // Dissolve/blend the title card over the source
147
+ nodes.push({
148
+ type: 'Dissolve',
149
+ name: 'Dissolve_Fade',
150
+ inputs: {
151
+ Mix: 1,
152
+ },
153
+ connections: {
154
+ Background: 'MediaIn1.Output',
155
+ Foreground: `${lastMerge}.Output`,
156
+ },
157
+ viewX: 440, viewY: 0,
158
+ });
159
+
160
+ // MediaOut
161
+ nodes.push({
162
+ type: 'MediaOut',
163
+ name: 'MediaOut1',
164
+ inputs: {},
165
+ connections: {
166
+ Input: 'Dissolve_Fade.Output',
167
+ },
168
+ viewX: 550, viewY: 0,
169
+ });
170
+
171
+ return {
172
+ nodes,
173
+ keyframes: [
174
+ // Fade in
175
+ { tool: 'Dissolve_Fade', input: 'Mix', time: 0, value: 0 },
176
+ { tool: 'Dissolve_Fade', input: 'Mix', time: fadeIn, value: 1 },
177
+ // Hold
178
+ { tool: 'Dissolve_Fade', input: 'Mix', time: fadeIn + holdDuration, value: 1 },
179
+ // Fade out
180
+ { tool: 'Dissolve_Fade', input: 'Mix', time: totalDuration, value: 0 },
181
+ ],
182
+ };
183
+ },
184
+ };
@@ -0,0 +1,107 @@
1
+ /**
2
+ * Vignette Template — Edge darkening effect
3
+ *
4
+ * Elliptical mask with soft edges over a black background,
5
+ * merged in multiply/darken mode over source footage.
6
+ */
7
+
8
+ module.exports = {
9
+ label: 'Vignette',
10
+ description: 'Soft edge vignette — darkens frame edges with customizable shape and intensity.',
11
+ parameters: {
12
+ intensity: { type: 'number', default: 0.5, description: 'Vignette intensity (0-1)' },
13
+ softness: { type: 'number', default: 0.35, description: 'Edge softness (0-1)' },
14
+ size: { type: 'number', default: 0.75, description: 'Inner clear area size (0-1)' },
15
+ aspect: { type: 'number', default: 1.3, description: 'Horizontal/vertical aspect ratio' },
16
+ centerX: { type: 'number', default: 0.5, description: 'Center X (0-1)' },
17
+ centerY: { type: 'number', default: 0.5, description: 'Center Y (0-1)' },
18
+ color: { type: 'object', default: { r: 0, g: 0, b: 0 }, description: 'Vignette color (default black)' },
19
+ width: { type: 'number', default: 1920, description: 'Frame width' },
20
+ height: { type: 'number', default: 1080, description: 'Frame height' },
21
+ },
22
+
23
+ generate(params = {}) {
24
+ const {
25
+ intensity = 0.5,
26
+ softness = 0.35,
27
+ size = 0.75,
28
+ aspect = 1.3,
29
+ centerX = 0.5,
30
+ centerY = 0.5,
31
+ color = { r: 0, g: 0, b: 0 },
32
+ width = 1920,
33
+ height = 1080,
34
+ } = params;
35
+
36
+ return {
37
+ nodes: [
38
+ {
39
+ type: 'MediaIn',
40
+ name: 'MediaIn1',
41
+ inputs: {},
42
+ viewX: 0, viewY: 0,
43
+ },
44
+
45
+ // Black (or colored) background for vignette
46
+ {
47
+ type: 'Background',
48
+ name: 'BG_Vignette',
49
+ inputs: {
50
+ TopLeftRed: color.r,
51
+ TopLeftGreen: color.g,
52
+ TopLeftBlue: color.b,
53
+ TopLeftAlpha: 1,
54
+ Width: width,
55
+ Height: height,
56
+ UseFrameFormatSettings: 0,
57
+ },
58
+ viewX: 110, viewY: -33,
59
+ },
60
+
61
+ // Elliptical mask — inverted so edges are visible, center is clear
62
+ {
63
+ type: 'EllipseMask',
64
+ name: 'Mask_Vignette',
65
+ inputs: {
66
+ Center: { x: centerX, y: centerY },
67
+ Width: size * aspect,
68
+ Height: size,
69
+ SoftEdge: softness,
70
+ Invert: 1, // invert so edges are opaque
71
+ MaskWidth: width,
72
+ MaskHeight: height,
73
+ },
74
+ viewX: 220, viewY: -66,
75
+ },
76
+
77
+ // Merge vignette over source
78
+ {
79
+ type: 'Merge',
80
+ name: 'Merge_Vignette',
81
+ inputs: {
82
+ Blend: intensity,
83
+ ApplyMode: 'Multiply',
84
+ },
85
+ connections: {
86
+ Background: 'MediaIn1.Output',
87
+ Foreground: 'BG_Vignette.Output',
88
+ },
89
+ effectMask: 'Mask_Vignette.Mask',
90
+ viewX: 330, viewY: 0,
91
+ },
92
+
93
+ {
94
+ type: 'MediaOut',
95
+ name: 'MediaOut1',
96
+ inputs: {},
97
+ connections: {
98
+ Input: 'Merge_Vignette.Output',
99
+ },
100
+ viewX: 440, viewY: 0,
101
+ },
102
+ ],
103
+
104
+ keyframes: [],
105
+ };
106
+ },
107
+ };
@@ -0,0 +1,101 @@
1
+ /**
2
+ * Watermark Template — Logo/text overlay for review copies
3
+ *
4
+ * Semi-transparent text watermark with configurable position,
5
+ * rotation, and tiling options.
6
+ */
7
+
8
+ module.exports = {
9
+ label: 'Watermark',
10
+ description: 'Semi-transparent text watermark for review copies. Supports diagonal and tiled modes.',
11
+ parameters: {
12
+ text: { type: 'string', default: 'CONFIDENTIAL', description: 'Watermark text' },
13
+ font: { type: 'string', default: 'Arial', description: 'Font family' },
14
+ fontSize: { type: 'number', default: 0.08, description: 'Font size (0-1)' },
15
+ opacity: { type: 'number', default: 0.15, description: 'Watermark opacity (0-1)' },
16
+ color: { type: 'object', default: { r: 1, g: 1, b: 1 }, description: 'Text color RGB' },
17
+ angle: { type: 'number', default: -30, description: 'Rotation angle (degrees)' },
18
+ position: { type: 'string', default: 'center', description: 'Position: center, bottom-right, top-left' },
19
+ width: { type: 'number', default: 1920, description: 'Frame width' },
20
+ height: { type: 'number', default: 1080, description: 'Frame height' },
21
+ },
22
+
23
+ generate(params = {}) {
24
+ const {
25
+ text = 'CONFIDENTIAL',
26
+ font = 'Arial',
27
+ fontSize = 0.08,
28
+ opacity = 0.15,
29
+ color = { r: 1, g: 1, b: 1 },
30
+ angle = -30,
31
+ position = 'center',
32
+ width = 1920,
33
+ height = 1080,
34
+ } = params;
35
+
36
+ const posMap = {
37
+ 'center': { x: 0.5, y: 0.5 },
38
+ 'bottom-right': { x: 0.8, y: 0.1 },
39
+ 'top-left': { x: 0.2, y: 0.9 },
40
+ };
41
+ const pos = posMap[position] || posMap['center'];
42
+
43
+ return {
44
+ nodes: [
45
+ {
46
+ type: 'MediaIn',
47
+ name: 'MediaIn1',
48
+ inputs: {},
49
+ viewX: 0, viewY: 0,
50
+ },
51
+
52
+ {
53
+ type: 'TextPlus',
54
+ name: 'Text_Watermark',
55
+ inputs: {
56
+ StyledText: text,
57
+ Font: font,
58
+ Style: 'Bold',
59
+ Size: fontSize,
60
+ Center: { x: pos.x, y: pos.y },
61
+ Red1: color.r,
62
+ Green1: color.g,
63
+ Blue1: color.b,
64
+ HorizontalJustificationNew: 1,
65
+ VerticalJustificationNew: 1,
66
+ LayoutRotation: angle,
67
+ Tracking: 0.2,
68
+ Width: width,
69
+ Height: height,
70
+ },
71
+ viewX: 110, viewY: 33,
72
+ },
73
+
74
+ {
75
+ type: 'Merge',
76
+ name: 'Merge_Watermark',
77
+ inputs: {
78
+ Blend: opacity,
79
+ },
80
+ connections: {
81
+ Background: 'MediaIn1.Output',
82
+ Foreground: 'Text_Watermark.Output',
83
+ },
84
+ viewX: 220, viewY: 0,
85
+ },
86
+
87
+ {
88
+ type: 'MediaOut',
89
+ name: 'MediaOut1',
90
+ inputs: {},
91
+ connections: {
92
+ Input: 'Merge_Watermark.Output',
93
+ },
94
+ viewX: 330, viewY: 0,
95
+ },
96
+ ],
97
+
98
+ keyframes: [],
99
+ };
100
+ },
101
+ };
@@ -0,0 +1,68 @@
1
+ # Cross-platform agent rules
2
+
3
+ One manifest, every IDE. The *content* an agent needs (source-media safety,
4
+ per-domain routing between the live and offline servers) is platform-neutral and
5
+ lives in `AGENTS.md`, `docs/kernels/*`, `docs/guides/*`, and
6
+ `resolve-advanced/README.md`. What differs per IDE is only the **trigger/discovery
7
+ layer** — the file each tool reads and how it decides *when* to load it. This
8
+ directory generates those thin per-platform shims from a single source so they
9
+ cannot drift.
10
+
11
+ ## Two layers
12
+
13
+ 1. **Dynamic, every-MCP-client layer — MCP prompts (not generated here).** The
14
+ server registers per-domain slash prompts in `src/server.py`
15
+ (`color_grade_workflow`, `timeline_edit_workflow`, `conform_workflow`,
16
+ `delivery_workflow`, plus `analyze_media`). Every MCP client — Codex, Cursor,
17
+ Copilot, Continue, Claude Desktop, Cline, Roo, Zed, Windsurf, OpenCode — gets
18
+ them the moment it connects, with no committed files. This is the only layer
19
+ Claude Desktop (a chat client with no repo-rule mechanism) can use.
20
+
21
+ 2. **Static per-repo-file layer — generated by `generate.mjs`.** For always-on
22
+ rules and glob/semantic-triggered loading, each IDE reads a different file:
23
+
24
+ | Platform | File(s) | Trigger | Source |
25
+ |---|---|---|---|
26
+ | Codex / OpenCode / Zed / others | `AGENTS.md` (`## Domain Routing` block) | always-on | generated block |
27
+ | Claude Code | `.claude/skills/*.md` | semantic (description) | hand-authored (rich) |
28
+ | Cursor | `.cursor/rules/*.mdc` | `alwaysApply` repo rule + per-domain `description` (agent-requested) | generated |
29
+ | VS Code / Copilot | `.github/copilot-instructions.md` + `.github/instructions/*.instructions.md` | always-on + `applyTo` | generated |
30
+ | Windsurf | `.windsurf/rules/*.md` + `.windsurfrules` | rules dir + legacy flat | generated |
31
+ | Cline | `.clinerules` (single file) | always-on | generated |
32
+ | Roo Code | `.roo/rules/resolve-mcp.md` | always-on | generated |
33
+ | Continue | `.continue/rules/resolve-mcp.md` | always-on | generated |
34
+ | Claude Desktop | — (chat client, no repo rules) | — | MCP prompts only |
35
+
36
+ `.claude/skills/*` stays hand-authored (Claude's rich semantic skills); every
37
+ other file is generated. `AGENTS.md` remains the universal backstop for any
38
+ client not listed. Always-on rule dirs (Cline/Roo/Continue) get one compact
39
+ combined file (repo hygiene + domain table), since they load every rule file
40
+ unconditionally.
41
+
42
+ ## Drift-proofing
43
+
44
+ - Tool/action counts are **parsed from their canonical docs** at generate time,
45
+ never hand-copied: compound/granular from `docs/SKILL.md`, kernel actions from
46
+ `docs/kernels/README.md`, advanced tools from `resolve-advanced/README.md`.
47
+ - `tests/test_agent_rules_drift.py` runs `generate.mjs --check` and fails the
48
+ suite if any generated file is stale, and asserts the four domain prompts exist
49
+ in `src/server.py`.
50
+ - `tests/test_doc_tool_counts.py` independently asserts the canonical docs quote
51
+ the *real* code counts. Chain: code → `test_doc_tool_counts` → canonical docs →
52
+ `generate.mjs` → agent-rule files → `test_agent_rules_drift`.
53
+
54
+ ## Usage
55
+
56
+ ```bash
57
+ node scripts/agent-rules/generate.mjs # write/update all outputs
58
+ node scripts/agent-rules/generate.mjs --check # exit 1 if anything is stale (CI/release gate)
59
+ ```
60
+
61
+ ## Adding a domain or a platform
62
+
63
+ - **New domain:** add an entry to `DOMAINS` in `generate.mjs`, add a matching
64
+ `@mcp.prompt` in `src/server.py`, and (optionally) a rich `.claude/skills/*.md`.
65
+ Regenerate.
66
+ - **New platform:** add an `emit(...)` for its convention in `generate.mjs`,
67
+ reusing `domainBody(d)` / `repoHygiene`. Regenerate. Do not hand-edit generated
68
+ files — the drift guard will fail.