Let AI make music in your DAW β Connect Claude, GPT, or any AI to Ableton, Bitwig, Logic, and more!
Droplets is a VST3/CLAP plugin that bridges AI assistants and your DAW. Ask Claude to play a melody, create a drum pattern, or automate your synth β and hear it instantly in your project.
Built by Christophe Poucet (Simply Chris).
- π΅ Real-time MIDI β AI sends notes and CC messages directly to your instruments
- π Looping Patterns β Create "fugues" that sync to your DAW's transport
- ποΈ Parameter Control β Automate any plugin via MIDI CC or parameter slots
- π€ MIDI Export β Drag AI-created patterns into your arrangement as clips
- ποΈ MIDI 2.0 β Per-note pitch bend, pressure, and 16-bit velocity
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β YOUR DAW β
β βββββββββββββββββββ MIDI βββββββββββββββββββββββββββ β
β β ββββββββββββββΊβ Your Instruments β β
β β Droplets β β β β
β β Plugin β β πΉ Synths β β
β β β β π₯ Drums β β
β ββββββββββ¬βββββββββ β πΈ Samplers β β
β β βββββββββββββββββββββββββββ β
βββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β MCP (HTTP)
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β AI ASSISTANT β
β β
β π€ Claude, GPT, or any MCP-compatible AI β
β β
β "Play a jazz chord progression" β
β "Create a 4-bar drum loop" β
β "Sweep the filter cutoff from 20% to 80%" β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Build from source (see Building from Source below) and run cargo xtask install β it copies the plugin to the right location automatically.
| Platform | VST3 Location | CLAP Location |
|---|---|---|
| π macOS | ~/Library/Audio/Plug-Ins/VST3/ |
~/Library/Audio/Plug-Ins/CLAP/ |
| πͺ Windows | C:\Program Files\Common Files\VST3\ |
C:\Program Files\Common Files\CLAP\ |
| π§ Linux | ~/.vst3/ |
~/.clap/ |
Add Droplets as a MIDI effect and route its output to your instruments.
Bitwig: drop Droplets on a Note Effects chain before any instrument; MIDI flows downstream automatically.
Ableton Live: the VST3 build is classified as an instrument (a clap-wrapper limitation β the wrapper can't emit a MIDI-effect-only VST3 category today). Use Ableton's two-track MIDI-routing pattern:
- Put Droplets on its own MIDI track.
- Create a second MIDI track with your real instrument (drum rack, synth, sampler, etc.).
- On the second track, set MIDI From to the Droplets track and select Droplets in the plugin dropdown below it.
- Arm the second track (or set monitor to
In) so it hears the incoming MIDI.
Droplets still appears in the Plug-Ins browser under the Instruments list. Proper MIDI-effect classification is tracked as a post-demo fix.
Droplets speaks MCP over streamable HTTP on http://localhost:9999/mcp. MCP clients that speak HTTP directly (e.g. Claude Code, Cursor) can use that URL as-is:
{
"mcpServers": {
"droplets": {
"url": "http://localhost:9999/mcp"
}
}
}Claude Desktop is stdio-only and does not support streamable HTTP. Bridge through mcp-remote, passing --allow-http so it accepts the non-TLS loopback URL:
{
"mcpServers": {
"droplets": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"http://localhost:9999/mcp",
"--allow-http"
]
}
}
}Ask Claude:
"Play middle C for 2 beats, then E and G together"
Or get fancy:
"Create a chill lo-fi beat with swing"
Fugues are musical sequences that sync perfectly with your DAW's transport. Think of them as AI-generated MIDI clips that play in real-time.
| Feature | Description |
|---|---|
| π― Quantized Start | Begin on the next beat, bar, or 4-bar phrase |
| π Looping | Play once, N times, or forever |
| πΉ Layering | Stack multiple patterns simultaneously |
| π·οΈ Tags | Group patterns (e.g., cancel all "drums" at once) |
| π CC Automation | Smooth parameter sweeps with interpolation |
Fugues use a compact JSON schema designed for LLM token efficiency. Each fugue is a typed block β notes, cc, per_note_pitch_bend, per_note_pressure, or a composite that bundles several together:
{
"fugues": [
{
"type": "notes",
"tag": "melody",
"notes": [
{ "beat": 0, "note": "C4", "duration": 1, "velocity": 100 },
{ "beat": 1, "note": "E4", "duration": 1 },
{ "beat": 2, "note": "G4", "duration": 2 }
]
},
{
"type": "cc",
"cc": 74,
"points": [[0, 20], [4, 100]],
"interpolation": "exp"
}
],
"quantize": "bar",
"loop_mode": "forever"
}Notes auto-generate their own note-offs at beat + duration. CC points interpolate smoothly on the audio thread.
MIDI is fugue-only by design. LLM round-trip latency (~1β10s) is too high for musically-timed one-shot events β notes, CC, and MIDI 2.0 per-note expression all go through
queue_fugue, which schedules events on the audio thread with sample-accurate timing. Use acompositefugue to bundle notes + CC automation + per-note pitch bend + pressure into one atomic musical moment.
| Tool | Description |
|---|---|
queue_fugue |
Schedule one or more fugues (notes / cc / pitch_bends / pressures / composite) with tempo-quantized start |
list_fugues |
List active + pending fugues with timing and loop progress |
get_fugue |
Read a single fugue's full content back in the same compact shape queue_fugue accepts β enables read-modify-write |
import_fugue |
Import a base64-encoded .mid as one or more fugues (the return leg of drag-out β edit-in-DAW β hand back) |
cancel_fugue |
Stop a specific fugue by id |
cancel_fugues_by_tag |
Stop every fugue sharing a tag (e.g. "melody") |
clear_fugues |
Emergency stop β cancel every fugue on an instance |
| Tool | Description |
|---|---|
get_transport |
Current {beat, tempo, playing, time_sig, loop bounds} for reasoning about scheduling |
get_project_state |
Call first when composing. Summary of connected Droplets instances, each track's primary device, and drum-pad maps (pitch notation + sample names) so the LLM writes correct notes instead of GM conventions |
| Tool | Description |
|---|---|
list_instances |
Every connected Droplets plugin process |
set_instance_name |
Rename an instance (bass, pad, lead) for clearer targeting |
list_slots |
Parameter slots with their CC mappings and current values |
Four tabs in the plugin window:
- Every active fugue renders its own piano-roll grid with a live playhead.
- Drag a row (or the
β£ Drag allbutton) onto your DAW to drop a.midclip of the fugue(s). - Drop a
.midback onto the sequencer panel to re-queue it as fugues (drag-round-trip). - Cancel, export, or export-all via the row controls.
- Per-instance list of CC slot parameters with their names and mapped CC numbers.
- Wiggle a slot to test the mapping; use MIDI-learn to bind a hardware controller.
- Live view of what the host controller extension (Bitwig today) has pushed: tracks, primary devices, drum-pad maps with sample names, per-track Remote Controls.
- Empty state shown when no extension is running (Ableton, Logic, older Bitwig).
- MCP server URL (copy for your AI's config).
- Export folder for manually-saved
.midfiles. - Custom instructions appended to the MCP system prompt.
Turn AI compositions into DAW clips:
- Click β on any fugue in the list
- File saves to your exports folder
- Finder/Explorer opens automatically
- Drag the
.midfile into your DAW!
- π¦ Rust 1.70+
- π¦ Node.js 18+
- ποΈ For VST3: a VST3 SDK checkout, with
CLAP_WRAPPER_VST3_SDKpointing at it
git clone https://github.com/poucet/droplets.git
cd droplets
# Build bundles for your platform into target/bundle/
cargo xtask build
# β¦or build AND copy into your DAW's user plugin folders in one step
cargo xtask installcargo xtask install detects your OS and copies the CLAP/VST3 bundles to the
right per-user location:
| Platform | CLAP | VST3 |
|---|---|---|
| π macOS | ~/Library/Audio/Plug-Ins/CLAP/ |
~/Library/Audio/Plug-Ins/VST3/ |
| π§ Linux | ~/.clap/ |
~/.vst3/ |
| πͺ Windows | %LOCALAPPDATA%\Programs\Common\CLAP\ |
%LOCALAPPDATA%\Programs\Common\VST3\ |
Useful flags:
cargo xtask build --format clap # skip VST3 if you don't have the SDK
cargo xtask build --profile debug --dev-gui # dev build with WebView devtools
cargo xtask install --skip-build # just copy existing bundlesdroplets/
βββ π¦ src/
β βββ lib.rs # Plugin entry point
β βββ fugue/ # πΌ Fugue sequencer
β β βββ sequencer.rs # Transport-synced playback
β β βββ export.rs # MIDI file export
β β βββ settings.rs # Persistent settings
β βββ mcp/ # π€ AI communication
β β βββ server.rs # MCP tool definitions
β β βββ bridge.rs # Plugin β server bridge
β βββ gui/ # π₯οΈ UI backend
β β βββ api.rs # REST endpoints
β β βββ routes.rs # Request routing
β βββ midi/ # πΉ MIDI processing
β
βββ βοΈ frontend/ # React UI
β βββ src/
β β βββ App.tsx # Main app
β β βββ components/ # UI components
β βββ package.json
β
βββ π¨ xtask/ # Build tools
| Service | Port |
|---|---|
| MCP Server | 9999 |
| GUI Server | 9998 |
| Platform | Path |
|---|---|
| π macOS | ~/.droplets/settings.json |
| πͺ Windows | %APPDATA%\Droplets\settings.json |
| π§ Linux | ~/.config/droplets/settings.json |
| Platform | Default Path |
|---|---|
| π macOS | ~/Music/Droplets/Exports/ |
| πͺ Windows | Documents\Droplets\Exports\ |
| π§ Linux | ~/Music/Droplets/Exports/ |
Contributions welcome! Feel free to:
- π Report bugs
- π‘ Suggest features
- π§ Submit pull requests
MIT License β see LICENSE for details.
Built with love using:
- clack-plugin β Rust CLAP framework
- rmcp β MCP server
- wry β WebView
- midly β MIDI files
- React β UI
Made with π΅ by Christophe Poucet (Simply Chris)