WigAI(Bitwig MCP server)

Official support for: bitwig.com
Post Reply New Topic
RELATED
PRODUCTS

Post

WigAI is a Bitwig Studio extension that embeds an MCP (Model Context Protocol) server so external AI agents can control Bitwig via text commands. Original scope covers transport control, selected device parameter tweaks, and clip/scene launching. You build a .bwextension, drop it into Bitwig’s extensions folder, enable it, then connect an MCP-capable assistant. It targets Bitwig 5.2.7+ and Java 21. https://github.com/fabb/WigAI



Forked it, doubled the tools, goal was simple: able to build a templates and able to act like FL’s Goopher but actually useful, so It reads and writes clips and devices can colorize tracks etc., so it can already walk you through a “let’s build a trance reverb” session from two Spires(pad, pluck) for ex.. Works best with Claude Desktop; the lighter LLMs… ... not there yet.

starting point a config file, mac /Users/YOURNAME/Library/Application Support/Claude/claude_desktop_config.json

Code: Select all

{
  "mcpServers": {
    "wigai": {
      "command": "/opt/homebrew/bin/node",
      "args": [
        "/Users/YOURNAME/mcp/wigai-mcp-proxy.js"
      ]
    }
  }
}
and the proxy, ClaudeDesktop runs in a docker container and it needs, I’m not writing out a full step-by-step. Claude Desktop and Sonnet will figure it out as long as they have visibility. Just give them a file-manager extension at minimum and they’ll take it from there.

https://github.com/csabacsaba/WigAI
Not flawless yet, but ... it’s taking shape, the fork is purely experimental, just to see what's possible. I’m not fixing bugs — go bother Sonnet or fabb for that :D

hopefully it can be built, this is what needed
Screenshot 2025-11-05 at 20.29.44.png
big h5 to fabb :tu:

ps. make it read the UUIDs for the devices too. See the video — the resource is already there, you just need to tell it “hey, use them".
You do not have the required permissions to view the files attached to this post.
Last edited by xbitz on Wed Nov 05, 2025 7:35 pm, edited 2 times in total.
"Where we're workarounding, we don't NEED features." - powermat

Post

the full tool list aka what’s currently possible
Status & Transport

wigai:status - Get WigAI operational status, version, project name, audio engine status, and transport info
wigai:transport_start - Start Bitwig's transport playback
wigai:transport_stop - Stop Bitwig's transport playback

Clip Launcher

wigai:launch_clip - Launch a specific clip by track name and clip slot index
wigai:session_launchSceneByIndex - Launch a scene by its zero-based index
wigai:session_launchSceneByName - Launch a scene by its name (case-sensitive)
wigai:list_scenes - List all scenes with their names and colors
wigai:get_clips_in_scene - Get detailed info for all clips within a specific scene

Clip Editing

wigai:create_clip - Create an empty clip in a specific track and slot
wigai:write_note - Write a single note to the currently selected clip
wigai:write_notes - Write multiple MIDI notes to the currently selected clip in batch
wigai:clear_clip - Clear all notes from the currently selected clip

Device Control

wigai:get_selected_device_parameters - Get names and values of all addressable parameters of the user-selected device
wigai:set_selected_device_parameter - Set a specific value for a single parameter (by index) of the user-selected device
wigai:set_selected_device_parameters - Set multiple parameter values (by index) of the user-selected device simultaneously
wigai:get_device_details - Get detailed info for a specific device (by track/device context, or currently selected)
wigai:switch_device_page - Switch the remote controls page for the currently selected device
wigai:get_device_page_names - Get available remote control page names for a device
wigai:get_device_page_parameters - Get parameter info for a device page (with optional page switch)
wigai:get_all_device_pages_parameters - Get ALL device page parameters at once using direct push buffer reading
wigai:get_device_parameter_by_name - Get a specific device parameter by name (bypasses Remote Controls)
wigai:get_all_device_parameters_multipage - Get ALL device parameters from ALL pages simultaneously (up to 64 params)
wigai:insert_bitwig_device - Insert a Bitwig native device by UUID at a specific position on a track
wigai:wigai_list_bitwig_devices - List all available Bitwig devices with their UUIDs (optionally filter by category)
wigai:copy_device_page - Copy all parameters from one device page to another device page

Track Management

wigai:list_tracks - List all tracks with summary info (supports optional filtering by track type)
wigai:list_devices_on_track - List all devices on a specific track with detailed info
wigai:get_track_details - Retrieve detailed info for a specific track (by index, name, or selected)
wigai:create_instrument_track - Create a new instrument track at the end of the track list
wigai:create_audio_track - Create a new audio track at the end of the track list
wigai:create_effect_track - Create a new effect track at the end of the track list
wigai:delete_track - Delete a track by index or delete the currently selected track
wigai:set_track_properties - Set track properties: mute, solo, arm, volume, pan, color
wigai:set_track_send - Set track send properties: volume and enabled state

MIDI

wigai:send_midi - Send MIDI messages (Note On, Note Off, or Control Change) to Bitwig Studio

Batch Operations

wigai:batch_operations - Execute multiple Bitwig operations in a single batch request (create_tracks, insert_device_on_tracks, create_clips, clear_clips, write_notes_to_clips, set_clip_properties, switch_device_page_on_tracks, set_device_parameters_on_tracks)
"Where we're workarounding, we don't NEED features." - powermat

Post

never tried with non-native Bitwig devices but works
Screenshot 2025-11-05 at 21.38.40.png
so can be programmed non-native ones too artificially, that's nice (so can reproduce a tutorial from the net for ex. etc... )
You do not have the required permissions to view the files attached to this post.
"Where we're workarounding, we don't NEED features." - powermat

Post

Im literally blocking every account that promotes this trash, or anything related to this trash philosophy. I have zero patience for this, no time to argue about it, and I think the reasoning for my aggressive stance on all this will become obvious to even folks like we see here on KVR soon. Buckle up friends -- no, this isnt just the "latest music tool".

Post

^^^ fair points, but it's not a music-making gimmick — but a patch monkey, any time that isn’t spent on actual creative decisions — routing, learning endless workflows, messing with tech for tech’s sake — should just get nuked. Clear the path and let creativity run.

The goal isn’t to automate art.
The goal is to automate everything except art.
"Where we're workarounding, we don't NEED features." - powermat

Post

xbitz wrote: Wed Nov 05, 2025 8:49 pm The goal isn’t to automate art.
The goal is to automate everything except art.
I sort of see where you're coming from with this line of thinking, but I think it's misguided.

In every kind of art there is an aspect of craftsmanship that will be considered "rote work" by somebody (and they wouldn't be wrong – it often is).

But trying to remove that part of the creation process removes the space where real art happens along with it. It's an essential part of it.

Post

^^^ Whine whine, I didn’t commit the original sin — but since we’ve been cast out of paradise, might as well have some fun. :D

prompt: check out the trance reverb best practices and implement them in Bitwig,
Screenshot 2025-11-06 at 10.37.45.png
done, gogogo :borg:

I know exactly how to set it up, but it’s so much more fun this way and way for faster, I wouldn’t use it for anything creative, but for automating routing or basic setup tasks — why not? Suno and the upcoming openAI(which is not open) music-making fountain are one extreme, the current DAWs are the other — there really should be a golden middle ground

the generative patches would be different topic ofc. no go for AIs there
You do not have the required permissions to view the files attached to this post.
"Where we're workarounding, we don't NEED features." - powermat

Post

I’m interested in exploring this kind of tech, especially if it can be expanded to learn the Grid. Using AI to debug things in the Grid would be a godsend as it gets damned complicated at times. I’ve already used ChatGPT to help create some bigwig scripts I needed that I couldn’t find anywhere on the net - a script for complete midi re-mapping external Roland v-drums to the Bitwig drum machine for example. It even did the mapping of the high hat pedal controls without me specifying it.

Post

^^^ Science isn’t there yet — it has everything, can create screenshots, can move and control a mouse, it can click, it can use the keyboard and mouse at the same time, but it still can’t even navigate a simple grid preset. seems would need an LLM specifically trained for that.
Screenshot 2025-11-08 at 10.02.51.png
It sees the mini-map below and even knows where it’s been, able to navigate with mouse and keys yet after the first movement it still asks, ‘which way now? :D Claude Desktop Sonnet 4.5 with https://github.com/AB498/computer-control-mcp not smart enough yet, but IMO by this time next year, they’ll already know how to do it (they’re really close)

I deliberately didn’t want to give it a precise prompt — if it can’t handle this, it won’t be able to debug either.
You do not have the required permissions to view the files attached to this post.
"Where we're workarounding, we don't NEED features." - powermat

Post

yes, it would need access to it at a structural/data level rather than visually, then it could analyse it. A picture is worth a thousand words to a human, but a thousand words is a picture to AI :)

Post

but checked.. and can already make interactive tutorials now — you can basically send the LLM online to go fishing for information, build a knowledge base from it, and from there you can see for ex. how certain trance techniques actually work in context. In Sonnet’s case, though, it has a weird personality and a tendency to get on your nerves ... already got a ‘Csaba f*, you idiot, that’s not how you do it!’ moment too. :D But it's a decent "guy"... though in most of the cases


anyway, can still have a bit of fun fooling around with it .. nd you can even geek out a bit with it (luckily the API can't writne into arrangement —there is no temptation :evil: )
"Where we're workarounding, we don't NEED features." - powermat

Post

FYI, I also built (for fun and experimentation) an MPE server for creating random / merging existing and analyzing presets.
Not really sure if this makes sense, because using LLMs is quite slow and expensive. But I'm on the curious tech-nerd side, so I find it really interesting to try such stuff out and just see what works and what doesn't!



When implementing this, I had an idea - not sure if it helps you: I added some skills (like https://claude.com/blog/skills) which are loaded on demand for specific tasks. So e.g. when the MCP server does something with Polymer Synth, you could load a skill for sound-design with Polymer. This is just markdown really, or maybe some scripts that help - which explains and aids this (including sound-design basics). Unlike tools, you would not load them into every context, but only on-demand when that skill is needed. You could generate the skill descriptions from tutorials, manuals and general knowledge - probably doing some deep-research request with LLM will already get you somewhere.
Find my (music) related software projects here: github.com/Fannon

Post

Fannon wrote: Tue Nov 11, 2025 4:40 am FYI, I also built (for fun and experimentation) an MPE server for creating random / merging existing and analyzing presets.
thanks... works nicely, so the actaul possibilites together with two MCPs, from Sonnet
The Complete Workflow:
Step 1: Analyze with u-he MCP

You: "Analyze the 'Fat Bass' Hive preset"
u-he MCP: Returns ALL parameters from the .h2p file
- OSC1 Waveform: Saw
- OSC1 Pitch: -12 semitones
- Filter Cutoff: 1200 Hz
- Mod Matrix: LFO1 → Filter Cutoff, amount: 50%
... (everything)

Step 2: Check what's mapped in Bitwig
You: "Show me what's on Hive's remote control pages"
WigAI: get_all_device_pages_parameters()
- Returns all 8 pages × 8 parameters = 64 mapped controls

Step 3: Identify gaps
Claude/You: Compare the two lists
- ✅ OSC1 Waveform → Found on Page 0, Parameter 2
- ✅ Filter Cutoff → Found on Page 3, Parameter 5
- ❌ Mod Matrix LFO1→Filter → NOT MAPPED (needs manual)

Step 4: Manual mapping
You manually set the modulation matrix in Bitwig
(Click LFO1, drag to Filter Cutoff, set amount)

Step 5: Apply analyzed preset via WigAI
You: "Set Hive device on track 0 to match the 'Fat Bass' preset"
Claude: Uses the mapping + WigAI to set all parameters:
- set_device_parameter(track=0, device=0, page=0, param=2, value=...)
- set_device_parameter(track=0, device=0, page=3, param=5, value=...)
... for all mapped parameters

Step 6: Modify it
You: "Now make it brighter and faster"
WigAI: Adjusts filter cutoff +20%, envelope attack -50%
so YES! The workflow is:

✅ Analyze preset (u-he MCP)
✅ Identify unmapped controls (compare lists)
👆 Manual: Set unmapped stuff (mod matrix)
✅ Apply preset (WigAI sets all mapped params)
✅ Modify preset (WigAI tweaks parameters)

The only manual part is step 3! Everything else can be automated through the two MCPs working together.
It could even handle the mod matrix through https://github.com/AB498/computer-control-mcp
(screenshot, mouse handlings), but it’s already pretty handy as it is — no need to train it any further...Yet another argument in favor of the u-he synths.
"Where we're workarounding, we don't NEED features." - powermat

Post

Fannon wrote: Tue Nov 11, 2025 4:40 am FYI, I also built (for fun and experimentation) an MPE server for creating random / merging existing and analyzing presets.
Not really sure if this makes sense, because using LLMs is quite slow and expensive. But I'm on the curious tech-nerd side, so I find it really interesting to try such stuff out and just see what works and what doesn't!



When implementing this, I had an idea - not sure if it helps you: I added some skills (like https://claude.com/blog/skills) which are loaded on demand for specific tasks. So e.g. when the MCP server does something with Polymer Synth, you could load a skill for sound-design with Polymer. This is just markdown really, or maybe some scripts that help - which explains and aids this (including sound-design basics). Unlike tools, you would not load them into every context, but only on-demand when that skill is needed. You could generate the skill descriptions from tutorials, manuals and general knowledge - probably doing some deep-research request with LLM will already get you somewhere.
Yeah super interesting! Trillions of investment dollars, just leaking out of fascist capitalists everywhere, changing the world. Yayy!

Blocked.

Post

WigAI, song structure builder, so a cue+scene combo builder has been added


a grey-zone, almost-but-not-yet creative feature — let’s add it :D , unfortunatelly the cue-s can't be named in the current API, still https://github.com/csabacsaba/WigAI

so we're here at this moment
Transport Control

status - Get operational status, version, project name, audio engine, and transport info
transport_start - Start playback
transport_stop - Stop playback
set_playback_position - Set playback position in beats

Clip & Scene Operations

launch_clip - Launch specific clip by track name and slot index
session_launchSceneByIndex - Launch scene by index
session_launchSceneByName - Launch scene by name
launch_scene - Launch scene by index
get_clips_in_scene - Get all clips in a scene with full details
create_clip - Create empty clip in specific track/slot (1-16 bars)
clear_clip - Clear all notes from selected clip

Track Management

list_tracks - List all tracks with filtering by type
get_track_details - Get detailed track info (by index/name/selected)
list_devices_on_track - List all devices on a track
create_instrument_track - Create new instrument track
create_audio_track - Create new audio track
create_effect_track - Create new effect track
delete_track - Delete track by index or selected track
set_track_properties - Set mute, solo, arm, volume, pan, color
set_track_send - Set send volume and enabled state

Device Control

get_selected_device_parameters - Get all parameters of selected device
set_selected_device_parameter - Set single parameter by index
set_selected_device_parameters - Set multiple parameters simultaneously
get_device_details - Get full device info including remote controls and pages
switch_device_page - Switch remote controls page
insert_bitwig_device - Insert Bitwig native device by UUID
wigai_list_bitwig_devices - List all available Bitwig devices with UUIDs
get_device_knowledge - Get detailed device documentation (UUIDs, pages, parameters, ranges, use cases)
get_device_page_names - Get available page names for a device
get_device_page_parameters - Get parameter info for a device page
get_all_device_pages_parameters - Get ALL page parameters in single call
set_all_device_pages_parameters - Set ALL page parameters (optimized order)

MIDI Operations

send_midi - Send MIDI messages (note_on, note_off, cc)
write_note - Write single note to selected clip
write_notes - Write multiple notes in batch

Scene Structure

list_scenes - List all scenes with index, name, color
batch_create_cue_markers - Create multiple cue markers at specified positions
batch_create_scenes_and_markers - Create named scenes + cue markers together
list_cue_markers - List all cue markers in arranger
launch_cue_marker - Jump to cue marker by index
create_cue_marker - Create cue marker at current position

Batch Operations

batch_operations - Execute multiple operations in single request:

create_tracks - Bulk track creation
insert_device_on_tracks - Insert device on track range
create_clips - Bulk clip creation
clear_clips - Clear multiple clips
write_notes_to_clips - Write notes to multiple clips
set_clip_properties - Set properties on multiple clips
switch_device_page_on_tracks - Switch pages on device range
set_device_parameters_on_tracks - Set parameters on device range
set_device_page_parameters_on_tracks - Switch page then set parameters

Key Capabilities
✅ Full transport and timeline control
✅ Complete track management (create, delete, configure)
✅ Advanced device parameter control with multi-page support
✅ MIDI clip creation and note writing
✅ Scene and cue marker management
✅ Batch operations for efficiency
✅ Device knowledge base with EQ+, Filter, Compressor, Delay+, Reverb documentation
Important Notes:

Device UUIDs required for insertion (use get_device_knowledge first!)
Parameter values normalized 0.0-1.0 (not raw Hz/dB)
Page indices are numbers (EQ+: 0=Gains, 1=Freqs, 2=Qs)
200-500ms delays needed after page switches for stability
"Where we're workarounding, we don't NEED features." - powermat

Post Reply

Return to “Bitwig”