DEMO: https://drive.google.com/file/d/1GWaVc1msmrqexjRGZf-K46xJCKLFGX3Z/view
This application uses ReaScripts to interact with the REAPER DAW.
It uses an LLM to dynamically generate lua scripts to perform actions in REAPER.
Some reproducible queries showcased in our demo are
- “Double first track’s instrument volume, increase the decay, and triple the attack"
- "Open the FX browser for the first track."
- “Duplicate the first track, pitch it up one octave, and blend it in at 20%.”
- “What does attack time do in the first tracks compressor?”
We use Model Context Protocol to let the LLM set FX parameters, get REAPER state, and generate beat. Our LLM can also run any of the 711 ReaScript API functions through lua code.
- Install REAPER
- Set up 2 python virtual environments: dawzy-venv and musicgen-venv
- Source dawzy-venv and
pip install -r requirements.txt - Enable ReaPy for dawzy-venv using the following tutorial: https://linuxtut.com/en/1ed11c09495d952e578d/
- Add lua scripts as actions to REAPER
- Actions -> Show Actions List -> Load ReaScript
- Add ./Lua_ReaScripts/get_state.lua and ./Lua_ReaScripts/dynamic.lua
- Copy script command IDs from REAPER to chat.py
- Actions -> Show Actions List
- Search for "get_state" and "dynamic"
- Right Click -> Copy selected action command ID
- Paste in run_get_state() and run_dynamic_lua_script()
- Source musicgen-venv and
pip install "numpy<2" audiocraft - Replace the python path in the first line of the
generatefunction inmcpserver.pywith the path to /path/to/musicgen-venv/bin/python - Source dawzy-venv
npm iexport OPENAI_API_KEY=''
Navigate to REAPER window
npm start
We also tested with Qwen 480B-A35B(https://huggingface.co/Qwen/Qwen3-Coder-480B-A35B-Instruct), but code quality was lower.