Setup
Requirements
- Python 3.10+ for the CLI / MCP process (the venv can be 3.14).
- DaVinci Resolve running, with a project open.
- macOS, Windows, or Linux.
Which Resolve you have
This matters more than the rest of the install.
| Check | Website free | App Store free (“Lite”) | Studio |
|---|---|---|---|
| Bundle ID (macOS) | com.blackmagic-design.DaVinciResolve | com.blackmagic-design.DaVinciResolveLite | com.blackmagic-design.DaVinciResolve |
_MASReceipt | absent | present | absent |
doctor resolve_edition | desktop | lite-mas | desktop |
External scriptapp | no (free) | no | yes, if External scripting = Local |
| Workspace → Scripts | yes | sandboxed; scripts live in the container | yes |
| Python in-app scripts | if Resolve can see Python 3 | blocked (Operation not permitted) | yes |
| Lua in-app scripts | yes | yes (no UIManager GUI) | yes |
Confirm:
defaults read "/Applications/DaVinci Resolve.app/Contents/Info" CFBundleIdentifier
ls "/Applications/DaVinci Resolve.app/Contents/_MASReceipt"
App Store Lite is sandboxed. User scripts must sit under:
~/Library/Containers/com.blackmagic-design.DaVinciResolveLite/Data/Library/Application Support/Fusion/Scripts/
video-harness install-bridge copies into that tree when it exists. The website installer is still the better free build: not sandboxed, same $0 license.
Install the harness
cd video-harness
python3 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
video-harness doctor
Free edition: in-app bridge
External processes cannot call scriptapp("Resolve") on free Resolve (gated ~19.1). The harness starts a Lua script inside Resolve. That script polls a JSON file queue the CLI/MCP write to.
video-harness install-bridge
Then:
- Open DaVinci Resolve and a project.
- Workspace → Scripts → Utility → video_harness_bridge. Click once.
- No window. No “limitation” dialog. That is expected (see below).
video-harness doctor— you want"bridge": { "ok": true, "transport": "lua-file" }.
Do not click the script again unless doctor says the bridge is down. Extra copies race on the same RPC files.
Python scripts (optional)
.py files only appear in Scripts if Resolve can exec Python 3. On macOS it looks at PYTHON3HOME or /usr/local/bin/python3, not Homebrew on PATH.
video-harness enable-python
# if it prints sudo_symlink, run that command
# Cmd+Q Resolve, reopen
On App Store Lite, even a correct python3 is Operation not permitted. Use the Lua script.
“You have reached a limitation with DaVinci Resolve”
Since Resolve 19.1, UIManager script GUIs are Studio-only. A script that opens a Fusion window triggers that dialog on free. The shipped Lua bridge is headless on purpose. Open Workspace → Console if you want the bridge is RUNNING prints.
Studio
Preferences → General → External scripting using → Local.
doctor should show scriptapp.connected: true. The MCP then uses fusionscript directly; the Lua bridge is optional.
Reload the bridge after code updates
install-bridge updates files on disk. A script already running still has the old Lua in memory. Click the script once more (after stopping extras if doctor shows several fuscript PIDs).