Streaming to a computer (LSL)#

Lab Streaming Layer (LSL) lets recording and analysis software on a computer receive the live signal from a streaming headset over your local network. Tools that consume it include LabRecorder, MNE-LSL, OpenViBE, BCI2000, MATLAB, and Python via pylsl. The outlet is controlled from the Live signal viewer at More → Output → LSL outlet.

Turning the outlet on#

The LSL outlet is off by default — nothing is published to the network until you opt in. To turn it on, open the viewer, tap More → Output, and switch on LSL outlet. The choice is remembered for next time.

Warning

Switching the outlet on publishes that headset’s raw EEG to every LSL client on the network you are joined to, for as long as it streams — any client on that network can pick it up. Keep it off on shared or public networks, and turn it on only when you need it.

What is advertised#

While the outlet is on, the headset advertises a single stream:

Property

Value

Stream name

BrainAccess <MODEL> — for example BrainAccess MAXI

Source ID

A random ID for this headset that stays the same until the app is closed — not the headset’s address or serial number. It is what lets recorders reconnect to the same stream after a restart (see below)

Type

EEG

Channels

Your active EEG channels; then Accel_x, Accel_y, Accel_z on headsets with an accelerometer (MINI, MIDI, MAXI, EXG8); then Gyro_x, Gyro_y, Gyro_z on headsets with a gyroscope (EXG8); then one contact_<name> channel per EEG channel

Channel labels

Your electrode names, with unit microvolt (type EEG). Accelerometer channels are in m/s^2 (type Accel) and gyroscope channels in deg/s (type Gyroscope) — the same units the BrainAccess Python API delivers. Contact channels carry 1 when the headset reports that electrode as connected, otherwise 0 (type contact, unit value) — the same companion channels BrainAccess Board publishes, so Board gates the traces by contact when it receives this stream and shows the accelerometer in its motion (ACC) panel

Sample rate

The configured rate (250 or 500 Hz)

Sample format

32-bit float

Manufacturer

Neurotechnology

Output mode

output_mode in the stream description: normal, or test_signal while the headset streams its built-in test signal (a diagnostic; the channels then carry a square wave, not EEG)

Requirements#

  • The phone and the computer must be on the same Wi-Fi network / LAN, and that network must allow multicast and direct connections between clients (many guest and captive networks block this).

  • Keep the app running. Streaming continues with the screen off while the ongoing notification is present.

  • Data pushed to LSL is the raw signal — display filters do not apply.

Notes#

  • Two headsets of the same model advertise the same stream name; tell them apart by the source ID, the channel labels, or by connecting one at a time.

  • Recorders reconnect by themselves. LSL recorders such as LabRecorder reconnect to a stream that comes back with the same name, source ID and channels, and keep writing the same file. The app keeps all three whenever it can: stopping and starting the stream, running a contact check and returning to the stream, reconnecting the headset after a dropout and streaming again, and switching the outlet off and on all bring back the same stream. Changing the channel set in Config makes a different stream, and closing the app gives the headset a new source ID — start a new recording on the computer after either.

  • If sending to LSL fails, the app drops that packet and keeps the outlet. If it keeps failing, the app restarts the outlet with the same source ID and settings and tells you; the computer’s recording has a gap of about two seconds while it reconnects. Only if the restart also fails is the outlet switched off. A failure never changes your LSL outlet setting.

  • If the network drops out, consumers stall and resume when it returns; the app cannot see this. If a consumer stops receiving, toggle LSL outlet off and on again.

See also#