davinci-resolve-mcp 2.93.0 → 2.93.1

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/CHANGELOG.md CHANGED
@@ -2,6 +2,23 @@
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.93.1
6
+
7
+ Documentation only; no behavior changed and no Resolve validation required.
8
+
9
+ - **The immediate-retake blind spot is now in the media-analysis guide.** Issue
10
+ #125 asked for three things; the `rank_takes` caveat and the
11
+ `possible_swallowed_retakes` flag shipped in v2.83.0, but the documented
12
+ limitation never did — the guide had zero mentions of retakes, so the only way
13
+ to learn that word timestamps are untrustworthy around an immediate re-read was
14
+ to already be looking at output that flagged one. The new section states what
15
+ whisper does (emits a re-read sentence once, aligns it to the first take, and
16
+ absorbs pause-plus-second-take into a single word), names every feature that
17
+ inherits it, and records why silence detection cannot substitute — the
18
+ swallowed span measured **−12.1 dB** against adjacent speech at −16.7 dB, and a
19
+ silence pass recalled **3 of 17**. It is explicit that the flag is never a cut
20
+ point, and that no flags is weak evidence rather than proof.
21
+
5
22
  ## What's New in v2.93.0
6
23
 
7
24
  `source_end` is a source frame again, and the guidance v2.91.0 shipped about WAV
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  English | [简体中文](README.zh-CN.md)
4
4
 
5
- [![Version](https://img.shields.io/badge/version-2.93.0-blue.svg)](https://github.com/samuelgursky/davinci-resolve-mcp/releases)
5
+ [![Version](https://img.shields.io/badge/version-2.93.1-blue.svg)](https://github.com/samuelgursky/davinci-resolve-mcp/releases)
6
6
  [![npm](https://img.shields.io/npm/v/davinci-resolve-mcp.svg?label=npm&color=CB3837)](https://www.npmjs.com/package/davinci-resolve-mcp)
7
7
  [![API Coverage](https://img.shields.io/badge/API%20Coverage-100%25-brightgreen.svg)](docs/reference/api-coverage.md)
8
8
  [![Tools](https://img.shields.io/badge/MCP%20Tools-34%20(353%20full)-blue.svg)](#server-modes)
package/README.zh-CN.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  [English](README.md) | 简体中文
4
4
 
5
- [![Version](https://img.shields.io/badge/version-2.93.0-blue.svg)](https://github.com/samuelgursky/davinci-resolve-mcp/releases)
5
+ [![Version](https://img.shields.io/badge/version-2.93.1-blue.svg)](https://github.com/samuelgursky/davinci-resolve-mcp/releases)
6
6
  [![npm](https://img.shields.io/npm/v/davinci-resolve-mcp.svg?label=npm&color=CB3837)](https://www.npmjs.com/package/davinci-resolve-mcp)
7
7
  [![API Coverage](https://img.shields.io/badge/API%20Coverage-100%25-brightgreen.svg)](docs/reference/api-coverage.md)
8
8
  [![Tools](https://img.shields.io/badge/MCP%20Tools-34%20(353%20full)-blue.svg)](#服务器模式)
@@ -12,7 +12,7 @@
12
12
  [![Python](https://img.shields.io/badge/python-3.10+-green.svg)](https://www.python.org/downloads/)
13
13
  [![License](https://img.shields.io/badge/license-MIT-blue.svg)](https://opensource.org/licenses/MIT)
14
14
 
15
- > 本翻译对应 v2.93.0 版 README。如与英文原版有出入,以 [英文原版](README.md) 为准。
15
+ > 本翻译对应 v2.93.1 版 README。如与英文原版有出入,以 [英文原版](README.md) 为准。
16
16
 
17
17
  一个 Model Context Protocol (MCP) 服务器,让 AI 助手通过官方脚本 API 控制 DaVinci Resolve Studio(达芬奇)。它提供完整的 API 覆盖,外加带护栏的工作流助手,涵盖剪辑、媒体池整理、渲染设置、审阅标记、调色、Fusion、Fairlight、项目生命周期任务、扩展开发,以及不碰源媒体的媒体分析。
18
18
 
@@ -798,6 +798,48 @@ When analysis reveals potential issues, always alert the user:
798
798
 
799
799
  ---
800
800
 
801
+ ## Known Limitation: word timestamps lie around immediate retakes
802
+
803
+ **Transcripts do not report a re-read sentence twice.** When a speaker
804
+ immediately re-reads a line — the ordinary way people self-correct while
805
+ recording — whisper emits the text **once**, aligns it to the **first** take, and
806
+ absorbs "pause + entire second take" into the duration of a **single word**.
807
+ Measured on real Chinese material: one single-character word spanning **6.06 s**,
808
+ another **4.4 s**, where real speech runs 4–7 chars/s. Reproduced on English with
809
+ the identical signature: the word *"lives"* carrying **2.42 s**. Issue #125.
810
+
811
+ Everything downstream of the transcript inherits it:
812
+
813
+ - **Retake and false-start detection never fires** for this class — the
814
+ transcript says the sentence was spoken cleanly, once.
815
+ - **`rank_takes` undercounts restarts**, so a take that stumbled and recovered
816
+ can outscore one that did not. Its `caveat` field says so at runtime.
817
+ - **Word-level cuts near a swallow land inside speech**, because the timestamps
818
+ inflate around the absorption point.
819
+ - **`plan_transcript_tighten` is structurally blind here** — its false-start
820
+ heuristic only sees restarts the transcript reports.
821
+
822
+ **Silence detection cannot rescue it.** The swallowed span is not silence: in the
823
+ original measurement it was breathing and keyboard noise peaking at **−12.1 dB**,
824
+ *louder* than the adjacent real speech at −16.7 dB. A silence-based pass recalled
825
+ **3 of 17** ground-truth instances at any threshold.
826
+
827
+ **What the analysis output gives you.** Transcript-reading results carry
828
+ `possible_swallowed_retakes`: words whose duration exceeds an absolute bar
829
+ (default **1.2 s**), which is language-agnostic and computed from data the
830
+ pipeline already has. Treat it as a **flag, not a cut point** — where inside the
831
+ stretched word the second take begins is precisely what the swallow destroyed, so
832
+ those need a human ear or a re-transcription of the isolated window before
833
+ anything is removed.
834
+
835
+ **Read the empty case correctly.** No flags is *weak evidence, not proof*. A
836
+ swallow smeared across several words instead of concentrated in one will not
837
+ clear the bar, and that case is expected to exist. The bar itself is a usable
838
+ default chosen from limited data — 17 real instances in Chinese, confirmed by a
839
+ single genuine English swallow in synthetic material — not a tuned constant.
840
+
841
+ ---
842
+
801
843
  ## Key Principles
802
844
 
803
845
  - **The source is sacred.** Read from source files, write only to analysis sidecars unless a visual analysis workflow needs sampled frames/contact sheets in a separate analysis directory. Confirmed metadata publishing writes to Resolve's project database, not source media. `analyze_media` can opt out with `include_visuals=false`.
package/install.py CHANGED
@@ -36,7 +36,7 @@ from src.utils.update_check import (
36
36
 
37
37
  # ─── Version ──────────────────────────────────────────────────────────────────
38
38
 
39
- VERSION = "2.93.0"
39
+ VERSION = "2.93.1"
40
40
  # Only hard floor: mcp[cli] requires Python 3.10+. There is no upper bound —
41
41
  # Resolve's scripting bridge loads into newer interpreters on recent builds
42
42
  # (Python 3.14 verified against Resolve Studio 20.3.2). Older Resolve builds
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "davinci-resolve-mcp",
3
- "version": "2.93.0",
3
+ "version": "2.93.1",
4
4
  "description": "NPM bootstrapper for the DaVinci Resolve MCP Server.",
5
5
  "license": "MIT",
6
6
  "author": "Samuel Gursky <samgursky@gmail.com>",
@@ -87,7 +87,7 @@ if not logging.getLogger().handlers:
87
87
  handlers=[logging.StreamHandler()],
88
88
  )
89
89
 
90
- VERSION = "2.93.0"
90
+ VERSION = "2.93.1"
91
91
  logger = logging.getLogger("davinci-resolve-mcp")
92
92
  logger.info(f"Starting DaVinci Resolve MCP Server v{VERSION}")
93
93
  logger.info(f"Detected platform: {get_platform()}")
package/src/server.py CHANGED
@@ -11,7 +11,7 @@ Usage:
11
11
  python src/server.py --full # Start the 353-tool granular server instead
12
12
  """
13
13
 
14
- VERSION = "2.93.0"
14
+ VERSION = "2.93.1"
15
15
 
16
16
  import base64
17
17
  import os