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,58 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!--DbAppVer="21.0.0.0048" DbPrjVer="17"-->
3
+ <Gallery::GyStill DbId="a754deef-32d9-469a-9664-7f3cbc782054">
4
+ <FieldsBlob>00000001000000040000001c004d0065006400690061004600720061006d006500520061007400650000000c0000000010286b55e253f83d4000000000000000000000002e00470072006100700068005400680075006d0062006e00610069006c0042004100560065007200730069006f006e000000020000000001000000280043006f006e0066006f0072006d005300740061007200740053006f0075007200630065005400430000000a000000001600300030003a00300030003a00300030003a00300030000000240043006f006e0066006f0072006d0045006e00640053006f0075007200630065005400430000000a000000001600300030003a00300032003a00330032003a00310034</FieldsBlob>
5
+ <SrcHint>capture-timeline</SrcHint>
6
+ <SrcType>1</SrcType>
7
+ <GalleryPath>/Movies/.gallery</GalleryPath>
8
+ <Label>1.1</Label>
9
+ <RecTC>01:00:00:00</RecTC>
10
+ <SrcTC>00:00:00:00</SrcTC>
11
+ <DpxDescriptor>50</DpxDescriptor>
12
+ <Width>1920</Width>
13
+ <Height>1080</Height>
14
+ <BitDepth>10</BitDepth>
15
+ <PAR>1</PAR>
16
+ <Endianship>1</Endianship>
17
+ <CreateTime>2026-06-19T09:43:52.093</CreateTime>
18
+ <pClipFullVer>
19
+ <ListMgt::LmVersion DbId="a5ecf741-9bbe-4339-bcec-a5e7033b1ba1">
20
+ <FieldsBlob/>
21
+ <Name/>
22
+ <HasCorrection>true</HasCorrection>
23
+ <VerType>0</VerType>
24
+ <ImplVersion>1</ImplVersion>
25
+ <IncludedInRecording>true</IncludedInRecording>
26
+ <FlatPassEnabled>false</FlatPassEnabled>
27
+ <RGBAOutputEnabled>false</RGBAOutputEnabled>
28
+ <Body>8128b52ffd60fc00a50c0014170af303080510011a4808800f10b8081d0000803f20e002288602350000803f38800f40b80848ffffffff0f7a240000803f003afa020805100120be0128b4013801402c4a071205030405061252da020a0a08818080800c120210020a2d08c9252a23636f6d2e626c61636b6d6167696364657369676e2e7265736f6c766566782e676c6f770a4c08de442a424f6678496d616765456666656374436f6e7465787446696c7465725f61356563663734312d396262652d343333392d626365632d6135653730333362316261315f350a0a08e320010ab60108878180800c12ad01aa01a90108d98cbd02121a1b20012a2b0a0f696e707574416c706861557361676512182a16494d61736b73536f75726365732a190a1056657273696f6e12052a03312e382a160a097468726573686f6c64120911d03f0a0a08d202200160dbd4e99f0d4a0e080910501a080809104018092005520e080a10401a08080a1040180a2005580160b6a9d3bf1a20b6a9d3bf1a0b003b1345bb1d4edd94a54d311a1f365e8ce08461304aaa56fa22e84c6fc901f6</Body>
29
+ <UseVersionClipProcParams>true</UseVersionClipProcParams>
30
+ </ListMgt::LmVersion>
31
+ </pClipFullVer>
32
+ <pTrackVer>
33
+ <ListMgt::LmVersion DbId="c24bd191-a520-4850-9676-fbffffdb3ba0">
34
+ <FieldsBlob/>
35
+ <Name/>
36
+ <HasCorrection>false</HasCorrection>
37
+ <VerType>1</VerType>
38
+ <ImplVersion>1</ImplVersion>
39
+ <IncludedInRecording>true</IncludedInRecording>
40
+ <FlatPassEnabled>false</FlatPassEnabled>
41
+ <RGBAOutputEnabled>false</RGBAOutputEnabled>
42
+ <Body>8128b52ffd208eb50300a4060a6a08ffffffff0f10011a4808800f10b8081d0000803f20800f28b808350000803f38800f40b808487a240000803f002080c60a4a040801104052040802104058016090aad3bf1a1a2020be0128b401380140554a00520c0a0a08818080800c120210026093d5e99f0d0300333d803b9374a932</Body>
43
+ <UseVersionClipProcParams>true</UseVersionClipProcParams>
44
+ </ListMgt::LmVersion>
45
+ </pTrackVer>
46
+ <PrimaryCCMode>0</PrimaryCCMode>
47
+ <Vsr>
48
+ <BtThumnail DbId="00b12df8-ac66-4975-a75f-e6832039862d">
49
+ <FieldsBlob>0000000100000001000000140049006d0067005100750061006c006900740079000000020000000001</FieldsBlob>
50
+ <ImgWidth>288</ImgWidth>
51
+ <ImgHeight>162</ImgHeight>
52
+ <Buffer>ffd8ffe000104a46494600010101004800480000ffdb004300080606070605080707070909080a0c140d0c0b0b0c1912130f141d1a1f1e1d1a1c1c20242e2720222c231c1c2837292c30313434341f27393d38323c2e333432ffdb0043010909090c0b0c180d0d1832211c213232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232ffc000110800a2012003012200021101031101ffc4001f0000010501010101010100000000000000000102030405060708090a0bffc400b5100002010303020403050504040000017d01020300041105122131410613516107227114328191a1082342b1c11552d1f02433627282090a161718191a25262728292a3435363738393a434445464748494a535455565758595a636465666768696a737475767778797a838485868788898a92939495969798999aa2a3a4a5a6a7a8a9aab2b3b4b5b6b7b8b9bac2c3c4c5c6c7c8c9cad2d3d4d5d6d7d8d9dae1e2e3e4e5e6e7e8e9eaf1f2f3f4f5f6f7f8f9faffc4001f0100030101010101010101010000000000000102030405060708090a0bffc400b51100020102040403040705040400010277000102031104052131061241510761711322328108144291a1b1c109233352f0156272d10a162434e125f11718191a262728292a35363738393a434445464748494a535455565758595a636465666768696a737475767778797a82838485868788898a92939495969798999aa2a3a4a5a6a7a8a9aab2b3b4b5b6b7b8b9bac2c3c4c5c6c7c8c9cad2d3d4d5d6d7d8d9dae2e3e4e5e6e7e8e9eaf2f3f4f5f6f7f8f9faffda000c03010002110311003f00f9fe8a28a0028a28a00b967feadbeb566ab59ffab6fad5aed52c571290d2e690d0037bd141eb499a0053d2928cd14001a5c629296800a2928cd30168a334500145145002d145140c4a5a28a10829314b41a0418a3140a281898a314519a042d57baff563fdea9ea1bbff00543eb45c653a28a298c28a28a0028a28a0028a28a00bb67feadbeb564f4aad65feadbeb564d2621b466969a690843d69283d68a06145145300a28a2810514514862e28c51466800141a0521eb4c0506969a29680178a4a28c8a4316929690d310038a5cd251400b8a4a5a4e281054177feac7d6a7a82ebfd58fad219528a28aa1851451400514514005145140176c7fd5bfd6ac9aad65feadfeb539e94842d34d141a4034f5a28a28003494a692800a5a4a5a0028a28a0028a28a00290d2d2114c05145038a53d28b0094514b40050690f5a51d28001451da92801692968a6002a0bbff563eb53d4175feac7d6901528a28a630a28a2800a28a2800a28a2802e597dc7fad58aaf65f71feb560d2130a69a5cd21a042521e2969290c0734b49d28cd020a5a4cd19a062d1499a33400b451453016928cd140b50a39a28a0028cd14b8a004a28ef4503168a4a3340066973494501716a0baff563eb5366a1baff00563eb40ba9528a28a65051451400514514005145140176cbee3fd6a73d2a0b2fb8ff005a9cf4a4262521a5a0d210d3498a752503131452d25020a28a290c28a28a60029692969805145148028a28a6014b494b40011cd252d069884a28a2900b498a0d2d00254175feac7d6a73505d7fab1f5a011568a28a65051451400514514005145140172cfee3fd6ac1aaf67f71feb5629084a434ea6d002521a53d690d201052d149de9085a4a5a281894bda9474a2aba009452d148033451450b51d828a28aa10514b452601da8345068b809452d2500145253bb5021a6a1b9ff563eb562a0baff563eb4c0a94514505051451400514514005145140172cfee3d4f9a82cfee3fd6a7a44b0a0f140a0d034349e693ad145200c518a28a40145145002d2668a2980b45252d00145145082e145145300a7629b4b9a061de8349de8a4216928a29805145140851d2a0ba3fbb1f5a9aa0b9ff563eb4868ab4514550c28a28a0028a28a0028a28a00b969feadbeb53d4167feadbeb562a7a831290d2d21a091b452d2500145145030a28a293010f5a5a28145c02968a4a005a28a2980514514c414514500145146690c28a314502b8514514030a82ebfd58fad4f505d7fab1f5a011568a28aa2828a28a0028a28a0028a28a00b967feadbeb560f4aaf67feadbeb560f4a96262521a5a434084a43452d0020a3bd2d250014b49466818b451452012968a28016928cd14c414529a4a6014a314945218a7ad21a28a62168a4a33400b494668a0051505d7fab1f5a9aa1baff563eb490ca94514550c28a28a0028a28a0028a28a00b967feadbeb560d57b3ff56df5ab152c42521e69d4dc502131451453b0099a28a290c28a28a0029734945002d14628a0028a334530149a4a281d680171494b4940051451408297140e28e28189451460d020a86ebfd58fad4d50dd7fab1f5a011528a28a65051451400514514005145140172cff00d5b7d6ac8a28a4c9ea37bd068a28431a7ad068a2a9ec24028a28a818525145003874a1a8a2800145145201075a5a28a684c052d14531a1294514500c43d6968a292dc4069a68a2a868514514521310d4175feac7d68a29822ad1451414145145007fffd9</Buffer>
53
+ </BtThumnail>
54
+ </Vsr>
55
+ <ClipThumbnails>0ada06080a12d506085c102e180122cc06ffd8ffe000104a46494600010101004800480000ffdb004300080606070605080707070909080a0c140d0c0b0b0c1912130f141d1a1f1e1d1a1c1c20242e2720222c231c1c2837292c30313434341f27393d38323c2e333432ffdb0043010909090c0b0c180d0d1832211c213232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232ffc0001108002e005c03012200021101031101ffc4001f0000010501010101010100000000000000000102030405060708090a0bffc400b5100002010303020403050504040000017d01020300041105122131410613516107227114328191a1082342b1c11552d1f02433627282090a161718191a25262728292a3435363738393a434445464748494a535455565758595a636465666768696a737475767778797a838485868788898a92939495969798999aa2a3a4a5a6a7a8a9aab2b3b4b5b6b7b8b9bac2c3c4c5c6c7c8c9cad2d3d4d5d6d7d8d9dae1e2e3e4e5e6e7e8e9eaf1f2f3f4f5f6f7f8f9faffc4001f0100030101010101010101010000000000000102030405060708090a0bffc400b51100020102040403040705040400010277000102031104052131061241510761711322328108144291a1b1c109233352f0156272d10a162434e125f11718191a262728292a35363738393a434445464748494a535455565758595a636465666768696a737475767778797a82838485868788898a92939495969798999aa2a3a4a5a6a7a8a9aab2b3b4b5b6b7b8b9bac2c3c4c5c6c7c8c9cad2d3d4d5d6d7d8d9dae2e3e4e5e6e7e8e9eaf2f3f4f5f6f7f8f9faffda000c03010002110311003f00f9fea5b6ff008fa87fdf5fe75154b6dff1f70ffbebfce803a13d2994f63519a910b4b4d14b400b4b4da5a602d51d53fe3d57fdf1fc8d5daa3aa7fc7aaffbe3f91a00c9a28a298c2a5b6ff8fb87fdf5fe75154b6dff001f50ff00bebfce803a034c34f3d29879a9620a051de81493016969296a804aa5a9ff00c7b2ff00be3f91abb54b54ff008f65ff007c7f23401934514531854b6dff001f50ff00bebfcea2a96dbfe3ea1ff7d7f9d00740d51d486986a44140a3bd2f6cd200a28a2a802a96a7ff001ecbfef8fe46aed52d4ffe3d97fdf1fc8d16119345145328ffd9</ClipThumbnails>
56
+ <TrackThumbnails/>
57
+ <ReelName/>
58
+ </Gallery::GyStill>
@@ -0,0 +1,58 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!--DbAppVer="21.0.0.0048" DbPrjVer="17"-->
3
+ <Gallery::GyStill DbId="2de7efc3-d3c6-4782-a070-91d898dedc11">
4
+ <FieldsBlob>00000001000000040000001c004d0065006400690061004600720061006d006500520061007400650000000c0000000010286b55e253f83d4000000000000000000000002e00470072006100700068005400680075006d0062006e00610069006c0042004100560065007200730069006f006e000000020000000001000000280043006f006e0066006f0072006d005300740061007200740053006f0075007200630065005400430000000a000000001600300030003a00300030003a00300030003a00300030000000240043006f006e0066006f0072006d0045006e00640053006f0075007200630065005400430000000a000000001600300030003a00300032003a00330032003a00310034</FieldsBlob>
5
+ <SrcHint>capture-timeline</SrcHint>
6
+ <SrcType>1</SrcType>
7
+ <GalleryPath>/Movies/.gallery</GalleryPath>
8
+ <Label>1.1</Label>
9
+ <RecTC>01:00:00:00</RecTC>
10
+ <SrcTC>00:00:00:00</SrcTC>
11
+ <DpxDescriptor>50</DpxDescriptor>
12
+ <Width>1920</Width>
13
+ <Height>1080</Height>
14
+ <BitDepth>10</BitDepth>
15
+ <PAR>1</PAR>
16
+ <Endianship>1</Endianship>
17
+ <CreateTime>2026-06-19T09:42:57.941</CreateTime>
18
+ <pClipFullVer>
19
+ <ListMgt::LmVersion DbId="8bb6a70c-97b1-4ac3-8b20-b29a762b5c48">
20
+ <FieldsBlob/>
21
+ <Name/>
22
+ <HasCorrection>true</HasCorrection>
23
+ <VerType>0</VerType>
24
+ <ImplVersion>1</ImplVersion>
25
+ <IncludedInRecording>true</IncludedInRecording>
26
+ <FlatPassEnabled>false</FlatPassEnabled>
27
+ <RGBAOutputEnabled>false</RGBAOutputEnabled>
28
+ <Body>8128b52ffd60e100ed0b00f4150ad803080410011a4808800f10b8081d0000803f20e002288602350000803f38800f40b80848ffffffff0f7a240000803f003adf020804100120be0128b4013801402c4a071205030405061252bf020a0a08818080800c120210020a3408c92c2a2a636f6d2e626c61636b6d6167696364657369676e2e7265736f6c766566782e6c656e73666c61726576320a4c08de442a424f6678496d616765456666656374436f6e7465787446696c7465725f38626236613730632d393762312d346163332d386232302d6232396137363262356334385f340a0a08e30220000a940108878180800c128b01aa01870108d98cbd02121a1b20012a190a1056657273696f6e12052a03332e352a1a0a0a7879506f736974696f6e120c320a0d1f850b3f159cc4203f0a0a08d202200060bcbb80860d4a0e080710501a080807104018072004520e080810401a080808104018082004580160f8f6808c1a20f8f6808c1a0900ce9828562b20c5c2161e33388982c4c8ea605fda9ae959390014</Body>
29
+ <UseVersionClipProcParams>true</UseVersionClipProcParams>
30
+ </ListMgt::LmVersion>
31
+ </pClipFullVer>
32
+ <pTrackVer>
33
+ <ListMgt::LmVersion DbId="d1c8495b-5e44-49ab-bfa3-5b802037eecd">
34
+ <FieldsBlob/>
35
+ <Name/>
36
+ <HasCorrection>false</HasCorrection>
37
+ <VerType>1</VerType>
38
+ <ImplVersion>1</ImplVersion>
39
+ <IncludedInRecording>true</IncludedInRecording>
40
+ <FlatPassEnabled>false</FlatPassEnabled>
41
+ <RGBAOutputEnabled>false</RGBAOutputEnabled>
42
+ <Body>8128b52ffd208eb50300a4060a6a08ffffffff0f10011a4808800f10b8081d0000803f20800f28b808350000803f38800f40b808487a240000803f002080c60a4a0408011040520408021040580160cef7808c1a1a2020be0128b401380140554a00520c0a0a08818080800c1202100260f1bb80860d0300333d803b9374a932</Body>
43
+ <UseVersionClipProcParams>true</UseVersionClipProcParams>
44
+ </ListMgt::LmVersion>
45
+ </pTrackVer>
46
+ <PrimaryCCMode>0</PrimaryCCMode>
47
+ <Vsr>
48
+ <BtThumnail DbId="556d2f48-b44a-42d1-98ff-988c5f6a4532">
49
+ <FieldsBlob>0000000100000001000000140049006d0067005100750061006c006900740079000000020000000001</FieldsBlob>
50
+ <ImgWidth>288</ImgWidth>
51
+ <ImgHeight>162</ImgHeight>
52
+ <Buffer>ffd8ffe000104a46494600010101004800480000ffdb004300080606070605080707070909080a0c140d0c0b0b0c1912130f141d1a1f1e1d1a1c1c20242e2720222c231c1c2837292c30313434341f27393d38323c2e333432ffdb0043010909090c0b0c180d0d1832211c213232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232ffc000110800a2012003012200021101031101ffc4001f0000010501010101010100000000000000000102030405060708090a0bffc400b5100002010303020403050504040000017d01020300041105122131410613516107227114328191a1082342b1c11552d1f02433627282090a161718191a25262728292a3435363738393a434445464748494a535455565758595a636465666768696a737475767778797a838485868788898a92939495969798999aa2a3a4a5a6a7a8a9aab2b3b4b5b6b7b8b9bac2c3c4c5c6c7c8c9cad2d3d4d5d6d7d8d9dae1e2e3e4e5e6e7e8e9eaf1f2f3f4f5f6f7f8f9faffc4001f0100030101010101010101010000000000000102030405060708090a0bffc400b51100020102040403040705040400010277000102031104052131061241510761711322328108144291a1b1c109233352f0156272d10a162434e125f11718191a262728292a35363738393a434445464748494a535455565758595a636465666768696a737475767778797a82838485868788898a92939495969798999aa2a3a4a5a6a7a8a9aab2b3b4b5b6b7b8b9bac2c3c4c5c6c7c8c9cad2d3d4d5d6d7d8d9dae2e3e4e5e6e7e8e9eaf2f3f4f5f6f7f8f9faffda000c03010002110311003f00f9fe8a28a0028a28a00d2d3bfd4bff00bd574552d3bfd4bffbd577b5262b8534d2d14806f7a5a4a28014d251453010d3a928cd0014a2928a005a4a39a280b0b477a2940a004a2948a4a061452d250841498a5a2810628c5028a062628c51450216a9ea1fea17fdefe86add55d43fd42ffbdfd0d033368a28a630a28a2800a28a2800a28a28034b4dff0052ff00ef55ded54b4dff0052ff00ef55da4c42519a2929084a28a4340c5a2928cd301683494b400514b8a50290c4029d8a5a5a02e340a701480d3d067340ae308a4c538f5a4a02e369a69e4534d08619a4a5a0d315801a334946280168c514500155350ff50bfef7f4356eaa6a1fea17fdefe94019b45145318514514005145140051451401a7a67fa993eb572a969bfea5ffdeab87a5210525141a4025252d1400869294d2628016969b4ea010e1520191518a7838a4302314d26a74db2707834d920643c8e3d69dc5622ab1121f299bd2a10bcd698b729a41948fbcd8149b1a46513cd2d1b70692ac42d348a902934a57152c1116290d39a9b4c6c4a5a0d25021692968a60155350ff0050bfef7f4356aaaea1fea17fdefe9480cda28a298c28a28a0028a28a0028a28a00d2d37fd549f5ab954f4dff005527d6ae52130a6d2e69281052134668eb4861d696928cd020c528a4cd28a06878a280683420600e0d6a585cc4c44572bba33dfb8acb1c9ab76b03cb20545249f4a52d868e864f0a4e635b9b51e7db3f474e71ec7d2b635bf0ecf63e17d38344c1a4dce78f7c5771f0b74b9ece5df7ae914122e3ca9587cfe9f29af48f11dadb368d3486ce19e4850b468cb9c7e15cce527777d8d6c969dcf945745bb972c2260a3ab1e05412db456fc338661d856e789757bcbaba7491f620380883681f80ae5dd8935bc6ed5d99cac87b4a3f84546589a6834ec56962461a6d38d369218514519a620a28a4a02e2d54d43fd42ffbdfd2ad555bff00f50bfef7f4a00cea28a298c28a28a0028a28a0028a28a00d2d37fd53fd6ae76aa7a6ff00aa7fad5c3d2931094869690d210868c52d140c43494a692810b4a2929452290f14f084d08a4f4ab0b09229a25b486c51c4a72e73ed5a106ac6d78b64087fbd8e6aaadb0f5e69e6d801c53e54f72e2cded275cbb17d1b999cb161c935d378abc737cdaa9f26e5d44402ae0fa0ae0acb31dd2123a1cd56d4ae5a6bc9189ea6b29d25cc6ae5646cea17d6fae032baac577dc8e03d7373c4d1395614d1210720d4fe7f9ab87e4fad5463cbb193772a8a753993078a69ab6c91869b4e348684312929692810b494a68a042555bfff0050bfef7f4ab46aadff00fa85ff007bfa50333a8a28a630a28a2800a28a2800a28a28034b4dff005527d6ad9e95534dff005527d6ae1a421b41a5a2801b8a29690d00252d149de9085a7c685da9956a301133de930648bb621ef4e129355cb64d2a1e69a5dc6924cb02439eb522cac2a3853cc902e719ab13c0b1a6e527df355a1aa76d193c122b1c9eb59d7919de587ad4a8e474a7b91246477a5b3267a2ba33314a29ce36b114dcd333dc7eee39a6373484d266a6c52034d34ea434d009494b4502128a2968109556ff00fd42ff00bdfd2ad8e955750ff50bfef7f4a6066d14514141451450014514500145145006969bfea9feb56f35534eff0054ff005ab7484028340a0d008693475a43d69452003494a6931400f4e5855873c0155d3ef0a95ea5ee02500d25156226493041070454af70f28019b22aa0a7668b95cc582d814b13e4d57cd3e23f3527b03771b71c3d439a92e0e5aa1a64c761734629297341570a0d2519a420a28a2a804a5a4c5148428e9553503fb85ff7bfa1ab7552ff00fd4aff00bdfd0d03467514514c614514500145145001451450068e9dfea5ff00deab95534eff0052ff00ef55ca901290d2d21a09131452d34d03168a4a28017bd4c0ee5a869c8d838a4c07f7a0f4a5eb494d31340296929453016a54f95734c55f5a6c92718152f5d008e46dcd4ca534954014b494a28185252d274a400296928a042d1494b4c189556fff00d42ffbdfd2ad1aab7ffea17fdefe940233a8a28a650514514005145140051451401a5a6ffa97ff007aae1e954f4dff0052ff00ef55ced49884a434b4869084ef4868a5a0041477a5a4a002968a2818e57229fb81a8e9295809811eb4bb94543450048d2e7815193cd26696a84250294d20a005a5149452181eb451499a602d1499a334085a4a3345002d54d43fd42ffbdfd0d5baa9a87fa85ff7bfa1a0667514514c61451450014514500145145006969bfea5ff00deab954f4eff0052ff00ef55ca4c42521e69d4dc502131452e290d16013ad140a5a431334b494b40052e6928a005a28028a004a5a28a6006929681400628a5ed4da0028a28c502014b8a314503128a31462810b55350ff0050bfef7f4356aaaea1fea17fdefe8681a33a8a28a630a28a2800a28a2800a28a28034b4dff0052ff00ef55ca28a4c9ea1de90d145031290d14536028a28a2a404a28a286028a1ba51450002968a290083ad14514d00b4514531894a28a281310f5a5a28a16e20a4a28a63014514502621aaba87fa85ff7bfa1a28a0119d4514505051451401fffd9</Buffer>
53
+ </BtThumnail>
54
+ </Vsr>
55
+ <ClipThumbnails>0acf06080812ca06085c102e180122c106ffd8ffe000104a46494600010101004800480000ffdb004300080606070605080707070909080a0c140d0c0b0b0c1912130f141d1a1f1e1d1a1c1c20242e2720222c231c1c2837292c30313434341f27393d38323c2e333432ffdb0043010909090c0b0c180d0d1832211c213232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232ffc0001108002e005c03012200021101031101ffc4001f0000010501010101010100000000000000000102030405060708090a0bffc400b5100002010303020403050504040000017d01020300041105122131410613516107227114328191a1082342b1c11552d1f02433627282090a161718191a25262728292a3435363738393a434445464748494a535455565758595a636465666768696a737475767778797a838485868788898a92939495969798999aa2a3a4a5a6a7a8a9aab2b3b4b5b6b7b8b9bac2c3c4c5c6c7c8c9cad2d3d4d5d6d7d8d9dae1e2e3e4e5e6e7e8e9eaf1f2f3f4f5f6f7f8f9faffc4001f0100030101010101010101010000000000000102030405060708090a0bffc400b51100020102040403040705040400010277000102031104052131061241510761711322328108144291a1b1c109233352f0156272d10a162434e125f11718191a262728292a35363738393a434445464748494a535455565758595a636465666768696a737475767778797a82838485868788898a92939495969798999aa2a3a4a5a6a7a8a9aab2b3b4b5b6b7b8b9bac2c3c4c5c6c7c8c9cad2d3d4d5d6d7d8d9dae2e3e4e5e6e7e8e9eaf2f3f4f5f6f7f8f9faffda000c03010002110311003f00f19a7c5feb93fde14ca7c3feba3ff787f3a00d334da534d3522168a4ed4e552ee157a9e05301296a7bab19ecc81326d26abd002d57bbff00543fdea9ea0bbff523fdea00a54514531853e2ff005c9fef0a653e2ff5c9fef0a00d234d34e34d35220a7c5218e45917ef29c8a677a05005fd4355b9d4d835c1048e9818aa34514256d8370aaf77fea87fbd562abddffaa1fef53029d14514c614f8bfd727fbc2994f8bfd727fbc280348d329e69b5220a28a5ed40051451de9809505dffaa1fef558c557bbff00543fdea00a745145319fffd9</ClipThumbnails>
56
+ <TrackThumbnails/>
57
+ <ReelName/>
58
+ </Gallery::GyStill>
@@ -0,0 +1,58 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!--DbAppVer="21.0.0.0048" DbPrjVer="17"-->
3
+ <Gallery::GyStill DbId="35c181d2-863d-495f-859b-53875211d8d4">
4
+ <FieldsBlob>00000001000000040000001c004d0065006400690061004600720061006d006500520061007400650000000c0000000010286b55e253f83d4000000000000000000000002e00470072006100700068005400680075006d0062006e00610069006c0042004100560065007200730069006f006e000000020000000001000000280043006f006e0066006f0072006d005300740061007200740053006f0075007200630065005400430000000a000000001600300030003a00300030003a00300030003a00300030000000240043006f006e0066006f0072006d0045006e00640053006f0075007200630065005400430000000a000000001600300030003a00300032003a00330032003a00310034</FieldsBlob>
5
+ <SrcHint>capture-timeline</SrcHint>
6
+ <SrcType>1</SrcType>
7
+ <GalleryPath>/Movies/.gallery</GalleryPath>
8
+ <Label>1.1</Label>
9
+ <RecTC>01:02:32:15</RecTC>
10
+ <SrcTC>00:02:32:14</SrcTC>
11
+ <DpxDescriptor>50</DpxDescriptor>
12
+ <Width>1920</Width>
13
+ <Height>1080</Height>
14
+ <BitDepth>10</BitDepth>
15
+ <PAR>1</PAR>
16
+ <Endianship>1</Endianship>
17
+ <CreateTime>2026-06-19T08:51:30.730</CreateTime>
18
+ <pClipFullVer>
19
+ <ListMgt::LmVersion DbId="fa701ea8-7f06-45ae-803c-95287577ca03">
20
+ <FieldsBlob/>
21
+ <Name/>
22
+ <HasCorrection>true</HasCorrection>
23
+ <VerType>0</VerType>
24
+ <ImplVersion>1</ImplVersion>
25
+ <IncludedInRecording>true</IncludedInRecording>
26
+ <FlatPassEnabled>false</FlatPassEnabled>
27
+ <RGBAOutputEnabled>false</RGBAOutputEnabled>
28
+ <Body>8128b52ffd60d900bd0b0064150ad003080210011a4808800f10b8081d0000803f20e002288602350000803f38800f40b80848ffffffff0f7a240000803f003ad7020802100120be0128b4013801402c4a071205030405061252b7020a0a08818080800c120210020a2f08c9272a25636f6d2e626c61636b6d6167696364657369676e2e7265736f6c766566782e6265617574790a4c08de442a424f6678496d616765456666656374436f6e7465787446696c7465725f66613730316561382d376630362d343561652d383033632d3935323837353737636130335f320a0a08e30220000a910108878180800c128801aa01840108d98cbd02121a1b20012a190a1056657273696f6e12052a03342e302a1c0a0f7761746572636f6c6f72426c656e64120911d03f0a0a08d202200060eb84f4c5014a0e080310501a080803104018032002520e080410401a080804104018042002580160d689e88b0320d489e88b030a00161385533b1ed38af2b01037633f92285c2455adf445d099de9203ec01</Body>
29
+ <UseVersionClipProcParams>true</UseVersionClipProcParams>
30
+ </ListMgt::LmVersion>
31
+ </pClipFullVer>
32
+ <pTrackVer>
33
+ <ListMgt::LmVersion DbId="18197413-f4f3-4f1f-955e-80d6d22ba5d8">
34
+ <FieldsBlob/>
35
+ <Name/>
36
+ <HasCorrection>false</HasCorrection>
37
+ <VerType>1</VerType>
38
+ <ImplVersion>1</ImplVersion>
39
+ <IncludedInRecording>true</IncludedInRecording>
40
+ <FlatPassEnabled>false</FlatPassEnabled>
41
+ <RGBAOutputEnabled>false</RGBAOutputEnabled>
42
+ <Body>8128b52ffd208eb50300a4060a6a08ffffffff0f10011a4808800f10b8081d0000803f20800f28b808350000803f38800f40b808487a240000803f00209eff0a4a0408011040520408021040580160ba8ae88b031a2020be0128b401380140554a00520c0a0a08818080800c1202100260aa85f4c5010300333d803b9374a932</Body>
43
+ <UseVersionClipProcParams>true</UseVersionClipProcParams>
44
+ </ListMgt::LmVersion>
45
+ </pTrackVer>
46
+ <PrimaryCCMode>0</PrimaryCCMode>
47
+ <Vsr>
48
+ <BtThumnail DbId="a031e473-628e-41d2-83db-4e346c8e8a2f">
49
+ <FieldsBlob>0000000100000001000000140049006d0067005100750061006c006900740079000000020000000001</FieldsBlob>
50
+ <ImgWidth>288</ImgWidth>
51
+ <ImgHeight>162</ImgHeight>
52
+ <Buffer>ffd8ffe000104a46494600010101004800480000ffdb004300080606070605080707070909080a0c140d0c0b0b0c1912130f141d1a1f1e1d1a1c1c20242e2720222c231c1c2837292c30313434341f27393d38323c2e333432ffdb0043010909090c0b0c180d0d1832211c213232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232ffc000110800a2012003012200021101031101ffc4001f0000010501010101010100000000000000000102030405060708090a0bffc400b5100002010303020403050504040000017d01020300041105122131410613516107227114328191a1082342b1c11552d1f02433627282090a161718191a25262728292a3435363738393a434445464748494a535455565758595a636465666768696a737475767778797a838485868788898a92939495969798999aa2a3a4a5a6a7a8a9aab2b3b4b5b6b7b8b9bac2c3c4c5c6c7c8c9cad2d3d4d5d6d7d8d9dae1e2e3e4e5e6e7e8e9eaf1f2f3f4f5f6f7f8f9faffc4001f0100030101010101010101010000000000000102030405060708090a0bffc400b51100020102040403040705040400010277000102031104052131061241510761711322328108144291a1b1c109233352f0156272d10a162434e125f11718191a262728292a35363738393a434445464748494a535455565758595a636465666768696a737475767778797a82838485868788898a92939495969798999aa2a3a4a5a6a7a8a9aab2b3b4b5b6b7b8b9bac2c3c4c5c6c7c8c9cad2d3d4d5d6d7d8d9dae2e3e4e5e6e7e8e9eaf2f3f4f5f6f7f8f9faffda000c03010002110311003f00f9fe8a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a00fffd9</Buffer>
53
+ </BtThumnail>
54
+ </Vsr>
55
+ <ClipThumbnails>0ac905080412c405085c102e180122bb05ffd8ffe000104a46494600010101004800480000ffdb004300080606070605080707070909080a0c140d0c0b0b0c1912130f141d1a1f1e1d1a1c1c20242e2720222c231c1c2837292c30313434341f27393d38323c2e333432ffdb0043010909090c0b0c180d0d1832211c213232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232ffc0001108002e005c03012200021101031101ffc4001f0000010501010101010100000000000000000102030405060708090a0bffc400b5100002010303020403050504040000017d01020300041105122131410613516107227114328191a1082342b1c11552d1f02433627282090a161718191a25262728292a3435363738393a434445464748494a535455565758595a636465666768696a737475767778797a838485868788898a92939495969798999aa2a3a4a5a6a7a8a9aab2b3b4b5b6b7b8b9bac2c3c4c5c6c7c8c9cad2d3d4d5d6d7d8d9dae1e2e3e4e5e6e7e8e9eaf1f2f3f4f5f6f7f8f9faffc4001f0100030101010101010101010000000000000102030405060708090a0bffc400b51100020102040403040705040400010277000102031104052131061241510761711322328108144291a1b1c109233352f0156272d10a162434e125f11718191a262728292a35363738393a434445464748494a535455565758595a636465666768696a737475767778797a82838485868788898a92939495969798999aa2a3a4a5a6a7a8a9aab2b3b4b5b6b7b8b9bac2c3c4c5c6c7c8c9cad2d3d4d5d6d7d8d9dae2e3e4e5e6e7e8e9eaf2f3f4f5f6f7f8f9faffda000c03010002110311003f00f9fe8a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a00fffd9</ClipThumbnails>
56
+ <TrackThumbnails/>
57
+ <ReelName/>
58
+ </Gallery::GyStill>
@@ -0,0 +1,58 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!--DbAppVer="21.0.0.0048" DbPrjVer="17"-->
3
+ <Gallery::GyStill DbId="a7ee91b7-a3ec-4506-954d-b3a24bb738a8">
4
+ <FieldsBlob>00000001000000040000001c004d0065006400690061004600720061006d006500520061007400650000000c0000000010286b55e253f83d4000000000000000000000002e00470072006100700068005400680075006d0062006e00610069006c0042004100560065007200730069006f006e000000020000000001000000280043006f006e0066006f0072006d005300740061007200740053006f0075007200630065005400430000000a000000001600300030003a00300030003a00300030003a00300030000000240043006f006e0066006f0072006d0045006e00640053006f0075007200630065005400430000000a000000001600300030003a00300032003a00330032003a00310034</FieldsBlob>
5
+ <SrcHint>capture-timeline</SrcHint>
6
+ <SrcType>1</SrcType>
7
+ <GalleryPath>/Movies/.gallery</GalleryPath>
8
+ <Label>1.1</Label>
9
+ <RecTC>01:02:32:15</RecTC>
10
+ <SrcTC>00:02:32:14</SrcTC>
11
+ <DpxDescriptor>50</DpxDescriptor>
12
+ <Width>1920</Width>
13
+ <Height>1080</Height>
14
+ <BitDepth>10</BitDepth>
15
+ <PAR>1</PAR>
16
+ <Endianship>1</Endianship>
17
+ <CreateTime>2026-06-19T08:52:19.895</CreateTime>
18
+ <pClipFullVer>
19
+ <ListMgt::LmVersion DbId="45a30b08-e3a4-43ce-a8d3-a6da306016bd">
20
+ <FieldsBlob/>
21
+ <Name/>
22
+ <HasCorrection>true</HasCorrection>
23
+ <VerType>0</VerType>
24
+ <ImplVersion>1</ImplVersion>
25
+ <IncludedInRecording>true</IncludedInRecording>
26
+ <FlatPassEnabled>false</FlatPassEnabled>
27
+ <RGBAOutputEnabled>false</RGBAOutputEnabled>
28
+ <Body>8128b52ffd60d900bd0b0064150ad003080210011a4808800f10b8081d0000803f20e002288602350000803f38800f40b80848ffffffff0f7a240000803f003ad7020802100120be0128b4013801402c4a071205030405061252b7020a0a08818080800c120210020a2f08c9272a25636f6d2e626c61636b6d6167696364657369676e2e7265736f6c766566782e6265617574790a4c08de442a424f6678496d616765456666656374436f6e7465787446696c7465725f34356133306230382d653361342d343363652d613864332d6136646133303630313662645f320a0a08e30220000a910108878180800c128801aa01840108d98cbd02121a1b20012a190a1056657273696f6e12052a03342e302a1c0a0f7761746572636f6c6f72426c656e64120911e83f0a0a08d202200060cef0acdd014a0e080310501a080803104018032002520e080410401a0808041040180420025801609ce1d9ba03209ae1d9ba030a00161385533b1ed38af2b01037633f92285c2455adf445d099de9203ec01</Body>
29
+ <UseVersionClipProcParams>true</UseVersionClipProcParams>
30
+ </ListMgt::LmVersion>
31
+ </pClipFullVer>
32
+ <pTrackVer>
33
+ <ListMgt::LmVersion DbId="01d83ac1-16bd-4747-b362-44e7a768b51e">
34
+ <FieldsBlob/>
35
+ <Name/>
36
+ <HasCorrection>false</HasCorrection>
37
+ <VerType>1</VerType>
38
+ <ImplVersion>1</ImplVersion>
39
+ <IncludedInRecording>true</IncludedInRecording>
40
+ <FlatPassEnabled>false</FlatPassEnabled>
41
+ <RGBAOutputEnabled>false</RGBAOutputEnabled>
42
+ <Body>8128b52ffd208eb50300a4060a6a08ffffffff0f10011a4808800f10b8081d0000803f20800f28b808350000803f38800f40b808487a240000803f00209eff0a4a0408011040520408021040580160f8e1d9ba031a2020be0128b401380140554a00520c0a0a08818080800c120210026089f1acdd010300333d803b9374a932</Body>
43
+ <UseVersionClipProcParams>true</UseVersionClipProcParams>
44
+ </ListMgt::LmVersion>
45
+ </pTrackVer>
46
+ <PrimaryCCMode>0</PrimaryCCMode>
47
+ <Vsr>
48
+ <BtThumnail DbId="27a36dd5-049b-4620-b74c-1ffd7c064340">
49
+ <FieldsBlob>0000000100000001000000140049006d0067005100750061006c006900740079000000020000000001</FieldsBlob>
50
+ <ImgWidth>288</ImgWidth>
51
+ <ImgHeight>162</ImgHeight>
52
+ <Buffer>ffd8ffe000104a46494600010101004800480000ffdb004300080606070605080707070909080a0c140d0c0b0b0c1912130f141d1a1f1e1d1a1c1c20242e2720222c231c1c2837292c30313434341f27393d38323c2e333432ffdb0043010909090c0b0c180d0d1832211c213232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232ffc000110800a2012003012200021101031101ffc4001f0000010501010101010100000000000000000102030405060708090a0bffc400b5100002010303020403050504040000017d01020300041105122131410613516107227114328191a1082342b1c11552d1f02433627282090a161718191a25262728292a3435363738393a434445464748494a535455565758595a636465666768696a737475767778797a838485868788898a92939495969798999aa2a3a4a5a6a7a8a9aab2b3b4b5b6b7b8b9bac2c3c4c5c6c7c8c9cad2d3d4d5d6d7d8d9dae1e2e3e4e5e6e7e8e9eaf1f2f3f4f5f6f7f8f9faffc4001f0100030101010101010101010000000000000102030405060708090a0bffc400b51100020102040403040705040400010277000102031104052131061241510761711322328108144291a1b1c109233352f0156272d10a162434e125f11718191a262728292a35363738393a434445464748494a535455565758595a636465666768696a737475767778797a82838485868788898a92939495969798999aa2a3a4a5a6a7a8a9aab2b3b4b5b6b7b8b9bac2c3c4c5c6c7c8c9cad2d3d4d5d6d7d8d9dae2e3e4e5e6e7e8e9eaf2f3f4f5f6f7f8f9faffda000c03010002110311003f00f9fe8a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a00fffd9</Buffer>
53
+ </BtThumnail>
54
+ </Vsr>
55
+ <ClipThumbnails>0ac905080412c405085c102e180122bb05ffd8ffe000104a46494600010101004800480000ffdb004300080606070605080707070909080a0c140d0c0b0b0c1912130f141d1a1f1e1d1a1c1c20242e2720222c231c1c2837292c30313434341f27393d38323c2e333432ffdb0043010909090c0b0c180d0d1832211c213232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232ffc0001108002e005c03012200021101031101ffc4001f0000010501010101010100000000000000000102030405060708090a0bffc400b5100002010303020403050504040000017d01020300041105122131410613516107227114328191a1082342b1c11552d1f02433627282090a161718191a25262728292a3435363738393a434445464748494a535455565758595a636465666768696a737475767778797a838485868788898a92939495969798999aa2a3a4a5a6a7a8a9aab2b3b4b5b6b7b8b9bac2c3c4c5c6c7c8c9cad2d3d4d5d6d7d8d9dae1e2e3e4e5e6e7e8e9eaf1f2f3f4f5f6f7f8f9faffc4001f0100030101010101010101010000000000000102030405060708090a0bffc400b51100020102040403040705040400010277000102031104052131061241510761711322328108144291a1b1c109233352f0156272d10a162434e125f11718191a262728292a35363738393a434445464748494a535455565758595a636465666768696a737475767778797a82838485868788898a92939495969798999aa2a3a4a5a6a7a8a9aab2b3b4b5b6b7b8b9bac2c3c4c5c6c7c8c9cad2d3d4d5d6d7d8d9dae2e3e4e5e6e7e8e9eaf2f3f4f5f6f7f8f9faffda000c03010002110311003f00f9fe8a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a00fffd9</ClipThumbnails>
56
+ <TrackThumbnails/>
57
+ <ReelName/>
58
+ </Gallery::GyStill>
@@ -0,0 +1,58 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!--DbAppVer="21.0.0.0048" DbPrjVer="17"-->
3
+ <Gallery::GyStill DbId="d59b0f99-88e8-40ef-a425-008d92f21c67">
4
+ <FieldsBlob>00000001000000040000001c004d0065006400690061004600720061006d006500520061007400650000000c0000000010286b55e253f83d4000000000000000000000002e00470072006100700068005400680075006d0062006e00610069006c0042004100560065007200730069006f006e000000020000000001000000280043006f006e0066006f0072006d005300740061007200740053006f0075007200630065005400430000000a000000001600300030003a00300030003a00300030003a00300030000000240043006f006e0066006f0072006d0045006e00640053006f0075007200630065005400430000000a000000001600300030003a00300032003a00330032003a00300039</FieldsBlob>
5
+ <SrcHint>capture-timeline</SrcHint>
6
+ <SrcType>1</SrcType>
7
+ <GalleryPath>/Movies/.gallery</GalleryPath>
8
+ <Label>1.1</Label>
9
+ <RecTC>00:59:59:23</RecTC>
10
+ <SrcTC>00:00:00:00</SrcTC>
11
+ <DpxDescriptor>50</DpxDescriptor>
12
+ <Width>3600</Width>
13
+ <Height>2160</Height>
14
+ <BitDepth>10</BitDepth>
15
+ <PAR>1</PAR>
16
+ <Endianship>1</Endianship>
17
+ <CreateTime>2026-06-19T08:36:02.686</CreateTime>
18
+ <pClipFullVer>
19
+ <ListMgt::LmVersion DbId="fa9472f6-f42c-4d49-9b22-12916df4a336">
20
+ <FieldsBlob/>
21
+ <Name/>
22
+ <HasCorrection>false</HasCorrection>
23
+ <VerType>0</VerType>
24
+ <ImplVersion>1</ImplVersion>
25
+ <IncludedInRecording>true</IncludedInRecording>
26
+ <FlatPassEnabled>false</FlatPassEnabled>
27
+ <RGBAOutputEnabled>false</RGBAOutputEnabled>
28
+ <Body>8128b52ffd20acbd0400d4080aa301080110011a4808901c10f0101d0000803f20e002288602350000803f38901c40f01048ffffffff0f7a240000803f003a2b0801100120be0128b4013801402c4a0712050304050612520c0a0a08818080800c1202100260d8a6e8bb014a0e080110501a080801104018012001520e080210401a080802104018022001580160b0cdd0f70220aecdd0f7020200333d20078002</Body>
29
+ <UseVersionClipProcParams>true</UseVersionClipProcParams>
30
+ </ListMgt::LmVersion>
31
+ </pClipFullVer>
32
+ <pTrackVer>
33
+ <ListMgt::LmVersion DbId="fac5b162-ef37-4731-baa7-bba00b902183">
34
+ <FieldsBlob/>
35
+ <Name/>
36
+ <HasCorrection>false</HasCorrection>
37
+ <VerType>1</VerType>
38
+ <ImplVersion>1</ImplVersion>
39
+ <IncludedInRecording>true</IncludedInRecording>
40
+ <FlatPassEnabled>false</FlatPassEnabled>
41
+ <RGBAOutputEnabled>false</RGBAOutputEnabled>
42
+ <Body>8128b52ffd208eb50300a4060a6a08ffffffff0f10011a4808901c10f0101d0000803f20901c28f010350000803f38901c40f010487a240000803f002080c60a4a0408011040520408021040580160d0d1d0f7021a2020be0128b401380140554a00520c0a0a08818080800c120210026083a9e8bb010300333d803b9374a932</Body>
43
+ <UseVersionClipProcParams>true</UseVersionClipProcParams>
44
+ </ListMgt::LmVersion>
45
+ </pTrackVer>
46
+ <PrimaryCCMode>0</PrimaryCCMode>
47
+ <Vsr>
48
+ <BtThumnail DbId="1c3bb597-aab9-474d-967a-61edfc8b118a">
49
+ <FieldsBlob>0000000100000001000000140049006d0067005100750061006c006900740079000000020000000001</FieldsBlob>
50
+ <ImgWidth>288</ImgWidth>
51
+ <ImgHeight>162</ImgHeight>
52
+ <Buffer>ffd8ffe000104a46494600010101004800480000ffdb004300080606070605080707070909080a0c140d0c0b0b0c1912130f141d1a1f1e1d1a1c1c20242e2720222c231c1c2837292c30313434341f27393d38323c2e333432ffdb0043010909090c0b0c180d0d1832211c213232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232ffc000110800a2012003012200021101031101ffc4001f0000010501010101010100000000000000000102030405060708090a0bffc400b5100002010303020403050504040000017d01020300041105122131410613516107227114328191a1082342b1c11552d1f02433627282090a161718191a25262728292a3435363738393a434445464748494a535455565758595a636465666768696a737475767778797a838485868788898a92939495969798999aa2a3a4a5a6a7a8a9aab2b3b4b5b6b7b8b9bac2c3c4c5c6c7c8c9cad2d3d4d5d6d7d8d9dae1e2e3e4e5e6e7e8e9eaf1f2f3f4f5f6f7f8f9faffc4001f0100030101010101010101010000000000000102030405060708090a0bffc400b51100020102040403040705040400010277000102031104052131061241510761711322328108144291a1b1c109233352f0156272d10a162434e125f11718191a262728292a35363738393a434445464748494a535455565758595a636465666768696a737475767778797a82838485868788898a92939495969798999aa2a3a4a5a6a7a8a9aab2b3b4b5b6b7b8b9bac2c3c4c5c6c7c8c9cad2d3d4d5d6d7d8d9dae2e3e4e5e6e7e8e9eaf2f3f4f5f6f7f8f9faffda000c03010002110311003f00f9fe8a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a00fffd9</Buffer>
53
+ </BtThumnail>
54
+ </Vsr>
55
+ <ClipThumbnails>0ab406080212af06085c102e180122a606ffd8ffe000104a46494600010101004800480000ffdb004300080606070605080707070909080a0c140d0c0b0b0c1912130f141d1a1f1e1d1a1c1c20242e2720222c231c1c2837292c30313434341f27393d38323c2e333432ffdb0043010909090c0b0c180d0d1832211c213232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232ffc0001108002e005c03012200021101031101ffc4001f0000010501010101010100000000000000000102030405060708090a0bffc400b5100002010303020403050504040000017d01020300041105122131410613516107227114328191a1082342b1c11552d1f02433627282090a161718191a25262728292a3435363738393a434445464748494a535455565758595a636465666768696a737475767778797a838485868788898a92939495969798999aa2a3a4a5a6a7a8a9aab2b3b4b5b6b7b8b9bac2c3c4c5c6c7c8c9cad2d3d4d5d6d7d8d9dae1e2e3e4e5e6e7e8e9eaf1f2f3f4f5f6f7f8f9faffc4001f0100030101010101010101010000000000000102030405060708090a0bffc400b51100020102040403040705040400010277000102031104052131061241510761711322328108144291a1b1c109233352f0156272d10a162434e125f11718191a262728292a35363738393a434445464748494a535455565758595a636465666768696a737475767778797a82838485868788898a92939495969798999aa2a3a4a5a6a7a8a9aab2b3b4b5b6b7b8b9bac2c3c4c5c6c7c8c9cad2d3d4d5d6d7d8d9dae2e3e4e5e6e7e8e9eaf2f3f4f5f6f7f8f9faffda000c03010002110311003f00f9fe9f17fae4ff00785329f0ff00af8ffde1fce80350f4a65389e2986a442d1494bde80168a6fad2d3016abde7fa91fef54f505dff00a91fef50052a28a298c29f0ffae8ff00de1fce994f8bfd727fbc28034cd4669e7a530d488334a29296800a5a4a5a60254177fea87fbd53d4177fea87fbd4014e8a28a630a7c5feb93fde14ca7c5feb93fde1401a47a532a4351fb549214a293bd2f6a0614b4525300a82effd50ff007aac557bbff543fdea0453a28a29947fffd9</ClipThumbnails>
56
+ <TrackThumbnails/>
57
+ <ReelName/>
58
+ </Gallery::GyStill>
@@ -0,0 +1,58 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!--DbAppVer="21.0.0.0048" DbPrjVer="17"-->
3
+ <Gallery::GyStill DbId="7910018a-7ade-4486-9af3-86c6cbdf57d8">
4
+ <FieldsBlob>00000001000000040000001c004d0065006400690061004600720061006d006500520061007400650000000c0000000010286b55e253f83d4000000000000000000000002e00470072006100700068005400680075006d0062006e00610069006c0042004100560065007200730069006f006e000000020000000001000000280043006f006e0066006f0072006d005300740061007200740053006f0075007200630065005400430000000a000000001600300030003a00300030003a00300030003a00300030000000240043006f006e0066006f0072006d0045006e00640053006f0075007200630065005400430000000a000000001600300030003a00300032003a00330032003a00300039</FieldsBlob>
5
+ <SrcHint>capture-timeline</SrcHint>
6
+ <SrcType>1</SrcType>
7
+ <GalleryPath>/Movies/.gallery</GalleryPath>
8
+ <Label>1.1</Label>
9
+ <RecTC>00:59:59:23</RecTC>
10
+ <SrcTC>00:00:00:00</SrcTC>
11
+ <DpxDescriptor>50</DpxDescriptor>
12
+ <Width>3600</Width>
13
+ <Height>2160</Height>
14
+ <BitDepth>10</BitDepth>
15
+ <PAR>1</PAR>
16
+ <Endianship>1</Endianship>
17
+ <CreateTime>2026-06-19T08:37:19.016</CreateTime>
18
+ <pClipFullVer>
19
+ <ListMgt::LmVersion DbId="48e99534-506f-4a51-9d96-ae3e727dd291">
20
+ <FieldsBlob/>
21
+ <Name/>
22
+ <HasCorrection>true</HasCorrection>
23
+ <VerType>0</VerType>
24
+ <ImplVersion>1</ImplVersion>
25
+ <IncludedInRecording>true</IncludedInRecording>
26
+ <FlatPassEnabled>false</FlatPassEnabled>
27
+ <RGBAOutputEnabled>false</RGBAOutputEnabled>
28
+ <Body>8128b52ffd20f7fd0600340d0aee01080110011a4808901c10f0101d0000803f20e002288602350000803f38901c40f01048ffffffff0f7a240000803f003a760801100120be0128b4013801402c4a520a49080118013243124108011a0a08a08180b008120210061a3108a1292a2746696c6d556e6c696d697465645f323338335f5265633730395f46696e69736865642e6375626512050304050612520c0a0a08818080800c120210026098ad9be0014a0e080110501a080801104018012001520e080210401a080802104018022001580160b0dab6c00320b0dab6c00303007e116aa667e50050</Body>
29
+ <UseVersionClipProcParams>true</UseVersionClipProcParams>
30
+ </ListMgt::LmVersion>
31
+ </pClipFullVer>
32
+ <pTrackVer>
33
+ <ListMgt::LmVersion DbId="7a4295cf-0220-4c38-83b4-120180c964d2">
34
+ <FieldsBlob/>
35
+ <Name/>
36
+ <HasCorrection>false</HasCorrection>
37
+ <VerType>1</VerType>
38
+ <ImplVersion>1</ImplVersion>
39
+ <IncludedInRecording>true</IncludedInRecording>
40
+ <FlatPassEnabled>false</FlatPassEnabled>
41
+ <RGBAOutputEnabled>false</RGBAOutputEnabled>
42
+ <Body>8128b52ffd208eb50300a4060a6a08ffffffff0f10011a4808901c10f0101d0000803f20901c28f010350000803f38901c40f010487a240000803f002080c60a4a0408011040520408021040580160badcb6c0031a2020be0128b401380140554a00520c0a0a08818080800c1202100260a8ae9be0010300333d803b9374a932</Body>
43
+ <UseVersionClipProcParams>true</UseVersionClipProcParams>
44
+ </ListMgt::LmVersion>
45
+ </pTrackVer>
46
+ <PrimaryCCMode>0</PrimaryCCMode>
47
+ <Vsr>
48
+ <BtThumnail DbId="bc91b066-3edd-43f8-b4a6-57e42ac12c25">
49
+ <FieldsBlob>0000000100000001000000140049006d0067005100750061006c006900740079000000020000000001</FieldsBlob>
50
+ <ImgWidth>288</ImgWidth>
51
+ <ImgHeight>162</ImgHeight>
52
+ <Buffer>ffd8ffe000104a46494600010101004800480000ffdb004300080606070605080707070909080a0c140d0c0b0b0c1912130f141d1a1f1e1d1a1c1c20242e2720222c231c1c2837292c30313434341f27393d38323c2e333432ffdb0043010909090c0b0c180d0d1832211c213232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232ffc000110800a2012003012200021101031101ffc4001f0000010501010101010100000000000000000102030405060708090a0bffc400b5100002010303020403050504040000017d01020300041105122131410613516107227114328191a1082342b1c11552d1f02433627282090a161718191a25262728292a3435363738393a434445464748494a535455565758595a636465666768696a737475767778797a838485868788898a92939495969798999aa2a3a4a5a6a7a8a9aab2b3b4b5b6b7b8b9bac2c3c4c5c6c7c8c9cad2d3d4d5d6d7d8d9dae1e2e3e4e5e6e7e8e9eaf1f2f3f4f5f6f7f8f9faffc4001f0100030101010101010101010000000000000102030405060708090a0bffc400b51100020102040403040705040400010277000102031104052131061241510761711322328108144291a1b1c109233352f0156272d10a162434e125f11718191a262728292a35363738393a434445464748494a535455565758595a636465666768696a737475767778797a82838485868788898a92939495969798999aa2a3a4a5a6a7a8a9aab2b3b4b5b6b7b8b9bac2c3c4c5c6c7c8c9cad2d3d4d5d6d7d8d9dae2e3e4e5e6e7e8e9eaf2f3f4f5f6f7f8f9faffda000c03010002110311003f00f9fe8a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a0028a28a00fffd9</Buffer>
53
+ </BtThumnail>
54
+ </Vsr>
55
+ <ClipThumbnails>0af305080212ee05085c102e180122e505ffd8ffe000104a46494600010101004800480000ffdb004300080606070605080707070909080a0c140d0c0b0b0c1912130f141d1a1f1e1d1a1c1c20242e2720222c231c1c2837292c30313434341f27393d38323c2e333432ffdb0043010909090c0b0c180d0d1832211c213232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232ffc0001108002e005c03012200021101031101ffc4001f0000010501010101010100000000000000000102030405060708090a0bffc400b5100002010303020403050504040000017d01020300041105122131410613516107227114328191a1082342b1c11552d1f02433627282090a161718191a25262728292a3435363738393a434445464748494a535455565758595a636465666768696a737475767778797a838485868788898a92939495969798999aa2a3a4a5a6a7a8a9aab2b3b4b5b6b7b8b9bac2c3c4c5c6c7c8c9cad2d3d4d5d6d7d8d9dae1e2e3e4e5e6e7e8e9eaf1f2f3f4f5f6f7f8f9faffc4001f0100030101010101010101010000000000000102030405060708090a0bffc400b51100020102040403040705040400010277000102031104052131061241510761711322328108144291a1b1c109233352f0156272d10a162434e125f11718191a262728292a35363738393a434445464748494a535455565758595a636465666768696a737475767778797a82838485868788898a92939495969798999aa2a3a4a5a6a7a8a9aab2b3b4b5b6b7b8b9bac2c3c4c5c6c7c8c9cad2d3d4d5d6d7d8d9dae2e3e4e5e6e7e8e9eaf2f3f4f5f6f7f8f9faffda000c03010002110311003f00f9fe947de1f5a4a55fbc3eb4012d252d2500145145002d14945002d35feed2d35feefe3400ca28a2800a55fbc3eb494abf787d68025a4a5a4a0028a28a0028a28a0029afd29d4d7e940865145140c2947de1f5a4a51f787d68025a4a5a4a0028a28a0028a28a0414d7e94ea6bf4a0065145140cfffd9</ClipThumbnails>
56
+ <TrackThumbnails/>
57
+ <ReelName/>
58
+ </Gallery::GyStill>
@@ -0,0 +1,117 @@
1
+ /**
2
+ * P1.2 — Round-trip test for extractHSLCurves.
3
+ *
4
+ * HSL curves use raw float space (NOT 0-1023 scaled). X is hue fraction
5
+ * with wrap-around (~-0.08 to ~1.08), Y is 0.5-centered (0.5 = neutral).
6
+ * Tests assert exact-equal points within float32 precision (~1e-7).
7
+ */
8
+
9
+ const test = require('node:test');
10
+ const assert = require('node:assert/strict');
11
+
12
+ const { generateDRX } = require('../drx-generator');
13
+ const { parseDRXContent } = require('../drx-parser');
14
+ const { extractHSLCurves, _internals } = require('../extract-hsl-curves');
15
+
16
+ const TOL = 1e-5; // float32 precision is ~1e-7; allow a small buffer
17
+
18
+ function pointsClose(a, b) {
19
+ if (a.length !== b.length) return false;
20
+ for (let i = 0; i < a.length; i++) {
21
+ if (Math.abs(a[i].x - b[i].x) > TOL) return false;
22
+ if (Math.abs(a[i].y - b[i].y) > TOL) return false;
23
+ }
24
+ return true;
25
+ }
26
+
27
+ async function roundTrip(hslCurves) {
28
+ const drxXml = await generateDRX({ hslCurves }, { label: 'hsl-test' });
29
+ const parsed = await parseDRXContent(drxXml);
30
+ for (const node of parsed.nodes) {
31
+ for (const corrector of node.correctors) {
32
+ const result = extractHSLCurves(corrector.parameters);
33
+ if (result) return result;
34
+ }
35
+ }
36
+ throw new Error('roundTrip: no HSL curves found in any corrector');
37
+ }
38
+
39
+ test('extractHSLCurves: hueVsSat round-trips at raw float precision', async () => {
40
+ const input = {
41
+ hueVsSat: [
42
+ { x: 0.0, y: 0.5 },
43
+ { x: 0.3, y: 0.7 },
44
+ { x: 0.6, y: 0.4 },
45
+ { x: 1.0, y: 0.5 },
46
+ ],
47
+ };
48
+ const out = await roundTrip(input);
49
+ assert.ok(out, 'result should be non-null');
50
+ assert.ok(out.hueVsSat, 'hueVsSat should be present');
51
+ assert.ok(pointsClose(out.hueVsSat, input.hueVsSat),
52
+ `mismatch: got ${JSON.stringify(out.hueVsSat)}`);
53
+ });
54
+
55
+ test('extractHSLCurves: hueVsHue independent from other types', async () => {
56
+ const input = {
57
+ hueVsHue: [{ x: 0.2, y: 0.55 }, { x: 0.5, y: 0.5 }, { x: 0.8, y: 0.45 }],
58
+ };
59
+ const out = await roundTrip(input);
60
+ assert.ok(out.hueVsHue);
61
+ assert.ok(pointsClose(out.hueVsHue, input.hueVsHue));
62
+ assert.equal(out.hueVsSat, undefined);
63
+ assert.equal(out.hueVsLum, undefined);
64
+ });
65
+
66
+ test('extractHSLCurves: all 6 curve types in one DRX', async () => {
67
+ const input = {
68
+ hueVsHue: [{ x: 0.1, y: 0.51 }],
69
+ hueVsSat: [{ x: 0.2, y: 0.52 }],
70
+ hueVsLum: [{ x: 0.3, y: 0.53 }],
71
+ lumVsSat: [{ x: 0.4, y: 0.54 }],
72
+ satVsSat: [{ x: 0.5, y: 0.55 }],
73
+ satVsLum: [{ x: 0.6, y: 0.56 }],
74
+ };
75
+ const out = await roundTrip(input);
76
+ for (const k of Object.keys(input)) {
77
+ assert.ok(out[k], `${k} missing in result`);
78
+ assert.ok(pointsClose(out[k], input[k]),
79
+ `${k} mismatch: ${JSON.stringify(out[k])}`);
80
+ }
81
+ });
82
+
83
+ test('extractHSLCurves: wrap-around X values pass through', async () => {
84
+ // Resolve allows X values outside [0, 1] for hue continuity.
85
+ const input = {
86
+ hueVsSat: [
87
+ { x: -0.08, y: 0.5 },
88
+ { x: 0.5, y: 0.6 },
89
+ { x: 1.08, y: 0.5 },
90
+ ],
91
+ };
92
+ const out = await roundTrip(input);
93
+ assert.ok(pointsClose(out.hueVsSat, input.hueVsSat),
94
+ `wrap-around mismatch: ${JSON.stringify(out.hueVsSat)}`);
95
+ });
96
+
97
+ test('extractHSLCurves: returns null when no HSL params present', () => {
98
+ assert.equal(extractHSLCurves([
99
+ { id: 100663320, value: 0.5, name: 'lift.r' },
100
+ ]), null);
101
+ });
102
+
103
+ test('extractHSLCurves: handles malformed input gracefully', () => {
104
+ assert.equal(extractHSLCurves(null), null);
105
+ assert.equal(extractHSLCurves(undefined), null);
106
+ assert.equal(extractHSLCurves([]), null);
107
+ });
108
+
109
+ test('internals.decodeHSLSpline: empty buffer returns []', () => {
110
+ assert.deepEqual(_internals.decodeHSLSpline(Buffer.alloc(0)), []);
111
+ });
112
+
113
+ test('internals.decodeHSLSpline: non-buffer non-object returns []', () => {
114
+ assert.deepEqual(_internals.decodeHSLSpline(null), []);
115
+ assert.deepEqual(_internals.decodeHSLSpline('foo'), []);
116
+ assert.deepEqual(_internals.decodeHSLSpline(42), []);
117
+ });
@@ -0,0 +1,112 @@
1
+ /**
2
+ * P5.1 — extract-lut-refs tests against captured Resolve 21 fixtures.
3
+ *
4
+ * Two fixtures captured 2026-06-19 from a paired Resolve session
5
+ * (Session 30): same clip + same project, one DRX with no LUT on the
6
+ * node and one with a built-in LUT applied. The byte-diff between the
7
+ * two Bodies is what reverse-engineered the encoding.
8
+ *
9
+ * packages/drx/drx-codec/__tests__/fixtures/p5-1-node-no-lut.drx
10
+ * packages/drx/drx-codec/__tests__/fixtures/p5-1-node-with-lut.drx
11
+ *
12
+ * Tests parse the real fixtures through parseDRXContent and then
13
+ * extract LUT refs. No synthesis — this is wire-format ground truth.
14
+ */
15
+
16
+ const test = require('node:test');
17
+ const assert = require('node:assert/strict');
18
+ const fs = require('node:fs');
19
+ const path = require('node:path');
20
+
21
+ const { parseDRXContent } = require('../drx-parser');
22
+ const {
23
+ extractNodeLutRef,
24
+ extractDrxLutRefs,
25
+ _internals,
26
+ } = require('../extract-lut-refs');
27
+ const drxParams = require('../../drx-parameters');
28
+
29
+ const FIXTURES = path.join(__dirname, 'fixtures');
30
+ const FIXTURE_LUT_PATH = 'FilmUnlimited_2383_Rec709_Finished.cube';
31
+
32
+ async function loadAndParse(name) {
33
+ const xml = fs.readFileSync(path.join(FIXTURES, name), 'utf8');
34
+ return parseDRXContent(xml);
35
+ }
36
+
37
+ test('extractDrxLutRefs: no-LUT fixture returns empty array', async () => {
38
+ const parsed = await loadAndParse('p5-1-node-no-lut.drx');
39
+ assert.ok(Array.isArray(parsed.nodes), 'parser surfaces nodes array');
40
+ const refs = extractDrxLutRefs(parsed);
41
+ assert.deepEqual(refs, [], 'no LUT attached → empty array');
42
+ });
43
+
44
+ test('extractDrxLutRefs: with-LUT fixture surfaces the captured LUT path', async () => {
45
+ const parsed = await loadAndParse('p5-1-node-with-lut.drx');
46
+ const refs = extractDrxLutRefs(parsed);
47
+ assert.equal(refs.length, 1, 'one node has a LUT attached');
48
+ const ref = refs[0];
49
+ assert.equal(
50
+ ref.lutPath,
51
+ FIXTURE_LUT_PATH,
52
+ `LUT path round-trips: ${ref.lutPath}`,
53
+ );
54
+ assert.equal(ref.slotMeta, 6, 'slot metadata round-trips to captured value');
55
+ assert.equal(ref.source, 'drx_node');
56
+ });
57
+
58
+ test('extractNodeLutRef: returns null for nodes with no LUT', async () => {
59
+ const parsed = await loadAndParse('p5-1-node-no-lut.drx');
60
+ for (const node of parsed.nodes) {
61
+ assert.equal(extractNodeLutRef(node), null);
62
+ }
63
+ });
64
+
65
+ test('extractNodeLutRef: returns {lutPath, slotMeta} for the LUT-attached node', async () => {
66
+ const parsed = await loadAndParse('p5-1-node-with-lut.drx');
67
+ let found = null;
68
+ for (const node of parsed.nodes) {
69
+ const ref = extractNodeLutRef(node);
70
+ if (ref) { found = ref; break; }
71
+ }
72
+ assert.ok(found, 'at least one node should carry a LUT');
73
+ assert.equal(found.lutPath, FIXTURE_LUT_PATH);
74
+ assert.equal(found.slotMeta, 6);
75
+ });
76
+
77
+ test('extractDrxLutRefs: malformed input returns empty array (defensive)', () => {
78
+ assert.deepEqual(extractDrxLutRefs(null), []);
79
+ assert.deepEqual(extractDrxLutRefs(undefined), []);
80
+ assert.deepEqual(extractDrxLutRefs({}), []);
81
+ assert.deepEqual(extractDrxLutRefs({ nodes: null }), []);
82
+ });
83
+
84
+ test('extractNodeLutRef: malformed input returns null (defensive)', () => {
85
+ assert.equal(extractNodeLutRef(null), null);
86
+ assert.equal(extractNodeLutRef(undefined), null);
87
+ assert.equal(extractNodeLutRef({}), null);
88
+ assert.equal(extractNodeLutRef({ correctors: null }), null);
89
+ assert.equal(extractNodeLutRef({ correctors: [{ parameters: null }] }), null);
90
+ });
91
+
92
+ test('internals.envelopeToString: drops into F5 of value envelope', () => {
93
+ assert.equal(_internals.envelopeToString(null), null);
94
+ assert.equal(_internals.envelopeToString(undefined), null);
95
+ assert.equal(_internals.envelopeToString('direct.cube'), 'direct.cube');
96
+ assert.equal(_internals.envelopeToString({ F5: 'wrapped.cube' }), 'wrapped.cube');
97
+ assert.equal(_internals.envelopeToString({ F1: 0.5 }), null, 'F1 floats are not strings');
98
+ });
99
+
100
+ test('internals.envelopeToNumber: coerces F2 ints and BigInts', () => {
101
+ assert.equal(_internals.envelopeToNumber(null), null);
102
+ assert.equal(_internals.envelopeToNumber(42), 42);
103
+ assert.equal(_internals.envelopeToNumber(42n), 42);
104
+ assert.equal(_internals.envelopeToNumber({ F2: 6 }), 6);
105
+ assert.equal(_internals.envelopeToNumber({ F2: 6n }), 6);
106
+ assert.equal(_internals.envelopeToNumber({ F1: 0.5 }), 0.5);
107
+ });
108
+
109
+ test('registry: NODE_LUT_REF.LUT_PATH and SLOT_META IDs are exposed', () => {
110
+ assert.equal(drxParams.NODE_LUT_REF.LUT_PATH, 2248147105);
111
+ assert.equal(drxParams.NODE_LUT_REF.SLOT_META, 2248147104);
112
+ });