Lab Streaming Layer (LSL) is a tool used in neuroscience and psychology experiments to send and synchronize information (like event markers) between different programs and devices.

Think of it like a shared clock and messaging system for your experiment.

For example:

  • You show a picture to a participant (in E-Prime, PsychoPy, etc.).

  • At that exact moment, you want to tell your EEG system: “This is when the picture appeared!”

  • LSL sends that message—called a marker—to NIC2, the software that controls the EEG.

By doing this, your brain data and your experimental events are perfectly aligned in time. 

To ensure that markers are received and timestamped correctly in NIC2:

  • LSL stream name must match:
     The name you assign to your LSL outlet (e.g., in E-Prime or a Python script) must be exactly the same as the one defined in NIC2’s marker configuration. This is case-sensitive.

  • Marker data type:
     NIC2 can only receive markers in two formats:

    • Integer (int32)

    • Numerics Strings

      •  Do not send marker names as objects like “hand”.

  • Initialize the LSL outlet before NIC2 connects:
     The LSL stream must be created and available before starting the NIC2 protocol, or NIC2 will not find it.



The most frequent errors are the following ones:


  • NIC2 only reads numbers that must be in int32 or string. You can’t send names or similar.


  • LSL outlet not correctly initialized in NIC2. The name must be the same in both sites.


Here you must put the same name. For each LSL Label.



  • Send markers using a LSL name that is replicated. You shouldn’t create two LSL labels with the same name in this case NIC2 only listens to the first one that it receives.


  • Wrong marker timing (offset/drift):
    Especially in wireless setups, markers may appear at the wrong time. This is often due to:

    • Lack of proper LSL clock synchronization

    • Missing time correction for drift or latency

    • Using a protocol in NIC2 that doesn’t include LSL synchronization options