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.
- package/AGENTS.md +20 -0
- package/CHANGELOG.md +197 -2
- package/LICENSE +1 -1
- package/README.md +73 -1
- package/bin/davinci-resolve-advanced-mcp.mjs +20 -0
- package/docs/README.md +19 -0
- package/docs/SKILL.md +62 -1
- package/docs/contributing.md +1 -1
- package/docs/guides/control-panel.md +9 -0
- package/docs/kernels/README.md +21 -0
- package/docs/kernels/audio-fairlight-kernel.md +22 -0
- package/docs/kernels/color-grade-kernel.md +51 -0
- package/docs/kernels/fusion-composition-kernel.md +17 -0
- package/docs/kernels/media-pool-ingest-kernel.md +20 -0
- package/docs/kernels/render-deliver-kernel.md +32 -0
- package/docs/kernels/timeline-conform-interchange-kernel.md +39 -0
- package/docs/kernels/timeline-edit-kernel.md +17 -0
- package/docs/process/release-process.md +29 -7
- package/docs/reference/api-coverage.md +1 -1
- package/docs/reference/api-limitations.md +38 -1
- package/install.py +27 -4
- package/package.json +23 -2
- package/resolve-advanced/README.md +194 -0
- package/resolve-advanced/package.json +50 -0
- package/resolve-advanced/server/black-balance.mjs +92 -0
- package/resolve-advanced/server/capabilities.mjs +86 -0
- package/resolve-advanced/server/cdl-io.mjs +76 -0
- package/resolve-advanced/server/contrast-normalize.mjs +180 -0
- package/resolve-advanced/server/db-patch.mjs +91 -0
- package/resolve-advanced/server/deliverable-entities.mjs +86 -0
- package/resolve-advanced/server/deliverable-qc.mjs +270 -0
- package/resolve-advanced/server/editorial.mjs +370 -0
- package/resolve-advanced/server/exposure-level.mjs +129 -0
- package/resolve-advanced/server/extract-frames.mjs +196 -0
- package/resolve-advanced/server/ffprobe-media.mjs +88 -0
- package/resolve-advanced/server/gamut-legal.mjs +112 -0
- package/resolve-advanced/server/grade-body-patch.mjs +246 -0
- package/resolve-advanced/server/grade-transfer.mjs +66 -0
- package/resolve-advanced/server/group-grade-read.mjs +137 -0
- package/resolve-advanced/server/index.mjs +105 -0
- package/resolve-advanced/server/lib.mjs +84 -0
- package/resolve-advanced/server/libs.mjs +65 -0
- package/resolve-advanced/server/lineage-db.mjs +479 -0
- package/resolve-advanced/server/lut-apply.mjs +61 -0
- package/resolve-advanced/server/match-to-reference.mjs +173 -0
- package/resolve-advanced/server/media-inventory.mjs +169 -0
- package/resolve-advanced/server/media-ops.mjs +243 -0
- package/resolve-advanced/server/node-meta-db.mjs +62 -0
- package/resolve-advanced/server/node-provenance.mjs +102 -0
- package/resolve-advanced/server/offline-ref-db.mjs +420 -0
- package/resolve-advanced/server/offline-ref.mjs +179 -0
- package/resolve-advanced/server/project-db.mjs +233 -0
- package/resolve-advanced/server/provenance-audit.mjs +210 -0
- package/resolve-advanced/server/qc-frame.mjs +224 -0
- package/resolve-advanced/server/qc-sampler.mjs +67 -0
- package/resolve-advanced/server/readback.mjs +77 -0
- package/resolve-advanced/server/render-manifest.mjs +93 -0
- package/resolve-advanced/server/reverse-clip-db.mjs +270 -0
- package/resolve-advanced/server/runner-apply-contract.mjs +64 -0
- package/resolve-advanced/server/runner.mjs +244 -0
- package/resolve-advanced/server/saturation-match.mjs +108 -0
- package/resolve-advanced/server/scope-read.mjs +257 -0
- package/resolve-advanced/server/season-look.mjs +96 -0
- package/resolve-advanced/server/shot-intent.mjs +82 -0
- package/resolve-advanced/server/shot-match.mjs +147 -0
- package/resolve-advanced/server/skin-match.mjs +205 -0
- package/resolve-advanced/server/spec-compile.mjs +217 -0
- package/resolve-advanced/server/tone-curve-transfer.mjs +184 -0
- package/resolve-advanced/server/tool-catalog.mjs +265 -0
- package/resolve-advanced/server/tools/audio.mjs +54 -0
- package/resolve-advanced/server/tools/audio_plan.mjs +58 -0
- package/resolve-advanced/server/tools/capabilities.mjs +16 -0
- package/resolve-advanced/server/tools/color_trace.mjs +165 -0
- package/resolve-advanced/server/tools/conform.mjs +291 -0
- package/resolve-advanced/server/tools/deliverable.mjs +105 -0
- package/resolve-advanced/server/tools/drp.mjs +232 -0
- package/resolve-advanced/server/tools/drt.mjs +200 -0
- package/resolve-advanced/server/tools/drx.mjs +943 -0
- package/resolve-advanced/server/tools/editorial.mjs +69 -0
- package/resolve-advanced/server/tools/fairlight.mjs +108 -0
- package/resolve-advanced/server/tools/fusion.mjs +64 -0
- package/resolve-advanced/server/tools/media.mjs +102 -0
- package/resolve-advanced/server/tools/offline_ref.mjs +123 -0
- package/resolve-advanced/server/tools/pipeline.mjs +137 -0
- package/resolve-advanced/server/tools/project_db.mjs +200 -0
- package/resolve-advanced/server/tools/project_read.mjs +212 -0
- package/resolve-advanced/server/tools/provenance.mjs +73 -0
- package/resolve-advanced/server/verify-grade.mjs +113 -0
- package/resolve-advanced/server/white-balance-match.mjs +122 -0
- package/resolve-advanced/vendor/audio/format-converter.js +330 -0
- package/resolve-advanced/vendor/audio/split.js +173 -0
- package/resolve-advanced/vendor/audio/trim.js +188 -0
- package/resolve-advanced/vendor/audio-fairlight/index.js +391 -0
- package/resolve-advanced/vendor/conform-qc/adapters/frame-sampler.js +56 -0
- package/resolve-advanced/vendor/conform-qc/adapters/local-ffmpeg-sampler.js +65 -0
- package/resolve-advanced/vendor/conform-qc/adapters/rendernode-ffmpeg-sampler.js +50 -0
- package/resolve-advanced/vendor/conform-qc/adapters/resolve/driver.py +176 -0
- package/resolve-advanced/vendor/conform-qc/adapters/resolve-driver.js +61 -0
- package/resolve-advanced/vendor/conform-qc/adapters/resolve-headless-driver.js +86 -0
- package/resolve-advanced/vendor/conform-qc/adapters/vision-validator.js +75 -0
- package/resolve-advanced/vendor/conform-qc/cli.js +63 -0
- package/resolve-advanced/vendor/conform-qc/compare/advisory.js +106 -0
- package/resolve-advanced/vendor/conform-qc/compare/decode.js +36 -0
- package/resolve-advanced/vendor/conform-qc/compare/index.js +61 -0
- package/resolve-advanced/vendor/conform-qc/compare/locate.js +70 -0
- package/resolve-advanced/vendor/conform-qc/compare/metrics.js +409 -0
- package/resolve-advanced/vendor/conform-qc/docs/runbook.md +72 -0
- package/resolve-advanced/vendor/conform-qc/index.js +49 -0
- package/resolve-advanced/vendor/conform-qc/knowledge/index.js +110 -0
- package/resolve-advanced/vendor/conform-qc/ops/conform-core.js +137 -0
- package/resolve-advanced/vendor/conform-qc/ops/conform-diff.js +109 -0
- package/resolve-advanced/vendor/conform-qc/ops/insert.js +108 -0
- package/resolve-advanced/vendor/conform-qc/ops/local-conform.js +61 -0
- package/resolve-advanced/vendor/conform-qc/ops/patch.js +80 -0
- package/resolve-advanced/vendor/conform-qc/ops/trigger.js +32 -0
- package/resolve-advanced/vendor/conform-qc/ops/verify.js +105 -0
- package/resolve-advanced/vendor/conform-qc/ops/workflow.js +30 -0
- package/resolve-advanced/vendor/conform-qc/oracle/emulate.js +155 -0
- package/resolve-advanced/vendor/conform-qc/oracle/index.js +38 -0
- package/resolve-advanced/vendor/conform-qc/oracle/resolve.js +196 -0
- package/resolve-advanced/vendor/conform-qc/package.json +16 -0
- package/resolve-advanced/vendor/conform-qc/packaging/emit-aaf.js +30 -0
- package/resolve-advanced/vendor/conform-qc/packaging/emit-fcp7.js +64 -0
- package/resolve-advanced/vendor/conform-qc/packaging/index.js +169 -0
- package/resolve-advanced/vendor/conform-qc/packaging/media-ops.js +56 -0
- package/resolve-advanced/vendor/conform-qc/packaging/otio.js +50 -0
- package/resolve-advanced/vendor/conform-qc/packaging/relink.js +50 -0
- package/resolve-advanced/vendor/conform-qc/packaging/surgical-relink.js +195 -0
- package/resolve-advanced/vendor/conform-qc/parse/index.js +54 -0
- package/resolve-advanced/vendor/conform-qc/parse/merge-dto.js +27 -0
- package/resolve-advanced/vendor/conform-qc/parse/xmeml-geometry.js +256 -0
- package/resolve-advanced/vendor/conform-qc/reference/burnin-ocr.js +100 -0
- package/resolve-advanced/vendor/conform-qc/reference/sidecar.js +37 -0
- package/resolve-advanced/vendor/conform-qc/repair/analysis.js +62 -0
- package/resolve-advanced/vendor/conform-qc/repair/index.js +78 -0
- package/resolve-advanced/vendor/conform-qc/repair/media-analysis.js +139 -0
- package/resolve-advanced/vendor/conform-qc/repair/media-index.js +135 -0
- package/resolve-advanced/vendor/conform-qc/repair/strategies.js +250 -0
- package/resolve-advanced/vendor/conform-qc/report/index.js +133 -0
- package/resolve-advanced/vendor/conform-qc/roles/index.js +96 -0
- package/resolve-advanced/vendor/conform-qc/synthetic/generate.js +233 -0
- package/resolve-advanced/vendor/conform-qc/test/advisory.test.js +85 -0
- package/resolve-advanced/vendor/conform-qc/test/cli.test.js +39 -0
- package/resolve-advanced/vendor/conform-qc/test/compare.test.js +152 -0
- package/resolve-advanced/vendor/conform-qc/test/conform-diff.test.js +70 -0
- package/resolve-advanced/vendor/conform-qc/test/emulate.test.js +51 -0
- package/resolve-advanced/vendor/conform-qc/test/frame-sampler.test.js +30 -0
- package/resolve-advanced/vendor/conform-qc/test/geometry.test.js +112 -0
- package/resolve-advanced/vendor/conform-qc/test/knowledge.test.js +56 -0
- package/resolve-advanced/vendor/conform-qc/test/lifecycle.test.js +110 -0
- package/resolve-advanced/vendor/conform-qc/test/local-ffmpeg-sampler.test.js +66 -0
- package/resolve-advanced/vendor/conform-qc/test/locate.test.js +63 -0
- package/resolve-advanced/vendor/conform-qc/test/media-analysis.test.js +63 -0
- package/resolve-advanced/vendor/conform-qc/test/media-index-normalized.test.js +65 -0
- package/resolve-advanced/vendor/conform-qc/test/media-index-origin.test.js +53 -0
- package/resolve-advanced/vendor/conform-qc/test/metrics-fast.test.js +91 -0
- package/resolve-advanced/vendor/conform-qc/test/oracle-reverse.test.js +86 -0
- package/resolve-advanced/vendor/conform-qc/test/oracle.test.js +136 -0
- package/resolve-advanced/vendor/conform-qc/test/p0-acceptance.test.js +60 -0
- package/resolve-advanced/vendor/conform-qc/test/p1-acceptance.test.js +75 -0
- package/resolve-advanced/vendor/conform-qc/test/p45-patch-acceptance.test.js +102 -0
- package/resolve-advanced/vendor/conform-qc/test/packaging.test.js +133 -0
- package/resolve-advanced/vendor/conform-qc/test/parse-stubs.test.js +28 -0
- package/resolve-advanced/vendor/conform-qc/test/repair-strategies.test.js +128 -0
- package/resolve-advanced/vendor/conform-qc/test/repair.test.js +84 -0
- package/resolve-advanced/vendor/conform-qc/test/report.test.js +52 -0
- package/resolve-advanced/vendor/conform-qc/test/resolve-readback.test.js +71 -0
- package/resolve-advanced/vendor/conform-qc/test/roles.test.js +107 -0
- package/resolve-advanced/vendor/conform-qc/test/runbook.test.js +30 -0
- package/resolve-advanced/vendor/conform-qc/test/scale-residual.test.js +40 -0
- package/resolve-advanced/vendor/conform-qc/test/sidecar.test.js +51 -0
- package/resolve-advanced/vendor/conform-qc/test/smoke.test.js +87 -0
- package/resolve-advanced/vendor/conform-qc/test/surgical-relink.test.js +73 -0
- package/resolve-advanced/vendor/conform-qc/test/synthetic.test.js +98 -0
- package/resolve-advanced/vendor/conform-qc/test/verify.test.js +93 -0
- package/resolve-advanced/vendor/conform-qc/test/vision-validator.test.js +43 -0
- package/resolve-advanced/vendor/conform-qc/test/workflow-driver.test.js +46 -0
- package/resolve-advanced/vendor/conform-qc/toolset/index.js +53 -0
- package/resolve-advanced/vendor/drp-format/README.md +116 -0
- package/resolve-advanced/vendor/drp-format/__tests__/_resolve-verify.js +39 -0
- package/resolve-advanced/vendor/drp-format/__tests__/add-media-clip.test.js +30 -0
- package/resolve-advanced/vendor/drp-format/__tests__/assemble-timeline.test.js +68 -0
- package/resolve-advanced/vendor/drp-format/__tests__/author-project.test.js +57 -0
- package/resolve-advanced/vendor/drp-format/__tests__/composition-text.test.js +98 -0
- package/resolve-advanced/vendor/drp-format/__tests__/diff.test.js +272 -0
- package/resolve-advanced/vendor/drp-format/__tests__/effect-filters-compressed.test.js +143 -0
- package/resolve-advanced/vendor/drp-format/__tests__/fixtures/p0-3-session30-empty-effectfilters.drp +0 -0
- package/resolve-advanced/vendor/drp-format/__tests__/fixtures/retimed-timemap-50pct.hex +1 -0
- package/resolve-advanced/vendor/drp-format/__tests__/fixtures/retimed-timemap-dynamic.hex +1 -0
- package/resolve-advanced/vendor/drp-format/__tests__/inject-grades.test.js +238 -0
- package/resolve-advanced/vendor/drp-format/__tests__/keyed-dict.test.js +85 -0
- package/resolve-advanced/vendor/drp-format/__tests__/lut-refs.test.js +119 -0
- package/resolve-advanced/vendor/drp-format/__tests__/media-blobs.test.js +25 -0
- package/resolve-advanced/vendor/drp-format/__tests__/media-timemap.test.js +119 -0
- package/resolve-advanced/vendor/drp-format/__tests__/place-fusion-title.test.js +52 -0
- package/resolve-advanced/vendor/drp-format/__tests__/place-generator.test.js +40 -0
- package/resolve-advanced/vendor/drp-format/__tests__/place-transition.test.js +48 -0
- package/resolve-advanced/vendor/drp-format/__tests__/protobuf-wire.test.js +64 -0
- package/resolve-advanced/vendor/drp-format/__tests__/relink-media.test.js +106 -0
- package/resolve-advanced/vendor/drp-format/__tests__/splice-clips.test.js +256 -0
- package/resolve-advanced/vendor/drp-format/assemble-timeline.js +65 -0
- package/resolve-advanced/vendor/drp-format/author-project.js +118 -0
- package/resolve-advanced/vendor/drp-format/composition-text.js +213 -0
- package/resolve-advanced/vendor/drp-format/curves-encoder.js +763 -0
- package/resolve-advanced/vendor/drp-format/diff.js +310 -0
- package/resolve-advanced/vendor/drp-format/drp-packager.js +201 -0
- package/resolve-advanced/vendor/drp-format/drp-validator.js +809 -0
- package/resolve-advanced/vendor/drp-format/effect-encoder.js +640 -0
- package/resolve-advanced/vendor/drp-format/extract-lut-refs.js +119 -0
- package/resolve-advanced/vendor/drp-format/grade-encoder.example.js +133 -0
- package/resolve-advanced/vendor/drp-format/grade-encoder.js +401 -0
- package/resolve-advanced/vendor/drp-format/grade-encoder.test.js +171 -0
- package/resolve-advanced/vendor/drp-format/grade-encoder.verify.js +249 -0
- package/resolve-advanced/vendor/drp-format/grade-node-extractor.js +495 -0
- package/resolve-advanced/vendor/drp-format/grade-parameter-decoder.js +774 -0
- package/resolve-advanced/vendor/drp-format/index.js +174 -0
- package/resolve-advanced/vendor/drp-format/inject-grades.js +219 -0
- package/resolve-advanced/vendor/drp-format/keyed-dict.js +227 -0
- package/resolve-advanced/vendor/drp-format/marker-encoder.js +532 -0
- package/resolve-advanced/vendor/drp-format/media-blobs.js +53 -0
- package/resolve-advanced/vendor/drp-format/media-timemap.js +164 -0
- package/resolve-advanced/vendor/drp-format/mp-folder-builder.js +293 -0
- package/resolve-advanced/vendor/drp-format/node-tree-encoder.js +1246 -0
- package/resolve-advanced/vendor/drp-format/package.json +18 -0
- package/resolve-advanced/vendor/drp-format/place-fusion-title.js +131 -0
- package/resolve-advanced/vendor/drp-format/place-generator.js +77 -0
- package/resolve-advanced/vendor/drp-format/place-transition.js +91 -0
- package/resolve-advanced/vendor/drp-format/power-window-encoder.js +776 -0
- package/resolve-advanced/vendor/drp-format/protobuf-wire.js +111 -0
- package/resolve-advanced/vendor/drp-format/qualifier-encoder.js +706 -0
- package/resolve-advanced/vendor/drp-format/relink-media.js +218 -0
- package/resolve-advanced/vendor/drp-format/rich-title-encoder.js +447 -0
- package/resolve-advanced/vendor/drp-format/seq-container-builder.js +572 -0
- package/resolve-advanced/vendor/drp-format/seq-surgery.js +155 -0
- package/resolve-advanced/vendor/drp-format/splice-clips.js +445 -0
- package/resolve-advanced/vendor/drp-format/templates/empty-project.drp +0 -0
- package/resolve-advanced/vendor/drp-format/templates/fusion-title.xml +56 -0
- package/resolve-advanced/vendor/drp-format/templates/generator-solid-color.xml +21 -0
- package/resolve-advanced/vendor/drp-format/templates/media-clip-h264.drp +0 -0
- package/resolve-advanced/vendor/drp-format/templates/transition-cross-dissolve.xml +22 -0
- package/resolve-advanced/vendor/drp-format/tool-registry.descriptor.js +80 -0
- package/resolve-advanced/vendor/drp-format/utils/safe-archive.js +54 -0
- package/resolve-advanced/vendor/drp-format/xml-builder.js +759 -0
- package/resolve-advanced/vendor/drt-format/__tests__/_resolve-verify.js +21 -0
- package/resolve-advanced/vendor/drt-format/__tests__/build.test.js +113 -0
- package/resolve-advanced/vendor/drt-format/__tests__/multi-format.test.js +93 -0
- package/resolve-advanced/vendor/drt-format/__tests__/parse-real-resolve21.test.js +51 -0
- package/resolve-advanced/vendor/drt-format/__tests__/parse.test.js +134 -0
- package/resolve-advanced/vendor/drt-format/__tests__/resolve-versions.test.js +120 -0
- package/resolve-advanced/vendor/drt-format/__tests__/schema-fingerprint.test.js +62 -0
- package/resolve-advanced/vendor/drt-format/__tests__/smoke.test.js +27 -0
- package/resolve-advanced/vendor/drt-format/__tests__/validate.test.js +109 -0
- package/resolve-advanced/vendor/drt-format/capabilities.js +69 -0
- package/resolve-advanced/vendor/drt-format/capability-domains.js +56 -0
- package/resolve-advanced/vendor/drt-format/drt-builder.js +42 -0
- package/resolve-advanced/vendor/drt-format/drt-parser.js +164 -0
- package/resolve-advanced/vendor/drt-format/drt-validator.js +98 -0
- package/resolve-advanced/vendor/drt-format/index.js +45 -0
- package/resolve-advanced/vendor/drt-format/package.json +17 -0
- package/resolve-advanced/vendor/drt-format/resolve-versions.js +153 -0
- package/resolve-advanced/vendor/drt-format/schema-fingerprint.js +74 -0
- package/resolve-advanced/vendor/drt-format/templates/drt-project-shell.xml +124 -0
- package/resolve-advanced/vendor/drx-codec/__tests__/curves-roundtrip.test.js +148 -0
- package/resolve-advanced/vendor/drx-codec/__tests__/fixtures/p2-1-face-refinement.drx +58 -0
- package/resolve-advanced/vendor/drx-codec/__tests__/fixtures/p2-1-filmgrain.drx +58 -0
- package/resolve-advanced/vendor/drx-codec/__tests__/fixtures/p2-1-glow.drx +58 -0
- package/resolve-advanced/vendor/drx-codec/__tests__/fixtures/p2-1-lens-flare.drx +58 -0
- package/resolve-advanced/vendor/drx-codec/__tests__/fixtures/p2-3-beauty-25.drx +58 -0
- package/resolve-advanced/vendor/drx-codec/__tests__/fixtures/p2-3-beauty-75.drx +58 -0
- package/resolve-advanced/vendor/drx-codec/__tests__/fixtures/p5-1-node-no-lut.drx +58 -0
- package/resolve-advanced/vendor/drx-codec/__tests__/fixtures/p5-1-node-with-lut.drx +58 -0
- package/resolve-advanced/vendor/drx-codec/__tests__/hsl-curves-roundtrip.test.js +117 -0
- package/resolve-advanced/vendor/drx-codec/__tests__/lut-refs-roundtrip.test.js +112 -0
- package/resolve-advanced/vendor/drx-codec/__tests__/matte-roundtrip.test.js +167 -0
- package/resolve-advanced/vendor/drx-codec/__tests__/ofx-roundtrip.test.js +215 -0
- package/resolve-advanced/vendor/drx-codec/__tests__/ofx-slugs-discovery.test.js +149 -0
- package/resolve-advanced/vendor/drx-codec/__tests__/power-window-roundtrip.test.js +230 -0
- package/resolve-advanced/vendor/drx-codec/__tests__/qualifier-roundtrip.test.js +226 -0
- package/resolve-advanced/vendor/drx-codec/cdl-exporter.js +470 -0
- package/resolve-advanced/vendor/drx-codec/color-nlp-parser.js +833 -0
- package/resolve-advanced/vendor/drx-codec/data/color-nlp-action-mappings.json +2232 -0
- package/resolve-advanced/vendor/drx-codec/drx-generator.js +4123 -0
- package/resolve-advanced/vendor/drx-codec/drx-merger.js +320 -0
- package/resolve-advanced/vendor/drx-codec/drx-parser.js +1808 -0
- package/resolve-advanced/vendor/drx-codec/extract-custom-curves.js +215 -0
- package/resolve-advanced/vendor/drx-codec/extract-hsl-curves.js +180 -0
- package/resolve-advanced/vendor/drx-codec/extract-lut-refs.js +158 -0
- package/resolve-advanced/vendor/drx-codec/extract-matte-finesse.js +83 -0
- package/resolve-advanced/vendor/drx-codec/extract-ofx-params.js +226 -0
- package/resolve-advanced/vendor/drx-codec/extract-power-window.js +184 -0
- package/resolve-advanced/vendor/drx-codec/extract-qualifier.js +99 -0
- package/resolve-advanced/vendor/drx-codec/index.js +109 -0
- package/resolve-advanced/vendor/drx-codec/node-layout.js +249 -0
- package/resolve-advanced/vendor/drx-codec/resolved-drx-generator.js +393 -0
- package/resolve-advanced/vendor/drx-codec/tool-resolver.js +974 -0
- package/resolve-advanced/vendor/drx-codec/training-examples.js +548 -0
- package/resolve-advanced/vendor/drx-codec/vocabulary-intents.js +539 -0
- package/resolve-advanced/vendor/drx-parameters/CALIBRATION-STATUS.md +319 -0
- package/resolve-advanced/vendor/drx-parameters/DRX-VALUE-SCALING.md +251 -0
- package/resolve-advanced/vendor/drx-parameters/calibrated-ranges.json +17737 -0
- package/resolve-advanced/vendor/drx-parameters/corrector-types.js +120 -0
- package/resolve-advanced/vendor/drx-parameters/index.js +193 -0
- package/resolve-advanced/vendor/drx-parameters/parameter-codec.js +451 -0
- package/resolve-advanced/vendor/drx-parameters/parameter-ids.js +1292 -0
- package/resolve-advanced/vendor/drx-parameters/parameter-ranges.js +570 -0
- package/resolve-advanced/vendor/drx-parameters/parameter-validator.js +392 -0
- package/resolve-advanced/vendor/drx-parameters/resolvefx-registry.json +14973 -0
- package/resolve-advanced/vendor/drx-parameters/tool-registry.descriptor.js +38 -0
- package/resolve-advanced/vendor/drx-parameters/tools/drx-analyzer.js +371 -0
- package/resolve-advanced/vendor/fairlight/index.js +833 -0
- package/resolve-advanced/vendor/fusion-codec/composition-generator.js +401 -0
- package/resolve-advanced/vendor/fusion-codec/templates/blur-region.js +103 -0
- package/resolve-advanced/vendor/fusion-codec/templates/color-correct.js +87 -0
- package/resolve-advanced/vendor/fusion-codec/templates/film-grain.js +106 -0
- package/resolve-advanced/vendor/fusion-codec/templates/lower-third.js +241 -0
- package/resolve-advanced/vendor/fusion-codec/templates/picture-in-picture.js +188 -0
- package/resolve-advanced/vendor/fusion-codec/templates/text-overlay.js +161 -0
- package/resolve-advanced/vendor/fusion-codec/templates/title-card.js +184 -0
- package/resolve-advanced/vendor/fusion-codec/templates/vignette.js +107 -0
- package/resolve-advanced/vendor/fusion-codec/templates/watermark.js +101 -0
- package/scripts/agent-rules/README.md +68 -0
- package/src/analysis_dashboard.py +233 -1
- package/src/granular/common.py +1 -1
- package/src/server.py +479 -29
- package/src/utils/api_truth.py +117 -0
- package/src/utils/cut_ir.py +1 -1
- package/src/utils/failure_tracker.py +0 -2
- package/src/utils/timeline_xml.py +405 -0
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for DaVinci Resolve Grade Body Encoder
|
|
3
|
+
*
|
|
4
|
+
* Verifies encoding against real examples extracted from DaVinci Resolve projects.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
const {
|
|
8
|
+
encodeGradeBody,
|
|
9
|
+
encodeVarint,
|
|
10
|
+
encodeFloat,
|
|
11
|
+
encodeDouble,
|
|
12
|
+
encodeNeutralGrade,
|
|
13
|
+
decodeVarint,
|
|
14
|
+
decodeFloat
|
|
15
|
+
} = require('./grade-encoder');
|
|
16
|
+
|
|
17
|
+
// Color codes for terminal output
|
|
18
|
+
const GREEN = '\x1b[32m';
|
|
19
|
+
const RED = '\x1b[31m';
|
|
20
|
+
const RESET = '\x1b[0m';
|
|
21
|
+
const YELLOW = '\x1b[33m';
|
|
22
|
+
|
|
23
|
+
function assert(condition, message) {
|
|
24
|
+
if (!condition) {
|
|
25
|
+
console.log(`${RED}✗ FAIL${RESET}: ${message}`);
|
|
26
|
+
throw new Error(`Assertion failed: ${message}`);
|
|
27
|
+
}
|
|
28
|
+
console.log(`${GREEN}✓ PASS${RESET}: ${message}`);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function assertEqual(actual, expected, message) {
|
|
32
|
+
if (actual !== expected) {
|
|
33
|
+
console.log(`${RED}✗ FAIL${RESET}: ${message}`);
|
|
34
|
+
console.log(` Expected: ${expected}`);
|
|
35
|
+
console.log(` Actual: ${actual}`);
|
|
36
|
+
throw new Error(`Assertion failed: ${message}`);
|
|
37
|
+
}
|
|
38
|
+
console.log(`${GREEN}✓ PASS${RESET}: ${message}`);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
console.log('\n=== Grade Body Encoder Tests ===\n');
|
|
42
|
+
|
|
43
|
+
// Test 1: Varint Encoding
|
|
44
|
+
console.log('Test Group: Varint Encoding');
|
|
45
|
+
assertEqual(encodeVarint(1).toString('hex'), '01', 'Varint: 1');
|
|
46
|
+
assertEqual(encodeVarint(127).toString('hex'), '7f', 'Varint: 127');
|
|
47
|
+
assertEqual(encodeVarint(128).toString('hex'), '8001', 'Varint: 128');
|
|
48
|
+
assertEqual(encodeVarint(1920).toString('hex'), '800f', 'Varint: 1920 (width)');
|
|
49
|
+
assertEqual(encodeVarint(1080).toString('hex'), 'b808', 'Varint: 1080 (height)');
|
|
50
|
+
assertEqual(encodeVarint(45).toString('hex'), '2d', 'Varint: 45 (typical length)');
|
|
51
|
+
console.log('');
|
|
52
|
+
|
|
53
|
+
// Test 2: Float Encoding
|
|
54
|
+
console.log('Test Group: Float Encoding');
|
|
55
|
+
assertEqual(encodeFloat(1.0), '0000803f', 'Float: 1.0 (neutral)');
|
|
56
|
+
assertEqual(encodeFloat(0.9), '6666663f', 'Float: 0.9 (-10% adjustment)');
|
|
57
|
+
// Verify decoding works
|
|
58
|
+
assert(Math.abs(decodeFloat('0000803f') - 1.0) < 0.0001, 'Float decode: 1.0');
|
|
59
|
+
assert(Math.abs(decodeFloat('6666663f') - 0.9) < 0.0001, 'Float decode: 0.9');
|
|
60
|
+
console.log('');
|
|
61
|
+
|
|
62
|
+
// Test 3: Double Encoding
|
|
63
|
+
console.log('Test Group: Double Encoding');
|
|
64
|
+
const doubleResult = encodeDouble(1.0);
|
|
65
|
+
assertEqual(doubleResult.length, 16, 'Double: correct length (16 hex chars = 8 bytes)');
|
|
66
|
+
assertEqual(doubleResult, '000000000000f03f', 'Double: 1.0');
|
|
67
|
+
console.log('');
|
|
68
|
+
|
|
69
|
+
// Test 4: Varint Decoding (for verification)
|
|
70
|
+
console.log('Test Group: Varint Decoding');
|
|
71
|
+
const decoded1920 = decodeVarint('800f', 0);
|
|
72
|
+
assertEqual(decoded1920.value, 1920, 'Decode varint: 1920');
|
|
73
|
+
assertEqual(decoded1920.bytesRead, 2, 'Decode varint: 1920 bytes read');
|
|
74
|
+
|
|
75
|
+
const decoded1080 = decodeVarint('b808', 0);
|
|
76
|
+
assertEqual(decoded1080.value, 1080, 'Decode varint: 1080');
|
|
77
|
+
assertEqual(decoded1080.bytesRead, 2, 'Decode varint: 1080 bytes read');
|
|
78
|
+
console.log('');
|
|
79
|
+
|
|
80
|
+
// Test 5: Neutral Grade Body Structure
|
|
81
|
+
console.log('Test Group: Neutral Grade Body Structure');
|
|
82
|
+
|
|
83
|
+
// Real example from DaVinci Resolve project:
|
|
84
|
+
// 800a2d10011a2208800f10b8081d0000803f20800f28b808350000803f38800f40b80848ffffffff0f6086d0ccb0db321001208aceccb0db32
|
|
85
|
+
|
|
86
|
+
const neutralGrade = encodeNeutralGrade({ width: 1920, height: 1080 });
|
|
87
|
+
|
|
88
|
+
// Verify header
|
|
89
|
+
assert(neutralGrade.startsWith('800a'), 'Neutral grade: starts with 800a header');
|
|
90
|
+
|
|
91
|
+
// Verify length byte (should be 2d = 45 for typical neutral grade structure)
|
|
92
|
+
const lengthHex = neutralGrade.substr(4, 2);
|
|
93
|
+
console.log(`${YELLOW}INFO${RESET}: Length byte = 0x${lengthHex} (${parseInt(lengthHex, 16)} bytes)`);
|
|
94
|
+
|
|
95
|
+
// Verify it contains expected patterns
|
|
96
|
+
assert(neutralGrade.includes('10011a22'), 'Neutral grade: contains version and field 3 tag');
|
|
97
|
+
assert(neutralGrade.includes('08800f'), 'Neutral grade: contains width 1920');
|
|
98
|
+
assert(neutralGrade.includes('10b808'), 'Neutral grade: contains height 1080');
|
|
99
|
+
assert(neutralGrade.includes('0000803f'), 'Neutral grade: contains 1.0 floats');
|
|
100
|
+
assert(neutralGrade.includes('ffffffff0f'), 'Neutral grade: contains flags');
|
|
101
|
+
|
|
102
|
+
console.log(`${YELLOW}INFO${RESET}: Generated neutral grade (length ${neutralGrade.length / 2} bytes):`);
|
|
103
|
+
console.log(`${YELLOW}INFO${RESET}: ${neutralGrade.substr(0, 80)}...`);
|
|
104
|
+
console.log('');
|
|
105
|
+
|
|
106
|
+
// Test 6: Grade with Adjustment
|
|
107
|
+
console.log('Test Group: Grade with Primary Adjustment');
|
|
108
|
+
|
|
109
|
+
const adjustedGrade = encodeGradeBody({
|
|
110
|
+
hasCorrection: true,
|
|
111
|
+
primaryAdjustment: 0.9,
|
|
112
|
+
width: 1920,
|
|
113
|
+
height: 1080
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
assert(adjustedGrade.startsWith('800a'), 'Adjusted grade: starts with 800a header');
|
|
117
|
+
assert(adjustedGrade.includes('6666663f'), 'Adjusted grade: contains 0.9 adjustment value');
|
|
118
|
+
console.log(`${YELLOW}INFO${RESET}: Generated adjusted grade (length ${adjustedGrade.length / 2} bytes):`);
|
|
119
|
+
console.log(`${YELLOW}INFO${RESET}: ${adjustedGrade.substr(0, 80)}...`);
|
|
120
|
+
console.log('');
|
|
121
|
+
|
|
122
|
+
// Test 7: Different Resolutions
|
|
123
|
+
console.log('Test Group: Different Resolutions');
|
|
124
|
+
|
|
125
|
+
const uhd4k = encodeNeutralGrade({ width: 3840, height: 2160 });
|
|
126
|
+
assert(uhd4k.startsWith('800a'), 'UHD 4K grade: valid header');
|
|
127
|
+
assert(uhd4k.includes(encodeVarint(3840).toString('hex')), 'UHD 4K grade: contains 3840 width');
|
|
128
|
+
assert(uhd4k.includes(encodeVarint(2160).toString('hex')), 'UHD 4K grade: contains 2160 height');
|
|
129
|
+
|
|
130
|
+
const hd720 = encodeNeutralGrade({ width: 1280, height: 720 });
|
|
131
|
+
assert(hd720.startsWith('800a'), 'HD 720p grade: valid header');
|
|
132
|
+
assert(hd720.includes(encodeVarint(1280).toString('hex')), 'HD 720p grade: contains 1280 width');
|
|
133
|
+
assert(hd720.includes(encodeVarint(720).toString('hex')), 'HD 720p grade: contains 720 height');
|
|
134
|
+
console.log('');
|
|
135
|
+
|
|
136
|
+
// Test 8: Structure Validation
|
|
137
|
+
console.log('Test Group: Structure Validation');
|
|
138
|
+
|
|
139
|
+
// Verify the structure matches the documented format
|
|
140
|
+
const gradeHex = encodeNeutralGrade({ width: 1920, height: 1080 });
|
|
141
|
+
|
|
142
|
+
let pos = 0;
|
|
143
|
+
// Header
|
|
144
|
+
assertEqual(gradeHex.substr(pos, 4), '800a', 'Structure: correct header');
|
|
145
|
+
pos += 4;
|
|
146
|
+
|
|
147
|
+
// Length (varint)
|
|
148
|
+
const lengthByte = gradeHex.substr(pos, 2);
|
|
149
|
+
const length = parseInt(lengthByte, 16);
|
|
150
|
+
assert(length > 0, `Structure: valid length (${length} bytes)`);
|
|
151
|
+
pos += 2;
|
|
152
|
+
|
|
153
|
+
// Field 2 tag (0x10 = field 2, wire type 0)
|
|
154
|
+
assertEqual(gradeHex.substr(pos, 2), '10', 'Structure: field 2 tag');
|
|
155
|
+
pos += 2;
|
|
156
|
+
|
|
157
|
+
// Version value (0x01)
|
|
158
|
+
assertEqual(gradeHex.substr(pos, 2), '01', 'Structure: version = 1');
|
|
159
|
+
pos += 2;
|
|
160
|
+
|
|
161
|
+
// Field 3 tag (0x1a = field 3, wire type 2 = length-delimited)
|
|
162
|
+
assertEqual(gradeHex.substr(pos, 2), '1a', 'Structure: field 3 tag');
|
|
163
|
+
pos += 2;
|
|
164
|
+
|
|
165
|
+
console.log(`${YELLOW}INFO${RESET}: Structure validation complete at position ${pos / 2} bytes`);
|
|
166
|
+
console.log('');
|
|
167
|
+
|
|
168
|
+
// Summary
|
|
169
|
+
console.log('=================================');
|
|
170
|
+
console.log(`${GREEN}All tests passed!${RESET}`);
|
|
171
|
+
console.log('=================================\n');
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Grade Encoder Verification Script
|
|
3
|
+
*
|
|
4
|
+
* Compares generated grade bodies with real examples from DaVinci Resolve projects
|
|
5
|
+
* to verify structural correctness and compatibility.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
const {
|
|
9
|
+
encodeNeutralGrade,
|
|
10
|
+
encodeGradeBody,
|
|
11
|
+
decodeVarint,
|
|
12
|
+
decodeFloat
|
|
13
|
+
} = require('./grade-encoder');
|
|
14
|
+
|
|
15
|
+
// Color codes
|
|
16
|
+
const GREEN = '\x1b[32m';
|
|
17
|
+
const RED = '\x1b[31m';
|
|
18
|
+
const YELLOW = '\x1b[33m';
|
|
19
|
+
const BLUE = '\x1b[34m';
|
|
20
|
+
const RESET = '\x1b[0m';
|
|
21
|
+
|
|
22
|
+
console.log('\n=== Grade Body Verification Against Real DaVinci Resolve Examples ===\n');
|
|
23
|
+
|
|
24
|
+
// Real examples extracted from DaVinci Resolve 19.1.3 project files
|
|
25
|
+
const realExamples = [
|
|
26
|
+
{
|
|
27
|
+
name: 'Neutral 1920x1080 #1',
|
|
28
|
+
hex: '800a2d10011a2208800f10b8081d0000803f20800f28b808350000803f38800f40b80848ffffffff0f6086d0ccb0db321001208aceccb0db32',
|
|
29
|
+
description: 'Standard neutral grade at HD resolution'
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
name: 'Neutral 1920x1080 #2',
|
|
33
|
+
hex: '800a2d10011a2208800f10b8081d0000803f20800f28b808350000803f38800f40b80848ffffffff0f60acfba8b4db32100120f4f9a8b4db32',
|
|
34
|
+
description: 'Another neutral grade with different timestamp'
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
name: 'Adjusted 1920x1080',
|
|
38
|
+
hex: '800a2d10011a2208800f10b8081d0000803f20800f28b8083513da8b3f38800f40b80848ffffffff0f60bceecacea32c100120baeecacea32c',
|
|
39
|
+
description: 'Grade with primary adjustment (0x13da8b3f)'
|
|
40
|
+
}
|
|
41
|
+
];
|
|
42
|
+
|
|
43
|
+
console.log('Analyzing Real Examples:\n');
|
|
44
|
+
|
|
45
|
+
realExamples.forEach((example, idx) => {
|
|
46
|
+
console.log(`${BLUE}Example ${idx + 1}: ${example.name}${RESET}`);
|
|
47
|
+
console.log(`Description: ${example.description}`);
|
|
48
|
+
console.log(`Hex: ${example.hex.substr(0, 60)}...`);
|
|
49
|
+
console.log('');
|
|
50
|
+
|
|
51
|
+
// Parse the structure
|
|
52
|
+
let pos = 0;
|
|
53
|
+
const hex = example.hex;
|
|
54
|
+
|
|
55
|
+
// Header
|
|
56
|
+
const header = hex.substr(pos, 4);
|
|
57
|
+
pos += 4;
|
|
58
|
+
console.log(` Header: 0x${header} ${header === '800a' ? GREEN + '✓ Uncompressed' + RESET : RED + '✗ Unknown' + RESET}`);
|
|
59
|
+
|
|
60
|
+
// Length
|
|
61
|
+
const lengthHex = hex.substr(pos, 2);
|
|
62
|
+
const length = parseInt(lengthHex, 16);
|
|
63
|
+
pos += 2;
|
|
64
|
+
console.log(` Length: ${length} bytes (0x${lengthHex})`);
|
|
65
|
+
|
|
66
|
+
// Field 2: Version
|
|
67
|
+
const field2Tag = hex.substr(pos, 2);
|
|
68
|
+
pos += 2;
|
|
69
|
+
const version = hex.substr(pos, 2);
|
|
70
|
+
pos += 2;
|
|
71
|
+
console.log(` Field 2 (tag 0x${field2Tag}): Version = ${parseInt(version, 16)}`);
|
|
72
|
+
|
|
73
|
+
// Field 3: Nested data
|
|
74
|
+
const field3Tag = hex.substr(pos, 2);
|
|
75
|
+
pos += 2;
|
|
76
|
+
const nestedLength = parseInt(hex.substr(pos, 2), 16);
|
|
77
|
+
pos += 2;
|
|
78
|
+
console.log(` Field 3 (tag 0x${field3Tag}): Nested data (${nestedLength} bytes)`);
|
|
79
|
+
|
|
80
|
+
// Parse nested structure
|
|
81
|
+
const nestedStart = pos;
|
|
82
|
+
|
|
83
|
+
// Width (field 1)
|
|
84
|
+
pos += 2; // Skip tag
|
|
85
|
+
const widthResult = decodeVarint(hex.substr(pos), 0);
|
|
86
|
+
pos += widthResult.bytesRead * 2;
|
|
87
|
+
console.log(` Width: ${widthResult.value}px`);
|
|
88
|
+
|
|
89
|
+
// Height (field 2)
|
|
90
|
+
pos += 2; // Skip tag
|
|
91
|
+
const heightResult = decodeVarint(hex.substr(pos), 0);
|
|
92
|
+
pos += heightResult.bytesRead * 2;
|
|
93
|
+
console.log(` Height: ${heightResult.value}px`);
|
|
94
|
+
|
|
95
|
+
// Unity float (field 3)
|
|
96
|
+
pos += 2; // Skip tag
|
|
97
|
+
const unityHex = hex.substr(pos, 8);
|
|
98
|
+
const unity = decodeFloat(unityHex);
|
|
99
|
+
pos += 8;
|
|
100
|
+
console.log(` Unity: ${unity.toFixed(6)} (0x${unityHex})`);
|
|
101
|
+
|
|
102
|
+
// Source width (field 4)
|
|
103
|
+
pos += 2; // Skip tag
|
|
104
|
+
const srcWidthResult = decodeVarint(hex.substr(pos), 0);
|
|
105
|
+
pos += srcWidthResult.bytesRead * 2;
|
|
106
|
+
console.log(` Source Width: ${srcWidthResult.value}px`);
|
|
107
|
+
|
|
108
|
+
// Source height (field 5)
|
|
109
|
+
pos += 2; // Skip tag
|
|
110
|
+
const srcHeightResult = decodeVarint(hex.substr(pos), 0);
|
|
111
|
+
pos += srcHeightResult.bytesRead * 2;
|
|
112
|
+
console.log(` Source Height: ${srcHeightResult.value}px`);
|
|
113
|
+
|
|
114
|
+
// Primary adjustment (field 6)
|
|
115
|
+
pos += 2; // Skip tag
|
|
116
|
+
const adjHex = hex.substr(pos, 8);
|
|
117
|
+
const adjustment = decodeFloat(adjHex);
|
|
118
|
+
pos += 8;
|
|
119
|
+
console.log(` Primary Adj: ${adjustment.toFixed(6)} (0x${adjHex}) ${adjustment === 1.0 ? '- NEUTRAL' : adjustment < 1.0 ? '- DARKER' : '- BRIGHTER'}`);
|
|
120
|
+
|
|
121
|
+
console.log('');
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
console.log('\n' + '='.repeat(70) + '\n');
|
|
125
|
+
console.log('Generating Our Own Grade Bodies:\n');
|
|
126
|
+
|
|
127
|
+
// Generate neutral grade
|
|
128
|
+
const ourNeutral = encodeNeutralGrade({ width: 1920, height: 1080 });
|
|
129
|
+
console.log(`${BLUE}Our Neutral Grade (1920x1080):${RESET}`);
|
|
130
|
+
console.log(`Hex: ${ourNeutral.substr(0, 60)}...`);
|
|
131
|
+
console.log(`Length: ${ourNeutral.length / 2} bytes`);
|
|
132
|
+
console.log('');
|
|
133
|
+
|
|
134
|
+
// Compare structure
|
|
135
|
+
console.log('Structural Comparison with Real Example #1:');
|
|
136
|
+
const real1 = realExamples[0].hex;
|
|
137
|
+
const maxCompare = Math.min(real1.length, ourNeutral.length);
|
|
138
|
+
|
|
139
|
+
let matchCount = 0;
|
|
140
|
+
let mismatchStart = -1;
|
|
141
|
+
|
|
142
|
+
for (let i = 0; i < maxCompare; i += 2) {
|
|
143
|
+
const realByte = real1.substr(i, 2);
|
|
144
|
+
const ourByte = ourNeutral.substr(i, 2);
|
|
145
|
+
|
|
146
|
+
if (realByte === ourByte) {
|
|
147
|
+
matchCount += 2;
|
|
148
|
+
} else if (mismatchStart === -1) {
|
|
149
|
+
mismatchStart = i;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
console.log(` Matching bytes: ${matchCount / 2} / ${maxCompare / 2}`);
|
|
154
|
+
console.log(` Match percentage: ${((matchCount / maxCompare) * 100).toFixed(1)}%`);
|
|
155
|
+
|
|
156
|
+
if (mismatchStart !== -1) {
|
|
157
|
+
console.log(` First mismatch at byte ${mismatchStart / 2}:`);
|
|
158
|
+
console.log(` Real: ${real1.substr(mismatchStart, 20)}...`);
|
|
159
|
+
console.log(` Ours: ${ourNeutral.substr(mismatchStart, 20)}...`);
|
|
160
|
+
|
|
161
|
+
// The mismatch is likely in the timestamp field
|
|
162
|
+
if (mismatchStart > 50) {
|
|
163
|
+
console.log(` ${YELLOW}Note: Mismatch likely due to timestamp difference (expected)${RESET}`);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
// Check header and structure
|
|
168
|
+
console.log('');
|
|
169
|
+
console.log('Key Structure Checks:');
|
|
170
|
+
const checks = [
|
|
171
|
+
{
|
|
172
|
+
name: 'Header (800a)',
|
|
173
|
+
real: real1.substr(0, 4),
|
|
174
|
+
ours: ourNeutral.substr(0, 4),
|
|
175
|
+
critical: true
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
name: 'Version tag (10)',
|
|
179
|
+
real: real1.substr(6, 2),
|
|
180
|
+
ours: ourNeutral.substr(6, 2),
|
|
181
|
+
critical: true
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
name: 'Version value (01)',
|
|
185
|
+
real: real1.substr(8, 2),
|
|
186
|
+
ours: ourNeutral.substr(8, 2),
|
|
187
|
+
critical: true
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
name: 'Field 3 tag (1a)',
|
|
191
|
+
real: real1.substr(10, 2),
|
|
192
|
+
ours: ourNeutral.substr(10, 2),
|
|
193
|
+
critical: true
|
|
194
|
+
},
|
|
195
|
+
{
|
|
196
|
+
name: 'Width encoding (800f)',
|
|
197
|
+
real: real1.substr(16, 4),
|
|
198
|
+
ours: ourNeutral.substr(16, 4),
|
|
199
|
+
critical: true
|
|
200
|
+
},
|
|
201
|
+
{
|
|
202
|
+
name: 'Height encoding (b808)',
|
|
203
|
+
real: real1.substr(22, 4),
|
|
204
|
+
ours: ourNeutral.substr(22, 4),
|
|
205
|
+
critical: true
|
|
206
|
+
},
|
|
207
|
+
{
|
|
208
|
+
name: 'Unity float (0000803f)',
|
|
209
|
+
real: real1.substr(28, 8),
|
|
210
|
+
ours: ourNeutral.substr(28, 8),
|
|
211
|
+
critical: true
|
|
212
|
+
},
|
|
213
|
+
{
|
|
214
|
+
name: 'Primary adj (0000803f)',
|
|
215
|
+
real: real1.substr(48, 8),
|
|
216
|
+
ours: ourNeutral.substr(48, 8),
|
|
217
|
+
critical: true
|
|
218
|
+
}
|
|
219
|
+
];
|
|
220
|
+
|
|
221
|
+
let passCount = 0;
|
|
222
|
+
let criticalFails = 0;
|
|
223
|
+
|
|
224
|
+
checks.forEach(check => {
|
|
225
|
+
const match = check.real === check.ours;
|
|
226
|
+
const status = match ? `${GREEN}✓ PASS${RESET}` : `${RED}✗ FAIL${RESET}`;
|
|
227
|
+
|
|
228
|
+
if (match) passCount++;
|
|
229
|
+
if (!match && check.critical) criticalFails++;
|
|
230
|
+
|
|
231
|
+
console.log(` ${status} ${check.name.padEnd(25)} Real: ${check.real.padEnd(10)} Ours: ${check.ours}`);
|
|
232
|
+
});
|
|
233
|
+
|
|
234
|
+
console.log('');
|
|
235
|
+
console.log('='.repeat(70));
|
|
236
|
+
console.log(`Results: ${passCount}/${checks.length} checks passed`);
|
|
237
|
+
|
|
238
|
+
if (criticalFails === 0) {
|
|
239
|
+
console.log(`${GREEN}✓ All critical structure checks passed!${RESET}`);
|
|
240
|
+
console.log(`${GREEN}✓ Generated grades are compatible with DaVinci Resolve format${RESET}`);
|
|
241
|
+
} else {
|
|
242
|
+
console.log(`${RED}✗ ${criticalFails} critical checks failed${RESET}`);
|
|
243
|
+
console.log(`${RED}✗ Review implementation for compatibility issues${RESET}`);
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
console.log('');
|
|
247
|
+
console.log('Note: Timestamp differences are expected and do not affect compatibility.');
|
|
248
|
+
console.log('='.repeat(70));
|
|
249
|
+
console.log('');
|