This toolset integrates Canon DSLRs directly into REAPER, treating the camera as a native media source. It handles recording triggers, automatic file downloading, and sample-accurate audio/video synchronization using a clap/slate.
- Remote Trigger: Start/Stop camera recording directly from REAPER.
- Auto-Import: Automatically downloads the video file to your project after recording.
- Auto-Sync: Uses FFT-based audio cross-correlation to align the camera video with your high-quality audio recording (requires a clap/slate).
- Background Processing: Keeps REAPER responsive while the camera is recording.
If you find this script useful, please consider supporting:
☕️ Buy Me a Coffee ❤️ Support on Patreon
- Canon DSLR/Mirrorless Camera supported by EDSDK.
- USB Cable.
- Python 3.6+
- FFmpeg installed on the system path.
Install the required scientific libraries for the sync algorithm:
pip3 install numpy scipy ffmpeg-pythonYou need the compiled Canon EDSDK binaries for your operating system. These can be obtained from the Canon Developer Community or other compatible sources.
Windows:
-
Locate
EDSDK.dllandEdsImage.dll(usually found in theDllfolder of the SDK). -
Place both files inside this script folder.
macOS:
-
Locate
EDSDK.framework. -
Install it to
/Library/Frameworks/OR place theEDSDK.frameworkfolder inside this script folder.
Linux:
-
Locate
libEDSDK.so. -
Place
libEDSDK.soinside this script folder (or in/usr/local/lib/).
This script relies on REAPER's internal Python environment. You must configure REAPER to point to your installed Python library.
- Open REAPER and go to Options > Preferences.
- Scroll down to Plug-ins > ReaScript.
- Check the box Enable Python for use with ReaScript.
- In the Custom path to Python dll directory box, enter the folder where Python is installed (e.g.,
C:\Python312\or/usr/local/bin/). - Important: In the Force ReaScript to use specific Python .dll box, you must enter the exact name of the DLL file for your version.
- Example (Windows):
python312.dllorpython310.dll - Example (macOS):
libpython3.12.dylib
- Example (Windows):
- Click OK and restart REAPER.
Note: If you are using the Windows Store version of Python, these DLLs are often protected. It is highly recommended to install the official release from python.org.
To ensure the dynamic pathing works correctly, you must use the standard REAPER directory structure.
- Locate your REAPER resource path (usually
~/.config/REAPER/). - Navigate to the
Scriptsfolder. - Create a folder named exactly
reacanon-record. - Copy all
.pyfiles and your OS-specific library files into this folder.
Target Path Structure:
.../REAPER/Scripts/reacanon-record/
├── Record Camera.py (Main REAPER Action)
├── canon_edsdk_controller.py (Background Service)
├── edsdk_defs.py (C-Types Wrapper)
├── audio_sync_detector.py (Sync Logic)
└── libEDSDK.so (Required Library)
-
Load the Script:
- Open REAPER.
- Open the Actions List (
?). - Click New Action > Load ReaScript...
- Select
Record Camera.py.
-
Run the Recording:
- Ensure your Camera is connected via USB and awake.
- Run the Record Camera.py action (double-click or assign a shortcut).
- Status: A dialog box will appear saying "Recording active".
-
The Workflow:
- Clap / Slate: Make a loud clap visible to the camera and audible to your microphones.
- Record: Perform your take.
- Stop: When finished, click Yes (Save & Sync) on the dialog box.
-
Result:
- The script will stop the camera.
- It will download the video file.
- It will analyze the audio waveforms.
- It will insert the video onto a "Video" track and slide it to align perfectly with your audio.
The script expects to live in Scripts/reacanon-record/. If you see this error, ensure the folder name matches exactly and is located inside the REAPER resource path.
- Ensure
ffmpegis installed and accessible in your terminal (which ffmpeg). - Ensure the clap was loud enough.
- The sync scan duration is set to 60 seconds. Ensure you clap within the first minute of recording.
If the script crashes or the USB cable is pulled, the camera might remain "Locked" by the driver.
- Disconnect USB.
- Turn off Camera.
- Re-run the script (it includes a "Force Unlock" mechanism on startup).
