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
|
@@ -104,6 +104,23 @@ in success and in error responses.
|
|
|
104
104
|
effect parameter. Higher-level wrappers should probe before assuming a
|
|
105
105
|
control exists.
|
|
106
106
|
|
|
107
|
+
## Advanced (offline) server — declarative `.comp` authoring
|
|
108
|
+
|
|
109
|
+
The actions above build a Fusion comp on a timeline item in a *running* Resolve.
|
|
110
|
+
The companion advanced server (`davinci-resolve-advanced`, see
|
|
111
|
+
`resolve-advanced/README.md`) authors Fusion compositions **offline, no Resolve
|
|
112
|
+
running**, via the `fusion` tool:
|
|
113
|
+
|
|
114
|
+
- `generate` / `generate_from_template` — write a `.comp` from a declarative spec
|
|
115
|
+
or a named template (`list_templates`).
|
|
116
|
+
- `to_api_calls` — compile a spec into the ordered tool-creation / input /
|
|
117
|
+
connection calls the live server then replays.
|
|
118
|
+
|
|
119
|
+
Rule of thumb: author and verify the comp offline, then apply it live with
|
|
120
|
+
`fusion_comp` `safe_add_tool` → `safe_set_inputs` → `safe_connect_tools` (the
|
|
121
|
+
`to_api_calls` output maps directly onto those). See the `resolve-fusion` skill
|
|
122
|
+
(`.claude/skills/fusion.md`) and the `/fusion_workflow` prompt.
|
|
123
|
+
|
|
107
124
|
## Live Probe
|
|
108
125
|
|
|
109
126
|
Run the live boundary probe with:
|
|
@@ -120,6 +120,26 @@ params={"confirm": true, ...})`.
|
|
|
120
120
|
the installed DaVinci Resolve 20 Manual, Edit > Chapter 42, "Multicam
|
|
121
121
|
Editing," for the current UI workflow.
|
|
122
122
|
|
|
123
|
+
## Advanced (offline) server — media front-end / ingest verification
|
|
124
|
+
|
|
125
|
+
The actions above import and organize media in a *running* Resolve. The companion
|
|
126
|
+
advanced server (`davinci-resolve-advanced`, see `resolve-advanced/README.md`)
|
|
127
|
+
handles the front-end / assistant-editor ingest layer **offline, no Resolve
|
|
128
|
+
running**, via the `media` tool (needs ffmpeg + ffprobe on PATH for the probing
|
|
129
|
+
actions):
|
|
130
|
+
|
|
131
|
+
- `ingest_verify` — hash seal / verify / dupes-by-hash (chain-of-custody).
|
|
132
|
+
- `media_inventory` — fps / codec / colorspace / TC + card-gap report.
|
|
133
|
+
- `sync` — picture↔sound TC alignment + drift / MOS detection.
|
|
134
|
+
- `relink_manifest`, `rename_plan` (**refuses camera originals**) /
|
|
135
|
+
`reel_normalize`, `turnover_package`, `project_hygiene`.
|
|
136
|
+
|
|
137
|
+
Rule of thumb: verify and inventory the card offline *before* importing, then
|
|
138
|
+
import/organize live. `media` also serves the delivery side (see the
|
|
139
|
+
`resolve-delivery` skill). See the `resolve-media-pool` skill
|
|
140
|
+
(`.claude/skills/media-pool.md`) and the `/media_pool_workflow` prompt. Never
|
|
141
|
+
rename or derive camera originals without explicit approval.
|
|
142
|
+
|
|
123
143
|
## Live Evidence
|
|
124
144
|
|
|
125
145
|
Final validation ran on May 9, 2026 with DaVinci Resolve Studio 20.3.2.9 and
|
|
@@ -64,6 +64,38 @@ All actions are under `render(action=...)`.
|
|
|
64
64
|
existing `render_presets` tool, but the live kernel probe does not fabricate
|
|
65
65
|
arbitrary preset files.
|
|
66
66
|
|
|
67
|
+
## Advanced (offline) server — deliverable QC, media front-end, provenance
|
|
68
|
+
|
|
69
|
+
The live actions above plan and drive renders in a *running* Resolve. The
|
|
70
|
+
companion advanced server (`davinci-resolve-advanced`, see
|
|
71
|
+
`resolve-advanced/README.md`) QCs the **finished render** and manages media/
|
|
72
|
+
provenance with **no Resolve running**. It is report-only —
|
|
73
|
+
**`gate: review`, never auto-pass-clear.**
|
|
74
|
+
|
|
75
|
+
- **`deliverable`** — `deliverable_qc` (ffprobe a render vs its spec → pass/fail
|
|
76
|
+
**per field**), `loudness_qc` (ebur128 LUFS/true-peak/LRA),
|
|
77
|
+
`reframe_blanking_check`, `conform_completeness` (every intended shot present),
|
|
78
|
+
`re_delivery_diff`, `render_manifest` (build/reconcile), `expand_deliverable`
|
|
79
|
+
(texted/textless/stems/slate/leader entities).
|
|
80
|
+
- **`media`** (front-end / AE) — `ingest_verify` (hash seal/verify/dupes),
|
|
81
|
+
`media_inventory` (fps/codec/colorspace/TC + card gaps), `sync` (picture↔sound
|
|
82
|
+
TC + drift/MOS), `relink_manifest`, `rename_plan` (**refuses camera
|
|
83
|
+
originals**) / `reel_normalize`, `turnover_package`, `project_hygiene`.
|
|
84
|
+
- **`provenance`** (audit) — `grade_provenance` ("why is this graded this way"),
|
|
85
|
+
`gallery_lineage`, `cdl_export` / `cdl_diff` (round-trip asserted),
|
|
86
|
+
`revision_tracking`, `episode_report`.
|
|
87
|
+
|
|
88
|
+
Rules an agent must know:
|
|
89
|
+
|
|
90
|
+
- QC tools **refuse rather than fabricate** — a "refused" result means missing
|
|
91
|
+
file, wrong spec, or a metric it cannot honestly compute.
|
|
92
|
+
- Deliverable gates never auto-clear; surface the per-field verdict to a human.
|
|
93
|
+
- **Deps.** `deliverable`/`media` QC needs **ffmpeg + ffprobe on PATH** (GPL, not
|
|
94
|
+
bundled) — call the advanced `capabilities` tool for status + install hints.
|
|
95
|
+
|
|
96
|
+
See the `resolve-delivery` skill (`.claude/skills/delivery.md`) for the
|
|
97
|
+
craft ↔ live ↔ offline routing.
|
|
98
|
+
|
|
67
99
|
## Live Evidence
|
|
68
100
|
|
|
69
101
|
Final validation ran on May 9, 2026 with DaVinci Resolve Studio 20.3.2.9 and
|
|
@@ -84,6 +84,45 @@ Supported aliases include `aaf`, `drt`, `edl`, `edl_cdl`, `edl_sdl`,
|
|
|
84
84
|
- Export and import helpers require temp paths by default because they write
|
|
85
85
|
interchange artifacts.
|
|
86
86
|
|
|
87
|
+
## Advanced (offline) server — the conform QC engine
|
|
88
|
+
|
|
89
|
+
The live actions above operate on a *running* Resolve. The companion advanced
|
|
90
|
+
server (`davinci-resolve-advanced`, see `resolve-advanced/README.md`) does the
|
|
91
|
+
finishing-grade conform work with **no Resolve running**, against `.drt`/`.drp`
|
|
92
|
+
files and the project DB.
|
|
93
|
+
|
|
94
|
+
- **`conform`** — offline conform/relink QC with **frame-oracle math, not
|
|
95
|
+
filename matching** (it catches a clip relinked to the wrong-but-similarly-named
|
|
96
|
+
source). Also: reverse/retimed subclip DB repair (reversed `source_start` =
|
|
97
|
+
`masterFrames − 1 − endoffset`, live-validated), sequence lineage store + diff +
|
|
98
|
+
rollback (hashed snapshots), and per-cut frame QC (oracle-frame vs
|
|
99
|
+
reference-render, scale-corrected, red/yellow/cyan verdicts).
|
|
100
|
+
- **`color_trace`** — cross-project clip matching → a trace plan for carrying
|
|
101
|
+
grades across a re-conform (pairs with the color kernel's `drx grade_transfer`).
|
|
102
|
+
- **`offline_ref`** — offline-reference clips have **no scripting API** but live
|
|
103
|
+
inside `.drp`/`.drt` as `<OfflineClip>` entries; patch them here.
|
|
104
|
+
- **`editorial`** — `parse_interchange` (EDL/OTIO/XMEML; **AAF = honest refuse**),
|
|
105
|
+
`turnover_changelist` (moved/retimed/replaced/new/gone with timing guards),
|
|
106
|
+
`conform_manifest`, `marker_roundtrip`.
|
|
107
|
+
- **`drt` / `project_db`** — timeline file authoring and DB patching.
|
|
108
|
+
|
|
109
|
+
Gotchas the live path shares:
|
|
110
|
+
|
|
111
|
+
- **XML import via the scripting API goes _offline_** (missing-media/generators
|
|
112
|
+
abort). Use `import_timeline_checked` with media **sanitize** (FCP7/FCPXML) so
|
|
113
|
+
the API imports with links intact, then exact-path relink. Restart a running MCP
|
|
114
|
+
server to pick up the sanitize fix.
|
|
115
|
+
- **`.drt` version.** For DaVinci Resolve 19.1.3, set `DbPrjVer` 17 → 16 when
|
|
116
|
+
authoring a `.drt`.
|
|
117
|
+
- **`project_db` patches** require the project **CLOSED** plus
|
|
118
|
+
`iConfirmProjectClosed:true`; writes auto-back-up and read-back verify. Resolve
|
|
119
|
+
caches open projects — **fully quit and relaunch** after patching.
|
|
120
|
+
- **Deps.** `better-sqlite3` gates lineage/reverse/DB; `sharp`/ffmpeg gate frame
|
|
121
|
+
compare — call the advanced `capabilities` tool.
|
|
122
|
+
|
|
123
|
+
See the `resolve-conform` skill (`.claude/skills/conform.md`) for the
|
|
124
|
+
craft ↔ live ↔ offline routing.
|
|
125
|
+
|
|
87
126
|
## Live Probe
|
|
88
127
|
|
|
89
128
|
Run the live boundary probe with:
|
|
@@ -180,6 +180,23 @@ Some behavior depends on Resolve's current page or bridge state:
|
|
|
180
180
|
if Resolve loses current timeline state, the harness records the bridge
|
|
181
181
|
condition separately.
|
|
182
182
|
|
|
183
|
+
## Advanced (offline) server — editorial interchange + changelist
|
|
184
|
+
|
|
185
|
+
The kernel above restructures a *running* timeline. The companion advanced server
|
|
186
|
+
(`davinci-resolve-advanced`, see `resolve-advanced/README.md`) authors/diffs
|
|
187
|
+
timelines and reasons over editorial interchange with **no Resolve running**:
|
|
188
|
+
|
|
189
|
+
- **`editorial`** — `parse_interchange` (EDL/OTIO/XMEML; **AAF = honest refuse**),
|
|
190
|
+
`turnover_changelist` (moved/retimed/replaced/new/gone between two cuts, with
|
|
191
|
+
timing silent-lie guards), `conform_manifest`, `marker_roundtrip`.
|
|
192
|
+
- **`drt`** — `.drt` timeline file authoring + structural diff.
|
|
193
|
+
|
|
194
|
+
Use these to answer "what changed between v3 and v4" or to hand a conform an
|
|
195
|
+
accurate change list without opening either timeline. For conforming/relinking
|
|
196
|
+
that change list, see the Timeline Conform / Interchange kernel and the
|
|
197
|
+
`resolve-conform` skill; for the edit ↔ offline routing, see the `resolve-edit`
|
|
198
|
+
skill (`.claude/skills/timeline-edit.md`).
|
|
199
|
+
|
|
183
200
|
## Development Guardrails
|
|
184
201
|
|
|
185
202
|
- Use disposable projects and synthetic media for live validation.
|
|
@@ -35,11 +35,15 @@ Every release bump must update all version surfaces:
|
|
|
35
35
|
`venv/bin/python scripts/gen_api_limitations.py`. The
|
|
36
36
|
`tests.test_api_limitations_doc` drift guard fails the suite if it is stale.
|
|
37
37
|
- `docs/SKILL.md` when tool discovery, examples, or behavior changed
|
|
38
|
-
- `docs/guides/control-panel.md`
|
|
38
|
+
- `docs/guides/control-panel.md` — check EVERY release, not only when the
|
|
39
|
+
panel "changed": panel surfaces grow transitively (new tools, new docs pages,
|
|
40
|
+
new diagnostics cards), so review the guide for accuracy and update it plus
|
|
39
41
|
regenerated screenshots: start the panel against a project with analysis
|
|
40
42
|
data, then run `venv/bin/python scripts/regen_panel_screenshots.py`.
|
|
41
43
|
The `tests.test_panel_docs_drift` guard fails the suite (and the publish
|
|
42
|
-
workflow) when the guide drifts from the panel's navigation or screenshots
|
|
44
|
+
workflow) when the guide drifts from the panel's navigation or screenshots —
|
|
45
|
+
but the guard checks presence, not prose accuracy; the human pass is the
|
|
46
|
+
accuracy check.
|
|
43
47
|
- Git tag, e.g. `v2.4.1`
|
|
44
48
|
- GitHub Release notes
|
|
45
49
|
|
|
@@ -54,17 +58,35 @@ Always run static checks before release:
|
|
|
54
58
|
venv/bin/python tests/test_import.py
|
|
55
59
|
venv/bin/python scripts/audit_api_parity.py
|
|
56
60
|
venv/bin/python scripts/gen_api_limitations.py --check
|
|
57
|
-
|
|
61
|
+
node scripts/agent-rules/generate.mjs --check
|
|
62
|
+
venv/bin/python -m unittest tests.test_static_undefined_names tests.test_action_list_drift tests.test_panel_docs_drift tests.test_doc_tool_counts tests.test_agent_rules_drift
|
|
58
63
|
node bin/davinci-resolve-mcp.mjs --help
|
|
59
64
|
node bin/davinci-resolve-mcp.mjs --version
|
|
60
65
|
npm pack --dry-run
|
|
61
66
|
git diff --check
|
|
62
67
|
```
|
|
63
68
|
|
|
64
|
-
The
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
69
|
+
The drift guards (undefined names in `src/`, tool action lists vs dispatch,
|
|
70
|
+
control-panel guide vs panel navigation/screenshots, api-limitations vs the
|
|
71
|
+
api_truth ledger, and **tool counts across the docs vs reality** —
|
|
72
|
+
`test_doc_tool_counts`) also run in the `Publish npm package` workflow on every
|
|
73
|
+
`v*` tag, so a stale doc or drifted action list fails the publish — fix the drift
|
|
74
|
+
rather than bypassing the gate.
|
|
75
|
+
|
|
76
|
+
`test_doc_tool_counts` statically counts the compound (`src/server.py`), granular
|
|
77
|
+
(`src/granular/`), and Node advanced (`resolve-advanced/server/index.mjs`) tools and
|
|
78
|
+
asserts the numbers quoted in README, `resolve-advanced/README.md`, `docs/contributing.md`,
|
|
79
|
+
`docs/SKILL.md`, `docs/reference/api-coverage.md`, and `.github/copilot-instructions.md`
|
|
80
|
+
still match. When you add/remove a tool, update those docs to the counts the test prints.
|
|
81
|
+
|
|
82
|
+
The cross-platform agent rule files (`.cursor/rules/*`, `.github/instructions/*`,
|
|
83
|
+
`.windsurf/rules/*`, `.cursorrules`, `.windsurfrules`, the `AGENTS.md` domain-routing
|
|
84
|
+
block, and `.github/copilot-instructions.md`) are **generated** by
|
|
85
|
+
`scripts/agent-rules/generate.mjs`, which parses those same counts from their
|
|
86
|
+
canonical docs. After a count or tool-routing change, run
|
|
87
|
+
`node scripts/agent-rules/generate.mjs` and commit the result;
|
|
88
|
+
`test_agent_rules_drift` fails the suite (and publish) if the committed files are
|
|
89
|
+
stale. See `scripts/agent-rules/README.md`.
|
|
68
90
|
|
|
69
91
|
Run focused unit tests for the changed surface. For recent timeline/marker
|
|
70
92
|
helpers, this usually includes:
|
|
@@ -17,7 +17,7 @@ Complete Resolve scripting API coverage, live-test status, and method-by-method
|
|
|
17
17
|
|
|
18
18
|
## API Coverage
|
|
19
19
|
|
|
20
|
-
Every non-deprecated method in the DaVinci Resolve Scripting API is covered. The default compound server exposes **
|
|
20
|
+
Every non-deprecated method in the DaVinci Resolve Scripting API is covered. The default compound server exposes **34 tools** that group related operations by action parameter, keeping LLM context windows lean. The full granular server provides **341 individual tools** for power users. Both modes cover all 13 API object classes. MCP-level kernel actions are tracked separately in [Kernel Action Coverage](../kernels/README.md).
|
|
21
21
|
|
|
22
22
|
The 33rd compound tool is `timeline_versioning` (C6) — an MCP-level workflow
|
|
23
23
|
tool, not a wrapper around a Resolve API method. It surfaces the
|
|
@@ -12,7 +12,7 @@ that none exists).
|
|
|
12
12
|
|
|
13
13
|
**Verified on:** DaVinci Resolve Studio 21.0.0
|
|
14
14
|
|
|
15
|
-
**Totals:**
|
|
15
|
+
**Totals:** 18 missing capabilities, 11 bugs / unreliable behaviors.
|
|
16
16
|
|
|
17
17
|
The authoritative source is the runtime-queryable `api_truth` ledger
|
|
18
18
|
(`resolve_control api_truth "<query>"`); this document is generated from
|
|
@@ -141,6 +141,34 @@ equivalent, blocking full automation.
|
|
|
141
141
|
- **Workaround / current handling:** Create Smart/Power Bins in the Resolve UI; only regular bins are scriptable.
|
|
142
142
|
- **Tags:** missing-method, media-pool, bins
|
|
143
143
|
|
|
144
|
+
### Per-subtitle text content and timing editing
|
|
145
|
+
|
|
146
|
+
- **Object:** `TimelineItem (subtitle track)`
|
|
147
|
+
- **Behavior:** TimelineItem on a subtitle track exposes only 21 standard transform/composite properties (Pan, Tilt, ZoomX, Opacity, Crop, etc.). There are no methods to get or set subtitle text (GetText/SetText), start time, end time, or duration for individual subtitle items. Subtitles created via CreateSubtitlesFromAudio or imported via the Resolve UI cannot have their content or timing read or modified programmatically. Verified via dir() and GetProperty() on Resolve 21.0.0.48.
|
|
148
|
+
- **Workaround / current handling:** No workaround exists — subtitle text and timing are completely inaccessible from the scripting API. Must be edited in the Resolve UI.
|
|
149
|
+
- **Tags:** missing-method, subtitle, text, timing
|
|
150
|
+
|
|
151
|
+
### Subtitle track styling and presets
|
|
152
|
+
|
|
153
|
+
- **Object:** `TimelineItem / Timeline / Project`
|
|
154
|
+
- **Behavior:** There is no API method to set or query subtitle font family, font size, text color, background color, outline, shadow, position, alignment, or to apply/query subtitle style presets. TimelineItem.GetProperty() on subtitle items returns only transform/composite keys. Timeline.GetSetting() and Project.GetSetting() return None for all probed subtitle-style keys (e.g. 'subtitleFontName', 'subtitleFontSize', 'subtitleTextColor', 'subtitleBackgroundColor', 'subtitlePosition', 'subtitleAlignment', 'subtitlePreset', 'subtitleStyle'). Verified via dir(), GetProperty(), and GetSetting() on Resolve 21.0.0.48.
|
|
155
|
+
- **Workaround / current handling:** No workaround exists — subtitle styling is UI-only. Burn-in overlays via Fusion titles are a visual alternative but do not produce proper subtitle tracks.
|
|
156
|
+
- **Tags:** missing-method, subtitle, style, preset
|
|
157
|
+
|
|
158
|
+
### Speech recognition engine selection and SRT import
|
|
159
|
+
|
|
160
|
+
- **Object:** `Timeline`
|
|
161
|
+
- **Behavior:** Timeline.CreateSubtitlesFromAudio(autoCaptionSettings) always uses the built-in Resolve speech recognition engine. There is no API parameter to select an alternative provider (e.g. whisper-cli, Google Speech, AWS Transcribe). The language selection via resolve.AUTO_CAPTION_LANGUAGE_* is the only customization; the engine itself cannot be changed. Furthermore, there is no API method to import an SRT file into a subtitle track programmatically — File -> Import -> Subtitle is UI-only.
|
|
162
|
+
- **Workaround / current handling:** No workaround exists for provider selection or SRT import. External transcripts must be converted to SRT and imported through the Resolve UI.
|
|
163
|
+
- **Tags:** missing-method, subtitle, transcription, speech-recognition, asr
|
|
164
|
+
|
|
165
|
+
### Media Pool folder rename
|
|
166
|
+
|
|
167
|
+
- **Object:** `MediaPool`
|
|
168
|
+
- **Behavior:** MediaPool exposes AddSubFolder(name), DeleteSubFolders([names]), and MoveFolders([names], targetFolder) but no RenameSubFolder(oldName, newName) method. Folders can be created, deleted, and moved, but their names cannot be changed through the API. Verified via dir() on Resolve 21.0.0.
|
|
169
|
+
- **Workaround / current handling:** Delete and recreate the folder with the desired name, or rename in the Resolve UI.
|
|
170
|
+
- **Tags:** missing-method, media-pool, folder
|
|
171
|
+
|
|
144
172
|
## Bugs / Unreliable Behavior (please fix)
|
|
145
173
|
|
|
146
174
|
Methods that exist but misbehave — silent failures, unreliable return
|
|
@@ -220,3 +248,12 @@ values, or automation-hostile modal prompts.
|
|
|
220
248
|
- **Behavior:** The Python bridge returns a callable for ANY attribute name, so hasattr(obj, 'TotallyMadeUpMethod') is always True and getattr never raises. This makes capability detection by hasattr impossible — verified on 21.0.0 (hasattr reported SetStart, Razor, AddNode, GenerateProxy, AddSmartBin etc. as present though none exist). Only dir() lists the real methods.
|
|
221
249
|
- **Workaround / current handling:** Never probe method existence with hasattr/getattr; test membership against dir(obj) instead. Calling a fabricated method typically returns None/False with no error.
|
|
222
250
|
- **Tags:** bridge, introspection, silent-failure
|
|
251
|
+
|
|
252
|
+
### MediaPoolItem.SetClipProperty('Reel Name', ...)
|
|
253
|
+
|
|
254
|
+
- **Object:** `MediaPoolItem`
|
|
255
|
+
- **Signature:** `(propertyName, propertyValue) -> bool`
|
|
256
|
+
- **Behavior:** Setting the 'Reel Name' clip property returns True but the value is silently dropped on read-back when the project is configured to derive reel names automatically (General Options > 'Assist using reel names from the:' set to source clip file / embedding / filename pattern). The same True-but-unpersisted behavior occurs via SetMetadata('Reel Name', ...). Other clip properties on the same clip (e.g. 'Comments') write and persist normally, so this is field-specific, not a bridge/permission failure. Verified on Resolve 21.0.0; reported as issue #77.
|
|
257
|
+
- **Workaround / current handling:** After writing 'Reel Name', read it back with GetClipProperty('Reel Name') and refuse to report success on mismatch; surface the project-setting gate to the caller (server._verify_clip_property_writeback).
|
|
258
|
+
- **Reference:** [issue #77](https://github.com/samuelgursky/davinci-resolve-mcp/issues/77)
|
|
259
|
+
- **Tags:** unreliable-return, silent-failure, metadata, reel-name
|
package/install.py
CHANGED
|
@@ -35,7 +35,7 @@ from src.utils.update_check import (
|
|
|
35
35
|
|
|
36
36
|
# ─── Version ──────────────────────────────────────────────────────────────────
|
|
37
37
|
|
|
38
|
-
VERSION = "2.
|
|
38
|
+
VERSION = "2.58.0"
|
|
39
39
|
# Only hard floor: mcp[cli] requires Python 3.10+. There is no upper bound —
|
|
40
40
|
# Resolve's scripting bridge loads into newer interpreters on recent builds
|
|
41
41
|
# (Python 3.14 verified against Resolve Studio 20.3.2). Older Resolve builds
|
|
@@ -666,14 +666,37 @@ def write_client_config(client, python_path, server_path, api_path, lib_path, dr
|
|
|
666
666
|
return True, str(config_path)
|
|
667
667
|
|
|
668
668
|
|
|
669
|
+
def build_advanced_entry(server_path):
|
|
670
|
+
"""Build the config entry for the optional 'davinci-resolve-advanced' server.
|
|
671
|
+
|
|
672
|
+
This is the Node, beyond-the-scripting-API sibling (file/.drp/.drt/.drx
|
|
673
|
+
authoring + conform + editorial, no live Resolve required). It ships in the
|
|
674
|
+
same package as a second bin. Opt-in: include it only if you want the
|
|
675
|
+
file-level tools alongside the live server.
|
|
676
|
+
"""
|
|
677
|
+
project_dir = Path(server_path).resolve().parents[1] # .../src/server.py -> repo root
|
|
678
|
+
advanced_bin = project_dir / "bin" / "davinci-resolve-advanced-mcp.mjs"
|
|
679
|
+
return {"command": "node", "args": [str(advanced_bin)]}
|
|
680
|
+
|
|
681
|
+
|
|
669
682
|
def generate_manual_config(python_path, server_path, api_path, lib_path):
|
|
670
683
|
"""Generate config snippets for manual setup."""
|
|
671
684
|
entry = build_server_entry(python_path, server_path, api_path, lib_path)
|
|
672
685
|
zed_entry = build_zed_entry(python_path, server_path, api_path, lib_path)
|
|
673
686
|
opencode_entry = build_opencode_entry(python_path, server_path, api_path, lib_path)
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
687
|
+
advanced = build_advanced_entry(server_path)
|
|
688
|
+
|
|
689
|
+
# Standard snippet includes BOTH servers: the live Python server and the
|
|
690
|
+
# optional Node 'advanced' server (file-level, no Resolve). Drop the
|
|
691
|
+
# advanced entry if you only want live control.
|
|
692
|
+
standard = json.dumps({"mcpServers": {
|
|
693
|
+
"davinci-resolve": entry,
|
|
694
|
+
"davinci-resolve-advanced": advanced,
|
|
695
|
+
}}, indent=2)
|
|
696
|
+
vscode_fmt = json.dumps({"servers": {
|
|
697
|
+
"davinci-resolve": entry,
|
|
698
|
+
"davinci-resolve-advanced": advanced,
|
|
699
|
+
}}, indent=2)
|
|
677
700
|
zed_fmt = json.dumps({"context_servers": {"davinci-resolve": zed_entry}}, indent=2)
|
|
678
701
|
opencode_fmt = json.dumps({"mcp": {"davinci-resolve": opencode_entry}}, indent=2)
|
|
679
702
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "davinci-resolve-mcp",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.58.0",
|
|
4
4
|
"description": "NPM bootstrapper for the DaVinci Resolve MCP Server.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Samuel Gursky <samgursky@gmail.com>",
|
|
@@ -14,11 +14,32 @@
|
|
|
14
14
|
},
|
|
15
15
|
"type": "module",
|
|
16
16
|
"bin": {
|
|
17
|
-
"davinci-resolve-mcp": "./bin/davinci-resolve-mcp.mjs"
|
|
17
|
+
"davinci-resolve-mcp": "./bin/davinci-resolve-mcp.mjs",
|
|
18
|
+
"davinci-resolve-advanced-mcp": "./bin/davinci-resolve-advanced-mcp.mjs"
|
|
19
|
+
},
|
|
20
|
+
"dependencies": {
|
|
21
|
+
"@modelcontextprotocol/sdk": "^1.27.1",
|
|
22
|
+
"adm-zip": "^0.5.16",
|
|
23
|
+
"fast-xml-parser": "^5.7.3",
|
|
24
|
+
"fzstd": "^0.1.1",
|
|
25
|
+
"jszip": "^3.10.1",
|
|
26
|
+
"uuid": "^9.0.0",
|
|
27
|
+
"zod": "^3.25.76",
|
|
28
|
+
"zstd-codec": "^0.1.5"
|
|
29
|
+
},
|
|
30
|
+
"optionalDependencies": {
|
|
31
|
+
"better-sqlite3": "^11.0.0",
|
|
32
|
+
"js-yaml": "^4.1.0",
|
|
33
|
+
"pg": "^8.11.0",
|
|
34
|
+
"sharp": "^0.33.0"
|
|
18
35
|
},
|
|
19
36
|
"files": [
|
|
20
37
|
"bin/",
|
|
21
38
|
"src/**/*.py",
|
|
39
|
+
"resolve-advanced/server/**/*.mjs",
|
|
40
|
+
"resolve-advanced/vendor/**",
|
|
41
|
+
"resolve-advanced/package.json",
|
|
42
|
+
"resolve-advanced/README.md",
|
|
22
43
|
"docs/**/*.md",
|
|
23
44
|
"docs/reference/resolve_scripting_api.txt",
|
|
24
45
|
"examples/**/*.md",
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
# davinci-resolve-advanced-mcp
|
|
2
|
+
|
|
3
|
+
The **beyond-the-API** half of `davinci-resolve-mcp`: a Node MCP server that authors and edits
|
|
4
|
+
DaVinci Resolve **files** (`.drp` / `.drt` / `.drx`) and applies DB/XML-level changes (Fairlight
|
|
5
|
+
routing, offline-reference, conform, color-group grade read) — **with no DaVinci Resolve running.**
|
|
6
|
+
|
|
7
|
+
It ships as a second `bin` inside the `davinci-resolve-mcp` npm package (one install, two servers):
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
bin/davinci-resolve-mcp.mjs → Python, live, sanctioned scripting API (drives Resolve)
|
|
11
|
+
bin/davinci-resolve-advanced-mcp.mjs → Node, beyond-API file/DB authoring (no Resolve required) [this]
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
Runs cloud or local — the file tools never touch Resolve.
|
|
15
|
+
|
|
16
|
+
## Two ways to use it
|
|
17
|
+
|
|
18
|
+
- **As an MCP server** (the bin above) — point any MCP client at it.
|
|
19
|
+
- **As a library** — `import` the engine directly. The package exposes a public API surface
|
|
20
|
+
(`server/lib.mjs`, wired via `package.json` `main`/`exports`), grouped as **codec** (offline
|
|
21
|
+
`.drp/.drt/.drx`), **grading** (deterministic compute cores), **pipeline** (the DB-as-truth
|
|
22
|
+
foundation), **tools** (the MCP tool handlers), and **mcp** (the stdio server entry). The MCP
|
|
23
|
+
server is a thin shell over these same exports.
|
|
24
|
+
|
|
25
|
+
## Usage
|
|
26
|
+
|
|
27
|
+
**As a library — a grading core.** You extract display-referred frames per clip (ffmpeg, your
|
|
28
|
+
call); the engine computes the grade offline and writes an apply-ready `.drx`. Applying it in
|
|
29
|
+
Resolve (via the scripting API) is the caller's job.
|
|
30
|
+
|
|
31
|
+
```js
|
|
32
|
+
import { computeSkinMatch } from 'davinci-resolve-advanced-mcp';
|
|
33
|
+
|
|
34
|
+
const { grades, report, warnings } = await computeSkinMatch(
|
|
35
|
+
[
|
|
36
|
+
{ id: 'B_0008', png: '/frames/B_0008.png', group: 'Guest' },
|
|
37
|
+
{ id: 'C_0016', png: '/frames/C_0016.png', group: 'Guest' },
|
|
38
|
+
],
|
|
39
|
+
{ outDir: '/out/skin' },
|
|
40
|
+
);
|
|
41
|
+
// grades[].drxPath → apply in Resolve; warnings flag over-corrections; low-skin clips are skipped, not faked.
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
**The DB-as-truth pipeline** (via the `pipeline` tool handler — same API the MCP server exposes).
|
|
45
|
+
Compile YAML specs into the canonical DB, plan a run, execute a deterministic stage (you supply the
|
|
46
|
+
tool inputs), then read decoded state back and check drift:
|
|
47
|
+
|
|
48
|
+
```js
|
|
49
|
+
import { pipelineTool } from 'davinci-resolve-advanced-mcp';
|
|
50
|
+
const call = (action, args) => pipelineTool.handler({ action, args });
|
|
51
|
+
|
|
52
|
+
const dbPath = '/proj/project.db';
|
|
53
|
+
const now = new Date().toISOString(); // the tool takes an explicit timestamp
|
|
54
|
+
|
|
55
|
+
await call('compile', { dbPath, now, yamlDir: '/proj/specs' }); // YAML → resolved entity tree
|
|
56
|
+
const { runId, stages } = await call('plan', { dbPath, episodeSlug: 'e012', now });
|
|
57
|
+
|
|
58
|
+
// Deterministic stages run now (you pass the tool args); Resolve-apply stages return an action plan.
|
|
59
|
+
await call('execute_stage', {
|
|
60
|
+
dbPath, runId, stageIndex: 0, now,
|
|
61
|
+
toolArgs: { tool: 'gamut_legal', args: { clips: [{ id: 'f', png: '/frames/f.png' }] } },
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
// Pull decoded actual state up and flag intent↔actual drift.
|
|
65
|
+
await call('readback', {
|
|
66
|
+
dbPath, entitySlug: 'e012.group.Host', now,
|
|
67
|
+
facts: { 'look.lut': 'Kodak_5219' }, pushFields: [{ field: 'look.lut' }],
|
|
68
|
+
});
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## Tools (18)
|
|
72
|
+
|
|
73
|
+
`drp` · `drt` · `drx` · `offline_ref` · `conform` · `color_trace` · `fusion` · `audio` ·
|
|
74
|
+
`audio_plan` · `fairlight` · `project_db` · `project_read` · `pipeline` · `capabilities` ·
|
|
75
|
+
`deliverable` · `media` · `editorial` · `provenance`
|
|
76
|
+
|
|
77
|
+
Each dispatches on an `action`. Highlights:
|
|
78
|
+
|
|
79
|
+
- **`drx`** — per-clip grade (`.drx`) codec: `parse`, `generate`, `generate_from_request`,
|
|
80
|
+
`export_cdl`, `merge`, plus the **grading/QC catalog** below.
|
|
81
|
+
- **`drp` / `drt`** — project / timeline file authoring + editing + grade injection + structural diff.
|
|
82
|
+
- **`conform`** — offline conform/relink QC engine (frame-oracle math, not filename matching),
|
|
83
|
+
reverse-clip DB repair, sequence lineage store + diff, per-cut frame QC.
|
|
84
|
+
- **`color_trace`** — cross-project clip matching → a trace plan for carrying grades across a re-conform.
|
|
85
|
+
- **`project_read` / `project_db`** — read/patch the Resolve project DB (SQLite or Postgres).
|
|
86
|
+
- **`pipeline`** — the DB-as-truth pipeline foundation (see below).
|
|
87
|
+
- **`deliverable`** — deliverable QC / compliance: `deliverable_qc` (ffprobe a render vs its spec →
|
|
88
|
+
pass/fail per field), `loudness_qc` (ebur128 LUFS/true-peak/LRA), `reframe_blanking_check`,
|
|
89
|
+
`conform_completeness`, `re_delivery_diff`, `render_manifest` (build/reconcile), `expand_deliverable`
|
|
90
|
+
(texted/textless/stems/slate/leader entities). Report-only (`gate: review` — never auto-pass-clear).
|
|
91
|
+
- **`media`** — media front-end / AE: `ingest_verify` (hash seal/verify/dupes-by-hash), `media_inventory`
|
|
92
|
+
(fps/codec/colorspace/TC + card gaps), `sync` (TC picture↔sound + drift/MOS), `relink_manifest`,
|
|
93
|
+
`rename_plan` (refuses camera originals) / `reel_normalize`, `turnover_package`, `project_hygiene`.
|
|
94
|
+
- **`editorial`** — editorial integrity: `parse_interchange` (EDL/OTIO/XMEML; AAF = honest refuse),
|
|
95
|
+
`turnover_changelist` (moved/retimed/replaced/new/gone + timing silent-lie guards), `conform_manifest`,
|
|
96
|
+
`marker_roundtrip`.
|
|
97
|
+
- **`provenance`** — provenance / audit: `gallery_lineage`, `grade_provenance` ("why is this graded this
|
|
98
|
+
way"), `cdl_export` (+ `cdl_diff`, round-trip asserted), `revision_tracking`, `episode_report`.
|
|
99
|
+
|
|
100
|
+
### Grading / QC catalog (`drx` actions — all local, deterministic, no Resolve)
|
|
101
|
+
|
|
102
|
+
Frame-stats → arithmetic → `.drx` grade. Frame extraction and grade **apply** are the caller's job;
|
|
103
|
+
these compute the grade offline. Each carries guards that refuse to fabricate a match rather than emit
|
|
104
|
+
a silent no-op.
|
|
105
|
+
|
|
106
|
+
| Action | What |
|
|
107
|
+
|---|---|
|
|
108
|
+
| `level_clips` | within-camera exposure/WB drift → a group hero (whole-frame mean) |
|
|
109
|
+
| `skin_match` | cross-camera skin-tone cohesion (skin-gated mean; throws on log/wrong-space frames) |
|
|
110
|
+
| `shot_match` | b-roll cohesion — gray-world `neutralize` or `hero` match (per-channel median) |
|
|
111
|
+
| `white_balance_match` | WB from a known-neutral patch (gray card) — accurate, not gray-world guess |
|
|
112
|
+
| `contrast_normalize` | match black/white points to a hero (affine gain+offset) |
|
|
113
|
+
| `match_to_reference` | affine mean-std transfer toward an approved still (skin-line gated, luma-preserve) |
|
|
114
|
+
| `saturation_match` | skin/overall saturation cohesion toward a hero |
|
|
115
|
+
| `black_balance` | neutralize a shadow colour cast (p1 black point, offset-only) |
|
|
116
|
+
| `cdl_io` | import ASC CDL (`.cc`/`.ccc`/`.cdl`) → `.drx` |
|
|
117
|
+
| `grade_transfer` | lossless Body copy — a `.drp` group / `.drx` look → an apply-ready `.drx` |
|
|
118
|
+
| `relayout` | programmatic "Cleanup Node Graph" (the UI command has no API) — rewrite node x/y to Resolve's clean row, grade byte-preserved. Live recipe: grab → `relayout` → reset grade → apply (same-structure applies keep the old layout). Bulk whole-project sweep: `project_db` `relayout_node_graphs` |
|
|
119
|
+
| `author_look` / `carry_look` | version an approved season/host look + plan carrying it across episodes |
|
|
120
|
+
| `lut_apply` | attach a named `.cube` LUT to a node (Body-LUT write path, round-trip asserted) |
|
|
121
|
+
| `scope_read` | frame readouts: parade balance, vectorscope skin-line, black-balance, %clip/%crush + intent signals |
|
|
122
|
+
| `intent_tags` | derive L1 shot-intent tags (low_key, monochromatic, motivated_warm) to exclude from neutralize |
|
|
123
|
+
| `verify_grade` | intended vs applied `.drx` → landed/drifted/missing/unverifiable |
|
|
124
|
+
| `extract_frames` | ffmpeg display-referred frame extraction (hard log-refuse) |
|
|
125
|
+
| `gamut_legal` | broadcast-legal + hard-clip QC (measurement only, no grade emitted) |
|
|
126
|
+
|
|
127
|
+
### Pipeline foundation (`pipeline` tool — DB-as-truth)
|
|
128
|
+
|
|
129
|
+
A canonical local **SQLite project DB** is the source of truth; **YAML authoring compiles into it**
|
|
130
|
+
(4-layer inheritance: type → series → episode → deliverable, with validation); a **runner** reads the
|
|
131
|
+
resolved `pipeline:` and executes stages with gates + provenance; **readback** records decoded actual
|
|
132
|
+
state and flags intent↔actual **drift**. Deterministic stages run in Node; Resolve-apply stages emit an
|
|
133
|
+
action plan for the live agent (Node can't drive Resolve). Actions: `compile`, `list_entities`,
|
|
134
|
+
`get_entity`, `ancestry`, `catalog`, `plan`, `execute_stage`, `approve_gate`, `mark_applied`,
|
|
135
|
+
`readback`, `get_run`, `list_runs`, `provenance`, `drift`.
|
|
136
|
+
|
|
137
|
+
## Layout
|
|
138
|
+
- `vendor/` — vendored, MIT copies of the format libraries (CommonJS):
|
|
139
|
+
- `drp-format/` — `.drp` project authoring/editing + grade injection + structural diff
|
|
140
|
+
- `drt-format/` — `.drt` timeline authoring (delegates to drp-format)
|
|
141
|
+
- `drx-codec/` — per-clip DRX grade parse/generate, CDL export, node-tree/curves/qualifier/window codecs
|
|
142
|
+
- `drx-parameters/` — calibrated parameter ranges/ids consumed by drx-codec
|
|
143
|
+
- `conform-qc/` — the offline conform/relink QC engine
|
|
144
|
+
- `server/` — the MCP server, tools, grading cores, and the DB-as-truth pipeline foundation
|
|
145
|
+
- `test/` — offline unit suite (`npm test`); `.prettierrc.json` — formatting config
|
|
146
|
+
- `package.json` — manifest; intentionally CommonJS (no `"type": "module"`) so the vendored libs load
|
|
147
|
+
under the repo's `type: module` root.
|
|
148
|
+
|
|
149
|
+
## Requirements & optional features
|
|
150
|
+
|
|
151
|
+
The **core is pure-JS / MIT with zero required native modules or bundled binaries** — `drp`, `drt`,
|
|
152
|
+
`drx` (incl. the grading catalog needs `sharp`, see below), `offline_ref`, `fusion`, `audio_plan`,
|
|
153
|
+
`conform` (core), `color_trace`, `project_read`, `capabilities` all work out of the box, cloud or local.
|
|
154
|
+
|
|
155
|
+
A few features need something the **user installs themselves** (call the `capabilities` tool for live
|
|
156
|
+
status + install hints):
|
|
157
|
+
|
|
158
|
+
| Feature | Needs | Why not bundled / Install |
|
|
159
|
+
|---|---|---|
|
|
160
|
+
| `audio` (split/trim/convert), conform frame ops | **ffmpeg + ffprobe on PATH** | FFmpeg binaries are **GPL** — bundling them would taint this MIT package. `brew install ffmpeg` / `apt install ffmpeg` / `choco install ffmpeg`. |
|
|
161
|
+
| grading/QC catalog, `conform.verify` (frame compare) | `sharp` (optional) | native module; `npm i sharp` |
|
|
162
|
+
| `pipeline` (project DB), `fairlight` live-DB path, conform lineage/reverse | `better-sqlite3` (optional) | native module; `npm i better-sqlite3`. (The `.drp`-zip Fairlight path needs none.) |
|
|
163
|
+
| YAML authoring (`pipeline compile` from a YAML dir) | `js-yaml` (optional) | pure JS; `npm i js-yaml` |
|
|
164
|
+
|
|
165
|
+
Missing features fail with a clear, actionable message rather than crashing; the server logs a one-line
|
|
166
|
+
"needs setup" summary to stderr at startup.
|
|
167
|
+
|
|
168
|
+
## Provenance & license
|
|
169
|
+
Vendored libraries are clean offline format-interop and deterministic compute code: no secrets, no
|
|
170
|
+
external service coupling, no network calls, no LLM dependency. Where a feature can take a second
|
|
171
|
+
opinion from an AI (the conform engine's advisory `VisionValidator`), it does so only through a
|
|
172
|
+
host-injected adapter — the engine ships the interface and a deterministic fake, never a concrete
|
|
173
|
+
LLM client. Licensed **MIT** under this repo's root `LICENSE` (Copyright DaVinci Resolve MCP
|
|
174
|
+
Contributors and Bradford Operations LLC).
|
|
175
|
+
|
|
176
|
+
> The bundled `vendor/drp-format/templates/media-clip-h264.drp` uses a neutral synthetic source
|
|
177
|
+
> (`/Media/sample.mp4`) — scrubbed of any personal path / third-party clip reference.
|
|
178
|
+
|
|
179
|
+
DRX write paths were calibrated live against DaVinci Resolve 19 Studio (2026-07): primaries use one
|
|
180
|
+
unified `space: 'ui' | 'drx'` value-space flag (panel units by default), and the structural writes —
|
|
181
|
+
power windows (circle/linear/gradient + polygon/curve vertex shapes), HSL/RGB/luma qualifiers, HDR
|
|
182
|
+
zones, ColorSlice globals, blur/key/motion-effects palettes, sat/lum-axis HSL curves, and hue-axis
|
|
183
|
+
HSL curves (single- **and** multi-band, via a canonical bezier-cage emitter that replicates Resolve's
|
|
184
|
+
own serialization; edge-on-band-slot geometry passes through raw) — are panel-readback-verified.
|
|
185
|
+
OFX/ResolveFX plugin params are read AND write verified (params are self-describing
|
|
186
|
+
on the wire; writes render-confirmed live — see the ResolveFX registry for the full
|
|
187
|
+
plugin universe, measured ranges, and per-plugin enum vocabularies). HDR zone
|
|
188
|
+
DEFINITIONS (custom Max Range/falloff), Motion Effects scales, and the tracker-data
|
|
189
|
+
blob are decoded and (where applicable) write-verified. Still experimental to write:
|
|
190
|
+
Color Warper on Resolve 19 (the pin-list wire format is R21's). Per-control status
|
|
191
|
+
lives in `vendor/drx-parameters/CALIBRATION-STATUS.md` — capabilities are flagged
|
|
192
|
+
honestly, not overclaimed.
|
|
193
|
+
The grading catalog and pipeline foundation are unit-tested offline; their Resolve **apply** is the
|
|
194
|
+
caller's job and is validated live separately.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "davinci-resolve-advanced-mcp",
|
|
3
|
+
"version": "0.0.0-dev",
|
|
4
|
+
"private": true,
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"description": "Beyond-the-API DaVinci Resolve MCP — offline .drp/.drt/.drx authoring/editing. Sibling Node server to the Python davinci-resolve-mcp. Dev-local package.json; deps promote to the repo root at packaging.",
|
|
7
|
+
"comment_commonjs": "Intentionally NO \"type\": \"module\" — the vendored libs are CommonJS (require()). The repo root is type:module, so this nested manifest scopes resolve-advanced/**/*.js back to CommonJS.",
|
|
8
|
+
"comment_exports": "Public library surface so a downstream consumer can import the codec/grading/pipeline API, not just spawn the MCP bin. `.` = the lib barrel; `./mcp` = the stdio server entry. Still private:true — publish name/registry + un-privating are a parked decision.",
|
|
9
|
+
"main": "./server/lib.mjs",
|
|
10
|
+
"exports": {
|
|
11
|
+
".": "./server/lib.mjs",
|
|
12
|
+
"./mcp": "./server/index.mjs",
|
|
13
|
+
"./package.json": "./package.json"
|
|
14
|
+
},
|
|
15
|
+
"files": [
|
|
16
|
+
"server/**/*.mjs",
|
|
17
|
+
"vendor/**",
|
|
18
|
+
"README.md"
|
|
19
|
+
],
|
|
20
|
+
"dependencies": {
|
|
21
|
+
"@modelcontextprotocol/sdk": "^1.27.1",
|
|
22
|
+
"adm-zip": "^0.5.16",
|
|
23
|
+
"fast-xml-parser": "^5.7.3",
|
|
24
|
+
"fzstd": "^0.1.1",
|
|
25
|
+
"jszip": "^3.10.1",
|
|
26
|
+
"uuid": "^9.0.0",
|
|
27
|
+
"zod": "^3.25.76",
|
|
28
|
+
"zstd-codec": "^0.1.5"
|
|
29
|
+
},
|
|
30
|
+
"optionalDependencies": {
|
|
31
|
+
"better-sqlite3": "^11.10.0",
|
|
32
|
+
"js-yaml": "^4.3.0",
|
|
33
|
+
"pg": "^8.22.0",
|
|
34
|
+
"sharp": "^0.33.0"
|
|
35
|
+
},
|
|
36
|
+
"peerDependenciesMeta": {
|
|
37
|
+
"_comment": "audio (split/trim/convert) + conform frame ops need system ffmpeg/ffprobe on PATH (NOT bundled — FFmpeg binaries are GPL; this package stays MIT). Install ffmpeg yourself: brew install ffmpeg."
|
|
38
|
+
},
|
|
39
|
+
"scripts": {
|
|
40
|
+
"test": "node --test vendor/drp-format/__tests__/ vendor/drt-format/__tests__/ vendor/drx-codec/__tests__/ test/",
|
|
41
|
+
"test:libs": "node --test vendor/drp-format/__tests__/ vendor/drt-format/__tests__/ vendor/drx-codec/__tests__/",
|
|
42
|
+
"test:server": "node --test test/"
|
|
43
|
+
},
|
|
44
|
+
"engines": {
|
|
45
|
+
"node": ">=18.0.0"
|
|
46
|
+
},
|
|
47
|
+
"devDependencies": {
|
|
48
|
+
"prettier": "^3.9.4"
|
|
49
|
+
}
|
|
50
|
+
}
|