Hermes DaVinci Resolve Plugin
This plugin lets Hermes Agent work with DaVinci Resolve on macOS.
It is intentionally dual-mode:
- DaVinci Resolve Studio live control: Hermes can connect to the Resolve Python scripting API, inspect the active project, import media, create timelines, add markers, build scripted rough cuts, and queue renders.
- Free DaVinci Resolve interchange: Hermes cannot reliably control the running free Resolve app through
DaVinciResolveScript.scriptapp("Resolve"), so the plugin generates importable files such as FCPXML timelines and marker CSV manifests.
The design goal is that Hermes can give users a useful editing workflow on the free product while offering direct project control for users who have Studio.
What This Plugin Can Do
With DaVinci Resolve Studio, a user can ask Hermes to:
- Open Resolve Studio.
- Check whether live scripting is reachable.
- Summarize the active project and current timeline.
- Scan local folders for footage, music, stills, and other media.
- Import media into the media pool.
- Create an empty or media-seeded timeline.
- Append footage or audio to the active timeline.
- Add timeline markers.
- Build a rough cut from a structured script-driven edit plan.
- Configure and optionally start a render job.
- Poll render status.
With free DaVinci Resolve, a user can ask Hermes to:
- Scan media folders.
- Generate an FCPXML timeline that can be imported into Resolve.
- Generate marker CSV/manifests for review notes or edit beats.
Free Resolve still requires the user to import the generated interchange files through the Resolve UI. The plugin does not claim live project control when the free edition is detected.
Requirements
- macOS.
- Hermes Agent with local plugin support.
- DaVinci Resolve or DaVinci Resolve Studio installed locally.
- Python environment capable of importing the plugin files.
- For Studio live control:
- DaVinci Resolve Studio must be installed.
- Resolve Studio must be open.
- A project should be open for project-mutating tools.
- Resolve preferences must allow local scripting:
- DaVinci Resolve > Preferences > System > General > External scripting using: Local
- The Resolve scripting module must be available at a standard Blackmagic path or through
RESOLVE_SCRIPT_API.
The plugin searches common Resolve module locations, including:
/Library/Application Support/Blackmagic Design/DaVinci Resolve/Developer/Scripting/Modules
/Applications/DaVinci Resolve/DaVinci Resolve.app/Contents/Libraries/Fusion
Installation
Install the repository as a standalone user plugin, then explicitly enable it:
git clone https://github.com/wassermanproductions/hermes-davinci-resolve-plugin.git ~/.hermes/plugins/davinci-resolve
hermes plugins enable davinci-resolve
Restart Hermes, then confirm that davinci-resolve is enabled with:
hermes plugins list
This is intentionally a standalone plugin. It does not modify Hermes core files.
Hermes loads it as a namespaced package through the normal user-plugin
PluginManager path.
The plugin metadata lives in plugin.yaml. The Python entry point is __init__.py, with tool schemas in schemas.py, Hermes handlers in tools.py, and Resolve-specific behavior in resolve_bridge/operations.py.
Tool List
Read-only and diagnostic tools:
resolve_capabilities: returns a compact operating guide for Hermes.resolve_launch: opens Resolve or Resolve Studio and reports scripting reachability.resolve_probe: importsDaVinciResolveScript, checksscriptapp("Resolve"), and recommends a mode.resolve_project_summary: summarizes the active Studio project and current timeline.resolve_scan_media_folder: scans local folders for usable media files.resolve_render_status: checks Studio render queue/progress.
Studio live-control mutating tools:
resolve_import_media: imports media into the current project's media pool.resolve_create_timeline: creates a timeline, optionally seeded with media.resolve_append_to_current_timeline: imports and appends media to the active timeline.resolve_add_timeline_marker: adds a marker to the active timeline.resolve_create_scripted_timeline: builds a Studio timeline from a structured edit plan.resolve_render_timeline: creates and optionally starts a render job.
Free Resolve interchange tools:
resolve_generate_fcpxml_timeline: writes an importable.fcpxmltimeline.resolve_generate_marker_csv: writes a marker CSV/manifest.
Safety Model
All mutating Studio tools default to dry_run=true.
To actually change a Resolve Studio project, Hermes must call the tool with:
{
"dry_run": false,
"confirm": true
}
If dry_run=false is supplied without confirm=true, the plugin rejects the operation. This is deliberate so an agent can show the intended edit plan before touching the user's active project.
Recommended agent behavior:
- Probe first.
- Dry-run every project-changing action.
- Explain the planned changes to the user.
- Only mutate after explicit user approval.
- Never delete media, timelines, bins, or render jobs unless a future tool explicitly implements deletion and the user asks for it.
Mode Detection
Hermes should start an unfamiliar session with:
resolve_capabilitiesresolve_launchresolve_probe
resolve_probe returns a recommended_mode field:
studio_live_control: the Resolve scripting module imported andscriptapp("Resolve")returned a live Resolve object.free_interchange: the module imported, free Resolve appears to be installed, but live control is not reachable.diagnostic: Resolve scripting is not reachable and the plugin cannot confidently identify the reason.
When recommended_mode is free_interchange, Hermes should avoid Studio-only live-control tools and use FCPXML/CSV generation instead.
Studio Workflow: Scripted Rough Cut And Render
For a user request like:
Take the clips in this folder, edit them together following this script, add music like this reference, and give me a final QuickTime.
Hermes should use this flow for DaVinci Resolve Studio:
- Call
resolve_launchwithvariant="studio"or an explicitapp_path. - Call
resolve_probe. - Continue only if
recommended_modeisstudio_live_control. - Call
resolve_project_summaryto confirm the active project context. - Call
resolve_scan_media_folderfor footage folders and music folders. - Interpret the user's script in the agent layer.
- Build a structured
clipsarray forresolve_create_scripted_timeline. - Include optional
music_pathsandmarkersfor review beats, missing-shot notes, or script sections. - Call
resolve_create_scripted_timelinewithdry_run=true. - Ask for approval or rely on previously granted approval from the user workflow.
- Call
resolve_create_scripted_timelinewithdry_run=falseandconfirm=true. - Call
resolve_render_timelinewithdry_run=true. - After approval, call
resolve_render_timelinewithdry_run=false,confirm=true, andstart_render=true. - Poll
resolve_render_statusuntil the render completes.
The plugin does not make creative editorial choices by itself. Hermes chooses clips, ranges, order, markers, and music based on the user's instructions and available media, then passes a structured plan to Resolve.
Example Scripted Timeline Payload
{
"name": "Hermes Rough Cut",
"clips": [
{
"path": "/Users/example/Footage/intro.mov",
"name": "Opening shot",
"start_frame": 0,
"end_frame": 144,
"record_frame": 0,
"track_index": 1,
"note": "Establishes the location from the script opening."
},
{
"path": "/Users/example/Footage/interview_a.mov",
"name": "Interview beat 1",
"start_frame": 240,
"end_frame": 480,
"record_frame": 144,
"track_index": 1,
"note": "Matches the first narration paragraph."
}
],
"music_paths": [
"/Users/example/Music/reference_style_track.wav"
],
"markers": [
{
"frame": 0,
"name": "Opening",
"color": "Blue",
"note": "Start of scripted intro",
"duration": 1
}
],
"bin_name": "Hermes Edit",
"dry_run": true
}
Free Resolve Workflow: FCPXML Handoff
Free DaVinci Resolve can import timeline interchange files, but it does not reliably expose external live scripting to Hermes. When resolve_probe recommends free_interchange, Hermes should use this flow:
- Call
resolve_scan_media_folderto discover source media. - Interpret the user's script in the agent layer.
- Call
resolve_generate_fcpxml_timelinewith a timeline name, media paths, frame rate, dimensions, and optional markers. - Tell the user where the
.fcpxmlfile was written. - The user imports it in Resolve:
- File > Import > Timeline > Import AAF, EDL, XML...
- The user relinks media if Resolve asks.
Default interchange output is written under:
~/Documents/Hermes Resolve Exports
The FCPXML generator is intentionally conservative. It creates a basic timeline assembly suitable for import and further editing. It is not a substitute for Studio's live API and does not inspect the user's open Resolve project.
Free Resolve Workflow: Marker CSV
For review notes, script beats, or manual edit guidance, Hermes can call:
resolve_generate_marker_csv
The resulting CSV includes marker frame/time information, names, colors, notes, and durations. This gives a free Resolve user an edit map even when live marker insertion is unavailable.
Launch Variants
resolve_launch supports these variant values:
autoresolvestudiobetaresolve20studio20resolve21studio21
If multiple app bundles are installed or renamed, pass app_path with the exact .app path.
Examples:
{
"variant": "studio21",
"wait_seconds": 12
}
{
"app_path": "/Applications/DaVinci Resolve Studio 21 Beta/DaVinci Resolve Studio.app",
"wait_seconds": 12
}
Known Limitations
- Live control requires DaVinci Resolve Studio. Free Resolve should use interchange mode.
- The plugin currently targets macOS paths and app bundles.
- The scripted edit tool creates practical rough cuts from structured clip plans; it does not perform advanced NLE operations such as transitions, color grading, Fusion effects, detailed audio mixing, transcription, multicam sync, or semantic video analysis by itself.
- Clip selection and script interpretation happen in Hermes, not inside the plugin.
- FCPXML interchange is best-effort and intentionally simple so it remains predictable.
- Render behavior depends on the active Resolve project, installed codecs, Resolve render presets, and Studio scripting availability.
QA Notes
Local non-Studio QA can cover:
- Plugin import/registration.
- Schema availability.
resolve_capabilities.resolve_probediagnostic behavior.resolve_scan_media_folder.- FCPXML generation.
- Marker CSV generation.
- Dry-run behavior for Studio mutating tools.
Studio QA should additionally cover:
resolve_launchwith Studio installed.resolve_probereturningrecommended_mode="studio_live_control".resolve_project_summaryagainst an open test project.- Importing media into a test bin.
- Creating a timeline.
- Appending media to the current timeline.
- Adding a marker.
- Creating a scripted timeline from a small clip plan.
- Creating a render job and polling render status.
Recommended local validation command from the repository root:
uv run --with pytest --with pyyaml pytest tests -q
The integration suite requires a real Hermes Agent checkout and exercises
discovery from a temporary HERMES_HOME, manifest parsing, namespaced package
loading, real PluginContext registration, registry availability gating, and
top-level import isolation:
HERMES_AGENT_REPO=/path/to/hermes-agent \
uv run --with pytest --with pyyaml pytest tests/test_pluginmanager_integration.py -q