# Welcome

This is the ShowCockpit Academy - a place where you will find information about ShowCockpit applications, tutorials, examples and more.


# Getting Started

**ShowCockpit for Windows** is the #1 software application to control and integrate multiple devices in real-time.

Controlling [Audio, Video, Lighting and Effects](https://showcockpit.com/site/docs/) has never been easier! This next-generation show integration tool is a swiss-army knife that integrates multiple show elements in real-time: audio, video, lighting and effects!

{% embed url="<https://youtu.be/NCxvONI5BbY>" %}

{% hint style="info" %}
Visit the [website](https://showcockpit.com/) for more information on Pricing and to Download a free trial.
{% endhint %}


# Installation

Learn how to install ShowCockpit for Windows in your system

Getting ShowCockpit for Windows

Start by downloading the latest version from our website [Downloads page](https://showcockpit.com/site/downloads/).

{% hint style="info" %}
Please check if your system specifications meet the recommended specs on the [Downloads page.](https://showcockpit.com/site/downloads/)
{% endhint %}

## Run Setup Executable

Once the download finishes, you need to run that executable file to install ShowCockpit for Windows on your system.

After following all the steps, if the installation succeeds, ShowCockpit for Windows will be available to launch through the Start Menu (and Desktop shortcut, if you selected that option).


# Elements

When creating a new project, the first thing to do is to add a few elements to it.

## What is an element?

Once a driver is instantiated in a ShowCockpit for Windows project, we call it an element. In practical terms, you can have multiple elements of the same driver type in your project.

In a project, the inter-operability between elements is managed by ShowCockpit for Windows and can be configured using the Mapping section in the application - this is where you assign **Functions** to your **Controls**.

There are two core components of elements - **Controls** and **Functions**.  Some drivers only provide Controls, other drivers only provide Functions and a few provide both.

{% hint style="info" %}
**Example:** for a MIDI Device with internal pages, the buttons/faders/encoders can be exposed as Controls and the page change action as a Function.
{% endhint %}

### Functions&#xD;

Functions are provided by the driver to be executed on request. These can be triggered by another element's control.

### Controls&#xD;

Controls are assets of the element that can generate events. These Control events that are generated on the element side can then trigger another element function if configured to do so in the Mapping section of ShowCockpit.

## Adding elements to the project

Open the Elements section and click the "Add" button. A drop-down menu will appear with all the elements available to be added to your project.

## Log Levels

Every element includes an option to change the "Log Level".&#x20;Log levels are useful to debug the status of an element. If you want to get more information about an element (for example, you might want to print a message when an OSC element receives an OSC message), you can change the level to "Verbose". Certain levels will show the message on the console with a colored tag (red for errors, orange for warnings and green for success).

* **Critical**: Critical, severe and fatal errors that disable the element
* **Error**: Something went wrong
* **Warning**: Something went wrong, but operation can continue (default level)
* **Information**: Information about element operation
* **Verbose**: Debug information

{% hint style="info" %}
You should only define a lower log level if you really need, because logging messages to the console consumes CPU resources. Leave the CPU power for other (more important) tasks, such as processing control events and triggering functions.
{% endhint %}

## Element Indicators

The element indicators are divided into two groups: Controls and Functions.

![](/files/-LvoXO4c3G73AYAukuvV)

* **Control Event**: a control of the element has generated an event (fader moved, button clicked, encoder rotate, etc.)
* **Function Trigger**: A function of the element has been triggered (either via a control mapped to that function, or via a LUA script)
* **Function Feedback**: Some functions provide feedback (fader position, button LED state, etc.). Whenever a function generates feedback, this indicator blinks.
* **Control Feedback**: A control received feedback from a mapped function


# Mapping

Learn about the Mapping section of the application

![](/files/-M6nd12rhW3vlXYMbvBe)

The Mapping section is divided in 3 columns: **Functions**, **Parameters** and **Controls**

## Functions

In this column you select **what you want to control**. Upon selecting a target element, it shows a list of the available functions for that element.

Click on a Function name to select it.

{% hint style="warning" %}
**Note:** Only functions with a bolt icon [⚡](https://fsymbols.com/signs/hazard/) provide feedback!
{% endhint %}

In the example above, we have selected the **"Layer Dashboard Link"** function on the **"Resolume Arena"** element.

## Parameters

After selecting a Function, its parameters will be displayed in the second column. The parameters are always related to the selected function.

In the example above, the selected function ("Layer Dashboard Link") has two numeric parameters: **"Layer Number"** and **"Link Number"**. Set them according to what you want to control.

## Controls

Finally, you must select **which control you want to assign to the function you selected**.

Much like the Functions list, you start by selecting the Element on top (in our example, we used a Midicraft .Fade).

After selecting the element, it will show all the available controls on that element. The tabs help you identify the control types .

Select a **Control type** (Faders, Buttons, Encoders, Axis, Selectors or Others) and **click on the Control name to assign the previously selected function**.

{% hint style="info" %}
**Tip:** You can assign multiple functions to the same control. For example, you can use the same fader to control two different functions (from the same element or even from different elements).
{% endhint %}

## About Function Feedback

Feedback is provided by some Functions back to the assigned Controls.

{% hint style="warning" %}
**Note:** Only functions with a bolt icon [⚡](https://fsymbols.com/signs/hazard/) provide feedback!
{% endhint %}

So, if you wonder why you are not getting any feedback on button LEDs for example, please check if you have connected the button to a function that provides feedback.

If you need to connect to a function that does not provide feedback, but you want feedback, you will need to generate it. There are a few drivers that can help you do just that:

* [Utilities / Feedback / Button Flash Feedback](https://showcockpit.com/site/docs/?d=89)
  * Generates ON/OFF feedback based on the button press/release events
* [Utilities / ShowCockpit / Button Groups Feedback](https://showcockpit.com/site/docs/?d=48)
  * Asserts that only one button per group has its feedback ON

Simply map the button to both the function (without feedback) and one of the aforementioned utility drivers. The function will provide the functionality and the utility driver will provide the feedback back to the button.

{% hint style="info" %}
**Tip:** The [element indicators](https://academy.showcockpit.com/getting-started/elements#element-indicators) will help you see if there is any feedback being generated and routed back to the control
{% endhint %}


# Tutorials

Here you'll find multiple tutorials to tackle common use-cases with ShowCockpit for Windows application


# Integration


# Ableton Link to MA2

Connecting a Speed Master in MA2 to an Ableton Link session through ShowCockpit

## Video Tutorial (YouTube)

{% embed url="<https://www.youtube.com/watch?v=Y5VE20oJMMg>" %}


# LTC Input to MA2 OnPC

## Video Tutorial

{% embed url="<https://www.youtube.com/watch?v=mpkU7fBoj_0>" %}


# REAPER Markers to Onyx Cues

In this tutorial, we show how ShowCockpit can be used to quickly assign the Timecode position value from REAPER to a cue in Onyx using LUA script.

## Video Tutorial

{% embed url="<https://youtu.be/dMFbhajEDGE>" %}


# Ableton Link to Onyx FX Speed

This tutorial shows how to control an Onyx effect (FX Engine) speed to sync it to the live BPM provided by an Ableton Link session.

## Video Tutorial

{% embed url="<https://youtu.be/QVT_EfjUql8>" %}

{% file src="/files/-LwrIp4rQybzQQckh-1c" %}
LUA Script
{% endfile %}


# MIDI Device with Bitfocus Companion

This tutorial explains how to use a MIDI device to control Companion (by Bitfocus) using ShowCockpit

![Connnecting one or multiple MIDI devices to Bitfocus Companion](/files/-MVvYtpnlbdanGXsPRDe)

## 1. Add Companion element to ShowCockpit <a href="#id-1-add-an-onyx-element" id="id-1-add-an-onyx-element"></a>

On the **Elements** section, click the **Add** button to add an Companion element to the project:

* **Other > Bitfocus > Companion**

![](/files/-MVgy77TljLddTNWUI2x)

### Review the element options <a href="#enable-the-element" id="enable-the-element"></a>

Check the Companion application for the IP address and the port.

![](/files/-MVgzAH0F4-Aftt1y7Ob)

They both should match on the element options, **even if both applications are running within the same computer**.

![](/files/-MVgygX5g6ceSzpipt3r)

### Enable the Element <a href="#enable-the-element" id="enable-the-element"></a>

Click the toggle button on the element to enable it.

![](/files/-MVgzKuOakVgUUn17gPd)

## 2. Add MIDI device element  <a href="#id-2-add-midi-device-element" id="id-2-add-midi-device-element"></a>

Use the **Add** button again to add your MIDI device element through **External Control > MIDI**. Currently, ShowCockpit has out-of-the-box support for multiple MIDI devices - [check out the complete compatibility list here](https://showcockpit.com/site/docs/).

If your device is not listed, you will need to use the **Generic MIDI** driver and map your device controls manually.

When using a specific MIDI device driver, you can skip to Step 4.

### Set Element Options <a href="#set-element-options" id="set-element-options"></a>

&#x20;After adding the element, make sure that the correct device is selected under both Input Device and Output Device options.

### Enable the Element <a href="#enable-the-element-1" id="enable-the-element-1"></a>

Finally, click the toggle button on the MIDI device element to enable it.

## 3. Learn MIDI Controls (Generic MIDI only) <a href="#id-3-learn-midi-controls-generic-midi-only" id="id-3-learn-midi-controls-generic-midi-only"></a>

In case you selected the **Generic MIDI** driver, now you need to "teach" this driver what controls (faders, buttons and encoders) your device has. For the officially supported MIDI devices, controls are automatically mapped, so you can skip to the next step.

Double-click the **Generic MIDI** element to open its window - you will start by mapping the **Faders**. Click on **Enable Learn** on the top-right to start listening to MIDI input.

![](/files/-Lub1GCEgZ2P2gLob46Z)

* Move, one-by-one, all **Faders** on your MIDI device. They will be added to the **Faders** list.
* To map the **Buttons**, click on **Buttons** (above the table) and repeat the procedure now for all your device buttons.
* Finally, map your **Encoders** by clicking on **Encoders** and repeat the procedure for all the encoders.

You can now close the **Generic MIDI** window by clicking **Back to Elements** or clicking on any menu button.

## 4. Mapping <a href="#id-4-mapping" id="id-4-mapping"></a>

To start mapping the MIDI element to Companion buttons, drag a new connection from the output (right side) of the MIDI element to the input (left side) of the Companion element.

![](/files/-MVh-1b9pTy8KlInJLe9)

This will bring you to the **Mapping** section. This section is divided into 3 columns, from left to right:

* Functions
* Parameters
* Controls

On the left, you should have the **Companion** element selected on the Functions column and you should be able to select a function (for example, "**Button Control**"). When you select the function, the function button will be highlighted and the second column will have the parameters for the function. In this case, you can **select which button you want to control and from which page**.

![Example mapping button 2 of the first Companion page](/files/-MVh-iNpPuVjahdHx1c2)

On the right side (Controls column), you should have your MIDI device element. Open the Buttons list and click on one of the buttons to assign the function.

If you now press the mapped button, you should see the function being triggered in **Companion**, acting exactly as if you pressed a button in the Elgato StreamDeck.

Repeat the process for all desired buttons.


# Timecode


# LTC to MTC

Listen to LTC SMPTE signal from audio hardware interface (sound card) and convert it to an MTC (MIDI Timecode) signal.

1\. Add the Required Elements

![](/files/-LuZre05DAOf_l7qWNle)

On the RD/ShowCockpit Elements section, click the Add button to add the required elements to the project:

* External Control > Timecode > LTC Input
* External Control > Timecode > MTC Output

Click the toggle buttons on the elements to enable them.

2\. Configure Elements Options

If you click on one element in your project (under the Elements tab), its options are displayed on the right sidebar.

In case the default options do not suit your needs, you can use these options to select the Input Device and its sampling rates for the LTC Input element and also the output MIDI device for the MTC Output element.

You should also set the FPS (Frames-Per-Second) to a sensible value for both input and output (they can be different, if needed).

3\. Map the LTC Input to MTC Output

Open the Mapping section and select the MTC Output element on the left. Select the Timecode Sync Function.

![](/files/-LuZrurGEBLNyuU0xRT6)

Then select the LTC Input on the right list (controls) and assign the previously selected function to the Timecode Sync Control by clicking it under the Others tab.


# MTC to LTC

Listen to MTC (MIDI Timecode) signal and converting it to an audio LTC SMPTE signal to audio hardware interface (sound card).

1\. Add the Required Elements

![](/files/-LuZre05DAOf_l7qWNle)

On the Elements section, click the **Add** button to add the required elements to the project:

* External Control > Timecode > LTC Output
* External Control > Timecode > MTC Input

Click the toggle buttons on the elements to enable them.

2\. Configure Elements Options

If you click on one element in your project (under the Elements tab), its options are displayed on the right sidebar.

In case the default options do not suit your needs, you can use these options to select the Output Device and its sampling rates for the LTC Output element and also the input MIDI device for the MTC Input element.

You should also set the FPS (Frames-Per-Second) to a sensible value for both input and output (they can be different, if needed).

3\. Map the MTC Input to LTC Output

Open the Mapping section and select the LTC Output element on the left. Select the Timecode Sync Function.

![](/files/-LuZsePvdMlvwFCvyGeN)

Then select the MTC Input on the right list (controls) and assign the previously selected function to the Timecode Sync Control by clicking it under the Others tab.


# Static Time Offset

Applying a static time offset can be useful to account for processing delays, or if all your programming is shifted to a different time window than the input signal.

## Video Tutorial

{% embed url="<https://www.youtube.com/watch?v=U_FoR9S8Q7Q>" %}


# LTC Input from Dante

In this tutorial, we will guide you through configuring your system to receive LTC (SMPTE) via a Dante Network

## Dante Virtual Soundcard Configuration

Dante Virtual Soundcard (or simply DVS) is an application provided by Audinate that allows you to expose incoming Dante channels as (like the name says) virtual soundcards.

The very first step is to install this application and getting comfortable with it. At the time of this writing, ShowCockpit does not have an ASIO driver for LTC input. Therefore, it is only possible to grab Dante audio input using the WDM driver.&#x20;

Therefore, WDM as the Audio Interface and click Start.

![](/files/-MNhglpDZ_e6Tj_IaNm1)

## Route the audio in the Dante Controller

In your Dante Controller, you will see a new Dante device popping up ready to be routed. In the example below, to keep it simple, we have routed the first 16 channels of a stage box into the first 16 channels of DVS.

![Example routing in Dante Controller from an Allen\&Heath dLive CDM32 into DVS](/files/-MNhhzmNP6Y8aYnZwBDL)

## Configure LTC Input in ShowCockpit

At this point, you can treat the DVS device as a normal soundcard.

1. Add an **LTC Input** element (External Control > Timecode > LTC Input)
2. Configure the **Input Device**, according to the mapping you have made earlier
3. Set the **FPS** according to the project specifications
4. Set the **Sampling Rate** to 48000 Hz
5. Set the **Channel** to the virtual soundcard channel you want to get LTC from

Below is an example to receive LTC on DVS Channel 16.

![Example to get LTC from Dante Virtual Soundcard channel 16](/files/-MNhl1KgKSvp1dcBO8jm)

{% hint style="warning" %}
Note the selected **Input Device** is "DVS Receive 15-16" and the selected **Channel** is 2 (the second input channel of this virtual device that exposes channels 15 and 16)
{% endhint %}

## Verify if the timecode is correctly received

If you now **enable the LTC Input element** and **double-click it**, you should see any incoming TC data running.

![](/files/-MNhmXz-u1EY9hd9gnne)


# Protocol Conversion


# OSC to MIDI

How to use RD/ShowCockpit to convert or translate OSC to MIDI

1\. Add the Required Elements

![](/files/-LuZre05DAOf_l7qWNle)

On the Elements section, click the Add button to add the required elements to the project:

* External Control > OSC > Generic OSC
* External Control > MIDI > MIDI Output

Click the toggle buttons on the the elements to enable them.

2\. Configure OSC Inputs

Double-click the Generic OSC element and add your OSC controls to the Inputs list:

![](/files/-LuZu-hr6Zke2Z_dNwI6)

* Name: name identifier of your control
* Address: the OSC address
* ValueIndex: in case the message carries more than one value, select which one to take (zero-based)
* Range: min and max values for internal normalization
* Type: button, fader or encoder
* Note: Name and ValueIndex must be unique (no duplicates)

3\. Map OSC controls to MIDI Output

Open the Mapping section and select the desired MIDI Output functions. Start by selecting the MIDI Output element on the left list (functions). Select a desired output (Note On, Control Change, etc.) and tune the parameters.

![](/files/-LuZuLOxLu4jWamflZaq)

Finally select the Generic OSC on the right list (controls) and assign the previously selected MIDI Out function to one of your controls.

{% hint style="info" %}
In case your previously mapped controls do not show up, you can click the **Refresh** button to reload the controls list.
{% endhint %}


# MIDI to OSC

How to use RD/ShowCockpit to convert or translate MIDI to OSC

1\. Add the Generic OSC element

![](/files/-LuZre05DAOf_l7qWNle)

On the **Elements** section, click the **Add** button to add one element to the project:

* External Control > OSC > Generic OSC

### Enable the Element

Click the toggle buttons on the element to enable it.

2\. Add MIDI device element

Use the **Add** button again to add your MIDI device element through **External Control > MIDI**. Currently, RD/ShowCockpit has out-of-the-box support for multiple MIDI devices - [check out the complete compatibility list here](https://showcockpit.com/site/docs/).

{% hint style="info" %}
If your device is not listed, you will need to use the **Generic MIDI** driver and map your device controls manually.&#x20;
{% endhint %}

When using a specific MIDI device driver, you can skip to Step 4.

### Set Element Options

After adding the element, make sure that the correct device is selected under both Input Device and Output Device options.

### Enable the Element

Finally, click the toggle button on the MIDI device element to enable it.

## 3. Learn MIDI Controls (Generic MIDI only)

In case you selected the **Generic MIDI** driver, now you need to "teach" this driver what controls (faders, buttons and encoders) your device has. For the officially supported MIDI devices, controls are automatically mapped, so you can skip to the next step.

Double-click the **Generic MIDI** element to open its window - you will start by mapping the **Faders**. Click on **Enable Learn** on the top-right to start listening to MIDI input.

![](/files/-Lub1GCEgZ2P2gLob46Z)

* Move, one-by-one, all **Faders** on your MIDI device. They will be added to the **Faders** list.
* To map the **Buttons**, click on **Buttons** (above the table) and repeat the procedure now for all your device buttons.
* Finally, map your **Encoders** by clicking on **Encoders** and repeat the procedure for all the encoders.

You can now close the **Generic MIDI** window by clicking **Back to Elements** or clicking on any menu button.

## 4. Configure OSC Outputs

![](/files/-Lub1m-m0RMrh8iQkA9s)

Double-click the **Generic OSC** element and add your **OSC Functions to the Outputs list**:

* **Name**: name identifier of your control
* **Address**: the OSC address
* **ValueIndex**: (ignored for functions)
* **Range**: min and max values for internal normalization
* **Type**: button, fader or encoder

{% hint style="info" %}
**Note:** Name and ValueIndex must be unique (no duplicates)
{% endhint %}

## 5. Map MIDI controls to OSC Output

Open the **Mapping** section and select the desired **OSC Output** functions. Start by selecting the **OSC Output element on the left list** (functions) and the desired output.

Finally select the **MIDI Device on the right list** (controls) and assign the previously selected OSC function to one of your controls.

{% hint style="info" %}
**Note**: In case your previously mapped controls do not show up, you can click the **Refresh** button to reload the controls list.
{% endhint %}


# Keyboard to MIDI

Converting keyboard key presses to MIDI

1\. Add the Required Elements

![](/files/-LuZre05DAOf_l7qWNle)

On the Elements section, click the Add button to add the required elements to the project:

* [  External Control > Keyboard and Mouse > Keyboard Keys](https://showcockpit.com/site/docs/?d=41)
* [External Control > MIDI > MIDI Output  ](https://showcockpit.com/site/docs/?d=65)

Click the toggle buttons on the the elements to enable them.

2\. Map Keyboard Keys to MIDI Output

Open the Mapping section and select the desired MIDI Output functions. Start by selecting the MIDI Output element on the left list (functions). Select a desired output (Note On, Control Change, etc.) and tune the parameters.

![](/files/-LuZuLOxLu4jWamflZaq)

Finally select the Keyboard on the right list (controls) and assign the previously selected MIDI Out function to one of the available controls.


# Joystick to MIDI

This tutorial will explain how you can convert joystick and gamepads controls to MIDI messages

1\. Add the Required Elements

![](/files/-LuZre05DAOf_l7qWNle)

On the Elements section, click the **Add** button to add the required elements to the project:

* [  External Control > Joysticks > Joystick  ](https://showcockpit.com/site/docs/?d=24)
* [External Control > MIDI > MIDI Output  ](https://showcockpit.com/site/docs/?d=65)

Click the toggle buttons on the the elements to enable them.

2\. Map Joystick Controls to MIDI Output

Open the Mapping section and select the desired MIDI Output functions. Start by selecting the MIDI Output element on the left list (functions). Select a desired output (Note On, Control Change, etc.) and tune the parameters.

![](/files/-LuZuLOxLu4jWamflZaq)

Finally select the Joystick on the right list (controls) and assign the previously selected MIDI Out function to one of the available controls.

{% hint style="info" %}
For fader assignments, you might need to use the [**Axis to Fader**](https://showcockpit.com/site/docs/?d=70) driver (to convert the axis control into a virtual fader)
{% endhint %}


# Lighting


# grandMA3 OnPC Hotkeys

Project that mimics the MA2 keyboard shortcuts in the new MA3 system.

## ShowCockpit Project File

Download the sample project file below (created on ShowCockpit v3.12.2):

{% file src="/files/-LwuUceX60Xl2dmtCRLV" %}
Sample Project File
{% endfile %}

## List of Elements Needed

* **grandMA3 - OSC** provides the connection to OSC
* **Keyboard** listens to keyboard keys without modifiers
* **Keyboard Ctrl** listens to keyboard keys with the Ctrl modifier
* **Keyboard Alt** listens to keyboard keys with the Alt modifier
* **Keyboard Ctrl + Alt** listens to keyboard keys with both the Ctrl and Alt modifiers
* **Keyboard Main** should be always enabled to listen to the Scroll Lock key that will be used to enable/disable the other Keybard elements
  * **Button Toggler** will be connected to the Scroll Lock of the **Keyboard Main** element and will provide an ON/OFF toggle to that
  * **Event Breaker** will generate separate Press and Release events for the virtual "Toggle Button" of the **Button Toggler** element
  * **Element Control** is responsible for enabling/disabling elements based on the Event Breaker Press/Released Buttons

{% hint style="info" %}
After downloading the sample project file, you should have a look at it and adjust it to your needs, including any connection options to your MA3 system
{% endhint %}

## List of Keyboard Bindings

The following bindings are set in the sample project file (download above):

* B: **Blind**
* C: **Channel**
* E: **Edit**
* F: **Fixture**
* G: **Group**
* L: **List**
* O: **Off**
* P: **Preset**
* S: **Store**
* U: **Update**
* X: **Exec**
* Backspace: **Oops**
* Delete: **Clear**
* End: **Reset**
* Page Up: **Page Up**
* Page Down: **Page Down**
* Left Shift: **MA**
* Left Arrow: **Prev**
* Right Arrow: **Next**
* Up Arrow: **Up**
* Down Arrow: **Down**
* Ctrl + A: **Align**
* Ctrl + C: **Copy**
* Ctrl + D: **Delete**
* Ctrl + F: **Full**
* Ctrl + H: **High**
* Ctrl + L: **Learn**
* Ctrl + M: **Move**
* Ctrl + O: **On**
* Ctrl + S: **Select**
* Ctrl + T: **Time**
* Ctrl + U: **User 1**
* Alt + A: **Assign**
* Alt + C: **Cue**
* Alt + F: **Freeze**
* Alt + G: **GoTo**
* Alt + S: **Sequence**
* Alt + U: **User 2**
* Ctrl + Alt + P: **Preview**
* Ctrl + Alt + S: **Solo**


# MIDI device(s) with an MA3 Desk

How to connect any MIDI controller to an MA Lighting grandMA3 system (console or OnPC)

## 1. Know your IP addresses <a href="#id-1-add-an-onyx-element" id="id-1-add-an-onyx-element"></a>

Before you start, we need to settle up the IP addresses of both the MA3 system and ShowCockpit.

In this tutorial we will assume these IPs:

* **MA3 IP**: 2.0.0.3
* **ShowCockpit IP**: 2.0.0.2

{% hint style="info" %}
If you are setting up MA3 OnPC running in the same computer as ShowCockpit, please refer to this page: [Connecting to MA3 OnPC on the same PC](/showcockpit-for-windows/tutorials/lighting/connecting-to-ma3-onpc-on-the-same-pc)
{% endhint %}

## 2. Enable OSC In/Out in MA3 <a href="#id-1-add-an-onyx-element" id="id-1-add-an-onyx-element"></a>

In MA3, press the **gear-box button to show the Menu** and click the **In & Out** button.

Select the **OSC tab** and on the top, select the **Interface** you want to use and **enable both Input and Output**.

![](/files/-LwrLlDl3AAlPB1GOqvZ)

If the list is empty, add a new OSCData line and set the destination IP address to the **ShowCockpit IP**

![](/files/-LwrMGtc4dusAiLplbv5)

Finally enable all send and receive items by clicking on the "**ReceiveAll**", "**SendAll**", "**ReceiveCmdAll**" and "**SendCmdAll**" buttons.

![](/files/-LwrMYIjnhtMs8a5fKYS)

## 3. Add an MA3 - OSC element in ShowCockpit <a href="#id-1-add-an-onyx-element" id="id-1-add-an-onyx-element"></a>

On the **Elements** section, click the **Add** button to add an MA3 - OSC element to the project:

* **Lighting > MA Lighting > MA3 - OSC**

### Enable the Element <a href="#enable-the-element" id="enable-the-element"></a>

Click the toggle buttons on the element to enable it.

## 4. Add MIDI device element  <a href="#id-2-add-midi-device-element" id="id-2-add-midi-device-element"></a>

Use the **Add** button again to add your MIDI device element through **External Control > MIDI**. Currently, RD/ShowCockpit has out-of-the-box support for multiple MIDI devices - [check out the complete compatibility list here](https://showcockpit.com/site/docs/).

If your device is not listed, you will need to use the **Generic MIDI** driver and map your device controls manually.

When using a specific MIDI device driver, you can skip to Step 4.

### Set Element Options <a href="#set-element-options" id="set-element-options"></a>

&#x20;After adding the element, make sure that the correct device is selected under both Input Device and Output Device options.

### Enable the Element <a href="#enable-the-element-1" id="enable-the-element-1"></a>

Finally, click the toggle button on the MIDI device element to enable it.

## 5. Learn MIDI Controls (Generic MIDI only) <a href="#id-3-learn-midi-controls-generic-midi-only" id="id-3-learn-midi-controls-generic-midi-only"></a>

In case you selected the **Generic MIDI** driver, now you need to "teach" this driver what controls (faders, buttons and encoders) your device has. For the officially supported MIDI devices, controls are automatically mapped, so you can skip to the next step.

Double-click the **Generic MIDI** element to open its window - you will start by mapping the **Faders**. Click on **Enable Learn** on the top-right to start listening to MIDI input.

![](https://blobscdn.gitbook.com/v0/b/gitbook-28427.appspot.com/o/assets%2F-LuTyAYhvh-0rGV983Jy%2F-LuZuW5A7DF0ZeKAyR4e%2F-Lub1GCEgZ2P2gLob46Z%2Fgeneric-midi-fadbutenc.jpg?alt=media\&token=6a511fb2-4932-4a72-9b0e-9bca524df27f)

* Move, one-by-one, all **Faders** on your MIDI device. They will be added to the **Faders** list.
* To map the **Buttons**, click on **Buttons** (above the table) and repeat the procedure now for all your device buttons.
* Finally, map your **Encoders** by clicking on **Encoders** and repeat the procedure for all the encoders.

You can now close the **Generic MIDI** window by clicking **Back to Elements** or clicking on any menu button.

## 6. Mapping <a href="#id-4-mapping" id="id-4-mapping"></a>

Open the **Mapping** section on the Main Menu.

This section is divided into 3 columns, from left to right:

* Functions
* Parameters
* Controls

Select the **MA3 - OSC** element on the Functions column and select a function (for example, "Executor Fader"). When you select the function, the button will be highlighted and the second column will have the parameters for the function. In this case, you can select which playback fader you want to control.

Select the **Generic MIDI** element on the Controls column, open the Faders list and click on one of the faders to assign the function.

If you now move your fader, the mapped Executor Fader on MA3 should act accordingly.

Repeat the process for all desired controls.


# Connecting to MA3 OnPC on the same PC

This page will give you instructions to successfully connect ShowCockpit to the MA3 OnPC running in the same computer.

## 1 - MA3 OnPC Configuration

### 1.1 - Enable OSC Input / Output

On MA3, navigate through **Menu > In & Out > OSC**. On the top of this view, you will have two big toggle buttons: **"Enable Output"** and **"Enable Input"** - make sure you enable both.

![](/files/-M2ev8erTPwe7orE3XuD)

### 1.2 - Add Two Rows

It is not possible to have 2 applications listening to the same port In the same computer. Therefore, unlike the console/desk case, we need two rows in the table: one for input (ShowCockpit -> MA3) and another for the output (MA3 -> ShowCockpit).

![](/files/-M2evfVqA5nbiMMFbiR8)

In the example above, we have set the following settings:

| Parameter      | Input         | Output        |
| -------------- | ------------- | ------------- |
| Destination IP | 127.0.0.1     | 127.0.0.1     |
| Mode           | UDP           | UDP           |
| Port           | 8000          | 8001          |
| Prefix         | (leave empty) | (leave empty) |
| Receive        | Yes           | No            |
| Send           | No            | Yes           |
| ReceiveCmd     | Yes           | No            |
| SendCmd        | No            | Yes           |

## 2 - ShowCockpit MA3 - OSC element configuration

After adding the MA3 - OSC element to your project, you will need to tweak a few options before enabling the element.

| Parameter     | Value     | Description                                                         |
| ------------- | --------- | ------------------------------------------------------------------- |
| IP Address    | 127.0.0.1 | Leave this as the "loopback IP" since we are running in the same PC |
| Outgoing Port | 8000      | Outgoing from ShowCockpit to MA3 (input in MA3)                     |
| Incoming Port | 8001      | Incoming on ShowCockpit from MA3 (output in MA3)                    |

After setting the correct configuration, you should be able to connect to the MA3 OnPC by enabling the MA3 element.

{% hint style="info" %}
The port numbers used (8000 and 8001) are merely an example. If you encounter errors opening the ports, it means there are already other applications using these ports, and you must select a different set.

Please remember that both ports must match both on ShowCockpit and MA3.
{% endhint %}


# MIDI device(s) with MA2

How to connect any MIDI controller to an MA Lighting GrandMA2 system (console or OnPC)

## 1. Add an MA2 element <a href="#id-1-add-an-onyx-element" id="id-1-add-an-onyx-element"></a>

On the **Elements** section, click the **Add** button to add an MA2 element to the project:

* **Lighting > MA Lighting > MA2**

### Enable the Element <a href="#enable-the-element" id="enable-the-element"></a>

Click the toggle buttons on the element to enable it.

## 2. Add MIDI device element  <a href="#id-2-add-midi-device-element" id="id-2-add-midi-device-element"></a>

Use the **Add** button again to add your MIDI device element through **External Control > MIDI**. Currently, RD/ShowCockpit has out-of-the-box support for multiple MIDI devices - [check out the complete compatibility list here](https://showcockpit.com/site/docs/).

If your device is not listed, you will need to use the **Generic MIDI** driver and map your device controls manually.

When using a specific MIDI device driver, you can skip to Step 4.

### Set Element Options <a href="#set-element-options" id="set-element-options"></a>

&#x20;After adding the element, make sure that the correct device is selected under both Input Device and Output Device options.

### Enable the Element <a href="#enable-the-element-1" id="enable-the-element-1"></a>

Finally, click the toggle button on the MIDI device element to enable it.

## 3. Learn MIDI Controls (Generic MIDI only) <a href="#id-3-learn-midi-controls-generic-midi-only" id="id-3-learn-midi-controls-generic-midi-only"></a>

In case you selected the **Generic MIDI** driver, now you need to "teach" this driver what controls (faders, buttons and encoders) your device has. For the officially supported MIDI devices, controls are automatically mapped, so you can skip to the next step.

Double-click the **Generic MIDI** element to open its window - you will start by mapping the **Faders**. Click on **Enable Learn** on the top-right to start listening to MIDI input.

![](https://blobscdn.gitbook.com/v0/b/gitbook-28427.appspot.com/o/assets%2F-LuTyAYhvh-0rGV983Jy%2F-LuZuW5A7DF0ZeKAyR4e%2F-Lub1GCEgZ2P2gLob46Z%2Fgeneric-midi-fadbutenc.jpg?alt=media\&token=6a511fb2-4932-4a72-9b0e-9bca524df27f)

* Move, one-by-one, all **Faders** on your MIDI device. They will be added to the **Faders** list.
* To map the **Buttons**, click on **Buttons** (above the table) and repeat the procedure now for all your device buttons.
* Finally, map your **Encoders** by clicking on **Encoders** and repeat the procedure for all the encoders.

You can now close the **Generic MIDI** window by clicking **Back to Elements** or clicking on any menu button.

## 4. Mapping <a href="#id-4-mapping" id="id-4-mapping"></a>

Open the **Mapping** section on the Main Menu.

This section is divided into 3 columns, from left to right:

* Functions
* Parameters
* Controls

Select the **MA2** element on the Functions column and select a function (for example, "Executor Fader"). When you select the function, the button will be highlighted and the second column will have the parameters for the function. In this case, you can select which playback fader you want to control.

Select the **Generic MIDI** element on the Controls column, open the Faders list and click on one of the faders to assign the function.

If you now move your fader, the mapped Executor Fader on MA2 should act accordingly.

Repeat the process for all desired controls.


# MA2 Bi-directional Page Sync

When using our MA2 driver, since it communicates with OnPC/desk via the web-remote interface, you will realize there are a couple of limitations. Although ShowCockpit does a good job abstracting you from the underlying communication protocols, there are end-roads due to limitations on the MA2 side.

One of the biggest drawbacks of the web-remote interface is that it does not sync Fader and Button pages.

In this article we will discuss how bi-directional page sync can be achieved with some trickery involved.

## Changing Pages from ShowCockpit

You probably realized that there is a "Sync Pages" option in the element. As according to the [documentation](https://showcockpit.com/site/docs/?d=25), this option "syncronizes pages on MA2 sytem when page change occurs via ShowCockpit, using the Change Page function."

So if you are ok with just changing pages via ShowCockpit, this is the way to go - enable this option and the driver will take care of the rest for you.

## Changing Pages on MA2

It is not that uncommon that MA2 shows are designed with multiple paging in mind. And sometimes the page change is even triggered via Macros.

In a normal situation, if this occurs, you will notice that any clients connected to the web-remote will be left behind - in other words, they will not follow the page change.

The workaround for this is to have some sort of feedback coming from MA2 into ShowCockpit that will trigger a Change Page on the ShowCockpit side.

To put it simple, the cleanest solution we suggest involves LUA scripts running on both sides. And the feedback of the current page on MA2 arrives via a dummy executor. If you haven't run away already by reading the word LUA, bear with us, it's not that hard and we have actually taken care of the hardest parts.

### Step 1 - Creating a Dummy Executor

We will need a dummy executor running a dummy sequence with empty cues in MA2. As funny as this seems, it will all make sense down the road.

For the sake of this tutorial, let's say we will use Executor 80, that we assume it is currently empty.

* Clear your programmer
* **Store Cue 1 Thru 500 Executor 80**
  * This creates a new sequence with 500 empty cues and assigns it to Executor 80 in the current page
* **Fix Executor 80**
  * This fixes the sequence to this executor regardless of the page we're in

### Step 2 - Sync cues to the page number

In this step we will make sure that the Cue number running in the Executor 80 we have just created is always in sync with the current page number. I.e., when you are on page 8, this Executor should be on Cue 8, if you change to page 16 the Executor should jump to Cue 16, and so on and so forth.

This can be made in multiple ways, but the safest way (that covers any type of page change) is having a LUA script running in the background.

Create a new Plugin in your MA2 showfile and copy-paste the following LUA script:

```lua
local lastFaderPage = -1
function pagechange_callback(t,n)
   local nowFaderPage = gma.show.getvar("FADERPAGE");
   if nowFaderPage == lastFaderPage then
      gma.echo("Same Fader Page = " .. nowFaderPage);
   else
      gma.echo("Fader Page=" .. nowFaderPage);
      gma.cmd("Go Executor 1.80 Cue " .. nowFaderPage);
      lastFaderPage = nowFaderPage;
   end

end

function Start()
   gma.timer(pagechange_callback,0.1,0,Cleanup);
end

function Cleanup()
  gma.echo("Cleanup called");
end

return Start;
```

If you don't understand the LUA syntax, that's ok. But in case you're interested, this plugin simply creates a timer that calls our function "pagechange\_callback" every 0.1 seconds.

In this function, we will get the current fader page and compare it with an auxiliary variable that we use to store the last page. So that whenever they are different, it means the page has changed, and we need to action the Executor 80 to Go to Cue number = to the fader page number.

At this point, you should run the script and test if the executor follows the page change.

### Step 3 - Reading the current page in ShowCockpit

Now, the last step is to read the current page number (indirectly via Executor 80) and issue a Change Page on the ShowCockpit side in order to follow the page that MA2 is currently in.

For that, we will use LUA again, but this time running on the ShowCockpit side.

So, add a new LUA Script element to your ShowCockpit project and copy-paste the following code:

```lua
-- ShowCockpit LUA Script: MA2 Follow Bank
--   created on ShowCockpit v3.1.3
--   by Ricardo Dias
--   on 25-5-2019

function setMA2Page(MA2Element, pageType, executorToRead)
  -- Returns the name of the current cue
  v = MA2Element.GetExecutorCurrentCue(executorToRead)

  if v == nil then
  else
    v = string.sub(v,1,5)

    -- Page to jump to when "Change Type" = "Jump To"
    p_jumptopage = v;
    
    -- Changes fader/button page on MA2
    MA2Element.ChangePage_ButtonClick(pageType, 'Jump To', p_jumptopage)
   end
end


-- Get 'GrandMA2' element
GrandMA2 = GetElement('GrandMA2')

while 1 do
  setMA2Page(GrandMA2, 'Faders', 80)
  sleep(0.1)
end
```

The script above reads the current cue name from Executor 80, extracts the number of the cue from its name and then issues a "Change Page" by emulating a Button Click event on that function with the "Faders" type and jumping to the page number that is equal to the cue number it just read.

It has a main loop to keep doing this every 0.1 seconds.

## Conclusion

And that's all! Now your Fader Page on SC follows the Fader Page changes on MA2.

We have just worked around a limitation, unfortunately involves adding scripts to the showfile, but at least it's an alternative to those wanting to be able to freely change page on MA2.

Note that you can still do it from the SC side as well.

We leave to you as homework how to change the scripts above to change both Fader pages and Button pages.


# MIDI device(s) with Chamsys MagicQ

This tutorial will guide you through connecting any MIDI device with Chamsys MagicQ lighting software

## 1. Configure MagicQ OSC Input <a href="#id-1-add-an-onyx-element" id="id-1-add-an-onyx-element"></a>

In this tutorial, ShowCockpit will use the OSC protocol to control Chamsys MagicQ. This protocol is only unlocked in MagicQ if some official Chamsys hardware is connected. Please refer to the MagicQ manual to know which hardware unlocks the OSC protocol.

Please refer to MagicQ manual also on how to enable OSC input.

## 2. Add a Chamsys MagicQ OSC element to ShowCockpit <a href="#id-1-add-an-onyx-element" id="id-1-add-an-onyx-element"></a>

On the **Elements** section, click the **Add** button to add an MagicQ - OSC element to the project:

* **Lighting > Chamsys > MagicQ - OSC**

### Enable the Element <a href="#enable-the-element" id="enable-the-element"></a>

Click the toggle buttons on the element to enable it.

## 3. Add MIDI device element  <a href="#id-2-add-midi-device-element" id="id-2-add-midi-device-element"></a>

Use the **Add** button again to add your MIDI device element through **External Control > MIDI**. Currently, RD/ShowCockpit has out-of-the-box support for multiple MIDI devices - [check out the complete compatibility list here](https://showcockpit.com/site/docs/).

If your device is not listed, you will need to use the **Generic MIDI** driver and map your device controls manually.

When using a specific MIDI device driver, you can skip to Step 4.

### Set Element Options <a href="#set-element-options" id="set-element-options"></a>

&#x20;After adding the element, make sure that the correct device is selected under both Input Device and Output Device options.

### Enable the Element <a href="#enable-the-element-1" id="enable-the-element-1"></a>

Finally, click the toggle button on the MIDI device element to enable it.

## 4. Learn MIDI Controls (Generic MIDI only) <a href="#id-3-learn-midi-controls-generic-midi-only" id="id-3-learn-midi-controls-generic-midi-only"></a>

In case you selected the **Generic MIDI** driver, now you need to "teach" this driver what controls (faders, buttons and encoders) your device has. For the officially supported MIDI devices, controls are automatically mapped, so you can skip to the next step.

Double-click the **Generic MIDI** element to open its window - you will start by mapping the **Faders**. Click on **Enable Learn** on the top-right to start listening to MIDI input.

![](/files/-Lub1GCEgZ2P2gLob46Z)

* Move, one-by-one, all **Faders** on your MIDI device. They will be added to the **Faders** list.
* To map the **Buttons**, click on **Buttons** (above the table) and repeat the procedure now for all your device buttons.
* Finally, map your **Encoders** by clicking on **Encoders** and repeat the procedure for all the encoders.

You can now close the **Generic MIDI** window by clicking **Back to Elements** or clicking on any menu button.

## 5. Mapping <a href="#id-4-mapping" id="id-4-mapping"></a>

Open the **Mapping** section on the Main Menu.

This section is divided into 3 columns, from left to right:

* Functions
* Parameters
* Controls

Select the **MagicQ - OSC** element on the Functions column and select a function (for example, "Playback Fader"). When you select the function, the function button will be highlighted and the second column will have the parameters for the function. In this case, you can select which playback fader you want to control.

Select the **Generic MIDI** element on the Controls column, open the Faders list and click on one of the faders to assign the function.

If you now move your fader, the mapped Executor Fader on **MagicQ** should act accordingly.

Repeat the process for all desired controls.


# Obsidian Onyx - Multiple OSC Devices

Sometimes you need to control multiple banks at the same time in Onyx. The only way to do this is to have multiple OSC devices configured in Onyx, since each device is bound to a single bank.

## Multiple Devices = Multiple IPs

Onyx identifies devices by their IP address. This all works great if you have different physical devices on a network, but can be confusing if you are connecting to Onyx via the Loopback interface. Before anything else, we need to set our IPs for each endpoint, even if you're using the Loopback interface.

If you need a step-by-step tutorial to configure multiple IP Addresses for your Loopback interface, please check out this ShowCockpit Academy article:

{% content-ref url="/pages/-MkI9PPAjGlLZ9wMn47n" %}
[Multiple IP Addresses on a NIC](/tutorials/networking/multiple-ip-addresses-on-a-nic)
{% endcontent-ref %}

In this example, we will use the Loopback interface with multiple IPs, one per entity:

* 2.0.0.1 - Onyx
* 2.0.0.101 - OSC Device 1
* 2.0.0.102 - OSC Device 2

Once you have configured the IP Addresses, you're ready to launch Onyx.

## Onyx OSC Configuration

### General OSC Settings

After launching Onyx, open Settings > Network > OSC

On the "Settings" tab, you will be able to set a OSC port and the network interface.

On this example, we will use the default port **8000** and select the interface that shows our first Loopback IP address 2.0.0.1.

<figure><img src="/files/9GPw2b0qvzioHSjHooFv" alt=""><figcaption></figcaption></figure>

### OSC Devices

On the Devices tab, you will find 16 slots ready to be configured. We will use the first two.

<figure><img src="/files/ooWO3iKuTrlOB1mKqbXa" alt=""><figcaption></figcaption></figure>

* Device 1
  * IP: 2.0.0.101
  * Port: 9001
  * Device Space 1
* Device 2
  * IP: 2.0.0.102
  * Port: 9002
  * Device Space 2

{% hint style="info" %}
**Device Space**: the number defines a synchronization ID. If you want to sync two OSC devices, you can set them to the same Device Space. Since we want them to work in different banks, we need to set different Device Space IDs.

Device Space 0 is synced with the UI (the bank that is displayed in Onyx main window is on Device Space 0).
{% endhint %}

## ShowCockpit Configuration

ShowCockpit can act as an OSC Device for Onyx. If you want to have two OSC devices, you need to add two Onyx OSC elements to your project.

<figure><img src="/files/X0OpjozKT45pPgE53BYt" alt=""><figcaption></figcaption></figure>

There are a few relevant element options that need to be set:

* Onyx IP Address: the IP Address that Onyx listens on
* Outgoing Port: the port set in the Onyx OSC settings
* Local IP Address: the IP Address of the device - must match the OSC Device IP set in Onyx
* Incoming Port: must match the device incoming port set in Onyx

For our example:

|                  |  Device 1 |  Device 2 |
| ---------------- | :-------: | :-------: |
| Local IP Address | 2.0.0.101 | 2.0.0.102 |
| Incoming Port    |    9001   |    9002   |
| Onyx IP Address  |  2.0.0.1  |  2.0.0.1  |
| Outgoing Port    |    8000   |    8000   |

Once you have the elements connected, now you just need to map controls (faders, buttons) to each of these elements, as in the usual ShowCockpit workflow, according to your own needs.

{% hint style="warning" %}
Remember that changing OSC device banks must be done by the device itself - you will not be able to see in Onyx in what bank the device is on.

You must, at least, map and trigger a "Change Bank" function of the Onyx - OSC element to set it to a certain Onyx bank. Otherwise, you will be default bank Onyx assigns to your Device Space (usually bank 1).
{% endhint %}


# Obsidian Onyx Pre-Dylos vs. Dylos

This page includes important ShowCockpit compatibility information for Onyx users.

Since the early days of Martin M-PC, we have been providing an unofficial solution to interface with the software now named Onyx, part of the Obsidian Control Systems.

As the Onyx software evolved, an update to the respective ShowCockpit driver was constantly required. With the Onyx release that includes Dylos, unfortunately, we will not be able to keep ShowCockpit compatibility as before

## What has changed?.

If you don't update to Dylos, nothing has changed regarding the functionality that is available for Onyx v4.2.1057.0 with the (old?) Onyx driver - we will include it in future ShowCockpit versions and it will keep working for that Onyx version.

Unfortunately, any newer Onyx versions will not be supported with this driver.

## Any alternatives if I want to upgrade my Onyx version to Dylos?

Of course! You can keep using ShowCockpit along with the new driver that connects to Onyx through the OSC protocol (please read below).

## Do I need to purchase a new driver?

If you already had the Onyx driver when we lauched the OSC driver, you don't need to buy it! We are giving the Onyx OSC driver for free for users that owned the Onyx driver prior to this update.

New purchases of the Onyx driver are not entitled to any free upgrades or driver exchange. Pro users already have access to the Onyx OSC driver since ShowCockpit v3.11.

## Does the OSC driver provide the same functions as before?

Unfortunately the official Onyx OSC interface provides a sub-set of the functionality that was provided by ShowCockpit Onyx driver. You can compare the functions in the following links:

* Before (old Onyx driver): <https://showcockpit.com/site/docs/?d=52>
* Now (new Onyx OSC driver): <https://showcockpit.com/site/docs/?d=109>

## What about LUA Support

There is still support for LUA scripts through the OSC driver, although the function set is limited to the ones provided by Onyx OSC interface.

## Ok, I understand, but I still want to buy the old driver

* **Pro Accounts**: the old driver is included (no need to buy it);
* **New Basic Account**: [click here](https://showcockpit.com/site/store/?v=basic\&show=onyx);
* **Upgrade existing Basic Account**: [click here](https://showcockpit.com/site/store/?v=upgrade\&show=onyx).

For any further information, feel free to contact us via private message.

## I have tried the Onyx OSC driver, but I am experiencing delays

With the Dylos update, Obsidian is now inducing a delay on OSC input if you do not have original Onyx hardware connected. Please refer to Obsidian Onyx documentation for more information on this.


# MIDI device(s) with Obsidian Onyx

How to connect any MIDI controller to Obsidian Onyx

## 1. Add an Onyx element

On the **Elements** section, click the **Add** button to add an Onyx element to the project:

* **Lighting > Obsidian > Onyx**

### Enable the Element

Click the toggle buttons on the element to enable it.

2\. Add MIDI device element

Use the **Add** button again to add your MIDI device element through **External Control > MIDI**. Currently, RD/ShowCockpit has out-of-the-box support for multiple MIDI devices - [check out the complete compatibility list here](https://showcockpit.com/site/docs/).

{% hint style="info" %}
If your device is not listed, you will need to use the **Generic MIDI** driver and map your device controls manually.&#x20;
{% endhint %}

When using a specific MIDI device driver, you can skip to Step 4.

### Set Element Options

After adding the element, make sure that the correct device is selected under both Input Device and Output Device options.

### Enable the Element

Finally, click the toggle button on the MIDI device element to enable it.

## 3. Learn MIDI Controls (Generic MIDI only)

In case you selected the **Generic MIDI** driver, now you need to "teach" this driver what controls (faders, buttons and encoders) your device has. For the officially supported MIDI devices, controls are automatically mapped, so you can skip to the next step.

Double-click the **Generic MIDI** element to open its window - you will start by mapping the **Faders**. Click on **Enable Learn** on the top-right to start listening to MIDI input.

![](/files/-Lub1GCEgZ2P2gLob46Z)

* Move, one-by-one, all **Faders** on your MIDI device. They will be added to the **Faders** list.
* To map the **Buttons**, click on **Buttons** (above the table) and repeat the procedure now for all your device buttons.
* Finally, map your **Encoders** by clicking on **Encoders** and repeat the procedure for all the encoders.

You can now close the **Generic MIDI** window by clicking **Back to Elements** or clicking on any menu button.

## 4. Mapping

Open the **Mapping** section on the Main Menu.

This section is divided into 3 columns, from left to right:

* Functions
* Parameters
* Controls

Select the **Onyx** element on the Functions column and select a function (for example, "Main Playback Fader"). When you select the function, the button will be highlighted and the second column will have the parameters for the function. In this case, you can select which playback fader you want to control.

Select the **Generic MIDI** element on the Controls column, open the Faders list and click on one of the faders to assign the function.

If you now move your fader, the mapped Main Playback Fader on Onyx should act accordingly.

Repeat the process for all desired controls.


# Video


# Resolume Arena Timecode Clip Trigger

This page will explain how you can use ShowCockpit to trigger clips on Resolume Arena based on incoming timecode.

## Motivation

While Resolume is very efficient in keeping a clip synchronized to an SMPTE (timecode) source, it does not trigger the clips automatically.

The Resolume Arena Timecode Clip Trigger is a driver that will trigger clips in selected layers according to incoming SMPTE time.

## Required Elements

For this project, we will require at least 3 elements:

* [Video / Resolume / Arena](https://showcockpit.com/site/docs/?d=34)
* [Video / Resolume / Arena Timecode Clip Trigger](https://showcockpit.com/site/docs/?d=113)
* 1 or 2 Timecode Inputs, can be of the following types:
  * [External Control / Timecode / LTC Input](https://showcockpit.com/site/docs/?d=63)
  * [External Control / Timecode / MTC Input](https://showcockpit.com/site/docs/?d=58)

Configure the all elements options according to your preferences and enable them.

## Mapping the Timecode Input(s)

Go to the Mapping section and select the **Arena Timecode Clip Trigger** function **"Input Timecode Sync"**.

In the parameters column, you will be able to select between deck A and B.&#x20;

![](/files/-M2f2N4aK-_tvYpDZmcX)

Finally, select your timecode source element on the right and on the **"Others"** tab, click the **"Timecode Sync"** control to assign the previously selected function (check example above).

If you have two timecode sources, repeat the process for the second TC Input. Make sure you select Deck A on the first one and Deck B on the second one.

## Configuring the Trigger Cuelist

Double-click the **Arena Timecode Clip Trigger** element to open its interface.

If your timecode inputs are running, you should see the times changing on the right.

![](/files/-M2f9Te0470v6CkvGPYZ)

On the left, a table with a list of cues is presented. You can click the **"Add"** button to add a cue. Each cue will have a correspondence to a column in Resolume and a respective timecode value. You can double-click any cell to edit it.

Add cues corresponding to times you want to trigger Resolume Arena columns.

The layers to be triggered are selected on the right side, on each Deck (A and B). In Automatic mode (element options), whenever a Deck jumps to a different cue, it will trigger layers selected on "Trigger" row.

The trigger follows a fade time defined also in the element options and will affect the layers selected in the "Fade" row. In example above, having layers 1 and 2 selected in both Decks' "Fade" row will have the following behaviour:

* **Cue changes on Deck A**
  * Layer 1 is triggered
  * Layer 1 is faded-in
  * Layer 2 is faded-out
  * The remaining layers level are left untouched (they are not selected on the "Fade" row)
* **Cue changes on Deck B**
  * Layer 2 is triggered
  * Layer 1 is faded-out
  * Layer 2 is faded-in
  * The remaining layers level are left untouched (they are not selected on the "Fade" row)

## Manual Trigger Mode

If the automatic trigger does not suit your needs, the Resolume Arena Trimecode Clip Trigger element can be set to **"Manual"** mode in the options.

In this mode, the decks cues are pre-cued waiting for a manual trigger. This manual trigger can come from any button-type control, simply by mapping it to the **"Manual Trigger"** function.

## Selecting the Resolume Arena Element

If you happen to have multiple Resolume Arena elements on your project you can use the menu button **"Select Resolume Element"** on the top of the element User Interface (you can open it by double-clicking the element).


# Controlling OBS with a MIDI device

This tutorial describes how to use ShowCockpit to control OBS from MIDI devices

## 1. Configure OBS <a href="#id-1-add-an-onyx-element" id="id-1-add-an-onyx-element"></a>

To control OBS remotely, we will use a free open-source plugin called [OBS-Websocket](https://github.com/Palakis/obs-websocket). The first step is to download it and install, following the instructions on the link.

Then, open OBS and you should see a new option under the **Tools** menu called WebSockets Server Settings.

![](/files/-MNhr_P71yjVFnM8ms21)

Click this option and you will be presented the following window\..

![](/files/-MNhrmeTfft99M25ctRr)

You will need to check the option "**Enable WebSockets server**". If you want to enhance security, you can enable the authentication and provide a password. You should be able to leave the port at the default value 4444.

## 2. Add an OBS element in ShowCockpit <a href="#id-1-add-an-onyx-element" id="id-1-add-an-onyx-element"></a>

On the **Elements** section, click the **Add** button to add an OBS element to the project:

* **Video > OBS > OBS - Websocket**

### Change the element Options <a href="#enable-the-element" id="enable-the-element"></a>

* **IP Address**: the IP address of the computer running OBS (leave 127.0.0.1 if you are running in the same computer as ShowCockpit)
* **Port**: must match the port number defined in Step 1
* **Password**: must match the password defined in Step 1, or leave empty if not using authentication

### Enable the Element <a href="#enable-the-element" id="enable-the-element"></a>

Click the toggle buttons on the element to enable it.

## 3. Add MIDI device element  <a href="#id-2-add-midi-device-element" id="id-2-add-midi-device-element"></a>

Use the **Add** button again to add your MIDI device element through **External Control > MIDI**. Currently, RD/ShowCockpit has out-of-the-box support for multiple MIDI devices - [check out the complete compatibility list here](https://showcockpit.com/site/docs/).

If your device is not listed, you will need to use the **Generic MIDI** driver and map your device controls manually.

When using a specific MIDI device driver, you can skip to Step 5.

### Set Element Options <a href="#set-element-options" id="set-element-options"></a>

&#x20;After adding the element, make sure that the correct device is selected under both Input Device and Output Device options.

### Enable the Element <a href="#enable-the-element-1" id="enable-the-element-1"></a>

Finally, click the toggle button on the MIDI device element to enable it.

## 4. Learn MIDI Controls (Generic MIDI only) <a href="#id-3-learn-midi-controls-generic-midi-only" id="id-3-learn-midi-controls-generic-midi-only"></a>

In case you selected the **Generic MIDI** driver, now you need to "teach" this driver what controls (faders, buttons and encoders) your device has. For the officially supported MIDI devices, controls are automatically mapped, so you can skip to the next step.

Double-click the **Generic MIDI** element to open its window - you will start by mapping the **Faders**. Click on **Enable Learn** on the top-right to start listening to MIDI input.

![](https://blobscdn.gitbook.com/v0/b/gitbook-28427.appspot.com/o/assets%2F-LuTyAYhvh-0rGV983Jy%2F-LuZuW5A7DF0ZeKAyR4e%2F-Lub1GCEgZ2P2gLob46Z%2Fgeneric-midi-fadbutenc.jpg?alt=media\&token=6a511fb2-4932-4a72-9b0e-9bca524df27f)

* Move, one-by-one, all **Faders** on your MIDI device. They will be added to the **Faders** list.
* To map the **Buttons**, click on **Buttons** (above the table) and repeat the procedure now for all your device buttons.
* Finally, map your **Encoders** by clicking on **Encoders** and repeat the procedure for all the encoders.

You can now close the **Generic MIDI** window by clicking **Back to Elements** or clicking on any menu button.

## 5. Mapping <a href="#id-4-mapping" id="id-4-mapping"></a>

Open the **Mapping** section on the Main Menu.

This section is divided into 3 columns, from left to right:

* Functions
* Parameters
* Controls

![](/files/-MNi3pLAZImB8jzeLjao)

Select the **OBS - Websocket** element on the Functions column and select a function (for example, "Scene"). When you select the function, the button will be highlighted and the second column will have the parameters for the function. In this case, you can type the scene name you want to switch to.

Select the **Generic MIDI** element on the Controls column, open the Buttons list and click on one of the buttons to assign the function.

If you now physically click the button you have just assigned, the mapped scene on OBS should be triggered.

Repeat the process for all desired controls and functions.


# Controlling vMix with MIDI Devices

Learn how to use your MIDI device with vMix, by StudioCoast, running locally or in a Cloud instance

![Connecting Multiple MIDI Devices to vMix](/files/-MXIbOiqpgdykGrT-rlL)

## 1. Install and Configure vMix

After installing vMix, we will need to define the network connection to the application.

The ShowCockpit vMix driver connects to vMix via the TCP protocol - the default port being 8099 (TCP).

### Connecting to vMix on the same computer

If you are connecting to vMix running in the same computer, you can use IP Address **127.0.0.1** with the default **port 8099**.

### Connecting to vMix on LAN

If you are connecting to an instance within your LAN, use the **vMix computer IP** and the default port 8099.

### Connecting to vMix running in a cloud instance

When your vMix instance is running in the cloud (such as Amazon EC2, AWS, etc.), you will need to use the instance **public IP** and configure port forwarding for the internal TCP port 8099.

You can forward external port 8099 to internal port 8099, but you can also pick any other available external port, as long as you forward it to internal port 8099.

Please refer to your cloud provider on how to configure port forwarding for your instance.

## 2. Add vMix Element to ShowCockpit Project

On the **Elements** section, click the **Add** button to add an OBS element to the project:

* **Video > Studiocoast > vMix** ([documentation](https://showcockpit.com/site/docs/?d=130))

### Change the element Options <a href="#enable-the-element" id="enable-the-element"></a>

* **IP Address**: the IP address determined in Step 1
* **Port**: must match the port number defined in Step 1
* **Smart T-Bar Invert** (default is ON): this can be used to automatically invert the T-Bar function input, so you can use a regular fader to control it just like a regular T-Bar control.

### Enable the Element <a href="#enable-the-element" id="enable-the-element"></a>

Click the toggle buttons on the element to enable it.

## 3. Add MIDI device element  <a href="#id-2-add-midi-device-element" id="id-2-add-midi-device-element"></a>

Use the **Add** button again to add your MIDI device element through **External Control > MIDI**. Currently, RD/ShowCockpit has out-of-the-box support for multiple MIDI devices - [check out the complete compatibility list here](https://showcockpit.com/site/docs/).

{% hint style="info" %}
If your device is not listed, you will need to use the **Generic MIDI** driver and map your device controls manually (step 4).
{% endhint %}

{% hint style="success" %}
When using a specific MIDI device driver, you can skip to Step 5.
{% endhint %}

### Set Element Options <a href="#set-element-options" id="set-element-options"></a>

After adding the element, make sure that the correct device is selected under both Input Device and Output Device options.

### Enable the Element <a href="#enable-the-element-1" id="enable-the-element-1"></a>

Finally, click the toggle button on the MIDI device element to enable it.

## 4. Learn MIDI Controls (Generic MIDI only) <a href="#id-3-learn-midi-controls-generic-midi-only" id="id-3-learn-midi-controls-generic-midi-only"></a>

In case you selected the **Generic MIDI** driver, now you need to "teach" this driver what controls (faders, buttons and encoders) your device has. For the officially supported MIDI devices, controls are automatically mapped, so you can skip to the next step.

Double-click the **Generic MIDI** element to open its window - you will start by mapping the **Faders**.&#x20;

![Generic MIDI Mapping Screen](/files/-MXIVA4b9GH3OIWrxKRI)

* Click on **Enable Learn** on the top-right to start listening to MIDI input.
* Move, one-by-one, all **Faders** on your MIDI device. They will be added to the **Faders** list.
* To map the **Buttons**, click on **Buttons** (above the table) and repeat the procedure now for all your device buttons.
* Finally, map your **Encoders** by clicking on **Encoders** and repeat the procedure for all the encoders.

You can now close the **Generic MIDI** window by clicking the **Back** button on the top or clicking on any menu button.

## 5. Mapping <a href="#id-4-mapping" id="id-4-mapping"></a>

At this point, you have the required elements in your project, it's time to map your controls to useful functions! To start mapping these two elements, drag the output port of the MIDI Device element to the input port of the vMix element.

![MIDI Device linked to vMix](/files/-MXIYkUfMeqGN6fLwYZ8)

When you create this link (or double-click an existing link), you are brought to the **Mapping** section.

![Mapping Screen (MIDI Device to vMix)](/files/-MXIW5Yb66ftGf-SB0fV)

This section is divided into 3 columns, from left to right:

* Functions
* Parameters
* Controls

The target element **vMix** is on the Functions column - start by selecting a function (for example, "T-Bar"). When you select the function, the button will be highlighted and the second column will have the parameters for the function. In this particular case, there are no parameters.

On the right side (Controls column), you will have the your **MIDI Device** element. Open the Faders list and click on one of the faders to assign the T-Bar function.

If you now physically move the assigned fader, you should see the T-Bar moving in vMix.

Repeat the process for all desired controls and functions.

## Before you take off...

### Controlling multiple vMix instances with one MIDI device

ShowCockpit is a modular software, it allows you to freely add elements to your project and connect them as you like. It is possible to control multiple vMix Instances from the same device.

![](/files/-MXIxarS3mMBpIKunI2-)

### Controlling one vMix instances with multiple MIDI devices

You can simply add as many devices as you want and link them the way you want.

![](/files/-MXIyUh5W2zXOa5FvUkI)

### Go crazy

There's so much more you can do with all the available drivers. Pick the elements you want and design your own dynamic production setup - add ElGato StreamDecks, Joysticks, emulate keyboard presses and add logical conditions using the LUA scripting engine.

![](/files/-MXJgehfjQXSNgBUPRik)

### Useful Links

* [Full list of available vMix functions](https://showcockpit.com/site/docs/?d=130);
* What other devices can I connect to vMix using ShowCockpit? Check out the [full list of drivers](https://showcockpit.com/site/docs/).


# Generic MIDI Mapping


# Encoders Tips

Mapping MIDI encoders can sometimes be confusing. This page will guide you through better understanding these controls.

## Is it really an encoder?

Before you start, you must ensure the control you are trying to map as an encoder really behaves as an encoder. The difference between faders and encoders:

* **Faders**: outputs discrete absolute values in a range (between a maximum and a minimum)
* **Encoders**: outputs relative values (increment or decrease)

In the MIDI world, sometimes there are devices that have physical encoders, but will output data as faders.

So, being an encoder means, in general, that when you rotate the physical encoder to the right, it keeps outputting the same value (with no limits). Rotating the encoder to the left, will output a different value. The increment/decrease value depends on the number of encoder "ticks".

{% hint style="info" %}
If you set the Generic MIDI (or any other MIDI driver) in [Verbose log level](https://app.gitbook.com/@showcockpit/s/academy/getting-started/elements#log-levels), the application will output the raw MIDI data received from the device.

This is very helpful to distiguish faders and encoder types
{% endhint %}

## My encoder behaves as a fader - is there a workaround?

### Workaround 1 - Edit device output

Some MIDI devices allow you to edit the controls output. Some of them can be set to work as encoders or faders using a manufacturer's application. Please check out your device User Manual for this.

Another workaround is to set the minimum "fader" value of 0 and maximum of 1. This will turn your control into an encoder-type because rotating to the right will make it output 1 and rotating it to the left will output 0.

### Workaround 2 - Map it as a fader

If you cannot edit the control output to make it behave as an encoder, you can still map it as a fader and then use the [Fader to Encoder](https://showcockpit.com/site/docs/?d=82) driver.


# LUA Scripts


# Get MA2 Speed Master BPM value

In some cases, it might be useful to get the BPM value of a Speed Master from an MA2 desk. One common use-case is to use the MA2 Speed Master as the global master for the remaining systems.

While there is no dedicated way to retrieve a BPM value from a Speed Master, you can retrieve the running "cue" name of an executor, which, for a Speed Master, is essentially the current BPM value.&#x20;

Here's an example ShowCockpit LUA script:

```lua
-- Get 'GrandMA2' element
GrandMA2 = GetElement('GrandMA2')

-- Returns the name of the current cue
-- (in fact for speedmasters it shows the BPM value)
-- For example: "60.0 BPM"
v = GrandMA2.GetExecutorCurrentCue(1)

-- Remove the " BPM" part of the name
v = string.gsub(v, " BPM", "")

-- Convert to Number
v = tonumber(v)

-- Variable v contains the speedmaster BPM value as a number
print(v)
```

Because the `GetExecutorCurrentCue` function returns a string containing the units (for example, `"60.0 BPM"`), we need to remove that text part and then convert the string to a number.


# FAQs


# License FAQs

Frequently Asked Questions about Licenses

Can I use my license in multiple computers at the same time?

By default, a Pro or Basic license will only allow you to register on a single computer at a time.

If you want to use it in multiple computers at the same time you must upgrade your account with one or more “**Extra PC**”, one per additional computer.

You can, however, move your license between computers (see below).

{% hint style="info" %}
**Note:** You will need Internet access to move the license between computers.
{% endhint %}

## How to move my license to a different computer?

Log in the computer you are registered in and open ShowCockpit in License section. Click on the “Un-Register” button.

Then, go to your new computer, open ShowCockpit License section and register normally.

{% hint style="info" %}
**Note:** You will need Internet access in this step.
{% endhint %}

How many Extra PCs can I add to my account?

The maximum number of Extra PC upgrades depends on the account type:

* **Basic Account**: maximum of 2 Extra PC upgrades (3 PCs total)
* **Pro Account**: unlimited Extra PC upgrades

How much does each Extra PC cost?

The Extra PC costs vary with the type of account you own (Basic or Pro).

Prices can be consulted at any time under the [Upgrade page on the Store](https://showcockpit.com/site/buy/?v=upgrade).

## Can I Upgrade from Basic to Pro?

Yes, you can upgrade a Basic account to Pro at any time on the [Upgrade page on the Store](https://showcockpit.com/site/buy/?v=upgrade).

## Does the Basic to Pro upgrade cost depend on the purchased drivers?

No. The upgrade has a fixed cost, it does not depend on any purchased previously made with that account.


# Registration FAQs

Frequently Asked Questions about registration

## What is the procedure to register the License?

You simply open the application, switch to the License tab and follow the instructions.

You will be asked to enter your account credentials: e-mail and key.

{% hint style="info" %}
Do not share your credentials with anyone.
{% endhint %}

{% hint style="info" %}
You will need Internet access for this step to validate your account in the licensing server.
{% endhint %}

If the Licensing Server approves the registration, you will be given a **Recovery Password**.

{% hint style="info" %}
**STORE THE RECOVERY PASSWORD IN A SAFE PLACE**

In case you lose access to the application or the computer, the only way to recover the license is by using this **Recovery Password**.
{% endhint %}

The registration is only successful after you confirm that you have saved this **Recovery Password** in a safe place by writing it and clicking "OK".

## How do I un-register a License?

You simply open the RD/ShowCockpit application, go to the License tab and click the Un-Register button.

{% hint style="info" %}
You will need Internet access on this step.
{% endhint %}

## How do I recover my license?

With respect to license recovery, there are three levels to it:

1. If you still have access to the licensed RD/ShowCockpit instance, you can navigate to the License tab and click on the "Un-register" button.
2. If you happen to be installing on the same computer with exactly the same hardware, you can just try to re-register the license - it may work and override the previous registration.&#x20;
3. If you don't have access to the installation nor the system (or option 2 does not work), the only way to recover a license from an installation you have no longer access to is by using the Recovery Password (explained above). On your new computer, click on "Recover License" and use your account credentials and the Recovery Password for the previous installation.

After any of these 3 options, you can then register the license on the new computer.

## I lost my Recovery Password and lost access to the application/PC. How can I recover my License?

Albeit the many warnings you will find along the way, there is the possibility that you lose both the **Recovery Password and also access to the previous installation and/or system**.

In this case, unfortunately, there is no way to recover that registration.

In this case, your only option is to add Extra PCs to your account through the [Store Upgrade page](https://showcockpit.com/site/buy/?v=upgrade). In the case of Basic accounts, you do not need to purchase already owned drivers again, as these are bound to your account.


# Drivers FAQs

Frequently Asked Questions about RD/ShowCockpit Drivers

## What drivers are available?

Checkout the [drivers documentation](https://showcockpit.com/site/docs/) page for a complete list of drivers.

What drivers to buy?

If you buy the Pro license, all the drivers are automatically included.

On the other hand, if you opt for the Basic license, there is no closed answer to this question.

Since the application is highly modular, every setup is a different case and, therefore, the required drivers will depend on your project requirements. We provide a free demo version for users to test every driver before deciding to purchase.

{% hint style="info" %}
Demo version available on the [Downloads](https://showcockpit.com/site/downloads/) page.
{% endhint %}

## Can I test the drivers before purchasing?

Sure! We highly encourage you to [download the application](https://showcockpit.com/site/downloads/) and use it in DEMO mode.

In this mode, you can test every driver (with the exception of the Pro features) for some time - it will require an application restart at random intervals.

## Can I request a new driver?

Sure! We receive requests for new drivers on a daily-basis, so we have created a [poll on our Facebook user group](https://www.facebook.com/groups/ShowCockpit/permalink/932548396927037/) and give priority to the most requested ones.

Please vote for the driver you want in there to give it a push 😀

What are pre-release drivers?

Pre-release drivers are drivers that are on public Alpha or Beta stages. Alpha and Beta refer to software development stages where the respective components are still under testing.

{% hint style="info" %}
In case you are a Basic user, you will be able to use a pre-release driver in demo mode (it will work the same way as a driver you did not purchase).

Pro users will be able to test and use pre-release drivers in production (with no time limitations).
{% endhint %}

If you tested a pre-release driver and you would like to give us feedback (whether positive or negative), please use the “Give Feedback” button on the element options right-side panel.


# Networking


# Loopback Network Adapter

This page will guide you through the installation of a loopback network adapter,  useful when you need to connecting different applications via network protocols within the same Win10 computer

## Installing the Adapter

![](/files/-MVh4nE4FnpwFnqZ3Dt3)

1\. Open the "Run" dialog by pressing **Windows + R**. In the command prompt, type **hdwwiz** and press **Enter**.

![](/files/-MVh5RZncCOiO0P7BmK6)

2\. Click **Next**.

![](/files/-MVh65mjLCruqeUQWSOk)

3\. Select **Install the hardware that I manually select from a list (Advanced)**, then click **Next**.

![](/files/-MVh69kMkCzakbIVQgDL)

4\. Select **Network adapters**, then click **Next**.

![](/files/-MVh6FmXZgGuFc4hQwfN)

5\. Select **Microsoft** as the manufacturer, select **Microsoft KM-TEST Loopback Adapter** as the adapter for Windows 10, then click **Next**.

6\. Select **Next** to confirm the installation.

7\. Select **Finish** to complete the installation.

## Configuring the Loopback Adapter

To configure the newly created adapter:

![](/files/-MVhvzKKpKOwovWbCKAO)

1\. Open the "Run" dialog by pressing **Windows + R**. In the command prompt, type **ncpa.cpl** and press **Enter**.

![](/files/-MVhwIlMShcmURCM9aPl)

2\. Find the KM-TEST Loopback Adapter and rename it **"Loopback"** for convenience (Right-Click > Rename)

3\. Right-click on the connection and choose **Properties** from the menu (make sure it's the Microsoft KM-TEST Loopback Adapter).\ <br>

![](/files/-MVhypsXXFQAPm3HMV2z)

4\. Deselect everything except **Internet Protocol (TCP/IP)**.

5\. Select **Internet Protocol (TCP/IP)**, and click **Properties** to open Internet Protocol (TCP/IP) Properties.

6\. Select **Use the following IP address**. Fill in the **IP address** and **Subnet mask** fields.

![](/files/-MVhz05l8Rya1dsh05_G)

7\. Click **Advanced** to open Advanced TCP/IP Settings.

8\. Switch to **WINS** and select **Disable NetBIOS over TCP/IP**.

![](/files/-MVhzJDejD9J7iUaD3b_)

9\. Click **OK** to close Advanced TCP/IP Settings.

10\. Click **OK** to close the Internet Protocol (TCP/IP) Properties.

11\. Click **OK** to close the Connection Properties.


# Multiple IP Addresses on a NIC

This tutorial shows you how to assign multiple IP addresses to the same Network Interface Card (NIC) on Windows 10

There are a few situations where you want/need to assign more than one IP Address to a single Network Interface. A couple of examples are:

* Binding to the same port on two different applications
* Connecting to different network ranges with a single interface

## Example Scenario - Two Art-Net Applications

Lets take the first example above and say you have two applications running on the same computer and you need both of them to receive Art-Net.

The Art-Net UDP port (6454) is defined by the standard, and it is highly unlikely that you will be able to change it on these applications. The issue here will be how can they both receive from the same UDP port, since a port can only be opened by a single application at a time (or not... keep reading... :grin: ).

In the most usual scenario, after the first application "binds" to that port (meaning, it will ask the Operating System to receive any incoming data for that port), subsequent bind attempts to the same port will fail, because the port will be already "in use" by the first application.

Except... There are two types of port binds:

* **Global Port Bind** - bind to the port only (incoming data can arrive from ANY network interface)
  * The **port** must be exclusive within the system
* **IP/Port Pair Bind** - bind to a port on a certain (local) IP address (any incoming data that arrives with a different destination IP address than the one bound will be ignored)
  * The **IP+Port** pair must be exclusive within the system

So, naturally, if the applications provide a way to bind to a IP+Port pair, we can use this "trick" to bind the same port on multiple applications. The very first step to do that is to assign multiple IP addresses to your interface.

{% hint style="info" %}
Tip: this works for regular Network Interfaces, as well as for Loopback Interfaces
{% endhint %}

## Assign Multiple IP Addresses (Windows 10)

### Step 1 - Open the Network Adapters window

* **Win+R** opens the "Run" dialog
* Type "**ncpa.cpl**" and click OK

![](/files/-MkIEa4yXWv0D1GSUyzA)

### Step 2 - Open your adapter properties

* **Right-click** the adapter and click on **Properties**

![](/files/-MkIEncu7tOtlhjNStZn)

### Step 3 - Open the IPV4 Properties

* Select "**Internet Protocol Version 4 (TCP/IPv4)**" in the list
* Click the "**Properties**" button below the list

![](/files/-MkIF1n86GZYUWAywPb0)

This will bring up the regular IPv4 settings dialog:

![](/files/-MkIFIyqFjD4G3QVkbkF)

In the example above, we have already set this adapter to use the **IP/Mask 2.0.0.1/8**.

### Step 4 - Advanced Properties

If you click the "Advanced..." button on the bottom, you will be shown a new dialog, as the one below.

![](/files/-MkIFs7voDYY9JgbpL_T)

### Step 5 - Adding New IP Addresses

Under the "IP Settings", "IP Addresses" group, if you click on the "Add..." button, you will be able to enter a new IP address (and mask) for this interface.

![](/files/-MkIGFW3YXKShOuUVN3C)

{% hint style="warning" %}
Make sure your IP Addresses are unique in the network (i.e. within the network, an IP address cannot be used by more than one computer)
{% endhint %}

Adding the IP address above, will make it appear on the list.

![](/files/-MkIGTyt9A5pV1ZT0-sC)

{% hint style="info" %}
You can add as many IP addresses as you need
{% endhint %}

### Step 6 - Apply the settings

Once you're satisfied, click "OK" on all the dialogs to apply the new settings.

From this point on, with the configuration above, you can reach this computer via two different IP addresses: **2.0.0.1** and **2.0.0.101**.

## Sending data to the same port, different applications

Now that we have configured two IP addresses for the same interface, we can configure our ArtNet applications from the example above:

* Application 1: bind to IP 2.0.0.1, UDP port 6454 (Art-Net)
* Application 2: bind to IP 2.0.0.101, UDP port 6454 (Art-Net)

If you want to send Art-Net data to Application 1, send it to IP 2.0.0.1. In the same way, if you want to send Art-Net data to Application 2, send it to IP 2.0.0.101.

This is how two different applications that bind to the same port can coexist in the same system.


