Skip to main content

A CLI for DaVinci Resolve 18+ — project, media, render, and timeline control for humans and AI agents.

Project description

image

davinci-resolve-cli (dvr)

PyPI version Python versions License: MIT Build

A CLI for DaVinci Resolve 18+ — project / media / render / timeline control for humans and AI agents.

Install

pipx install davinci-resolve-cli

Requires DaVinci Resolve 18+ already installed (Studio recommended). macOS first; Windows/Linux follow.

Quickstart

# Health check
dvr doctor

# Project ops
dvr project list
dvr project current

# Media batch
dvr media import ~/footage --recursive --bin "Day1"

# Render (async)
JOB=$(dvr render submit --preset "H.264 Master" --timeline cur --output ~/out.mp4 --format json | jq -r .jobId)
dvr render wait "$JOB"

# Timeline scripted edits
dvr timeline marker add --at 01:00:05:00 --note "review"

Output formats

context default
TTY table (rich)
pipe / non-TTY json

Override with --format json|yaml|table or DVR_OUTPUT=yaml.

AI Agent

dvr ships two complementary AI-agent integration paths.

1. Skill file (SKILL.md)

A SKILL.md packaged with the wheel; auto-discovered by skill systems that scan installed packages. Five worked example prompts:

  • "Render the current timeline as 1080p mp4"
  • "List clips imported today and tag them green"
  • "Wait for render job X and tell me when it finishes"
  • "Check if Resolve is ready"
  • "Tag all clips in Day1 bin as Green for review"

2. MCP server (dvr mcp)

Standard stdio MCP server exposing 20 tools across doctor / project.* / media.* / render.* / timeline.* namespaces. Any MCP-aware AI client can wire it up:

// .mcp.json or your client's MCP server config
{
  "mcpServers": {
    "davinci-resolve": {
      "command": "dvr",
      "args": ["mcp"]
    }
  }
}

Tool errors are returned as structured JSON {"errorCode", "message", "hint"} matching the CLI's stderr contract — same error codes (resolve_not_running, validation_error, not_found, etc.) so an agent can branch on them deterministically.

Verify the server is reachable:

dvr mcp   # blocks, reads stdin/writes stdout per MCP spec

Compatibility

OS Status
macOS (Apple Silicon / Intel) ✅ primary, end-to-end verified
Windows ✅ unit + CI tested (real-Resolve smoke pending community feedback)
Linux ✅ unit + CI tested (Resolve Studio Linux only)
Resolve Status
18.x Studio
18.x Free ⚠️ partial (render encoders limited)
17.x or older ❌ unsupported

Cookbook

Five end-to-end recipes covering the most common workflows. Each is a copy-paste shell snippet that assumes DaVinci Resolve 18+ Studio is running and a project is open.

1. Render the current timeline as 1080p H.264 mp4

# Preflight: make sure the bridge is healthy
dvr doctor --format json | jq -e '.bridgeStatus == "ok"' >/dev/null || { echo "Resolve not ready"; exit 2; }

# Pick the first preset whose name contains "H.264"
PRESET=$(dvr render presets --format json | jq -r '.[] | select(test("H\\.264"; "i"))' | head -1)

# Submit (async — returns immediately), then block until done
JOB=$(dvr render submit --preset "$PRESET" --timeline cur --output ~/Renders/out.mp4 --start --format json | jq -r .jobId)
dvr render wait "$JOB"   # progress to stderr, terminal status to stdout

2. Import a SD card's footage into per-date bins

# Assumes ~/footage/<YYYY-MM-DD>/ structure
for day_dir in ~/footage/*/; do
  day=$(basename "$day_dir")
  dvr media import "$day_dir" --bin "$day" --recursive --format json | jq '.imported | length' \
    | xargs -I{} echo "imported {} clips into '$day'"
done

3. Tag every clip in a bin as "Green" for review (skipping ones already tagged)

BIN="Day1"
IDS=$(dvr media list --bin "$BIN" --format json \
  | jq -r '.[] | select(.flags | index("Green") | not) | .id')
[ -n "$IDS" ] && dvr media tag $IDS --color Green --format json

4. Drop chapter markers from a CSV file (timecode, label)

# chapters.csv:
#   00:00:00:00,intro
#   00:01:30:00,demo
#   00:04:15:00,outro
while IFS=, read -r tc label; do
  dvr timeline marker add --at "$tc" --name "$label" --color Sky --format json >/dev/null
done < chapters.csv

dvr timeline marker list --format json | jq '.[] | "\(.timecode) → \(.name)"'

5. AI agent: render via MCP server

Wire dvr mcp into any MCP-aware client (most desktop AI assistants now support MCP — check your client's docs for the right config file path):

// ~/.config/<client>/mcp.json
{ "mcpServers": { "davinci-resolve": { "command": "dvr", "args": ["mcp"] } } }

Then ask the agent:

"Render the currently open timeline as 1080p H.264, save it to ~/out.mp4, and tell me when it's done."

The agent will call doctorrender.presetsrender.submit(start=true)render.wait automatically. Tool errors come back as structured {errorCode, message, hint} so the agent can branch on resolve_not_running / validation_error / etc. deterministically.

Development

pip install -e ".[dev]"
pytest                              # unit only
pytest -m integration               # requires Resolve running

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

davinci_resolve_cli-0.2.2.tar.gz (55.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

davinci_resolve_cli-0.2.2-py3-none-any.whl (42.3 kB view details)

Uploaded Python 3

File details

Details for the file davinci_resolve_cli-0.2.2.tar.gz.

File metadata

  • Download URL: davinci_resolve_cli-0.2.2.tar.gz
  • Upload date:
  • Size: 55.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for davinci_resolve_cli-0.2.2.tar.gz
Algorithm Hash digest
SHA256 136ad5473970fcfa2af73887483faa401596e8805fe8a0313bd8e086a0d9596d
MD5 1c94b795d7a27a7ba688742e6a31ba2c
BLAKE2b-256 c1565817889dc73db76b7ff7d97fec78a4374c26e4abeaa747906bf3cff4ff72

See more details on using hashes here.

Provenance

The following attestation bundles were made for davinci_resolve_cli-0.2.2.tar.gz:

Publisher: publish.yml on Poechant/davinci-resolve-cli

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file davinci_resolve_cli-0.2.2-py3-none-any.whl.

File metadata

File hashes

Hashes for davinci_resolve_cli-0.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 67a86f7191c888f8b6dc18e69e33384cddf33810c6d9fa3bc9ac670d7141871c
MD5 044f384b2a2c2e373ae8ac96f27bec96
BLAKE2b-256 a7663fcd05f9df84aa7eabff0142017e138ad4822cd71cae0250ebea27d5adb6

See more details on using hashes here.

Provenance

The following attestation bundles were made for davinci_resolve_cli-0.2.2-py3-none-any.whl:

Publisher: publish.yml on Poechant/davinci-resolve-cli

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page