Repository navigation
Releases
Releases · 2sem/davinci-resolve-lite-mcp
v0.18.0 — PyPI, MCP Registry, and startup update check
Release 0.18.0 — PyPI packaging, MCP Registry listing, and a brew/pod-style startup update check.
Patch note (changes since 0.17.0)
Added
- PyPI packaging —
pip install davinci-resolve-lite-mcpis now a real alternative togit clone.pyproject.toml(zero runtime deps, src-layout, version dynamically read fromSERVER_VERSION) plus adavinci-mcp-install/davinci-mcp-uninstallconsole-script pair that portsinstall.sh/uninstall.sh's Lite-vs-Studio detection and copy-vs-symlink logic to pure Python. Publishing a GitHub release now auto-publishes to PyPI via Trusted Publishing (OIDC, no stored token) via.github/workflows/publish.yml. - MCP Registry listing —
server.jsonlists this project asio.github.2sem/davinci-resolve-lite-mcpon the MCP Registry, for discoverability only. Deliberately metadata-only (nopackages/remotes): this server can't be auto-spawned by an MCP client the way a typical registry server can — it must run inside Resolve's own embedded Python interpreter, started by hand from the Scripts menu — so apackagesentry would just be a broken "install" button. - Startup update check — like
brew/CocoaPods, each server launch checks PyPI in the background for a newer release and prints a one-line nudge to the Resolve Console if one exists. Best-effort by design: runs on its own thread so it never delays startup, and any failure (offline, PyPI down) is swallowed silently to the logfile only, never surfaced as an error. Opt out withDAVINCI_MCP_SKIP_UPDATE_CHECK=1.
Notes
SERVER_VERSION→0.18.0. Singlebump: release 0.18.0commit on the release branch.- Constituent PRs: #55 (PyPI packaging), #56 (manual publish trigger), #57 (README polish), #58 (MCP Registry listing), #59 (README registry mention), #60 (startup update check), #61 (this release bump). Offline
ALL TESTS PASSED(test_server.py,test_installer.py,test_update_check.py) on Python 3.9 and 3.12. - Prompted by issue #54 (PyPI + registry request).
v0.17.0 — Lite API gaps, pinned port config
Release 0.17.0 — 6 new Lite-compatible Resolve 20.x/21.0 API tools, pinned port config.
Patch note (changes since 0.16.0)
Added
- 6 new tools covering Resolve 20.x/21.0 scripting API additions that work on the free Lite edition:
monitor_growing_file,reset_node_colors,get_fairlight_presets,apply_fairlight_preset,disable_background_tasks,set_timeline_item_name.create_projectnow takes an optionalmediaLocationPath;render_current_timeline/add_render_jobtake optionalexportSubtitle/subtitleFormat. Neural Engine / Studio-only API additions (transcription, audio classification, motion-blur removal, Intellisearch/slate analysis, speech generation, voice isolation) were deliberately left out — Lite can't run them. 157 → 163 tools. - Persistent port/host config — drop
~/Movies/davinci-resolve-lite-mcp.config.json({"host": "...", "port": N}) to pin the listening port.~/Moviesis used because the sandboxed Lite app cannot read~/.config(XDG path still honored for the non-sandboxed Studio build, plus aDAVINCI_MCP_CONFIGoverride). Resolution order:DAVINCI_MCP_PORT/DAVINCI_MCP_HOSTenv > config file > defaults.
Changed
- A configured port is now pinned — the server binds exactly that port and no longer auto-increments to a neighbour, so a registered Claude URL never silently drifts (previously surfaced as
HTTP 404 at …:8765/mcpon reconnect). Auto-increment still applies only to the bare default8765. Startup banner shows pin status/source, or the exact steps to pin it. - Stop paths (
stop.sh/stop_davinci_mcp_server.py) resolve the port through the same config, so a config-pinned port outside the default scan window is still reachable.
Notes
SERVER_VERSION→0.17.0. Singlebump: release 0.17.0commit on the release branch.- Constituent PR #49 (Lite API gaps) merged; port-pin config landed earlier via #46. Offline
ALL TESTS PASSED(163 tools). 4 of the 6 new tools live-verified against a real Resolve Lite 21.0.4.5 session and clip;apply_fairlight_preset/disable_background_taskspending first live run.
🤖 Generated with Claude Code
v0.16.0 — clip transform animation, linked blade, timestamped log
Release 0.16.0 — clip transform animation, linked-A/V blade, timestamped Console log.
Patch note (changes since 0.15.0)
Added
- Clip transform animation —
insert_clip_fusion_transform/edit_clip_fusion_transform/remove_clip_fusion_transform. The Edit-page transform can't be keyframed via the API (SetPropertyis static), so these drive a Fusion Transform on the clip: zoom (Size), pan (Center), rotate (Angle) — static or keyframed (zoom_from/zoom_toetc. overframes). Fusion-native units: zoom = multiplier (1.0=100%), pan = normalized 0–1 (0.5=center), angle = degrees. 154 → 157 tools.
Changed
split_clipsplits linked A/V together — blading a clip with linked audio now splits both tracks at the same frame and re-links the halves (like the UI razor). Passlinked=falsefor a single-track blade.cut_rangeblades single-track.- Console log lines are timestamped to match the logfile (the per-call
[davinci-mcp] … -> ok (Nms)line); the one-time startup banner stays un-timestamped.
Notes
SERVER_VERSION→0.16.0. Singlebump: release 0.16.0commit on this branch.- Constituent PRs #40 (transform CRUD), #41 (linked split), #42 (console timestamp) — each Codex-reviewed (transform CRUD took 3 rounds), all merged. Offline
ALL TESTS PASSED(157 tools); split/cut/transform live tests pass on Resolve Lite.
🤖 Generated with Claude Code
v0.15.0 — cut_range + fixed ripple delete
Release 0.15.0 — range cut + fixed ripple delete.
Patch note (changes since 0.14.0)
Added
cut_range— remove a timeline frame range[begin, end)on a track and close the gap (the "cut a section" / ripple-trim operation). Blades atbeginandend(viasplit_clip), removes the clips inside, and shifts the downstream clips left byend − begin.begin/endare 0-based;trackTypedefaults tovideo,trackIndexto1. 153 → 154 tools.- Limitations: video/audio only; bladed + shifted clips become fresh items (lose grade/Fusion/transform/retime); only the operated track shifts, so linked audio on other tracks can desync.
Fixed
- Ripple delete was broken. Resolve Lite's
DeleteClips(items, True)wipes the whole track, not just the gap — sodelete_timeline_item(ripple=true)silently emptied the track. Bothcut_rangeanddelete_timeline_itemnow ripple by hand: non-ripple delete, then re-add the downstream clips shifted left (fallbacks/12). - Off-by-one on real media.
split_clip/ ripple derived the out-point fromGetSourceEndFrame(), whose inclusive/exclusive convention varies, dropping the last frame on UI-added media. The out-point is now derived from the clip's timeline duration → frame-accurate cuts.
Notes
SERVER_VERSION→0.15.0. Singlebump: release 0.15.0commit on this branch.cut_range(PR #38) went through four Codex review rounds (tail boundaries, partial-edit preflight, negativebegin, subtitle rejection), all resolved. Verified live and frame-accurate on a real timeline:[108000..116501]cut[110000,112000)→[108000..110000][110000..114501]. OfflineALL TESTS PASSED(154 tools); split/cut live tests pass.
🤖 Generated with Claude Code
v0.14.0 — split_clip (blade/razor)
Release 0.14.0 — adds the blade/razor primitive.
Patch note (changes since 0.13.1)
Added
split_clip— blade/razor a timeline clip into two contiguous clips, at the playhead by default (like the razor tool):set_timecodethensplit_clipauto-finds the clip under the playhead (trackTypedefaults tovideo,trackIndexto1). Optionalframe(0-based) anditemIndexoverrides.- Resolve has no native split, so it deletes the clip and re-adds its two halves from the same media-pool source at the exact record frames — in place, no gap (verified on populated timelines).
- To CUT a range:
split_clipat both ends, thendelete_timeline_item(ripple=true)on the middle clip (ripple closes the gap). No separate cut tool. - 152 → 153 tools.
- Limitations: only media-backed clips can be bladed — titles, generators, compound clips and nested timelines have no media-pool source; and re-added halves are fresh items, so clip-level grade/Fusion/transform/retime and linked audio are not preserved.
Fixed
- Playhead frame lookup handles two coordinate gotchas: 0-based
TimelineItemframes vs absolute timecode/GetStartFrame(fallbacks/11), and drop-frame timecode (29.97/59.94).
Notes
SERVER_VERSION→0.14.0. Singlebump: release 0.14.0commit on this branch.split_clip(PR #36) was Codex-reviewed twice (frame-contract + drop-frame), both addressed. OfflineALL TESTS PASSED(153 tools);split_clip+split_clip_at_playheadpass live on Resolve Lite.
🤖 Generated with Claude Code
v0.13.1 — Fusion title styling, fonts, title-text editing
Release 0.13.1 — patch on top of 0.13.0.
Patch note (changes since 0.13.0)
Added
style_fusion_titlefont pre-validation — validates the requested style against the OS font database (same data aslist_fonts). If the family is a known OS font but lacks the chosen style (e.g.Impacthas no Bold), it errors up front instead of producing an uncatchable Fusion render error. Fonts absent from the OS DB (Fusion-bundled, e.g. the default "Open Sans") are not rejected.
Fixed
_load_system_fontsnormalizessystem_profilertimeout and parse failures to a clean error, so font-validation always degrades to "skip" rather than failing the call.- README install snippet uses the real clone URL.
Notes
SERVER_VERSION→0.13.1. Singlebump: release 0.13.1commit on this branch.- Constituent PRs (#32 font-validation, #33 README) were Codex-reviewed and merged individually. Offline suite
ALL TESTS PASSED(152 tools); style tests pass live on Resolve Lite.
🤖 Generated with Claude Code