https://github.com/kryops/remote-mixer
Simple web-based interface to remote-control mixing consoles.
https://github.com/kryops/remote-mixer
Last synced: 5 months ago
JSON representation
Simple web-based interface to remote-control mixing consoles.
- Host: GitHub
- URL: https://github.com/kryops/remote-mixer
- Owner: kryops
- License: mit
- Created: 2021-01-30T13:12:12.000Z (over 5 years ago)
- Default Branch: main
- Last Pushed: 2025-10-04T15:29:15.000Z (9 months ago)
- Last Synced: 2025-10-04T17:31:24.761Z (9 months ago)
- Language: TypeScript
- Homepage:
- Size: 7.4 MB
- Stars: 16
- Watchers: 3
- Forks: 4
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
README
# remote-mixer
Simple web-based interface to remote-control mixing consoles.
- ๐ Compatible with different mixers
- ๐ฑResponsive and mobile-friendly
- ๐ Lightweight and performant
- ๐ธ๏ธ Connect multiple clients
- ๐ Light and dark mode

> **๐ง This project is still Work in Progress! ๐ ๏ธ**
>
> It should be stable enough to use at small events, but do not rely on it as your only means of mixing. **Use at your own risk**.
>
> I'm still not sure about the general direction for this project.
> Feel free to fork and experiment - PRs welcome.
> ๐ก Also check out this project's companion app [vlight](https://github.com/kryops/vlight) for controlling DMX lights.
## Features
This project is not meant to control every little functionality of a certain mixing console; usually, there are better alternatives around for that. However, many of them
- only work for a single mixing console model
- only run on a single platform like Windows or iOS
- only support a single connected client at the same time
- are not mobile-friendly
This project tries to bridge these limitations by supporting basic controls for different mixing consoles, accessible from any device (mouse or touch), and multiple devices at once.
### Supported Mixing Consoles
- [Yamaha 01v96](./backend/src/devices/yamaha-01v96/README.md)
- [Behringer X32 / Midas M32](./backend/src/devices/behringer-x32/README.md)
- _Add your own ([see below](#adding-support-for-other-mixing-consoles))_
### Available Controls
- Faders
- On/Off buttons
- Names
- Meters
- Categories (tabs), 2 levels deep
- Colors
## Getting Started
### Using a Docker container (EXPERIMENTAL)
You can build and run this project through Docker (in a Linux container):
```
> ./docker-build.sh
> ./docker-run.sh
```
### Normal installation
Software needed:
- [Node.js](https://nodejs.org/en/)
- [Yarn](https://yarnpkg.com/lang/en/)
Build tools for native Node.js addons are also needed depending on your platform. If the installation fails, install the tools listed in the [node-gyp documentation](https://github.com/nodejs/node-gyp/blob/master/README.md#installation).
Install and setup:
```shellscript
> yarn
```
Start in production mode:
```shellscript
> yarn start
```
## Configuration
Edit the `config/remote-mixer-config.js` file. Instructions on how to configure each compatible mixing console are usually contained in the corresponding README in `backend/src/devices`.
```js
const userConfig = {
httpPort: 8080,
logLevel: 'info',
device: 'dummy',
}
module.exports = userConfig
```
## Development
Start in development mode with hot reloading:
```shellscript
> yarn dev
```
### Adding support for other mixing consoles
Code to control different mixing consoles is located in `backend/src/devices`. Each file (or `index.ts` in a sub-directory) needs to have a `DeviceController` as default export.
```ts
import { DeviceController, DeviceMessageListener } from '@remote-mixer/types'
export default class MyDeviceController implements DeviceController {
deviceConfig = {
categories: [
{
key: 'ch',
label: 'Channels',
count: 32,
meters: true,
namePrefix: 'CH',
faderProperties: [
{ key: 'value', label: 'CH' },
{ key: 'aux1', label: 'AUX1' },
// ...
],
},
{
key: 'aux',
label: 'AUX',
count: 4,
namePrefix: 'AUX',
},
// ...
],
}
constructor(private listener: DeviceMessageListener) {
// connect, sync, and call this.listener() for any change
}
change(category: string, id: string, property: string, value: string): void {
// send the change to the mixing console
}
}
```
Checkout the [dummy device](./backend/src/devices/dummy.ts) for a minimal example that sends periodic random changes.
You can use existing device controllers as a baseline for similar consoles:
- [Yamaha 01v96](./backend/src/devices/yamaha-01v96/index.ts) for a MIDI controller
- [Behringer X32](./backend/src/devices/behringer-x32/index.ts) for an OSC controller