Music2DBridge is an independent third-party C# bridge for VTube Studio. It captures microphone audio, estimates musical information (note/chord/key), and injects mapped values into VTube Studio parameters through the WebSocket API.
- This project is not affiliated with, endorsed by, sponsored by, or officially associated with VTube Studio or DenchiSoft.
- Music2DBridge is an external app/plugin bridge. It is not a Unity in-process plugin.
- Do not install it into
VTube Studio_Data/Plugins/x86_64as a primary setup method.
src/
Music2DBridge.Core/ # Audio analysis and musical state logic
Music2DBridge.VTubeStudio/ # VTube Studio WebSocket client/auth/inject
Music2DBridge.App/ # Executable host app (mic capture + bridge loop)
LICENSE
- Windows / macOS / Linux
- .NET SDK 9.0+
- VTube Studio running locally
- VTube Studio Plugin API enabled
- OpenAL runtime for microphone capture (for example
libopenal1on Linux)
In VTube Studio:
- Open settings.
- Enable Plugin API access.
- Keep API port at default
8001(or update app code if changed).
From repo root:
dotnet build Music2DBridge.slndotnet run --project src/Music2DBridge.App/Music2DBridge.App.csprojDefault launch mode is desktop UI (Avalonia).
To run in terminal/CLI mode from cmd/PowerShell:
dotnet run --project src/Music2DBridge.App/Music2DBridge.App.csproj -- --cliAt first run:
- App connects to
ws://127.0.0.1:8001 - VTube Studio shows permission prompt
- Allow access
- Token is cached at:
%LocalAppData%\TamKungZ_\Music2DBridge\vts-token.txt
Windows:
dotnet publish src/Music2DBridge.App/Music2DBridge.App.csproj -c Release -r win-x64macOS (Intel):
dotnet publish src/Music2DBridge.App/Music2DBridge.App.csproj -c Release -r osx-x64macOS (Apple Silicon):
dotnet publish src/Music2DBridge.App/Music2DBridge.App.csproj -c Release -r osx-arm64Output (default):
src/Music2DBridge.App/bin/Release/net9.0/win-x64/publish/
The app always injects these parameter IDs:
ParamInstEnergyParamInstPitchParamInstInKeyParamInstChordRootParamInstChordTypeParamInstKeyRootParamInstKeyMode
Ensure your Live2D model / VTube Studio setup uses matching parameter IDs.
Use --note-mode=<mode> or M2D_NOTE_MODE=<mode> to choose note output behavior.
class(default): injectsParamInstNoteClassdirectly as note class value0..11per-note: injects 12 note parameters in range0..1for deep rig/chord alignment
In per-note mode, the app injects these 12 parameters:
ParamInstNoteCParamInstNoteCsParamInstNoteDParamInstNoteDsParamInstNoteEParamInstNoteFParamInstNoteFsParamInstNoteGParamInstNoteGsParamInstNoteAParamInstNoteAsParamInstNoteB
Example:
--note-mode=per-note
This uses fixed parameter names ParamInstNoteC ... ParamInstNoteB.
You can lock detection to a key/scale. Notes outside the configured key are ignored by note/chord/key history.
- CLI argument:
--fixed-key=<key> - Environment variable:
M2D_FIXED_KEY=<key>
Examples:
--fixed-key=Cmaj--fixed-key=AminM2D_FIXED_KEY=F# minor
Accepted key formats include major/minor suffixes (maj, major, min, minor) and sharps/flats (C#, Bb, etc.).
- GUI: choose
Inputfrom the top control bar. - CLI argument:
--input-device=<device-id> - Environment variable:
M2D_INPUT_DEVICE=<device-id> - Default behavior:
System Default(uses the computer default capture device)
On Windows, capture uses WASAPI shared mode first, so one microphone/interface can be used by multiple applications at the same time. This also works well when you are running guitar software in an ASIO host and need Music2DBridge to share the same input path.
This project uses a custom source-available commercial license.
See LICENSE for full terms.
Commercial licensing contact: