Skip to content

About

Dynamic Link for DaVinci Resolve

Topics

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

170 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ResolveLink Logo

ResolveLink

Dynamic Link equivalent for DaVinci Resolve to After Effects, REAPER & Ableton Live

A native DaVinci Resolve Workflow Integration Plugin that bridges DaVinci Resolve with Adobe After Effects, REAPER, and Ableton Live, providing a Dynamic Link-like workflow for VFX, motion graphics, and audio post-production.

Version License Platform DaVinci Resolve Node.js Python Electron Ableton Live CI


0 bugs 100+ features


Screenshots

DaVinci Resolve
ResolveLink in DaVinci Resolve


After Effects
ResolveLink CEP Extension in After Effects


REAPER
ResolveLink Panel in REAPER


Ableton Live
ResolveLink in Ableton Live


The Problem

DaVinci Resolve lacks Adobe's Dynamic Link. When VFX work needs to happen in After Effects, audio needs to be mixed in REAPER, or music/sound design needs Ableton Live — editors must manually export clips, open the target application, import footage, match timecodes, render, and re-import back. This breaks creative flow and wastes hours.

The Solution

ResolveLink automates the entire round-trip. Select clips in Resolve, click one button, and a synchronized After Effects composition is created instantly. When AE work is rendered, the result automatically syncs back to the Resolve timeline as a compound clip. For audio, send clips directly to REAPER for mixing — the same round-trip workflow applies. For music/sound design, send clips to Ableton Live for beat sync, stem export, and device automation.

 ┌──────────────────┐      ┌──────────────────┐      ┌──────────────────┐
 │  DaVinci Resolve  │ ───> │  ResolveLink       │ ───> │  After Effects   │
 │                   │      │  Bridge Server    │      │                  │
 │  Select Clips     │      │  - REST API       │      │  CEP Extension   │
 │  Click "Send"     │      │  - File Watcher   │      │  Auto Comp       │
 │  Auto Re-import   │ <─── │  - WebSocket      │ <─── │  Render & Export │
 └──────────────────┘      └────────┬─────────┘      └──────────────────┘
                                     │
                                     │
                            ┌────────▼─────────┐
                            │                   │
                            │    REAPER DAW     │
                            │                   │
                            │  Panel UI         │
                            │  Named Pipe IPC   │
                            │  Render & Export  │
                            └──────────────────┘
                                     │
                            ┌────────▼─────────┐
                            │                   │
                            │   Ableton Live    │
                            │                   │
                            │  Named Pipe IPC   │
                            │  Clip/Device Ctrl │
                            │  Stem Export      │
                            └──────────────────┘

Features

After Effects

  • One-Click Send — Select clips in the Resolve timeline, send directly to After Effects
  • Auto Composition — Creates perfectly synchronized AE compositions with correct resolution, framerate, and timecodes
  • Auto Workflow — If AE is running, jobs are queued for the CEP extension; if not, AE is launched with the script automatically
  • File Watcher — Monitors render output folders and syncs completed renders back to Resolve automatically
  • Compound Clip Import — Rendered output is automatically imported back into Resolve as a compound clip (V2 render over V1 originals)
  • CEP Extension — Panel inside After Effects that polls for jobs, executes scripts, and handles rendering
  • Marker Transfer — Timeline markers from Resolve are transferred to AE comp markers
  • Transform Preservation — Crop, zoom, pan, rotation, opacity, anchor point from Resolve clips applied to AE layers

REAPER

  • Native Native Extension — C++ extension with named pipe IPC (sub-ms latency) + WebSocket fallback
  • Unified Panel — Single GFX UI window with all controls (no dependencies required)
  • Background Callback — Toggle ON/OFF to auto-import audio from Resolve into REAPER
  • Send Render to Resolve — One-click render and import audio back into DaVinci
  • Update Project — Sync REAPER items to match Resolve timeline (position, length, track)
  • File-based IPC — No network dependency between REAPER scripts and server
  • Auto-Save — Projects saved automatically to exports/reaper-projects/
  • Stem Export — Render each track as separate stem file (WAV/FLAC/MP3/AIFF)
  • Clip-Level Export — Each Resolve audio clip lands as separate REAPER item with correct position/duration
  • Content-Hash Change Detection — SHA256-based render detection prevents false "unchanged" results
  • Track Index Matching — Unambiguous clip matching via trackIdx:filename keys
  • ReaPack Repository — Install scripts via ReaPack package manager
  • File Locking — Atomic writes with lock files prevent IPC race conditions

Ableton Live

  • Native Extension (C++) — Ableton Extension SDK integration, sub-millisecond named pipe IPC
  • Live Set Control — Full transport (play/stop/record/seek), tempo, time signature, loop, quantization
  • Clip Management — Create audio/MIDI clips, launch/stop, gain/pitch/warp, envelopes, warp markers
  • Track Control — Volume, pan, mute, solo, arm, device chains, sends/returns
  • Device Management — Instruments, audio/MIDI effects, racks (Audio/MIDI/Instrument/Drum), chains, macros, mappings
  • Parameter Automation — Read/write device parameters, add/clear automation envelopes
  • Stem Export — Per-track stem rendering with solo-in-place automation
  • MIDI Remote Scripts — Python scripts for Ableton MIDI remote control surface
  • Max for Live — Auto-generated Max for Live device configs for complex workflows

General

  • Project File System — .rl project files in ~/Documents/ResolveLink/ProjectName/ with full directory structure
  • Desktop App — Electron UI for server management, project browser, and status
  • Real-time Status — Live status indicators via WebSocket
  • Setup Wizard — Auto-detect Python and AE paths, first-run configuration
  • Dark UI — Matches DaVinci Resolve's professional dark theme exactly
  • Cross-Platform — Windows, macOS, and Linux support
  • Project Templates — VFX shot, audio post, color grade templates
  • Keyboard Shortcuts — ? for cheat sheet, Ctrl+Enter to send, Ctrl+Shift+R refresh
  • Light/Dark Mode — Theme toggle with system preference detection
  • Random Workflow Tips — Helpful tips on each app load
  • Token Auth — Optional token-based auth for write operations
  • Discord Rich Presence — Shows "Working on [Project]" in Discord status (optional)
  • GitHub Releases — Tagged releases with auto-generated installers

Quick Start

Windows

iex (iwr -UseBasicParsing "https://raw.githubusercontent.com/OseMine/ResolveLink/main/install.ps1").Content

macOS / Linux

curl -fsSL https://raw.githubusercontent.com/OseMine/ResolveLink/main/install.sh | bash

Install via DaVinci Resolve Console (Recommended)

  1. Download install.lua from the latest release
  2. Open DaVinci Resolve
  3. Go to Workspace > Console (or press Alt+F9)
  4. Paste the contents of install.lua and press Enter

That's it. The script will:

  • Detect your OS and check for Git + Node.js
  • Download the correct release version automatically
  • Run the full setup (deps, build, extensions, .env)
  • Deploy Resolve scripts and start the server

Desktop App (Installer)

ResolveLink also ships as a self-contained desktop application. The installer bundles the bridge server, so no separate npm run server is needed.

  1. Download the installer for your platform from the latest release:
    • Windows — ResolveLink-<version>-x64.exe (NSIS installer)
    • macOS — ResolveLink-<version>-<arch>.dmg
    • Linux — ResolveLink-<version>-x64.AppImage
  2. Install and launch ResolveLink. The app starts the server on http://127.0.0.1:3030 and opens the UI.

User data is stored per user:

Platform Location
Windows %APPDATA%\ResolveLink
macOS ~/Library/Application Support/ResolveLink
Linux ~/.config/ResolveLink

The folder contains config.json, exports/, temp/, and server.log (useful when reporting startup problems).

Build installers locally:

npm run build:electron:win     # Windows NSIS installer
npm run build:electron:mac     # macOS DMG (x64 + arm64)
npm run build:electron:linux   # Linux AppImage

Artifacts are written to dist-electron/. macOS signing/notarization runs only when APPLE_ID, APPLE_ID_PASSWORD, and APPLE_TEAM_ID are set.

Install REAPER Scripts

Via ReaPack (Recommended)

  1. In REAPER, go to Options > Show REAPER resource path
  2. Open Scripts/ReaPack/Packages/
  3. Add this URL in ReaPack > Edit repositories:
    https://raw.githubusercontent.com/OseMine/ResolveLink/main/index.xml
    
  4. Click OK, then ReaPack > Synchronize packages
  5. Install from ReaPack > Browse packages > ResolveLink

Available Scripts

Script Description
ResolveLink Panel Unified control panel (all-in-one)
ResolveLink Callback Background worker for auto-import
ResolveLink Send to Resolve Render and import to DaVinci
ResolveLink Update Project Sync REAPER to DaVinci timeline
ResolveLink Logger Toggleable console logger for debugging

Install Locations

OS Path
Windows %LOCALAPPDATA%\ResolveLink
macOS ~/Applications/ResolveLink
Linux ~/.local/share/ResolveLink

Configuration

On first run, the setup wizard auto-detects Python and After Effects paths and generates a .env file. You can re-run it anytime:

.\scripts\setup.ps1 -Force

All configuration is driven by .env:

Variable Default Description
PORT 3030 Server port
HOST 127.0.0.1 Bind address
EXPORT_DIR ./exports Where renders are saved
TEMP_DIR ./temp Generated scripts location
PYTHON_PATH python Python executable
AE_PATH_WIN (auto-detected) After Effects install path
AE_PATH_MAC (auto-detected) After Effects install path
REAPER_PATH_WIN (auto-detected) REAPER install path (Windows)
REAPER_PATH_MAC (auto-detected) REAPER install path (macOS)
ABLETON_PATH_WIN (auto-detected) Ableton Live install path (Windows)
ABLETON_PATH_MAC (auto-detected) Ableton Live install path (macOS)
RESOLVE_SCRIPTING_PATH (auto-detected) Resolve scripting modules
WATCHER_ENABLED true Enable file watcher
WATCH_FOLDERS (none) Extra folders to watch (comma-separated)
LOG_LEVEL info Log level (debug/info/warn/error)

See .env.example for all options.


Tech Stack

Layer Technology
Frontend UI React 18, TypeScript, Tailwind CSS, Lucide Icons
Desktop Shell Electron 28
Backend Server Node.js, Express, Chokidar, WebSocket (ws), Zod, dotenv
Resolve Bridge Python 3.10+ (DaVinciResolveScript API), Node.js child_process wrapper
Adobe Automation CEP Extension (HTML/JS panel), ExtendScript (.jsx), base64-encoded payloads
REAPER Automation Native C++ extension (named pipes), Lua scripts, file-based IPC fallback
Ableton Automation Native C++ extension (Ableton Extension SDK), ExtendScript, OSC/MIDI
Validation Zod schema validation on all POST/PUT endpoints
Testing Vitest (unit + integration)
Project Files JSON-based .rl format in ~/Documents/ResolveLink/ProjectName/

Project Structure

resolvelink/
├── install.lua                 # One-step installer (paste into Resolve Console)
├── scripts/                    # Management scripts
│   ├── setup.ps1 / setup.sh   # Unified installer/updater
│   ├── start.ps1 / start.sh   # Start server
│   ├── stop.ps1 / stop.sh     # Stop server
│   ├── status.ps1 / status.sh # Check status
│   └── deploy-*.ps1           # Deploy extensions
│
├── packages/                   # Monorepo packages
│   ├── server/                 # Backend
│   │   ├── src/
│   │   │   ├── index.js               # Express + WebSocket + Chokidar + Job queue
│   │   │   ├── config.json            # Default config
│   │   │   ├── logger.js              # Structured logger
│   │   │   ├── perf.js                # Request performance middleware
│   │   │   ├── middleware/            # Zod validation middleware
│   │   │   ├── routes/                # REST API route handlers
│   │   │   ├── integrations/          # External tool integrations
│   │   │   │   ├── ae/                # After Effects (spawn, JSX generators)
│   │   │   │   ├── reaper/            # REAPER (service, generators, watcher)
│   │   │   │   └── ableton/           # Ableton Live (service, generators)
│   │   │   └── services/              # Core services
│   │   ├── resolve-bridge.py          # Python DaVinci Resolve scripting bridge
│   │   └── package.json
│   │
│   ├── ui/                     # Frontend (React + Vite + TypeScript)
│   │   ├── src/
│   │   │   ├── components/            # React components
│   │   │   └── lib/                   # API client, hooks, utilities
│   │   └── package.json
│   │
│   └── shared/                 # Shared types and utilities
│       └── package.json
│
├── native/                       # Native C++ extensions
│   ├── reaper/                   # REAPER native extension
│   │   ├── CMakeLists.txt
│   │   ├── include/               # Headers
│   │   └── src/                   # Source
│   │
│   └── ableton/                  # Ableton Live native extension
│       ├── CMakeLists.txt
│       ├── include/               # Headers
│       │   ├── AbletonExtension.h
│       │   ├── LiveSetManager.h
│       │   ├── TransportController.h
│       │   ├── ClipManager.h
│       │   ├── DeviceManager.h
│       │   ├── ipc/IPCServer.h
│       │   └── util/
│       └── src/                   # Source
│           ├── plugin_main.cpp    # Extension entry point
│           ├── ExtensionImpl.cpp  # Implementation
│           ├── LiveSetManager.cpp
│           ├── TransportController.cpp
│           ├── ClipManager.cpp
│           ├── DeviceManager.cpp
│           ├── ipc/IPCServer.cpp
│           └── util/
│
├── extension/                  # CEP Extension (inside After Effects)
│   ├── CSXS/manifest.xml
│   ├── client/                # Panel UI (HTML/JS/CSS)
│   └── host/host.jsx          # ExtendScript host functions
│
├── resolve-scripts/            # DaVinci Resolve scripts
│   ├── ResolveLink.lua         # Main launcher
│   ├── send-to-ae.py          # Clip send dialog (tkinter)
│   └── send-to-reaper.py      # Audio clip send dialog (tkinter)
│
├── reaper-scripts/                 # REAPER scripts
│   ├── resolve-link-panel.lua      # Unified GFX control panel (v2.2.0)
│   ├── resolve-link-logger.lua     # Toggleable console logger (shared)
│   ├── render-lib.lua              # Shared render config + import logic
│   ├── json.lua                    # Shared JSON decoder module
│   ├── reaper-callback.lua         # Background worker (file-based IPC)
│   ├── send-to-resolve.lua         # Render and import to DaVinci
│   ├── update-project.lua          # Sync REAPER to DaVinci timeline
│   └── lock.lua                    # File locking module
│
├── adobe/                      # ExtendScript library
│   └── import_pipeline.jsx    # Standalone AE composition importer
│
├── resolve-scripts/            # Shared Python module
│   └── resolvelink_shared.py
│
├── test/                       # Test suite
├── docs/                       # Documentation
├── assets/                     # Images and icons
├── exports/                    # Render output (watched)
├── temp/                       # Generated scripts and payloads
├── index.xml                   # ReaPack repository
├── RELEASE.md                  # Release notes
├── vitest.config.js            # Test config
├── electron.js                 # Electron main process
├── .env.example                # Configuration template
├── package.json
└── README.md

Documentation

Document Description
Architecture System design, data flow, component interaction
API Reference REST endpoints, WebSocket protocol, data types
Setup Guide Installation, configuration, troubleshooting
Workflow Guide Step-by-step user workflow
Release Notes Version history and changelog

Development

Prerequisites

  • Node.js 18+
  • Python 3.10+ (for Resolve scripting bridge)
  • DaVinci Resolve 19+ (scripting API supported in free and Studio)
  • Adobe After Effects 2022+ (for CEP)
  • REAPER 6+ (optional, for audio post-production workflow)
  • Ableton Live 11.3+ (optional, for music/sound design workflow)

Commands

Command Description
npm run dev Start server + Vite dev server concurrently
npm run server Start only the backend server
npm run ui Start only the Vite dev server
npm run build Build the frontend for production
npm run build:server Bundle the server for the desktop app
npm run build:icons Regenerate app icons from web/public/icon.svg
npm run build:electron Build the desktop app for the current platform
npm start Start the Electron app (uses the local dev server)
npm test Run all tests (vitest)
npm run test:watch Run tests in watch mode
npm run install:all Install all workspace dependencies

How It Works

After Effects Workflow

  1. Selection — Editor selects clips in the Resolve timeline
  2. Send — Clicks "Send Selection to After Effects"
  3. Translate — Plugin reads clip metadata via the Python scripting bridge
  4. Generate — Server creates .jsx + .json, queues job for CEP extension
  5. Execute — CEP extension inside AE picks up the job, creates synchronized composition
  6. Edit — VFX artist works in After Effects
  7. Render — Artist renders (via CEP panel, plugin, or manually)
  8. Detect — File watcher detects the new render in exports/
  9. Import — Render is automatically imported back into Resolve as a compound clip
  10. Sync — UI shows updated link status via WebSocket

REAPER Workflow

  1. Selection — Editor clicks "Send Audio to REAPER" in the Resolve launcher
  2. Dialog — Tkinter dialog shows available audio clips for selection
  3. Generate — Server generates Lua import script + JSON payload + render config
  4. IPC — Server writes job file to exports/reaper-jobs/
  5. Execute — Panel's callback picks up job, imports audio into REAPER
  6. Work — Audio engineer mixes in REAPER
  7. Save — Project auto-saved to exports/reaper-projects/
  8. Render — Engineer renders to configured export directory
  9. Import — Panel sends rendered audio to server, imports into Resolve
  10. Sync — Audio track added to Resolve timeline, old clips muted

Ableton Live Workflow

  1. Selection — Editor clicks "Send to Ableton" in the Resolve launcher
  2. Dialog — Shows available audio/MIDI clips for selection
  3. Generate — Server creates Ableton link with OSC payload, MIDI script, Max for Live config
  4. IPC — Job sent via native extension named pipe (sub-ms latency)
  5. Execute — Native extension places clips, sets tempo, creates tracks/devices
  6. Work — Producer arranges, mixes, designs sound in Ableton Live
  7. Export — Stem export or master render via native extension
  8. Import — Auto-import back to Resolve or manual import via UI
  9. Sync — UI shows updated link status via WebSocket

Keyboard Shortcuts

Shortcut Action
Ctrl+Shift+R Refresh selection from Resolve
Ctrl+Enter Send selected clips to AE
Ctrl+T Toggle tools panel
Ctrl+, Open setup wizard
? Show keyboard shortcut cheat sheet
Esc Close modals/panels

License

MIT


Built for editors who refuse to break their creative flow.

About

Dynamic Link for DaVinci Resolve

Topics

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages