You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix(timemap): reverse and speed ramps both work; decoder reported a reverse as speed 0 — release v2.95.3
The retime api_truth entry carried an explicit warning: "UNTESTED as import
routes: reverse (negative time_scalar / reverse M2) and varying-speed maps — do
not extrapolate the constant-speed result to them." Both are now measured on
Studio 21.0.4.5 and both work; the warning is closed.
REVERSE lands through both import routes. OTIO with time_scalar -1 placed a clip
reading GetSourceStartFrame 95 -> GetSourceEndFrame 46; EDL with M2 -24.0 read
48 -> 0. So the API DOES expose direction — a reversed clip reports source start
GREATER than source end, a negative span.
VARYING-SPEED RAMPS cannot be expressed in OTIO (LinearTimeWarp is one
time_scalar, constant by construction) but can be authored offline and survive.
A Sm2TimeMap built with buildTimemap carrying 0-2s record at 0.5x and 2-4s at
2.0x was patched into a clip's MediaTimemapBA, imported, and re-exported by
Resolve with the segments UNCHANGED. Independent API-side confirmation: the clip
read source 0..120 over a 96-frame record, and 2s@0.5x (24 source frames) +
2s@2.0x (96) is exactly 120.
Two decoder bugs, both exposed by the first reversed map media-timemap.js ever
saw:
- Fixed-offset keyframe reads. Each point omits whichever of recordSec/sourceSec
is zero (protobuf default-omission), so readDoubleLE(1)/readDoubleLE(10) threw
"offset out of range" on every reversed map. Forward maps decoded only because
both values happened to be non-zero.
- A hardcoded (0,0) origin. A reversed clip starts at the far end of the source
and Resolve encodes that starting offset as a TOP-LEVEL protobuf field 2
double. Assuming (0,0) made a reverse decode as SPEED 0 — a plausible wrong
number, worse than a crash. It now decodes as -1.
Four tests pin the reverse shape, the omitted-value points, the negative-speed
result, and that forward maps are unaffected.
Also records a trap that cost real time: buildTimemap returns a BUFFER, and
writing it into XML without .toString('hex') embeds mojibake. The failure is
silent — the clip imports cleanly and reads 0..0, indistinguishable from the
degenerate-map signature this ledger describes for xmeml imports, so it reads as
"Resolve rejected the retime" when it is a caller bug.
Python suite 2633 passed / 1 skipped; Node suite 818, 0 fail.
Copy file name to clipboardExpand all lines: CHANGELOG.md
+45Lines changed: 45 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2,6 +2,51 @@
2
2
3
3
Release history for the DaVinci Resolve MCP Server. The latest release is summarized in the root README; older entries live here to keep the README focused.
4
4
5
+
## What's New in v2.95.3
6
+
7
+
Closes the retime entry's explicit `UNTESTED` warning: **reverse and
8
+
variable-speed ramps both work**, and fixes two decoder bugs found proving it.
9
+
10
+
### Measured — reverse lands through both import routes
11
+
12
+
On Studio 21.0.4.5. OTIO with a negative `time_scalar` (-1) placed a clip reading
13
+
`GetSourceStartFrame` 95 → `GetSourceEndFrame` 46; EDL with a negative `M2` rate
14
+
(-24.0 at 24fps) read 48 → 0. **The API does expose direction** — a reversed clip
15
+
reports source start GREATER than source end, i.e. a negative span.
一个 Model Context Protocol (MCP) 服务器,让 AI 助手通过官方脚本 API 控制 DaVinci Resolve Studio(达芬奇)。它提供完整的 API 覆盖,外加带护栏的工作流助手,涵盖剪辑、媒体池整理、渲染设置、审阅标记、调色、Fusion、Fairlight、项目生命周期任务、扩展开发,以及不碰源媒体的媒体分析。
0 commit comments