OtoMotion Manual

Version 1.4 (2026-10-01) / Applies to: OtoMotion 1.x, Ross XPression 12.5

1. What OtoMotion is

The official name is DBT OtoMotion.

OtoMotion measures the loudness of a line-level audio input to broadcast standards (ITU-R BS.1770-4 / EBU R128 / ARIB TR-B32) and sends the values to XPression DataLinq up to 60 times per second. Design the numbers and bars in XPression and you have a loudness meter on the venue screen. At the same time, a monitoring screen opens in a browser on the measuring PC, so the audio mixer can watch the values there.

Audio interfaceLine input OtoMotionMeasures each group (1–8)M / S / I / LRA / True PeakComputes bar values (0–1) DataLinq ServerTCP 7327 / JSON XPressionVenue screen Monitoring screenBrowser (same PC) 60 per s
Figure 1: Signal flow. OtoMotion can run on the same PC as XPression or on a different PC.

What it can do

2. Terms

TermMeaningWhere it's used
Momentary (M)Average loudness over the last 0.4 secondsThe loudness "right now". Drives the bar movement
Short-term (S)Average loudness over the last 3 secondsA steadier value. Also the basis for trim calibration
Integrated (I)Average since measurement started. Silence and very quiet passages are excluded automatically (gating)Checking that the whole programme is on target
LRA (Loudness Range)The spread of loudness: the difference between quiet and loud passages (LU)An indication of dynamics. Larger means bigger swings
True Peak (TP)The real peak, including between samples (dBTP)Clipping warning. Exceeding the limit (default −1 dBTP) shows "TP Over"
LKFS / LUFSUnits of loudness. They are the same thing (LKFS is the ITU / ARIB name, LUFS the EBU name)The target is −24 LKFS in Japanese broadcasting (ARIB TR-B32), −23 LUFS under EBU R128, and −24 LKFS under ATSC A/85
LUUnit of loudness difference. 1 LU = 1 dB"+2.0 LU above target" and so on
dBFSLevel relative to digital full scale (0)Scale of the peak bars
TargetThe loudness you are aiming for. Default −24 LKFS (ARIB TR-B32, same as ATSC A/85). EBU R128 uses −23 LUFSThe white vertical line on the M / S bars of the meter. The reference for the difference (diff)
GroupOne stereo input pair. Give each a name, such as "Main" or "Venue PA", and list them side by sideFor each group you choose which audio interface channels to use
DataLinqXPression's mechanism for feeding in external data. DataLinq Server receives the data and XPression binds it to objectsOtoMotion sends JSON over TCP

3. Installation

Windows

  1. Before extracting, right-click the downloaded zip → Properties, tick Unblock under Security at the bottom and press OK. This stops the Windows warnings for files from the internet (if you already extracted it, delete the extracted folder, unblock the zip and extract it again)
  2. Right-click the downloaded zip → Extract All, then put the OtoMotion folder inside it (containing OtoMotion.exe and the start .bat file) anywhere on the PC (for example C:\OtoMotion). The app does not start from inside the zip
  3. Double-click OtoMotion を起動する.bat (the file name is Japanese for "Start OtoMotion"). After about 10 seconds the monitoring screen opens in an app-style Edge window
  4. On first launch the license screen appears. Save the license.json attached to our email to the Desktop or Downloads, and it appears in the list: press Load next to it (see section 17, License)
  5. If you skipped the first step (Unblock), Windows asks first: "The publisher could not be verified" → Run; "Windows protected your PC" → More info → Run anyway
  6. Settings, logs and presets are saved in %APPDATA%\OtoMotion (C:\Users\<user name>\AppData\Roaming\OtoMotion). Your settings stay even if you move the distribution folder
Nothing else, such as Python, needs to be installed. On a PC without Edge, the screen opens in the default browser.

Mac

  1. Open the zip we send you and put OtoMotion.app anywhere you like, such as Applications (Apple Silicon only. It does not run on Intel Macs. Requires macOS 14 or later)
  2. Double-click to start. If Chrome is installed, the monitoring screen opens in an app-style window; otherwise it opens in the default browser
  3. On first launch, macOS asks for permission several times in a row: access to the Desktop, Downloads, removable volumes (USB), and the microphone. Click "OK" / "Allow" every time. If you click "Don't Allow", a license saved on the Desktop or in Downloads won't appear as a candidate, or there will be no sound (fix it later: System Settings › Privacy & Security › Files and Folders / Microphone, turn OtoMotion on, then restart OtoMotion)
  4. On first launch the license screen appears. Save the license.json attached to our email to the Desktop or Downloads, and it appears in the list: press Load next to it (see section 17, License)
  5. When you choose a device and click Apply and save (or, once a device is set, when the app starts), macOS asks for microphone access: Allow it. Right after the very first start (no device chosen yet) you are not asked. If you deny it, the meters stay silent (−∞) and no error is shown. To change it later: System Settings → Privacy & Security → Microphone. On macOS 27 the prompt reads “Allow "OtoMotion" to access the microphone?”. After replacing the app with a new version, the monitor does not open until you answer this prompt (if nothing opens, check whether the prompt is hidden behind other windows)
  6. A .app downloaded or received via AirDrop may say it can't be opened the first time. If so, go to System Settings → Privacy & Security → "Open Anyway". Or, in Terminal, run xattr -dr com.apple.quarantine OtoMotion.app
  7. Settings, logs and presets are in ~/Library/Application Support/OtoMotion

Tested on: MacBook Pro (Apple M1, 8 GB) with macOS 26.5.2 (2026-09-27). Chrome opens the monitor with a profile dedicated to OtoMotion (~/Library/Application Support/OtoMotion/browser), so your usual Chrome settings and extensions are left alone.

On the Mac, when the input device in use is unplugged, macOS switches to the built-in microphone. OtoMotion does not use the built-in microphone's sound: it stops capturing and shows a red banner (it recovers automatically when you plug the device back in).
On the Mac there is no Dock icon (the app runs in the background). To exit, use the Quit button at the top of the monitoring screen, in the row of tabs (right of Help). If you closed the screen, reopen http://127.0.0.1:8830/ in Chrome (bookmarking it is recommended).

Getting audio at the venue (recommended)

In stadiums and arenas, we recommend a small audio interface dedicated to OtoMotion, fed with two channels from the audio team (the venue's main mix, or a mix of the crowd mics).

How the audio comesWhat to useWith OtoMotion
Line outputs from the console (analog, AES, etc.)A USB audio interface with two or more inputsWorks as is
A Dante networkA Dante USB adapter (for example, Audinate Dante AVIO USB)Windows sees it as an ordinary USB audio device, so it works as is
Dante Virtual Soundcard or a multichannel cardDepends on the driver settingsWorks if it appears in Windows Sound > Input. Not usable when it runs in ASIO-only mode

Why a dedicated interface: it is never fought over by other software (XPression, streaming software and so on). It is also easy to ask the audio team for "two channels for OtoMotion", and changes to other equipment during the show do not affect it.

How to ask: "Could we have the venue's main mix (or the crowd-mic mix) as two line-level channels? A send whose level does not change during the show (a matrix or a fixed aux send) would be ideal." If the level moves during the show, the hype number moves with it.

On Windows, OtoMotion captures through standard Windows audio (WASAPI shared mode). Devices with ASIO-only drivers are not listed. To check: if the device appears in Windows Settings > System > Sound > Input, it works. On the Mac, OtoMotion uses Core Audio, so every input the Mac recognises is listed.

4. Reading the screen

The monitoring screen is switched with the four tabs in the header: TOP (the screen shown at startup), Live (what you watch during the show), Settings (section 6) and Presets (section 8). At startup (whenever the screen is opened in a new window) the TOP tab opens. If you reload the same window, you stay on the tab you had open. Switching tabs does not stop measuring or sending, and values you are editing in the Settings tab are kept.

4.1 TOP

TOP
Figure 2: TOP. The logo and headline at the top, three use-case cards in the middle, and a status strip at the bottom (input, XPression, groups, preset)

This is the first screen you see after starting the app. The waves in the background, the bars along the bottom and the pictures inside the cards move with the incoming audio (the level of group 1 and the BPM).

Keep the Live tab open during the show (the background is only drawn while TOP is shown, so the Live tab carries no extra load).

The whole Live tab
Figure 3: The Live tab (2 groups, measuring). Group cards on the left, the rail on the right (Integrated measurement, BPM, Venue presets)

4.2 Header

Header
Figure 4: Header. From the left: logo, the four tabs, Help, the three status items, elapsed time, JA
DisplayMeaning
TOP / Live / Settings / PresetsThe tabs. The selected tab is highlighted. When the Settings tab has unsaved changes, a small yellow dot appears next to "Settings" (section 6)
HelpOpens this manual in a panel inside the app (Esc closes it)
Input: (device name) 48kHzThe audio interface is open and audio is arriving. Green
Input: Test signal (sine 997 Hz)A test signal is playing instead of the device. Yellow. A yellow banner also appears below the header (6.2; always turn it off before the show)
Input: no signalThe device can't be opened, or no audio has arrived for 0.5 seconds or more. Red. The device is reopened automatically every 2 seconds
Input: (device name) (not found)The chosen device has disappeared from the computer's device list (it was unplugged). Red. Capture stops until it is plugged back in (reconnect is tried automatically every 2 seconds)
XPression: connectedConnected to DataLinq Server over TCP. Green
XPression: not connectedNot connected. Red. Reconnection is attempted every second. Measurement does not stop
Send: actual 60 / set 60 per sHow many messages per second are actually being sent, and the rate you set. While not connected, actual is 0
00:12:34Measurement time (accumulated time since Start; it stops while measurement is stopped). The same value as the large clock on the right rail
EN / JASwitches the interface language (see buttons)

A red banner below the header is a warning (for example "Cannot open input device" or "No input for group(s) 5, 6, 7, 8 (this device has 4 ch; …)"). The banner is always one line; long text is cut off with "…" (hover over the banner to see all of it). See Troubleshooting. While a test signal is playing, a yellow banner "Test signal is playing" appears below it. Both banners are visible on every tab.

4.3 Live tab: group cards

Each group has one card, laid out in two columns (a single group fills the full width).

A group card
Figure 5: The card for one group (in this example True Peak is above the limit, so "TP Over" is shown)
PartMeaning
NameTop left of the card. The group name (changed in the Settings tab; the default name while blank)
Band badgeRight of the name. Full range is a grey badge; a group whose band is filtered shows "Low 20–250 Hz", "High 4k–20k Hz" and so on in a brighter navy badge (its values are for visual effects, not standards-compliant loudness)
L / R badgeThe audio interface inputs the group uses (for example L1 / R2), from the saved settings
Set as referenceTop right of the card. Automatically sets the input trim to match the audio playing now (see buttons)
M bar and valueMomentary. Orange bar; the value on the right is in LUFS
S bar and valueShort-term. Light orange bar
White vertical line (M and S rows)The target (default −24)
L / R barsSample peak of the left and right channels (dBFS). Yellow. The thick white line on the R row is the peak hold (holds the most recent maximum for 1.5 seconds)
Value to the right of RTrue Peak (dBTP)
INTEGRATEDAverage since measurement started. The small figure to its right is the difference from the target (for example +0.6 means 0.6 LU above target)
LRALoudness range (LU)
TP maxMaximum True Peak during measurement. Cleared by Reset
TP Over (red badge)True Peak exceeded the limit (default −1 dBTP). Shown for 3 seconds. Nothing is shown while it is below the limit
"−∞" indicates silence (below −70 LUFS). It is also shown when the device isn't open. You can change this text with "Silence text" on the "Display" page of the Settings tab.

A group with no input is shown faded (for example when its L ch / R ch are above the device's channel count; the red banner below the header lists the group numbers).

With 5 or more groups, the cards switch to a compact layout (thinner bars, slightly smaller numbers). On a 1280×800 screen, 8 groups fit without scrolling. On a smaller screen, only the card area scrolls; the right rail (Start, Stop, BPM) always stays in view.

The Live tab with 8 groups
Figure 6: With 8 groups (compact layout). The device in this example has 4 channels, so groups 5–8 have no input, are faded, and the red banner reads "No input for group(s) 5, 6, 7, 8"

4.4 Live tab: right rail

On the right of the screen, from the top: Integrated measurement, BPM, and Venue presets.

Integrated measurement
Figure 7: Integrated measurement. Measurement time, Start / Stop / Reset, the target and TP limit
PartMeaning
Large clockMeasurement time (same as the header clock)
Start / Stop / ResetControl Integrated measurement. The button shown in orange is the current state (while measuring, "Stop" is orange). See All buttons for details
Target −24.0 LKFS · TP limit −1.0 dBTPThe saved target and TP limit (the "Target & TP" page of the Settings tab)

Below it, the BPM card shows the tempo and beat, with TAP, Sync and so on. See section 16.

Venue presets
Figure 8: Venue presets. The name of the preset you last loaded (or saved)

The Venue presets card shows the name of the preset you last loaded (or saved), or "—" if there is none yet. Open presets takes you to the Presets tab (section 8). To exit the app, press Quit in the row of tabs at the top of the screen (right of Help). It works from any tab.

5. First-time setup (5 minutes)

  1. Connect the audio interface to the PC and start OtoMotion
  2. Open the Settings tab in the header and choose Device on the rail on the left. Choose the audio interface under Device (for example Komplete Audio 2 (2ch))
  3. Set the Number of groups. For a single stereo feed, 1. To measure Main and Venue PA separately, 2
  4. In the groups table, enter each group's Name, L ch and R ch (which audio interface inputs to use). By default Group 1 is 1/2, Group 2 is 3/4, and so on
  5. Press Apply and save at the bottom of the screen. The header changes to "Input: (device name)", and in the Live tab the bars move when audio is present
  6. Send a test tone from the desk (for example 1 kHz at −20 dBFS) and press Set as reference on the group's card in the Live tab. M / S become −24.0 and sit on the white vertical line (the target) (a trim is applied automatically to match the desk's reference)
  7. Once XPression has been prepared (section 9), the header shows "XPression: connected"
  8. Save these settings under a name in the Presets tab; next time, just load the preset

6. All settings

Open the Settings tab in the header and the rail on the left lists seven items. Choose an item to show its page on the right (the page you last opened is shown again next time).

The Settings tab
Figure 9: The Settings tab. Choose an item on the left rail, change values on the page, and apply them with the save bar at the bottom
Rail item (page title)ContentsTakes effect
Device (Device and groups; the number on the right is the number of groups)Audio interface, number of groups, groups table (6.1)On save
Test signalPlay a signal generated inside the app (6.2)At once
Target & TP (Target and true peak)Target, TP limit, start measuring at launch (6.3)On save
Bars (Bar motion)Range and speed of the bars (6.4)On save
BPMDetection group, beat length, beat_hit decay (6.5)At once
XPression (Send to XPression; the dot on the right is the connection: green = connected, red = not connected)Target IP, port, rate, delimiters (6.6)On save
Display (Display and language)Screen language, silence text, light mode (6.7)On save (the language switches at once; light mode takes effect and is saved at once)

Items marked "On save" are applied and saved only when you press Apply and save at the bottom of the screen (nothing changes until then). When you change a value, the save button turns yellow and reads "Unsaved changes — Apply and save", "● Unsaved changes" appears to its right, and a yellow dot appears on the "Settings" tab in the header. Values you are editing are kept even if you move to another tab. Revert puts the saved values back (6.8). No restart is needed after saving, and the app starts with these settings next time.

The Test signal page, the three fields on the BPM page, Light mode on the Display and language page, and the time signature and Auto follow on the Live tab's BPM card take effect and are saved as soon as you change them. Changing them does not mark the settings as unsaved.

6.1 Device and groups

Choose the device and the number of groups on the upper card, and set up each group in the groups table on the lower card (Figure 9). The table columns are # (group number), Name, L ch, R ch, Trim dB, Band (for Custom, Low / High Hz fields appear to its right) and Set as reference. The table's Set as reference works the same as the button on the Live tab's card. It can't be pressed on rows you added by raising the number of groups until you save ("Save the settings first").

Device (dropdown)

Meaning
The audio interface to capture audio from. The input devices the PC recognises are listed as "name (N ch)". Only WASAPI devices on Windows and Core Audio devices on the Mac are listed (devices with ASIO-only drivers are not; see Getting audio at the venue)
Options
Choose a device: nothing selected yet (right after first launch). Each device: the number in brackets is that device's input channel count. For example "(4ch)" lets you set L ch / R ch to 1–4. NDI or webcam microphones may also appear
Default
None (not selected)
When changed
The device is reopened. Integrated, LRA, TP max and measurement time are reset
Note
A device you unplugged and replugged, or plugged in later, appears when you reopen the list (the list is refreshed while no stream is open). If it doesn't appear, select a different device in Settings and then switch back, or restart the app

Number of groups (dropdown 1–8)

Meaning
The number of stereo groups measured simultaneously. That many rows appear in the groups table, and after saving the Live tab shows the same number of cards
Default
1
When changed
Added groups start measuring from scratch (Integrated of existing groups is kept). Settings of removed groups are not deleted; they come back if you raise the number again. XPression always receives keys for all 8 groups; unused groups have gN › on set to 0

Group row: Name

Meaning
The group's display name. It appears as the card name on the Live tab and in XPression's gN › name. Non-ASCII text (such as Japanese) is fine. While the field is blank, the default name is shown faintly in it and that default is used
Default
Blank. While blank, English mode uses Main / Group N (Group 1 is "Main", groups 2 and above are "Group 2", "Group 3" …) and Japanese mode uses 「メイン」/「系統 N」. gN › name follows the language saved in the settings (Japanese if the language is left on automatic). A name you type is used as-is in every language
When changed
Only the display changes. Measurement is not reset

Group row: L ch / R ch

Meaning
Which audio interface inputs are used as left / right (counting from 1). The same input may be used by several groups
Default
Group N uses 2N−1 / 2N (1/2, 3/4, 5/6 …)
Range
1–64. If you enter a number above the device's channel count, a warning is shown and the group runs on 1/2 (the app does not crash)
When changed
Only that group's input assignment is swapped. Integrated is kept

Group row: Trim dB

Meaning
Gain (dB) applied to that group's input. It absorbs differences in audio interface input level or desk reference level, so that the desk meters and OtoMotion agree. It affects every measured value (M/S/I/LRA/TP/bars)
Default
0.0
Range
−40 to +40
How to set
Rather than typing it in, it is more reliable to play a test tone and press Set as reference (the value is calculated and entered in this field automatically)
When changed
That group's values change immediately. Integrated is kept (it continues with the trimmed values)

Group row: Band (dropdown)

Meaning
Filters that group's input to a frequency band (for visual effects). Use it to build bars on the venue screen that thump with the bass or sparkle with the highs. The meter (M/S/I/LRA), True Peak and bars are all calculated on the filtered signal
Options
Full range: no filtering; standards-compliant loudness measurement. Low 20–250 Hz: kick and bass; for a bar that reacts to the low end. Mid 250–4k Hz: the core of voices and instruments. High 4k–20k Hz: cymbals and crowd sparkle; for a bar that reacts to the highs. Custom: shows Low Hz / High Hz fields so you can set the band yourself (10–24000, low < high; invalid values revert to 20 / 20000)
Default
Full range
When changed
Only that group's filter is replaced, and that group's Integrated, LRA, TP max and measurement time are reset (the meaning of the measurement changes). Other groups are untouched. A badge such as "Low 20–250 Hz" appears next to the card name on the Live tab, and XPression receives it as gN › band (full / low / mid / high / custom)
Note
A filtered group is not a standards-compliant loudness reading. Use a full-range group to judge −24 (comparison with the target). Pressing "Set as reference" on a filtered group sets the trim so that band's level matches the target. The filter is a 4th-order Butterworth band-pass (the upper edge is limited to 95% of half the sample rate)

6.2 Test signal

The Test signal page
Figure 10: The Test signal page (with Type set to Sine; the fields shown depend on the type)

So that you can check the band filters, BPM detection and the XPression scene even without a desk or cables, OtoMotion can play a signal it generates itself in place of the audio interface. While it is on, every group measures the same stereo signal (the groups' L ch / R ch settings are ignored and treated as 1/2, so no "channel 3/4 not available" warning appears; Trim dB and Band still apply). Nothing is played through the speakers.

This page takes effect and is saved as soon as you change it (no need to press Apply and save, and pressing it does not change the test signal). While it is on, the input status in the header turns yellow and reads, for example, "Input: Test signal (sine 997 Hz)", and a yellow "Test signal is playing" banner appears just below the header. The banner is visible on every tab: Live, Settings and Presets.

Always turn it off before the show. Turning it off reopens the device in Settings and goes back to the real input. OtoMotion always starts with the test signal off (even if it was on when you quit), and venue presets do not store the on/off state (they do store the type, frequency and so on).

Use test signal (checkbox)

Meaning
On: plays the test signal instead of the device. Off: goes back to the device in Settings
Default
Off (always off at launch)
When changed
The input is reopened, so Integrated, LRA, TP max and elapsed time are reset and BPM detection starts over

Type (dropdown)

Meaning
What kind of sound to play
Choices
Sine: a steady tone (997 Hz by default). For checking that the readings match the level, and for checking bars and numbers in XPression. At 997 Hz and −23 dBFS, M / S / I read −23.0 LUFS. Sweep: a tone that rises logarithmically from 20 Hz to 20 kHz over "Sweep s", repeating. For checking that each band-limited group gets louder in its own band. Kick (for BPM detection): a short (60 ms) decaying 60 Hz burst every "Kick BPM" beat, with quiet pink noise (−40 dBFS) in between. For checking BPM detection and the low-band bars. Pink noise: noise with equal energy per octave across the whole range. For balancing the lengths of per-band bars. Silence: an empty signal (to check that everything reads −∞ and how XPression looks at 0)
Default
Sine

Frequency Hz (sine only)

Range
20–20000
Default
997 (the same as the EBU conformance tests; avoids exactly 1 kHz)

Level dBFS

Meaning
For sine, sweep and kick, the amplitude (peak); for pink noise, the RMS level. Not shown for Silence
Range
−60–0
Default
−23.0

Sweep s (sweep only)

Meaning
How long it takes to rise from 20 Hz to 20 kHz. At the top it jumps back to 20 Hz and repeats
Range
1–60
Default
10

Kick BPM (kick only)

Meaning
The kick interval (beats per minute). The first kick sounds the moment you turn it on
Range
30–300
Default
120

6.3 Target and true peak

The Target and true peak page
Figure 11: The Target and true peak page

Target LKFS

Meaning
The loudness you are aiming for. This value is used for the white vertical line on the cards, the difference to the right of Integrated, the "Target −24.0 LKFS" line on the right rail, XPression's target / gN › diff_i / gN › diff_s, and the level "Set as reference" calibrates to
Default
−24.0 (ARIB TR-B32, Japanese broadcasting; also the ATSC A/85 value. EBU R128 uses −23 LUFS)
Common values
−23.0 (EBU R128, Europe), −24.0 (ATSC A/85, USA). For streaming, −14 to −16 is sometimes used
Range
−40 to 0

TP limit dBTP

Meaning
When True Peak exceeds this value, the "TP Over" warning is shown and XPression's gN › tpover becomes 1
Default
−1.0 (the ARIB / EBU limit)
Range
−20 to +3
Notes
The warning is triggered by the instantaneous TP and shown for 3 seconds (it appears even when measurement hasn't been started). The "TP max" value is updated only while measuring
"Silence text" has moved to the "Display and language" page (6.7).

Start measuring at launch (checkbox)

Meaning
When on, Integrated measurement starts the moment the app launches (as if Start had been pressed)
Default
Off (the app starts stopped. M / S / TP are always live)
When to use
When you're worried about forgetting to press Start on air. However, if you reset at the top of the show, leaving this off and pressing Start just before air gives a cleaner Integrated reading

6.4 Bar motion

The Bar motion page
Figure 12: The Bar motion page. These settings affect appearance only; they do not change the measured values (M/S/I etc.)

OtoMotion normalises bar lengths to 0–1 before sending them to XPression. The range and motion set here apply identically to the monitoring screen and to the XPression bars.

Loudness min / max

Meaning
The scale range of the M / S bars (LUFS). At min the bar is 0; at max the bar is full
Default
−60 / 0
Example
To magnify the area around the target, use −36 / −12. If min ≥ max, the defaults are restored

Peak min / max

Meaning
The scale range of the L / R peak bars and the peak hold (dBFS)
Default
−60 / 0

Smoothing ms

Meaning
Time constant (milliseconds) of a first-order lag that smooths the M / S bar motion. Larger values follow more slowly. It applies to both rise and fall (only to rise if "Fall time ms" is set)
Default
100
Range
0–5000. 0 means no smoothing

Fall time ms

Meaning
Time constant used only when the M / S bars are falling. Use it when you want the bars to linger instead of dropping immediately after the sound stops. It does not affect the values
Default
0 (same behaviour as Smoothing ms)
Example
1000 makes the bars fall over about 1 second. If the motion looks too busy on the venue screen, try somewhere around 500–1500

Peak fall dB/s

Meaning
How fast the peak bars (L / R) fall. They rise instantly and fall at this constant rate (PPM-like behaviour)
Default
20
Range
1–200. Smaller is slower

Peak hold s

Meaning
How long the peak hold (the white line on the R row, XPression's gN › pkhold) holds the most recent maximum. After the hold, it falls at the "Peak fall dB/s" rate
Default
1.5
Range
0–30

6.5 BPM

The BPM page
Figure 13: The BPM page. The three fields here take effect and are saved as soon as you change them

The three fields are Detect from group, beat length ms and beat_hit decay ms. Each takes effect and is saved as soon as you choose (or enter) it, and does not mark the settings as unsaved. See 16.3 for what they mean. The BPM itself, the time signature and Auto follow are on the Live tab's BPM card.

6.6 Send to XPression

The Send to XPression page
Figure 14: The Send to XPression page. Match it to the DataLinq source settings on the XPression side

Target IP

Meaning
IP address of the PC running DataLinq Server
Default
127.0.0.1 (when DataLinq Server runs on the same PC as OtoMotion)
Another PC
That PC's IP (for example 192.168.1.20). Host names can't be used (IP only; an invalid value reverts to 127.0.0.1). See Sending to another PC

Port

Meaning
The TCP Port configured in DataLinq Server's XML/JSON TCP source
Default
7327 (same as XPression's default)
Range
1–65535

Rate /s

Meaning
How many JSON messages to send per second. XPression renders at about 60 frames per second, so 60 updates every frame
Default
60
Range
10–60. Changes take effect immediately, even while sending
Guide
At 10 the bars look jerky. 20 is nearly smooth. Tested on real XPression 12.5 hardware: 60 per second runs without dropped messages. If the XPression PC is heavily loaded, lower it to 30

Start of Message (dropdown)

Meaning
Control character placed before each JSON message. Choose the same one as XPression's "Start of Message"
Options
None: nothing added (matches XPression's default <none>). STX: 0x02 (Start of Text). SOH: 0x01 (Start of Header)
Default
None

End of Message (dropdown)

Meaning
Control character placed at the end of each JSON message. XPression splits the stream here and reads one message at a time. Choose the same one as XPression's "End of Message"
Options
NULL: 0x00 (XPression's default). ETX: 0x03 (End of Text). LF: line feed 0x0A. CR: carriage return 0x0D. CRLF: 0x0D 0x0A. EOT: 0x04 (End of Transmission)
Default
NULL
Note
If this doesn't match XPression, values either never update or stay stuck on old values. If in doubt, leave both at their defaults (None / NULL)

The JSON sent to XPression is always nested (a tree): under root there is a folder per group (g1–g8), one for the beat (beat) and one for the MIDI slots (midi), e.g. g1 › mbar, beat › bpm, midi › s1. The values and their meaning are unchanged; only the key placement is a tree. There are 181 keys in total (chapter 11). This tree has been verified in XPression 12.5's Browse DataLinq (2026-09-26; the midi branch is checked in the hardware test of chapter 18).

6.7 Display and language

The Display and language page
Figure 15: The Display and language page

Language (dropdown)

Meaning
The screen language (日本語 / English). Works the same as EN / JA in the header and switches as soon as you choose
Saving
When you press Apply and save, it is also saved in the settings, so the app opens in that language next time even if the browser forgets it

Silence text

Meaning
The text shown instead of a number below −70 LUFS (silence). Used on both the monitoring screen and in XPression
Default
-∞
Example
If your XPression font has no "∞" glyph, use --- or leave it empty. When empty, the text on the XPression side disappears

Light mode (for low-power PCs) (checkbox)

Meaning
Makes the monitoring screen lighter to draw. Only the screen changes: what is sent to XPression, and how often, is not affected. When it is on:
  • The meters and the rest of the screen are redrawn 15 times a second instead of 30 (the values are still received as before)
  • The TOP background stops moving and becomes a still picture (the pictures inside the cards still move with the sound)
  • The glow (shadows) on the cards and buttons is turned off
  • A "Lite" mark appears to the left of the clock in the header
Default
Off
When to use
When the browser's CPU use looks high in Task Manager, or when you run OtoMotion on the same PC as XPression (to leave CPU for XPression)
Saving
Takes effect and is saved as soon as you tick or untick it (no need to press Apply and save; unsaved changes in other fields are not saved with it). It is a per-PC setting, so it is not stored in venue presets and loading a preset does not change it

6.8 Apply and save / Revert (save bar)

The save bar with unsaved changes
Figure 16: The save bar with unsaved changes. The save button turns yellow and "● Unsaved changes" appears to its right

The save bar at the bottom of the Settings tab has two buttons.

7. All buttons

Start, Stop and Reset are in "Integrated measurement" on the Live tab's right rail; Quit is in the row of tabs at the top of the screen (right of Help).

ButtonWhat happensWhen to use
Live / Settings / Presets (tabs)Switches the tab shown. Measuring, sending and settings you are editing are unaffected—
StartStarts accumulating Integrated, LRA, TP max and measurement time. Starting after Stop continues where it left off (values are not reset). M / S / TP / bars are always live, even without StartTop of the show, top of a segment
StopPauses accumulation. Values are heldWhen you don't want commercials or breaks included in Integrated
ResetResets Integrated, LRA, TP max and measurement time to zero. If measuring, it keeps measuring; if stopped, it stays stopped. M / S / TP are unaffectedProgramme changeover
QuitExits the app. Before disconnecting, it sends XPression one final message with "status = offline, bars at 0" (so the venue screen isn't left with stretched bars). A confirmation dialog appearsStrike / pack-down
Set as reference (per group)Calculates and saves "Trim dB" so that the group's Short-term (last 3 seconds) equals the target (current trim + (target − S)). It is at the top right of each card on the Live tab and on each row of the groups table in the Settings tab; both work the same. For 3 seconds after pressing, it shows the result, such as "Trim −4.0 dB", and that group's buttons (on the card and in the table) can't be pressed. With no signal it shows "No signal" and does nothing. The table button can't be pressed on rows you added by raising the number of groups until you saveBefore the show, while the desk is sending a test tone. Pressing it repeatedly on the same tone settles on the same value
EN / JASwitches the interface language. Remembered by the browser, so the next session opens in the same language. What is sent to XPression does not change—
HelpOpens this manual in a panel inside the app—
Apply and saveApplies and saves the changes in the Settings tab (6.8). Yellow while there are unsaved changesAfter changing settings
RevertDiscards unsaved settings changes and puts the saved values backWhen you want to undo your edits
Open presets (right rail)Moves to the Presets tab—
Save preset (presets)Saves the current settings under a namePer venue
Load (presets)Makes the selected preset the current settings (applies and saves them too)On arrival at the venue
Delete (presets)Deletes the selected preset—
TAP / Sync / ÷2 / ×2 / Set / Adopt (BPM)Set the BPM and the beat position (16.2)Per song

Each setting is explained in "6. All settings" of this manual. The Help button in the header opens this manual in a panel inside the app, and the "Open in a new window" link at the top of that panel opens it as an ordinary page in a separate tab.

The help panel
Figure 17: The help panel. This manual opens on the right of the screen ("Open in a new window" at the top right opens it in a separate tab; × or Esc closes it)
A card right after pressing Set as reference
Figure 18: A card right after pressing "Set as reference". For 3 seconds the resulting trim (such as "Trim +5.4 dB") is shown on the button

8. Venue presets

Use the Presets tab in the header (or Open presets on the Live tab's right rail).

The Presets tab
Figure 19: The Presets tab. Save on the upper row; load or delete on the lower row

A preset is a snapshot of everything in the Settings tab (device, groups, target, bars, target IP …), except light mode, which is a per-PC setting.

  1. Get the settings right in the Settings tab and press Apply and save
  2. In the Presets tab, type the venue name into "Preset name" (for example XYZ Arena show) and press Save preset
  3. Next time, pick it from the list and press Load. Loading takes effect and is saved at once. If a device with the same name is found, measurement starts right away
  4. To remove a preset you no longer need, pick it from the list and press Delete

The name of the preset you last loaded (or saved) is shown in "Venue presets" on the Live tab's right rail (Figure 8), so you can see which venue's settings are in use (the name is remembered by this browser; a deleted preset is removed from the display).

Preset files are JSON files in the presets\ folder. To take them to another PC, copy the whole folder. Saving with an existing name overwrites it.

9. Preparing XPression

You only need to do this once per XPression machine.

9.1 Add a source in DataLinq Server

  1. Start XPression DataLinq Server (Start menu → XPression → XPression DataLinq Server)
  2. Add New → choose XML/JSON TCP DataLinq Source → OK
  3. Configure the next screen as follows
XML/JSON TCP DataLinq Setup
Figure 20: XML/JSON TCP DataLinq Setup. Keep TCP Server, port 7327, Start <none> and End NULL; the only change is setting Format to JSON
FieldSettingExplanation
Network SettingsTCP ServerDataLinq Server listens and OtoMotion connects to it. TCP Client / UDP are not used
TCP Port7327 (default)Use the same number as OtoMotion's "Port"
IP AddressEmptyOnly used for TCP Client
Start of Message<none> (default)Matches OtoMotion's Start of Message "None"
End of MessageNULL (default)Matches OtoMotion's End of Message "NULL"
Use Table Presets / Wrap Indices / Enable Command Parsing / Enable Logging / Save Last MessageAll offWith Save Last Message on, the last values are restored after DataLinq Server restarts, but stale bars would appear, so it is not recommended
FormatJSON ← the only changeOtoMotion sends JSON
Encoding / XSLT FileLeave as isOnly relevant for XML

Press OK to add the source. Give it an obvious name such as "OtoMotion".

9.2 Connect XPression to DataLinq Server

  1. In XPression, open Project → DataLinq Manager and click Add
  2. Enter localhost as Host Address (when DataLinq Server is on the same PC as XPression) and 8888 as Port (DataLinq Server's default), then OK
  3. If the source you created in 9.1 appears under Available DataLinq Sources, you're done
There are two ports. 7327 is OtoMotion → DataLinq Server; 8888 is DataLinq Server → XPression.

9.3 Check that values are arriving

Once OtoMotion is running and shows "XPression: connected", open a text object's Data Source → DataLinq → Browse in XPression to see the tree of folders g1–g8 and beat under root. Open g1 and pick name to see "メイン" (or "Main" in English mode); open g2 and pick m to see "-∞", and so on.

Browse DataLinq with g1 and beat expanded
Figure 21: Browse DataLinq. The common keys sit directly under root, and g1–g8 and beat appear as folders (here g1 and beat are expanded)
The order of keys within a folder is decided by XPression, so they appear jumbled rather than in the order they were sent (this is how XPression works). Look them up by name. Refresh updates the values.

10. Building the scene

OtoMotion does all the calculation before sending, so on the XPression side you only need to "display the value" and "use it as a bar length".

10.1 Show a value in a text object

  1. Place a text object, choose DataLinq on the Data Source tab of the Object Inspector, and click Set
  2. In Set DataLinq Properties, turn Enabled on, choose the OtoMotion source under DataLinq, and click Browse...
  3. In Select DataLinq Field, expand the g1 folder, pick m, and click OK. Column becomes g1 (the folder) and Row becomes m (the key). You can also type them in (for a beat value, Column beat and Row bpm, and so on). For the common keys directly under root (elapsed, status, and so on), leave Column empty and put the key name in Row
  4. Always turn Live Update on (the value does not update without it)
Select DataLinq Field with m under g1 selected
Figure 22: Select DataLinq Field. Expand g1 and pick m; the Selection area at the top shows Column: g1 / Row: m
Set DataLinq Properties with Column g1 and Row m
Figure 23: Set DataLinq Properties. Column is g1, Row is m, Live Update is on

Frequently used keys: g1 › m (Momentary), g1 › s (Short-term), g1 › i (Integrated), g1 › lra, g1 › tp (True Peak), g1 › tpmax, g1 › diff_i (difference from target, in the form +0.6), elapsed (measurement time; a common key, so it sits directly under root). They arrive as strings with one decimal place, so they can be displayed as they are.

10.2 Drive a bar (script)

Bar length arrives as g1 › mbar (0–1). Receive it in a text object (it can be hidden) and use a script to put it into a quad's scaleX. Write the script in the OnSetText event of that text object's Script Editor (it runs every time a value arrives).

' Script on the text object that receives g1 › mbar
dim bar as xpBaseObject
dim v as Double
Scene.GetObjectByName("Bar1", bar)
v = text / 1                 ' convert the string to a number
bar.scaleX = v               ' use 0–1 directly as the horizontal scale
bar.Visible = (v > 0)        ' hide at 0 (so no thin sliver remains)
The bar script written in the OnSetText event of the Script Editor
Figure 24: Script Editor. Select OnSetText under Events on the left and write the script there. "Compiled successfully." in Messages at the bottom means it is OK
Test scene
Figure 25: Test scene. From the top: four text values, then two bars. The bars grow and shrink with the values

10.3 Showing and hiding groups

gN › on is 1 if the group is enabled and 0 if unused. Use it to toggle Visible on group 2's group (its full set of text and bars), and the same scene works whether the venue has one group or two.

' Script on the text object that receives g2 › on
dim grp as xpBaseObject
Scene.GetObjectByName("Group2", grp)
grp.Visible = (text / 1 > 0)

10.4 TP Over warning

While g1 › tpover is 1 (for 3 seconds after the overshoot), show a red indicator. As above, just feed it into Visible.

10.5 Building per-band bars

Use the same input in several groups and give each group a different band to get bars that move separately for "overall", "bass" and "highs".

  1. Set Number of groups to 3
  2. Give all three groups the same L ch / R ch (for example 1 / 2)
  3. Set names and bands: Group 1 = "Overall", Full range; Group 2 = "Bass", Low; Group 3 = "Highs", High. Then press Apply and save
  4. In XPression, feed g1 › mbar, g2 › mbar and g3 › mbar into their own bars (same script as in 10.2). The bass bar jumps with the kick and bass; the highs bar with cymbals and crowd noise

Checking with the test signal's kick: even without sound from the desk, you can check how the per-band bars move with the 6.2 Test signal. After setting up the three groups above, set the test signal Type to Kick (for BPM detection), the Level to −12 dBFS, and turn on "Use test signal" (the test signal feeds the same sound to every group, so L ch / R ch don't matter). If the "Overall" and "Bass" bars jump with each kick while the "Highs" bar hardly moves, the bands are split correctly. Then switch the Type to Sweep: as the tone rises from low to high, the "Bass" bar and then the "Highs" bar extends. You can watch the XPression scene with the same signal. Always turn it off again when you are done.

10.6 Other useful keys

KeyUse
statusok = normal, nosignal = no input device, offline = OtoMotion has quit. Hiding the whole meter whenever it isn't ok avoids showing a broken display
seqSequence number of each message. If it stops increasing, OtoMotion has crashed (DataLinq Server keeps holding the last values, so the bars freeze extended). Operationally, handle this with "if OtoMotion crashes, take the scene out"
running1 while Integrated is being measured. Use it for a "REC"-style indicator
targetThe target (a number). For showing text such as "Target −24"

10.7 Sample scene (a complete kit)

A sample that combines a loudness meter, band-limited bars and beat dots. The background, guide, textures and scripts are bundled, so you can build the same scene in XPression.

The OtoMotion monitor next to the XPression output of the sample scene
Figure 26: The OtoMotion monitor (left) and the XPression output of the sample scene (right). The group 1 meter and values, BPM and beats, and the bars for band-limited groups 2–4 follow OtoMotion's values

The quickest way: open the project

  1. Save OtoMotion_sample_scene.xpp (an XPression package) on the XPression PC
  2. Double-click the saved .xpp. XPression (12.5 or later) starts and walks you through unpacking the package; follow its prompts. The background image is inside the package; the text uses Arial, which comes with Windows
  3. In Project → DataLinq Manager, check that the server (default localhost, port 8888) and the DataLinq DataLinq1 point to the OtoMotion source you created in 9.1. If DataLinq Server runs on another PC, change the Host Address
  4. Set OtoMotion to 4 groups with bands Low / Mid / High (see "5. OtoMotion settings" below) and press Start on the monitor

To build it yourself or to see how it works, follow the steps and scripts below.

Bundled files (open them from here)

The idea: display text and "drivers"

Values appear in a text object just by binding it. Bars and dots (quads) cannot receive DataLinq, so place a hidden text object (a driver) that receives the value and moves the quad from its OnSetText script (the same mechanism as 10.2). Hide drivers with Alpha 0 (turning Visible off may stop updates).

Object Manager listing display text, quads and drivers
Figure 27: Objects in the sample scene. From the top: display text, quads (bars, TP OVER, beat dots), and at the bottom the drivers (marked S for script)

1. Display text (bind only)

ObjectColumnRowShows
g1_nameg1nameGroup name
g1_m / g1_sg1m / sMomentary / Short-term
g1_tpg1tpTrue Peak (now)
g1_i / g1_diff_ig1i / diff_iIntegrated and difference from target (after Start)
g1_lra / g1_tpmaxg1lra / tpmaxLRA / maximum True Peak (after Start)
g1_s_bigg1sShort-term, large
bpmbeatbpmBPM
elapsed(empty)elapsedMeasurement time (common keys leave Column empty)

2. Drivers and the quads they move

DriverColumnRowMovesQuad pivot
g1_mbar / g1_sbarg1mbar / sbarM / S (horizontal)Left edge
g1_pk_l / g1_pk_rg1pk_l / pk_rPK_L / PK_R (horizontal)Left edge
g1_tpoverg1tpoverTP OVER (show / hide)—
g2_mbar / g3_mbar / g4_mbarg2 / g3 / g4mbarLOW / MID / HIGH (vertical)Bottom edge
beat_countbeatbeat_countdot_1–dot_4 (only the current beat shows)—

Make horizontal bars as wide as their track and vertical bars as tall as theirs, so a value of 1 fills the track and 0.5 fills half.

3. Scripts (OnSetText of each driver)

Horizontal bar (g1_mbar; for the others change "M" to "S", "PK_L" or "PK_R"):

dim bar as xpBaseObject
dim v as Double
Scene.GetObjectByName("M", bar)
v = text / 1
bar.scaleX = v
bar.Visible = (v > 0)

Vertical bar (g2_mbar): the same, with "M" changed to "LOW" ("MID" for g3, "HIGH" for g4) and scaleX changed to scaleY.

TP OVER (g1_tpover):

dim box as xpBaseObject
Scene.GetObjectByName("TP OVER", box)
box.Visible = (text = "1")

Beat dots (beat_count). Only the current beat's dot is shown; the dark rings drawn in the background show for the others:

dim d1 as xpBaseObject
dim d2 as xpBaseObject
dim d3 as xpBaseObject
dim d4 as xpBaseObject
Scene.GetObjectByName("dot_1", d1)
Scene.GetObjectByName("dot_2", d2)
Scene.GetObjectByName("dot_3", d3)
Scene.GetObjectByName("dot_4", d4)
d1.Visible = (text = "1")
d2.Visible = (text = "2")
d3.Visible = (text = "3")
d4.Visible = (text = "4")

4. Colors (to match the OtoMotion screen)

M #F24028, S #FF8A70, PK #FFD23F, LOW / MID / HIGH #B04DFF, TP OVER #D9202A, beat dots #F24028. For gradients, use the bundled textures as material textures (they shrink with the bar, matching the preview).

5. OtoMotion settings

Set the number of groups to 4, give groups 2–4 the same input channels (L ch / R ch) as group 1, and set their bands to Low, Mid and High (6.1). With one mono mic, set every group to L1 / R1 so PK L and PK R move together. Integrated, LRA, TP MAX and the difference from target appear after you press Start on the monitor.

If something does not move

10.8 CROWD POWER (crowd meter for venues)

The sample package OtoMotion_sample_scene.xpp (XPression 12.5) now includes, alongside the existing loudness sample scene, four "CROWD POWER" scenes for a venue's big screen.

CROWD POWER scene A (vertical gauge)
Figure 28: Scene A (vertical gauge). 24 segments, the tier word and the dotted BEST line
CROWD POWER scene B (dial)
Figure 29: Scene B (dial). 30 ticks and a needle, with the tier word below
CROWD POWER scenes A and B side by side
Figure 30: A (left) and B (right) side by side
CROWD POWER scene C (LED equalizer wall)
Figure 31: Scene C. Bars colour-coded by band (LOW / MID / HIGH) with a big number in the centre

How the crowd-power value works

Crowd power is group 1's bar value (g1 › mbar) × 100. It rises with a bigger cheer.

OtoMotion settings: Bar motion

On the Settings tab → Bar motion (6.4), set these values for a venue crowd:

SettingValue
Loudness min−35
Loudness max−3
Smoothing ms100
Fall time ms800
These are settings on the Bar motion page, so they also affect the look of other scenes, such as the loudness meter. After changing them for CROWD POWER, save the setup as a venue preset (for example, "CROWD POWER") so you can switch back to your usual settings quickly.

Tuning: aim for about 20–30 when the crowd is quiet, and about 85–95 for the biggest cheer. If it sticks at 100, raise the max (e.g. −3 → 0). If it never gets high, lower the max. Leave group 1's Trim dB at 0 unless it's clearly off.

Scene C needs 4 groups

Scene C moves band-colour-coded bars, so it uses 4 groups (Settings tab → Device and groups).

GroupBandUsed for
Group 1Full rangeThe crowd-power value, the central number
Group 2LowThe LOW (blue) bars
Group 3MidThe MID (purple) bars
Group 4HighThe HIGH (red) bars

Crowd noise has little high-frequency energy, so the HIGH bars often read lower than the others. If one colour is clearly shorter than the rest, raise that group's Trim dB (try around +6 dB for HIGH).

DataLinq bindings

In all four scenes, the driver text objects are bound to the DataLinq source named "OtoMotion" that you set up in section 9 (an XML/JSON TCP source, TCP Server, port 7327). Name your DataLinq Server source OtoMotion, or, if it's named differently, re-select your source in each driver's DataLinq properties. The main drivers are drv_level (g1 › mbar) and drv_elapsed (elapsed); scene C also has drv_low (g2 › mbar), drv_mid (g3 › mbar) and drv_high (g4 › mbar).

Font

The numbers use the free font Teko (Bold and SemiBold, SIL Open Font License 1.1). Install Teko-Bold.ttf and Teko-SemiBold.ttf on the XPression PC before opening the scenes (licence: OFL_Teko.txt). The background images already contain the title and labels, so no other font is needed.

Hidden text objects and scripts

The hidden text objects var_best, var_rec, var_frame, var_armed and var_elapsed hold the record and timers. Don't delete them, and keep them empty (nothing needs to be typed into them). The scripts are also provided as text files: crowd_power_scripts.txt (for A / B / side-by-side) and crowd_power_c_scripts.txt (for C, including the three band scripts). The XPression scripts are VB.NET and find objects by name (seg_01…, tick_01…, bar_01…, needle, best_marker_b, tierA_*, tierB_*, flash, new_record, num_a / num_b / num_c, best_a / best_b / best_c_num, and so on).

11. JSON key reference (181 keys)

OtoMotion always sends the same 181 keys (for all 8 groups regardless of the number of groups, and all 16 MIDI slots even when nothing is assigned). So XPression bindings don't break when you change venue. Types are fixed: "display values are strings; bars and flags are numbers". The JSON is always nested (a tree): under root there is a folder per group, one for the beat and one for the MIDI slots, as shown below.

root
├ seq, time, status, running, elapsed, target          (common keys; names unchanged)
├ g1 … g8   each: on, name, m, s, i, lra, tp, tpmax, diff_i, diff_s, mbar, sbar, pkbar, pkhold, pk_l, pk_r, tpover, band
├ beat      : bpm, beats_per_bar, beat, beat_phase, beat_tri, beat_sine, beat_hit, beat_square, beat_count, downbeat, bar_phase, half_phase, double_phase, bpm_detected, bpm_confidence
└ midi      : s1 … s16   (raw values from a MIDI controller; added 2026-09-30; chapter 18)

Common (6, directly under root)

To bind one in XPression, leave Column empty and put the key name in Row (for example, Row elapsed).

KeyTypeExampleContent
seqNumber12345Message sequence number
timeString12:34:56.789Time sent
statusStringokok / nosignal / offline
runningNumber11 while measuring, 0 while stopped
elapsedString00:12:34Measurement time
targetNumber-24.0Target

Per group (g1–g8 folders, 18 keys × 8; N is 1–8)

KeyTypeExampleContent
gN › onNumber11 if the group is enabled. 0 if unused (the keys below are then empty strings and 0)
gN › nameStringMainGroup name
gN › m / gN › s / gN › iString-23.4Momentary / Short-term / Integrated (one decimal place). Silence shows the Silence text
gN › lraString6.2LRA (LU)
gN › tp / gN › tpmaxString-3.1 / +0.5True Peak and its maximum during measurement (dBTP). Values of 0 and above have a + sign
gN › diff_i / gN › diff_sString+0.6 / -1.2Difference of Integrated / Short-term from the target. Signed. Empty if the source value is silence
gN › mbar / gN › sbarNumber0.62M / S bar length (0–1)
gN › pkbar / gN › pkholdNumber0.71Combined L/R peak bar, and peak hold position (0–1)
gN › pk_l / gN › pk_rNumber0.65Separate L / R peak bars (0–1)
gN › tpoverNumber1TP Over warning (held for 3 seconds)
gN › bandStringlowBand (full / low / mid / high / custom). Anything other than full is a visual-effects value. Empty for unused groups

Beat (beat folder, 15 keys)

All numbers. Beat values are calculated from the PC clock each time a message is sent, so they keep running without sound. In the final message on quit, beat › bpm and beat › beats_per_bar are the set values and the rest are 0.

KeyTypeExampleContent
beat › bpmNumber128Current BPM (30–300)
beat › beats_per_barNumber4Time signature (beats per bar: 2 / 3 / 4 / 6; the key name beats_per_bar is unchanged)
beat › beatNumber11 for the "beat length" (default 100 ms) after each beat, otherwise 0
beat › beat_phaseNumber0.25Position within the beat. Sawtooth from 0 on the beat to just under 1 before the next beat
beat › beat_triNumber0.50 → 1 → 0 within the beat (triangle; 1 at the middle of the beat)
beat › beat_sineNumber0.50 → 1 → 0 within the beat (smooth sine; 1 at the middle of the beat)
beat › beat_hitNumber0.721 on the beat, then falls toward 0 with the "beat_hit decay" time constant (default 300 ms)
beat › beat_squareNumber11 in the first half of the beat, 0 in the second half
beat › beat_countNumber3Which beat of the bar (1 to beats per bar)
beat › downbeatNumber0beat › beat for the top of the bar only (1 only on beat 1)
beat › bar_phaseNumber0.625Position within the bar (0 → 1)
beat › half_phaseNumber0.1250 → 1 over 2 beats
beat › double_phaseNumber0.50 → 1 over half a beat
beat › bpm_detectedNumber127.9BPM estimated from the audio. 0 until there is an estimate
beat › bpm_confidenceNumber0.8How certain the estimate is (0–1). Auto follow works at 0.5 and above

MIDI slots (midi folder, 16 keys)

Values of MIDI controller knobs and buttons, sent to XPression as they are, independent of the measurement (chapter 18). Unassigned slots, the final frame at shutdown, and PCs where the MIDI library cannot be loaded send 0.

KeyTypeExampleMeaning
midi › s1 – midi › s16number0.6250–1 (3 decimals). A knob gives the value mapped into the assignment's range (within 0–1); a button gives 0 or 1 (1 while held in "Momentary" mode)
Position and waveform keys (beat › beat_phase etc.) are rounded to 4 decimal places, beat › bpm to 2, beat › bpm_detected to 1 and beat › bpm_confidence to 3. Each message is about 2.0 KB (about 2.4 KB with 8 groups). At 60 per second that is about 140 KB/s.

12. Show-day workflow

Preparation (day before to show day)

  1. Confirm that DataLinq Server has been set up (section 9)
  2. Start OtoMotion → load the venue preset in the Presets tab (for a new venue, set it up as in section 5 and save)
  3. With the desk's test tone, press Set as reference → confirm M / S sit at −24.0 (the target)
  4. Confirm the header shows "Input: (device name)", "XPression: connected" and "Send: actual 60"
  5. Put the XPression scene into preview and confirm the bars and values move. Also confirm they show −∞ with silence
  6. Confirm there is no yellow banner (test signal) below the header and no yellow dot (unsaved changes) on the "Settings" tab, and leave the Live tab showing

On air

  1. At the top of the programme, press Reset → Start (if "Start measuring at launch" is on, just Reset)
  2. Run the show while watching Integrated and its difference from the target (the small figure to the right of Integrated). If TP Over appears often, check the desk limiter
  3. To exclude commercials or breaks, press Stop, then Start to resume

Strike

  1. Take the meter scene out of XPression
  2. Press Quit in OtoMotion (it sends one final message with bars at 0 before exiting)
If OtoMotion crashes mid-show, XPression keeps the last values (bars stay extended). Take the scene out first, then restart OtoMotion.

13. Sending to another PC

Measuring PC (e.g. a laptop)Audio interface → OtoMotionTarget IP = 192.168.1.20 / Port 7327 XPression PC (192.168.1.20)DataLinq Server (TCP Server 7327) → XPressionAllow inbound 7327 in the firewall LAN (TCP)
Figure 32: Separate measuring PC and XPression PC
  1. Find the XPression PC's IP address (ipconfig in Command Prompt)
  2. On the XPression PC, allow inbound TCP 7327 in Windows Firewall (in the prompt that appears the first time DataLinq Server starts, tick both "Private networks" and "Public networks" and allow; venue networks are often treated as public by Windows, and allowing private only is not enough)
  3. In OtoMotion's Settings tab → "Send to XPression", enter that IP in "Target IP" and press Apply and save
  4. When the header shows "XPression: connected", you're done. If it doesn't, check ping, then the port, then the firewall

14. Troubleshooting

SymptomCause and fix
"Input: no signal", red bar "Cannot open input device"The device is unplugged, another application has it open exclusively, or the device name in Settings is wrong. Once replugged, the automatic reconnect every 2 seconds brings it back. If it doesn't, reselect the device on the "Device and groups" page of the Settings tab
Red banner "Input device (…) not found. It will reconnect automatically when plugged back in", and the header shows "Input: (device name) (not found)"The chosen audio interface was unplugged (check the cable and the USB hub's power). Capture stops, the meters show −∞ and status in XPression becomes nosignal. Plug it back in and it recovers automatically within a few seconds. If it doesn't, reselect the device on the "Device and groups" page of the Settings tab. If two devices with the same name are connected, unplugging one of them is not detected (devices are matched by name). The device field in the Settings tab keeps showing "(not found) device name", so saving other settings does not change the input
Red banner "No input for group(s) 5, 6, 7, 8 (this device has 4 ch; set each group's L/R within that range)", and those groups' cards are fadedThe listed groups' L ch / R ch exceed the device's channel count. Those groups are running on 1/2. Fix them in the groups table on the "Device and groups" page of the Settings tab, or reduce the Number of groups
"XPression: not connected"DataLinq Server isn't running, the source isn't set to TCP Server / 7327, the Target IP is wrong, or the firewall is blocking it. Start DataLinq Server and the connection is made automatically within 1 second
"XPression: connected", but no values appear in XPressionCheck that no other source (or another app) is listening on the target port, and that the port of the DataLinq Server source matches OtoMotion's target port. One port can be used by only one source. If two OtoMotions send to the same source, their values get mixed. The DataLinq Server source must be TCP Server (not Client). "The port is open" is not the same as "the right receiver is listening"
Values reach XPression but don't updateLive Update is off on the text object. Or Start / End of Message doesn't match OtoMotion
An XPression bar leaves a thin sliver at 0Add bar.Visible = (v > 0) to the script (see 10.2)
Values don't match the desk metersPress Set as reference with a test tone. If they still don't match, check the desk's reference (−20 dBFS = 0 VU, etc.)
The bars move although no sound is playing (nothing is connected to the desk or interface). The header's input status is a yellow "Input: Test signal (…)"The test signal is on (a yellow "Test signal is playing" banner is also shown below the header). Untick "Use test signal" on the Test signal page of the Settings tab to go back to the device (it is also turned off automatically when OtoMotion restarts)
Red banner "No audio signal (device may be disconnected). Attempting to reconnect" although nothing was unpluggedOn Mac, the microphone permission may have been dropped. Replacing or rebuilding OtoMotion.app invalidates the earlier permission. Run tccutil reset Microphone com.dekobokotech.otomotion in Terminal, relaunch OtoMotion and allow microphone access (you can also check System Settings → Privacy & Security → Microphone)
Everything stays at −∞The input is silent. The channel settings (L ch / R ch) point at unused inputs. On the Mac, microphone access was denied
Bars look jerkyRate /s is set to 10 → change to 60. If the XPression PC is heavily loaded, 30. If the motion looks too busy on the venue screen, set "Fall time ms" to 500–1500
Started the app but no screen appearsIt's already running (you only closed the screen). Run the .bat again and the running screen opens. On the Mac, open http://127.0.0.1:8830/ in Chrome
"Already running" message (shown in Japanese: "OtoMotion はすでに起動しています。")A second instance can't be started. Use the screen that is already running
"Cannot start (check the log)" (shown in Japanese: "起動できません。ログを確認してください")Open today's log in %APPDATA%\OtoMotion\logs\ (on the Mac, ~/Library/Application Support/OtoMotion/logs/) and check the last few lines. If the settings file was corrupted, the app automatically falls back to default settings and keeps the corrupted file as state.json.broken
OtoMotion crashed and the XPression bars stay extendedTake the scene out → restart OtoMotion. DataLinq Server is designed to keep holding the last values
Only the license screen appears at startup ("No license was found", "The license has expired (valid until …)", "The license file is not valid")There is no usable license. OtoMotion neither measures nor sends to XPression. Follow the steps in 17.1 to load one: a renewal file (the email attachment) if expired, or the license.json we emailed you if none was found
A yellow "License: N days left" appears in the headerThis is a warning starting 30 days before expiry. If a renewal file has arrived, load it as in 17.2. Once it reads "License: last day", restarting after midnight makes the app unusable (it keeps running if you don't restart)
Yellow banner "This PC's date may be wrong"The PC's date is earlier than the license's issue date or the date it was last used. The app still works, but check the date and time on Windows / macOS. If "The license has expired (valid until …)" appears after fixing the clock, send the license ID to support@dekobokotech.com (a renewal file will be sent)
CROWD POWER: NEW RECORD! never appears / BEST follows the current valueCheck that the five hidden text objects var_best, var_rec, var_frame, var_armed and var_elapsed exist and are empty. If the first cheer already reaches close to 100, there's no room to set a new record — raise the max on the Bar motion page

15. Measurement specifications

ItemDetails
StandardsITU-R BS.1770-4 (K-weighting filter, gated Integrated, True Peak), EBU Tech 3342 (LRA), ARIB TR-B32 (target −24 LKFS; EBU R128 specifies −23 LUFS and ATSC A/85 −24 LKFS)
Processing unit10 ms blocks. Sample rate follows the device (verified at 44.1 / 48 / 96 kHz)
Momentary / Short-term400 ms / 3 s moving average. Updated every 10 ms
Integrated400 ms blocks, 75 % overlap. Absolute gate −70 LUFS, relative gate −10 LU. Implemented so processing time does not grow over long sessions (histogram)
LRAWidth between the 10th and 95th percentiles of the Short-term distribution. Absolute gate −70, relative gate −20 LU. Updated every second
True Peak4× oversampling (2× at 96 kHz and above). Maximum of L / R
Verified accuracyWith the EBU Tech 3341 / 3342 compliance test signals: M / S / I ±0.1 LU, LRA ±1 LU, True Peak +0.2 / −0.4 dB
Silence handlingBelow −70 LUFS is shown as −∞ (text configurable). Bars are 0
SendingTCP client. JSON (UTF-8) + delimiter. 10–60 per second. Reconnects every second when disconnected. Sends one status=offline message on quit
Monitoring screen127.0.0.1 only (not visible from other PCs). Port 8830 (8831 … if in use). It does not clash with DokoDoko, KoeBattle or DBTCODER running on the same PC

16. BPM (moving to the beat)

To make visuals on the venue screen move with the beat of the music, OtoMotion also sends the BPM (tempo) and the beat position to XPression. The beat position is calculated from the PC clock, so it keeps running at a steady tempo even with no sound and even when the device isn't open. There are three ways to set the BPM.

The BPM card
Figure 33: The BPM card on the Live tab's right rail. Current BPM and time signature, beat indicator, TAP / Sync / ÷2 / ×2, manual entry, detected value, Adopt and Auto follow

16.1 Reading the BPM card

It is on the Live tab's right rail, just below "Integrated measurement". The dropdown to the right of the large number is the time signature.

PartMeaning
Large numberThe current BPM (the same as beat › bpm sent to XPression)
Dots (one per beat of the bar)The current beat lights up. Beat 1 (top of the bar) is dark orange with a glow, the others light orange. Bright on the beat, fading toward the next beat (the same motion as beat › beat_hit)
Detected 127.9 · conf 0.8The BPM estimated from the audio and how certain it is (confidence, 0–1). Shows "Detected —" until there is an estimate. While the confidence is below 0.5 it is shown dimmed and Adopt can't be pressed

16.2 Buttons and keys

ButtonWhat happens
TAP (T key)Press about 4 times in time with the beat. The BPM is set from the 2nd press, using the median of up to the last 8 intervals, so one mistimed press doesn't throw it off. A gap of 2 seconds or more starts counting again. A tempo set by TAP takes over while keeping the current beat position (to line up the top of the beat, use Sync)
Sync (S key)Makes the moment you press it beat 1 (the top of the bar). Press it at the top of a song or a bar
÷2 / ×2Halves / doubles the BPM (does nothing if the result would leave 30–300). Use it to fix a detection or TAP that came out at half or double
SetSets the BPM typed in the field to its left (30–300). Pressing Enter in the field does the same
AdoptMakes the "Detected" value the BPM (once; it doesn't keep following). Only available while the confidence is 0.5 or more
The T / S keys don't work while you are typing in a text field such as a name (click outside the field first). A BPM set by TAP, Set, ×2 / ÷2 or Adopt is saved immediately, and OtoMotion starts at the same tempo next time.
You can assign TAP, Sync, ×2, ÷2 and Adopt to buttons of a MIDI controller, and the BPM value to a knob (chapter 18). A 7-bit CC gives steps of about 1 BPM over 60–180; assign a pitch bend wheel for finer control. A BPM set by MIDI is saved just like TAP (once, about 1 second after the knob stops). Auto follow, the time signature and the group used for detection can also be assigned to buttons or knobs (chapter 18).

16.3 Settings

These items take effect and are saved as soon as you change them (no need to press Apply and save, and they do not mark the settings as unsaved). Time signature and Auto follow are on the Live tab's BPM card; Detect from group, beat length and beat_hit decay are on the "BPM" page of the Settings tab (6.5). Auto follow can be switched on and off live during a show.

Only time signature, detection group, beat length and beat_hit decay are stored in venue presets. The BPM and auto follow are not (loading a preset keeps the current tempo and auto-follow state).

Time signature

Meaning
Beats per bar. beat › beat_count counts from 1 up to this number, and it sets where beat › downbeat and beat › bar_phase wrap
Choices
2/4 (2 beats), 3/4 (3 beats), 4/4 (4 beats), 6/8 (6 beats)
Default
4/4

Auto follow

Meaning
When on, every 0.5 seconds, if the detection confidence is 0.5 or more, the detected value becomes the BPM and the beat position is pulled toward the beats in the audio (gradually if it is off by up to 1/4 beat, in one step if it is off by more)
Default
Off
Note
While it is on, a BPM set by TAP or typed in is overwritten by the next detection. For a show with a known set list, turning it off and using TAP or typed values is the most reliable

Detect from group

Meaning
Which group's audio the BPM is estimated from. It uses the audio before the band filter (that group's L / R mixed together). Choosing a group beyond the enabled ones stops detection
Default
Group 1
Example
A group where the kick and bass are clear (such as a band stem) is steadier than the main mix

beat length ms

Meaning
How long beat › beat (and beat › downbeat) stay at 1 after each beat. At high BPM it is limited to half a beat (so it never sticks at 1)
Range
40–500
Default
100
Note
XPression is only guaranteed to receive the 1 if this length is at least "1000 ÷ rate per second + one frame" (about 50 ms at 60 per second, 100 ms or more at 10–20 per second). If it is shorter, some beats never deliver a 1 and blinks are missed

beat_hit decay ms

Meaning
How fast beat › beat_hit falls from 1 at the beat (time constant). It drops to about 0.37 after this time
Range
20–2000
Default
300

16.4 How detection works, and its limits

From the chosen group's audio, OtoMotion picks out the moments where the sound suddenly gets louder, weighting the low end (20–150 Hz: kick and bass) most, and estimates the BPM from how those moments repeat over the last 6 seconds. The estimate is updated every 0.5 seconds.

Checking with the test signal's kick: even without a music source, you can see detection work with the 6.2 Test signal. Set the Type to Kick (for BPM detection), Kick BPM to, say, 128, the Level to −23 dBFS or higher (−12 dBFS is safest), and turn on "Use test signal". The test signal feeds the same sound to every group, so any detection group works. Within 6–8 seconds you'll see something like "Detected 127.7 · conf 0.8"; press Adopt or turn on Auto follow and check that the BPM matches (detection can be about 0.1 BPM off). If you change Kick BPM, the input is reopened and detection follows the new tempo a few seconds later. Slow tempos such as 60–90 BPM rarely reach a confidence of 0.5, so try 100–180. Always turn it off again when you are done.

16.5 Using it in XPression

All beat keys are numbers and are sent 60 times per second ("Beat (beat folder, 15 keys)" in chapter 11). Receive a key in a text object (it can be hidden) and drive other objects from its script, in the same way as 10.2.

Blink on every beat (beat › beat → Visible)

' Script of the text object receiving beat › beat
dim lamp as xpBaseObject
Scene.GetObjectByName("BeatLamp", lamp)
lamp.Visible = (text / 1 > 0)      ' shown only for the "beat length" after each beat

Spin with the beat (beat › beat_phase → rotation)

' Script of the text object receiving beat › beat_phase (0→1, repeating every beat)
dim star as xpBaseObject
Scene.GetObjectByName("Star", star)
star.rotationZ = (text / 1) * 360  ' one turn per beat (use beat › bar_phase for one turn per bar)

Pulse on the beat (beat › beat_hit → scale)

' Script of the text object receiving beat › beat_hit (1 on the beat, falling toward 0)
dim logo as xpBaseObject
dim v as Double
Scene.GetObjectByName("Logo", logo)
v = 1 + 0.2 * (text / 1)           ' 1.2× on the beat, back to normal size
logo.scaleX = v
logo.scaleY = v

Change colour on each beat (beat › beat_count → colour)

' Script of the text object receiving beat › beat_count (1 to beats per bar)
' Stack objects Color1–Color4 in different colours and show only the one for the current beat
dim obj as xpBaseObject
dim n as Integer
dim i as Integer
n = text / 1
for i = 1 to 4
  Scene.GetObjectByName("Color" & i, obj)
  obj.Visible = (i = n)
next
scaleX and Visible have been confirmed on real hardware (XPression 12.5). Check the property names for rotation (rotationZ) and scaleY with the Script Editor's auto-complete in your version.
KeyGood for
beat › beat / beat › downbeatBlinks and flashes (beat › downbeat for the top of the bar only)
beat › beat_hitA kick on the beat with a tail (scale, brightness)
beat › beat_sine / beat › beat_triSmooth breathing back-and-forth with the beat (0→1→0)
beat › beat_phase / beat › half_phase / beat › double_phase / beat › bar_phaseMotion at a constant speed such as rotation or scrolling (one cycle per beat, 2 beats, half a beat, one bar)
beat › beat_squareSwitching between the first and second half of the beat (swinging left and right, etc.)
beat › beat_countShowing something different on each beat (colour changes, lighting in sequence)

17. License

OtoMotion runs on a term license. Without a valid license file (license.json), the app still launches but only the license screen appears; it neither measures nor sends to XPression. Licensing does not tie the app to one PC and does not need an internet connection. A loaded license file is kept in the same folder as the settings (%APPDATA%\OtoMotion; on the Mac, ~/Library/Application Support/OtoMotion) and survives replacing the app.

17.1 Loading a license

  1. Save the emailed attachment license.json (license.txt also works) to the Desktop or Downloads
  2. Start OtoMotion. If there is no license, the license screen appears, listing any files found with their location, addressee and expiry
  3. Press Load next to the one you want. Once loaded, the app moves on to the TOP screen
  4. If the file is not found in the list, press Search again (after saving the file again), or use Choose a file to load to pick it directly
The places searched are: the app's own folder and the folder above it, the Desktop, Downloads, and the top level of USB drives and other removable drives. A location that could not be searched within 3 seconds is listed as "Could not search: …". A file that can't be accepted is shown greyed out with a reason (expired, issued for a different customer, previously sent to you, and so on).
On the Mac, the first launch asks for permission to access the Desktop, Downloads and USB drives (this candidate search is what triggers it). If you click "Don't Allow", a license on the Desktop or in Downloads won't appear in the list. Go to System Settings › Privacy & Security › Files and Folders, turn OtoMotion on, then restart OtoMotion.

17.2 Expiry and renewal

Starting 30 days before expiry, a yellow "License: N days left" appears in the header (click it to open Settings › License). The license works through the end of its last day; starting the app on or after the next day shows the license screen. Once running, the app does not stop even if the license expires while it's open.

  1. Save the renewal file (the emailed attachment license.json) to the Desktop
  2. Open the Settings tab › License and press Load next to it (if the app started with an expired license, do the same thing on the license screen shown first)
  3. Once "Remaining" shows the new value, you're done. No restart is needed

Settings › License shows the addressee, license ID, plan (term or perpetual), period and days left. Quote the license ID when contacting support.

17.3 Restoring the previous license

If you load the wrong file by mistake, Restore the previous license in Settings › License goes back one generation (only the file loaded just before the current one is kept). You can't restore to one older than the license currently in use.

17.4 Troubleshooting

SymptomFix
The file is not found in the listCheck that the file is named license…json / license…txt and is at the top level of the Desktop, Downloads or a USB drive. Choose a file to load works regardless of location
"A license for another product (DokoDoko, for example)"It only found the file on another product's USB drive plugged into the same PC. You can leave that drive plugged in. Choose the OtoMotion license and load it
"Issued for a different customer, or modified" / "The character encoding has changed (it looks like it was re-saved in a text editor)"Opening the file in Notepad or another editor and saving it again breaks the signature, even if it looks unchanged — it has been re-saved in a text editor. Save the emailed attachment again without opening it
Yellow banner "This PC's date may be wrong"Check the PC's date and time (its clock). This never makes the app unusable
Shows as expired after fixing the clock, even though the license isn't actually due yetThe app was used while the date was set in the future, so the record of the last day used has moved ahead. Send the license ID to support@dekobokotech.com; loading a renewal file fixes it
Restarting after midnight on the last day of the license makes the app unusableThe license works through the end of its last day, but starting the app after the date has changed shows it as expired. Load the renewal file before the day of the show
The venue PC is offline and can't receive the renewal fileReceive the email on a phone, save the attachment, and carry it over on a USB drive or by AirDrop (Mac). Placed at the top level of a USB drive, it appears in the list
Mac: the license doesn't appear in the list / no sound after first launchYou likely clicked "Don't Allow" on one of the permission prompts shown at first launch (Desktop, Downloads, USB, microphone). Go to System Settings › Privacy & Security › Files and Folders (and Microphone if there's no sound), turn OtoMotion on, then restart OtoMotion

18. Operate with MIDI · OSC (MIDI controller)

With a USB MIDI controller (knobs, faders, buttons) you can move OtoMotion's parameters, press its buttons and drive XPression graphics directly during the show. No specific model is required: as in Resolume, anything can be assigned with MIDI Learn. Assignments are saved in midi.json (in the same folder as the settings) and are not part of venue presets. OSC apps (TouchOSC, Companion, Vertex and others) use the same mechanism (chapter 19).

MIDI is received by the app itself, so it keeps working while the monitor window is closed. Unplugging the MIDI device never stops measurement or the output to XPression.

18.1 Assigning

Open Settings tab › MIDI · OSC to see the list of parameters you can assign (18.2). To assign one from its row:

  1. Press Assign on the row you want. It turns yellow, the button reads "Move a control", and a blue banner appears at the top of the screen
  2. Move a knob or press a button on the controller. The assignment is made and saved at once; the row shows a green "Assigned", a label such as CC 21 · ch1 and the device name
  3. Done: that knob or button now moves the parameter. Below the label, Remove removes assignments one at a time
Reading a label: in CC 21 · ch1, CC is the number a knob, fader or some buttons send (0–127), and ch is the MIDI channel (1–16). In Note 41 · ch1, Note means a pad or key; letting go of it is called a "note off". PB · ch1 is pitch bend (a wheel or lever), with fine steps — 16384 of them.

Buttons on the Live screen (Start, Stop, TAP, …) and the settings fields can also be assigned: press MIDI in the header, then click the item (assignable items light up blue; clicking one does not perform its normal action — pressing the button, editing the field). Tabs and the settings list on the left still switch normally. Pressing Esc cancels only the current wait if one is running, or leaves the mode if nothing is waiting. One knob may be assigned to several parameters (one fader for the trim of groups 1 and 2, for example).

Once a wait starts, a blue "MIDI assignment" banner appears at the top (it stays visible on any tab). Its current step is one of these three:

StepText
① Before an item is picked① Click an item
② After picking an item, waiting② Move the controller (MIDI · OSC) — waiting for <parameter name>. Stop any OSC source that streams continuously
③ Just assigned (shown for about 3 seconds)③ Assigned: CC 21 · ch1 → <parameter name>

③ normally shows the control and the parameter name, as in the example above. It stays on the plain heading "③ Assigned" only when that information is missing. The right side of the banner shows Esc to cancel. Only when the wait was started from the header's MIDI mode (assigning a Live screen button or a settings field) does it read Esc to cancel / Esc again to leave, and a second Esc leaves the mode entirely.

Once a row has an assignment, its Assign button disappears. To switch it to a different knob or button, press Remove first, then assign again. Clicking a row opens an editor below it (a knob's Min / Max and Invert, and the Mode of a switch target — 18.5), but only for rows that already have an assignment. Switching the list's "Assigned only" filter on the top left shows just the rows that have an assignment (it is remembered even after reopening the page).

18.2 Parameters you can assign

The list is ordered: Level → Bars → Target & TP → BPM & beat → Measurement & presets → Test signal → Values sent to XPression. There is one group row per group in use, and one preset row per saved preset.

GroupParameterBehaviourValue
LevelTrim of each group (e.g. "Main trim", "Group 2 trim")KnobLive only (18.4)
LevelBand of each group (Full → Low → Mid → High)Switch (18.5)Live only. Only that group's Integrated, LRA and TP max are reset; the audio is not interrupted
BarsBar minimum / maximum, smoothing, fall time, peak minimum / maximum, peak fall, peak holdKnobLive only
Target & TPTarget loudness, TP limit, TP Over hold timeKnobLive only (the bar marker on the Live screen and the "Target / TP" line on the rail follow the moved value)
BPM & beatBPM value; TAP, Sync, ×2, ÷2, AdoptKnob / buttonSaved like TAP (chapter 16)
BPM & beatAuto follow, time signature (2→3→4→6), group used for detection (1→2→…)SwitchSaved like the on-screen controls (once, about 1 second after the last change)
BPM & beatbeat length, beat_hit decayKnobLive only
Measurement & presetsStart, Stop, Reset; "Set as reference" of a group; loading a venue presetButtonSame as the on-screen buttons
Measurement & presetsStart measuring at launchSwitchSaved when pressed
Test signalOn / offSwitchSaved, like the checkbox (18.5)
Test signalType (sine → sweep → kick → pink noise → silence), test signal level, test signal frequency, test signal kick BPMSwitch / knobLive only. The audio is not interrupted
Values sent to XPressions1–s16Knob or button18.6

Parameter names never include a unit. The small text under a name shows "Button" for a button, "Switch" for a switch, the slot's behaviour (0–1, 0 / 1, and so on) for a value sent to XPression, or the range and unit for a knob. For a knob, that range is the mapping's own Min–Max when exactly one mapping exists, otherwise the default range (for example, trim defaults to −20 to +20 dB). In the value column, a + appears on dB-type values (trim, bar/peak maximum, TP limit) when they are positive (e.g. +3.1 dB). Target loudness and the test signal level can only ever be zero or negative, so they never show a plus sign.

Rows that cannot be used (a group not in use, a preset that no longer exists, frequency or kick BPM with a type that does not use them) are greyed out with the reason, but the assignment is kept — you can still remove it with Remove. The input device, channels, number of groups, the XPression address, language and license cannot be controlled by MIDI (changing them interrupts the audio or the connection).

18.3 Last signal

The bar at the top of Settings › MIDI · OSC shows the last message received, e.g. "device knob CC 16 (ch1) value 92 → Bar maximum (loudness): −1.2 dB" (it fades after 3 seconds). When one knob or button is assigned to several parameters, the first one is followed by "(+1 more)" and so on for the rest. A message that is not assigned shows "not assigned to anything yet"; when the value was not applied, the reason is shown (locked, group not in use, preset missing, not used with the current type, used for the assignment). The row of the parameter that moved lights up yellow for 1.5 seconds.

Releasing a button (a note off, for example) does not overwrite this line (except s1–s16 assigned as Momentary) — the moment it was pressed stays shown. An s1–s16 slot assigned as Momentary is the exception: releasing it updates the line to show a value of 0.

18.4 Values set by MIDI (live only)

Trim, bar ranges and the like moved by MIDI are not saved. The fields on the Settings tab keep showing the saved values, and a badge such as MIDI −12.0 appears next to the field (choices such as the band or the test signal type show text, e.g. "MIDI Low"). The "Current value" column of the list is shown in yellow too. Click the badge, or use the row buttons, to choose:

ButtonWhat happens
Save this valueTakes the MIDI value into the saved settings, saves, and removes the badge (the field changes too)
ClearDiscards the MIDI value and returns to the saved value

MIDI values are also cleared when a venue preset is loaded and when OtoMotion restarts (back to the saved values). Apply and save does not clear them (fixing the target address during a show does not undo what you set with the knobs). If you edit and save a field that has a badge, the saved value changes but the MIDI value stays in effect (press Clear to use the field's value).

If you moved a trim knob within the last 3 seconds, "Set as reference" calculates with a mix of the old and new trim. Leave the knob still for about 3 seconds before pressing it.

18.5 Switches, the test signal and the band

Band, time signature, auto follow, detection group, start at launch, and the test signal's on/off and type are "switches". An assignment has one of two modes (change it in the row editor).

ModeBehaviour
Next on each press (default for note and CC — including a knob sending CC)Each press goes to the next option (after the last, the first; on/off flips)
Select with knob (pitch bend has no other mode)The knob position is divided evenly among the options (on/off: on from the middle up)
Many controllers send their buttons as CC too, so OtoMotion cannot tell a knob from a button. That is why CC defaults to Next on each press: a CC only counts as one press the moment its value crosses from below 64 up to 64 or more (it must drop back down and rise again before it counts as a second press). This applies whether the CC is a fader assigned to a switch such as the band or auto follow, or a knob assigned to a button target such as TAP or Start — turning the knob all the way up only advances one step. To have the knob's position chosen directly, change that row's mode to Select with knob in its editor. Pitch bend reports its position directly, so it has no other mode.
For the detection group and the band, a button (Next on each press) is recommended. With a knob, every group or band you pass through restarts detection or resets the measurement (not while staying within the same step).

18.6 Values sent to XPression (midi › s1–s16)

Sixteen values that send MIDI values to XPression as they are, independent of the measurement. A knob gives 0–1 (the range can be narrowed within 0–1 and inverted); a button gives 0 or 1 (1 while held in Momentary mode). They have no names (their use in XPression differs from project to project). In XPression, bind them through DataLinq with Column = midi and Row = s1–s16, like any other key (chapter 10). The current values are shown as bars at the end of the list on Settings › MIDI · OSC.

18.7 Connected devices

The bottom of Settings › MIDI · OSC lists the MIDI inputs found. A device seen for the first time is set to Listen. Untick devices you don't use; their messages are then ignored (and stay off next time). The dot lights up when a message arrives.

StatusMeaning
Listening (green)Messages from this device are received
Not listening (tick to listen)Listen is turned off
Not connectedA device seen before is not present now. After plugging it back in, open Settings › MIDI · OSC again (this version does not reconnect automatically)
In use by another appOn Windows only one app can open a MIDI input. Close the DAW or other app, then open Settings › MIDI · OSC again
Two devices with the same name are not distinguished (messages from both drive the same assignments). On Windows the trailing number in a device name (the "1" in nanoKONTROL2 1) is ignored, so assignments keep working even if another device is plugged in first. Right after turning Listen back on (about 0.2 s) the first message may be lost.

18.8 Notes

19. OSC (send and receive)

OSC (Open Sound Control) is the UDP message format that video, lighting and control apps exchange over a LAN. OtoMotion can send (the same values it sends to XPression, to Resolume, TouchDesigner, lighting consoles, Ross Vertex and others) and receive (be controlled from TouchOSC, Bitfocus Companion, Vertex and others). Settings live in osc.json (same folder as the settings) and are not part of venue presets. It is a separate output from XPression; neither affects the other.

Terms: an address is a string destination such as /otomotion/g1/mbar; an argument is the value (a number or text) sent with it; a port is the number (1–65535) that tells apps apart on the same IP. OSC rides on UDP, which has no acknowledgement. "Sending" on screen means packets leave this PC; it does not mean the other side received them. "Nothing is listening there" only appears in some cases, such as when the receiving app is not running on a PC in the same LAN.

19.1 Sending: add a destination

  1. In Settings › Send OSC, press + Add destination (up to 16)
  2. Enter the IP (IPv4 digits only; host names are not accepted) and port (Resolume's default is 7000). Click the heading to rename it (empty shows IP:port)
  3. Choose per second (1–60, default 30). 15–30 is recommended for an iPad (TouchOSC) on Wi-Fi
  4. Tick Send to the left of the name to start sending. Every change is saved at once. A newly added destination has "Send everything" on by default, so if you only want "Added addresses" (for example sending to a lighting console), untick it

Each destination can use "Send everything" (fixed names, everything; 19.2) and "Added addresses" (any value to any address and range; 19.3). Broadcast (a special IP that reaches every device on one subnet at once, e.g. 192.168.1.255 reaches everything on 192.168.1.*) also works. On a PC with several interfaces (wired, Wi-Fi, virtual adapters) 255.255.255.255 only leaves one of them, so use the subnet broadcast. If two OtoMotion PCs send to the same device, give each a different address prefix (/otomotion_a, /otomotion_b).

19.2 Addresses and values of "Send everything"

Addresses follow the XPression tree (chapter 11): under the prefix (default /otomotion) come groups g1–g8, the beat beat, the MIDI slots midi, and the common keys (time, status, running, elapsed, target). seq is not sent (180 addresses). Values that go to XPression as text (M, S, I, LRA, TP) go over OSC as numbers.

AddressTypeRange / meaning
/otomotion/g1/mbar and the other 5 barsFloat0–1
/otomotion/g1/m, s, iFloatLUFS. −120 = silence (−∞)
/otomotion/g1/tp, tpmaxFloatdBTP. −120 = silence
/otomotion/g1/lraFloatLU
/otomotion/g1/diff_i, diff_sFloatDifference from target (LU). −120 when I/S is silent
/otomotion/g1/on, tpover, /otomotion/runningInteger0 / 1
/otomotion/g1/name, band, /otomotion/status, time, elapsedTextText (use OSC In DAT in TouchDesigner)
/otomotion/beat/bpm and the other 14 beat keysFloat / IntegerAs in chapter 16. beat, beat_square, downbeat, beat_count, beats_per_bar are integers
/otomotion/midi/s1–s16Float0–1 (18.6)
/otomotion/targetFloatTarget LUFS (effective value)

Values are sent on change (a difference under about one-millionth counts as unchanged), and in addition every key is re-sent gradually over one second, so a receiver started later has everything within about a second. Unused groups send only /gN/on (0); when you reduce the number of groups, that group's values (bars 0, levels −120, empty text) are sent once. One value per message (OtoMotion does not use "bundles", OSC's way of grouping several messages into one packet). On exit, only destinations that have both Send and Send everything on, with a host set, receive once: /otomotion/status "offline", running 0, the 6 bars at 0, M, S and TP at −120, tpover 0, the 4 beat keys at 0 and the 16 slots at 0 (gN/on, BPM, I, LRA, TP max, name, band, target and added addresses are not sent; nothing at all is sent while locked).

The bottom of the page lists every address "Send everything" sends, each with a Copy button, for wiring up XPression or another app.

19.3 Added addresses: any value to any address

Add rows to the table in the destination card (up to 64). Choose the value (numeric keys only, shown with the source range, e.g. "Main › M bar (0–1)"), the address (anything starting with /), the range (min and max, e.g. 0–1, 0–100, 0–255; min > max reverses the direction; min and max cannot be equal — both fields turn red and nothing is saved), the type and when to send. Values outside the source range are clamped before mapping.

TypeSent as
Floatfloat (OSC's decimal type)
Integerint (OSC's whole-number type; rounded; the range's min and max must be within −2147483648 to 2147483647)
Number as texttext with two decimals (for Companion's /custom-variable/…/value when it only accepts text)
Fixed textthe text in the field, as is (grandMA3 /gma3/cmd with Go+ Sequence 1; trigger only)
No valuea message with no argument (Eos /eos/key/go_0 means "press and release"; trigger only)

Examples: for the opacity of a Resolume layer, value "Main › M bar", address /composition/layers/1/video/opacity, range 0–1, Float, on change. For an Eos submaster, /eos/sub/1, range 0–1, Float (for UDP on Eos enable String RX/TX in Setup › Show › Show Control and UDP Strings & OSC in the ECU; ports 8000/8001 or 4703–4727 are recommended). For a grandMA3 fader, /gma3/Page1/Fader201, range 0–100, integer. For a Companion variable, point the destination at Companion's IP:12321 and use /custom-variable/bpm/value (use "Number as text" to show it on a button; Float also works, but OSC floats are 32-bit, so 0.3561 shows up as 0.3560999929904938). Vertex registers addresses in an OSC Receiver Device and reads decimal values (turn off "Send everything" for Vertex; see 19.9).

When: "On change" (default) sends only when the mapped value differs from the last one sent, with no one-second re-send (so OtoMotion does not fight a fader the operator moved on the console). A receiver started later therefore gets nothing until the value changes (e.g. g1/on, BPM). "Every time" sends at the destination's rate. "Trigger" is 19.4. Do not point a destination at your own receiver (this PC's IP:8831); the values would come back to you.

Entering a value of the wrong shape turns that field red and nothing is saved; a line below names the destination, row and column, e.g. "The request was malformed (Added address row 2 › Address)". A destination's own fields (IP, port and so on) turn red the same way.

19.4 Trigger (fire a clip on the beat)

Sends only at the moment the chosen value rises from below 0.5 to 0.5 or more (beat, downbeat, tpover and so on). The edge is checked 60 times a second regardless of the destination's rate, so a rate of 10 or less does not miss beats.

The Trigger shape column only exists when the type is Float or Integer, and there are two choices:

Trigger shapeBehaviourSuits
1 then 0 (default)Sends the maximum at the edge and the minimum on the next tick (about 17 ms later)Resolume …/clips/1/connect (1 then 0 acts as mouse-up), grandMA3 keys
1 onlySends only the maximumReceivers that reset themselves

Fixed text and No value are not trigger shapes — they are type choices (19.3), and a row using either shows "—" in the Trigger shape column. Both behave the same way: at the rising edge, OtoMotion sends that one message (the fixed text, or a message with no argument) and nothing afterwards — no 0 follows — which suits a "press and release" receiver such as Eos's /eos/key/go_0.

19.5 Destination status

ShownMeaning
Not sending (grey)The checkbox is off
Sending N /s · M msg/s (green)Packets leave this PC. "/s" is the number of send ticks (close to the configured rate; rates that do not divide 60, such as 7, wobble a little), "msg/s" the number of messages actually sent
Cannot send (nothing is listening there) (red)For example the receiving app is not running on a PC in the same LAN. OtoMotion keeps sending, so the values arrive as soon as the app starts
Cannot send (reason) (red)Socket error, broadcast not permitted and so on. The socket is recreated after one second

While locked, the screen shows only the license page: OSC does not send, and received messages are not applied (only the fixed /otomotion/clear/… addresses still work while locked; see 19.7). Settings and assignments are kept, and everything works again once a license is loaded (the same as 18.8).

On a Mac (macOS 15 and later), sending to the LAN needs the "Local Network" permission. Allow it in the dialog shown the first time; if denied, the status reads "Cannot send (nothing is listening there) Allow OtoMotion in System Settings › Privacy & Security › Local Network".

19.6 Receiving: port and IP

In Settings › MIDI · OSC, tick Receive in the "Receive OSC" card. The default port is 8831 (it cannot be the monitor page's port; if the monitor page uses 8831, the first default becomes 8832). In the app, enter "This PC's IP" and the port (when several IPs are listed, pick the one on the same network as the device; a virtual adapter's IP may appear).

ShownMeaning
Not receiving (tick to receive)Receive is off
Receiving (port N)Listening on that port
Port N is in use by another appThat port is already used by another app; change the number. Once that app is closed and the port is free, untick and re-tick Receive to try the same port again (it is not retried automatically)
Cannot open the receiver (reason)Any other error

While locked, the screen shows only the license page: OSC does not send, and received messages are not applied (only the fixed /otomotion/clear/… addresses still work while locked; see 19.7). Settings and assignments are kept, and everything works again once a license is loaded (the same as 18.8).

Only the first argument is used. Numbers, text and button presses from ordinary apps are read as expected (uncommon types are ignored). A "bundle" (several OSC messages sent together as one packet) is unpacked, and each message inside it is handled on its own. Addresses must match exactly, including case (patterns such as /otomotion/bpm/* are not expanded).

19.7 Fixed addresses (work without assigning)

While receiving is on, every row in Settings › MIDI · OSC shows its address (Copy copies it). Enter that address in the app and it works without assigning.

AddressArgumentAction
/otomotion/control/start, stop, resetbuttonStart, stop, reset measuring
/otomotion/bpm/tap, sync, double, half, adoptbuttonTAP, sync, ×2, ÷2, adopt
/otomotion/bpmnumber 30–300BPM value (saved after one second)
/otomotion/bpm/auto1 / 0Auto follow
/otomotion/bpm/bpb2, 3, 4, 6Time signature
/otomotion/bpm/source1 to the number of groupsGroup used for detection
/otomotion/set/g1/gain (g1–g8)dB −40 to +40Group trim (live only; 18.4)
/otomotion/set/g1/bandfull, low, mid, high, or 1–4Band (live only). Vertex cannot send text, so use the number
/otomotion/set/bars/lufs_lo and the other 7in its unitBar behaviour (live only)
/otomotion/set/meter/target_lufs, tp_limit_dbtp, tpover_hold_sin its unitTarget and TP (live only)
/otomotion/set/beat/beat_pulse_ms, hit_decay_msmsBeat length and decay (live only)
/otomotion/set/test/kind, level_dbfs, freq_hz, kick_bpmkind: sine, sweep, kick, pink, silence or 1–5; others in their unitTest signal (live only)
/otomotion/save/g1/gain etc. (same items as set/)button[Save this value]. "No live value to save or clear" if nothing is overridden
/otomotion/clear/g1/gain etc.button[Clear] (works while locked too)
/otomotion/calibrate/1 (1–8)button"Set as reference". Keep the sound steady for about 3 s first. Silence gives "No signal"
/otomotion/presetpreset name (text, exact)Load a venue preset (reopens the audio input; take care during a show)
/otomotion/preset/numbernumber from 1The Nth preset in the list (numbers shift when presets are added or deleted)
/otomotion/test/enabled1 / 0Test signal on/off (saved; reopens the audio input)
/otomotion/auto_start1 / 0Start measuring at launch (saved)
/otomotion/slot/1 (1–16)0–1Values sent to XPression as midi › s1–s16

Buttons count one press for no argument or a number of 0.5 or more (the 0 a TouchOSC button sends on release does nothing). 1 / 0 means on for 0.5 or more, off below (not a toggle). Numbers outside the range do nothing and "Last signal" shows the reason, e.g. "Out of range (30–300)". Sending text instead of a number, or a value that cannot be read as a number at all (such as a malformed decimal value), also shows "wrong argument type". Integer addresses accept decimal values such as 4.0. Text must match exactly (Low is not accepted). The effect is the same as moving the parameter by a MIDI assignment, including "Last signal" and the highlighted row.

19.8 Assigning (the same [Assign] as MIDI)

To use an app control of your own choosing (TouchOSC's /1/fader1 and so on) instead of a fixed address, assign it as in 18.1: press Assign on the row, move the control in the app, and the first address that arrives is assigned; the row gets a purple badge "OSC /1/fader1".

19.9 Examples

These combinations were checked with OtoMotion and the other app running on the same Windows 11 PC (October 2026; the app version is in brackets in each heading). If the apps run on different PCs, replace 127.0.0.1 with the IP of the other app's PC (when OtoMotion sends) or of the OtoMotion PC (when the other app sends).

Resolume (Arena 7.28): drive a layer's opacity with the level

  1. Resolume: in Arena › Preferences › OSC, turn on OSC Input and set Incoming Port to 7000
  2. OtoMotion: in Settings › Send OSC, add destination 127.0.0.1, port 7000, and tick Send
  3. Add one row under Added addresses: value "(group name) › M bar", address /composition/layers/1/video/opacity, range 0–1, type Float, send On change

Layer 1's Opacity follows the sound. To find a Resolume address, choose Shortcuts › Edit OSC and click the parameter; the address appears in the Shortcuts panel at the bottom right. Resolume's own Learn (remember the incoming address) is unreliable while "Send everything" streams 180 addresses, so sending straight to Resolume's address from OtoMotion, as above, is the recommended way. Preferences › OSC › Monitor shows the addresses and values that arrive.

Resolume: trigger a clip on the beat

Add one more row to the same destination: value "Beat › Beat", address /composition/layers/2/clips/1/connect, range 0–1, type Integer, send Trigger, trigger shape "1 then 0". The first clip of Layer 2 restarts on every beat (19.4). Check first that the BPM matches the music (chapter 16).

TouchDesigner: receive the values as channels

  1. OtoMotion: add destination 127.0.0.1, port 7000, and tick Send everything and Send. If you also need the text values, add a second destination on port 7001
  2. TouchDesigner: add an OSC In CHOP with Network Port 7000
  3. For the text values, add an OSC In DAT with Network Port 7001

The OSC In CHOP lists the numeric values (otomotion/g1/mbar, otomotion/beat/beat_phase and so on) as channels; pick what you need with a Select CHOP (Strip Name Prefix removes /otomotion). The text values (time, status, elapsed, group names, bands) are silently dropped by the OSC In CHOP (they do not become 0 or an error), so read them with the OSC In DAT. One port can be received by only one operator, so give the CHOP and the DAT different ports.

Bitfocus Companion (v5.0.7): show the BPM on a button

  1. Companion: in Settings › Protocols, turn on OSC Listener (port 12321). In Variables › Custom Variables, create a variable bpm
  2. OtoMotion: add destination 127.0.0.1, port 12321, untick Send everything and tick Send
  3. Add one row under Added addresses: value "Beat › BPM", address /custom-variable/bpm/value, range 30–300, type Number as text, send On change

The BPM goes into the Companion variable $(custom:bpm), which you can use in button text. If the range stays at the default 0–1, the BPM range 30–300 is scaled to 0–1 (to send the BPM as it is, set the range to the original 30–300). Float also works, but OSC floats are 32-bit and show extra digits.

Bitfocus Companion (v5.0.7): control OtoMotion from buttons

  1. OtoMotion: in Settings › MIDI · OSC › Receive OSC, tick Receive (port 8831). If you use "Accept only from", include 127.0.0.1
  2. Companion: in Connections, add Generic: OSC with Target Hostname or IP 127.0.0.1, Target Port 8831, Protocol UDP
  3. Add actions like these to a button's Press actions
Companion actionOSC PathValueWhat OtoMotion does
Send message without arguments/otomotion/bpm/tap—TAP (press at a steady pace to change the BPM)
Send integer/otomotion/bpm/bpb3Time signature 3/4
Send string/otomotion/set/g1/bandlowGroup 1 band set to Low (live only)
Send message without arguments/otomotion/control/start—Start measuring

To check what arrived, look at "Last signal" at the top of Settings › MIDI · OSC (for example OSC 127.0.0.1 /otomotion/bpm/bpb 3 → Time signature: 3/4) and "Last sender" under Receive OSC. All addresses are listed in 19.7.

Ross Vertex (Trial 2026.02.23): drive a clip's opacity with the level

  1. Vertex: check that System1 under Project Explorer › Systems is connected (while it shows Disconnected, OSC devices neither receive nor send; connect it before use)
  2. Vertex: in Library › Devices, search for "OSC" and add an OSC Receiver Device. In the Inspector set IP Port to 8000 and enter /vertex/opacity as the Address of Values › Osc Address 1
  3. OtoMotion: add a destination with the Vertex PC's IP and port 8000, untick Send everything and tick Send
  4. OtoMotion: add one row under Added addresses: value "(group name) › M bar", address /vertex/opacity, range 0–1, type Float, send On change. When values arrive, they show in Received Value of Osc Address 1 in Vertex
  5. Vertex: right-click the clip on the timeline › Pin to new Inspector › Clip to open an Inspector for that clip (it may open at the edge of the screen)
  6. Drag Opacity from that clip Inspector onto the Source field (the checkered field) of Osc Address 1 of the device

The clip's opacity now follows the sound. Note:

Ross Vertex (Trial 2026.02.23): switch OtoMotion from Vertex

  1. OtoMotion: in Settings › MIDI · OSC, tick Receive (port 8831)
  2. Vertex: in Library › Devices, add an OSC Sender Device. In the Inspector enter the OtoMotion PC's IP as IP Address and 8831 as IP Port. Turn Use Message Prefix off (when on, text is added before the address and OtoMotion rejects it)
  3. In Project Explorer, right-click the Sender › Add Float Property, then enter /otomotion/set/g1/band as Address and 2 as Value

Group 1's band in OtoMotion switches to Low (1 = full range, 2 = low, 3 = mid, 4 = high). Vertex cannot send text, so use the numeric addresses for band, test signal type and presets (19.7). Put the value on the timeline or in a cue, and OtoMotion's measurement changes together with Vertex's show cues.

Other apps: setup guide

19.10 What to expect during a show, and notes

XPression, Vertex, Resolume, TouchDesigner, Bitfocus Companion, TouchOSC and other company and product names in this manual are trademarks or registered trademarks of their respective owners. OtoMotion is an independent product and is not affiliated with these companies. The steps in 19.9 were checked with the versions available in October 2026; menus and steps may change in later versions of those apps.

OtoMotion — dekobokotech.com