Integrations
BrainFlow boards
Supported, Beta and Legacy items are labelled per row. This page describes Studio 1.8.2. BrainFlow behaviour is the same in the public 1.7.3, except the Studio log location noted below.
neuromore Studio bundles the open-source BrainFlow library. One “BrainFlow” node gives access to about twenty boards: it takes a Board ID and connection parameters, creates the device and exposes its EEG channels as output ports in the classifier. Only boards with EEG channels deliver data, which is 16 of the 21 board IDs.
Devices with their own native driver are covered in Devices and Biosensors. The native OpenBCI driver covers the Cyton and the Cyton plus Daisy. BrainFlow is a separate path to those two boards, with its own serial code, and the only path to Ganglion, Galea and the WiFi Shield variants.
Use one path for a Cyton board. The native OpenBCI driver is on by default and probes matching serial ports every second, so it can hold the port a BrainFlow or Cyton node needs. Before you use a Cyton or CytonDaisy through BrainFlow, turn off NMStudio > Settings > Devices > Automatic Device Search. This setting applies to all drivers. Turning it off stops new scans, but it does not release a board the native driver has already found, and the node can then show Device not connected. If the board already appears in the Devices window, turn the setting off, quit Studio, then start it again. The setting is saved, so the scan stays off at the next start. Unticking Enable OpenBCI Devices does not stop the scan. Turning off Automatic Device Search also shows the Search button, and pressing it can remove a BrainFlow device. See Devices window and log file.
Version and platforms
Section titled “Version and platforms”The project’s dependency list names BrainFlow 4.0.1. It is compiled from source as static libraries, was last updated in 2021, and is part of the community builds on every platform: Windows x64, x86 and arm64, macOS x64 and arm64, Linux amd64, i386, arm64 and armhf. A board can still be limited by its operating-system support inside BrainFlow, or by a closed vendor library that ships only for some platforms.
The driver is on by default: NMStudio > Settings > Devices > Drivers > Enable BrainFlow Driver. Leave it on. Turning it off stops Search and sensor updates, but a node still creates its device and opens the board, then shows Device not connected.
Connect a board
Section titled “Connect a board”- In the Classifier window, add a BrainFlow node from the Sensors category of the palette.
- Select the node and set Board ID.
- Fill in the parameters that board needs. See Boards in the dropdown.
- If the board or sender only delivers data once it is running, such as NotionOSC or Fascia, start it first.
- Press Apply.
- Check the node. Once the board connects, the node shows one EEG port plus one port per channel (CallibriEEG has the EEG port only). The node shows Device not connected while the board connects and until its first data arrives. This can take several seconds, and about 15 s by default on boards with discovery, such as Ganglion, BrainBit and Callibri. Look in
brainflow.logonly if the message stays. See Devices window and log file.
The BrainFlow node
Section titled “The BrainFlow node”The node sits in the Sensors category of the palette as “BrainFlow”. Its attributes are:
- Board ID: 21 names, listed below. Default Synthetic.
- Serial port
- MAC address
- IP address: default 192.168.4.1
- IP port: default 50000
- IP protocol: None, UDP or TCP
- Other info
- Timeout
- Serial number
- File
- Apply
What Apply does
Section titled “What Apply does”Editing a field does nothing by itself. Apply reads the fields and opens the board in a background task.
- If the node already has a device with the same board and parameters, nothing happens.
- If the node’s device differs, Studio removes it and creates a new one.
- If another node already has a device with the same board and parameters, the new device is rejected and removed, and the node uses the existing device. The Studio log shows an error for the rejected one.
On success, Studio reads the EEG channel list and creates one sensor per channel, named from BrainFlow’s electrode names. The EEG port is then joined by one port per channel. The sample rate comes from the board description, or 250 Hz if that lookup fails.
If the board rejects the session, for example because of a wrong serial port, the error is logged and the device is removed. The node keeps only its EEG port, carries no data and shows Device not connected. The EEG port exists from the moment you add the node, so a visible EEG port does not mean the board is connected.
Removing a BrainFlow node removes its device.
Catches
Section titled “Catches”- A saved classifier does not reconnect by itself. When you open one, the fields show the saved board and parameters, but nothing connects until you press Apply on each BrainFlow node.
- Apply ignores a change to only Timeout, Serial number or File. Studio’s comparison leaves those three fields out, so on a running device nothing happens. Delete the node and add a new one, or change another field in the same step. Serial number selects the device on BrainBit, Callibri, Unicorn and Notion. For the same reason, two boards of the same type told apart only by Serial number cannot run at once.
- A device with no data for 5 s is removed. This applies once a board has started, for example when it stalls mid-session. The node then shows Device not connected, and you need to press Apply again. A Cyton node has no Apply button, see The Cyton node. The Studio log records this removal only at a detailed Log Level.
- A board with no data at start cannot be retried. When they start, NotionOSC and Fascia wait 5 s for first data, Galea waits 3 s, and Ganglion waits up to its Timeout, 15 s by default. With no data, the start fails, the Studio log shows an error, and the node shows Device not connected. The session stays open, so Apply with the same parameters is rejected until you restart Studio. Start the data source before Apply.
- Unnamed channels. Ganglion, GanglionWifi, CytonWifi, CytonDaisyWifi, CallibriEEG, Fascia, IronBCI and FreeEEG32 have no electrode names in BrainFlow. Their channel ports have blank labels, so identify them by order. Each successful connect also logs an error for the missing names. You can ignore that error.
- Battery low. A running BrainFlow or Cyton node can show this warning on any board, including Synthetic. This path reports no battery level, so the warning says nothing about the real battery.
The Cyton node
Section titled “The Cyton node”A second node named “Cyton” is a fixed-board shortcut for the OpenBCI Cyton. It shows only Serial port and has no Apply button. To retry the same port, delete the node and add a new one, then set Serial port if it is not the default. Changing Serial port to a different value also opens a new device.
| Platform | Default Serial port |
|---|---|
| Windows | COM3 |
| Linux | /dev/ttyUSB0 |
| macOS | /dev/cu.usbserial-DM0258D9 |
The macOS default is the name of one specific dongle, so most Mac users must change it.
The node opens the port as soon as you add it to a classifier, and again when you change the port, so it touches the default port before you can edit it. Opening a saved classifier also opens the default port first, then opens the saved port as a second device. The default port may stay held, so keep other serial hardware off it.
While a Cyton node exists, changing its Serial port replaces its device. Removing the node leaves the device running, and the Devices window has no control to remove a device. After that, the device ends in one of these ways:
- You press Search while it has device ID 0. See below.
- It delivers no data for 5 s.
- You quit Studio.
Devices window and log file
Section titled “Devices window and log file”The Devices window Search button does not scan for BrainFlow hardware. It is hidden by default. To show it, turn off NMStudio > Settings > Devices > Automatic Device Search.
For BrainFlow, Search does one of two things. If a BrainFlow device with ID 0 exists, whatever its board, Search removes it. Otherwise, Search adds a Synthetic device. Pressing Search can therefore disconnect a real board, because the first BrainFlow device gets ID 0. Real boards come only from a BrainFlow node’s Apply or from a Cyton node.
Every connection attempt turns on BrainFlow’s detailed logging and writes brainflow.log to Studio’s per-user application data folder:
| Platform | Folder |
|---|---|
| Windows | %LOCALAPPDATA%\neuromore\NMStudio |
| Linux | ~/ |
| macOS | ~/ |
The Studio log shows only the short error text from BrainFlow. The detailed messages, for example which library file could not be loaded or which parameter is missing, go to brainflow.log, so look there when a board does not connect. The Studio log is in the Logs subfolder of the same folder, with one file per launch. See Local files and troubleshooting.
In 1.7.3: The Studio log is the single file
NMStudio_Log.txt, directly in this folder.
Boards in the dropdown
Section titled “Boards in the dropdown”Supported is used for the Synthetic board, which needs no hardware, and for the Cyton, which also has its own node. BrainBit is Legacy. Every other board is Beta: compiled in, but with no setup notes here. Boards that need a runtime library are also limited to the platforms where that library ships.
Five board IDs cannot deliver data: PlayBack, Streaming, CallibriEMG, CallibriECG and GforcePro. You can select them, but they have no EEG channel list in BrainFlow 4.0.1, so the device is removed after connecting and the node shows Device not connected. See Not covered in this version.
Where a vendor SDK is used, the physical link is handled inside the vendor library, and this page does not state it.
Serial boards on macOS. This affects Cyton, CytonDaisy, the Ganglion dongle, IronBCI, FreeEEG32 and the Cyton node. The packaged macOS app runs in a sandbox, and its permissions cover USB and Bluetooth but do not list serial ports. It may be unable to open a serial port.
| Board | Transport | Node parameters needed | Channels and rate | Extra runtime library | Status |
|---|---|---|---|---|---|
| PlayBack, built in | BrainFlow CSV recording | File, Other info | none; cannot deliver data | none | Beta |
| Streaming, built in | Multicast UDP client | IP address, IP port, Other info | none; cannot deliver data | none | Beta |
| Synthetic, built in | Generated in process | none | 16 at 250 Hz | none | Supported, default |
| Cyton, OpenBCI | Serial, USB dongle | Serial port | 8 at 250 Hz | none | Supported; also the Cyton node |
| Ganglion, OpenBCI | Bluetooth LE, Bluegiga dongle on a serial port | Serial port; MAC address, Timeout optional | 4 at 200 Hz, unnamed | GanglionLib; Windows x64 and x86 | Beta |
| CytonDaisy, OpenBCI | Serial, as Cyton | Serial port | 16 at 125 Hz | none | Beta |
| Galea, OpenBCI | UDP to the board’s IP | IP address | 10 at 250 Hz | none | Beta |
| GanglionWifi, OpenBCI WiFi Shield | HTTP plus TCP; discovery if IP address empty | IP port; IP protocol not UDP; IP address, Timeout optional | 4 at 1600 Hz, unnamed | none | Beta |
| CytonWifi | As GanglionWifi | As GanglionWifi | 8 at 1000 Hz, unnamed | none | Beta |
| CytonDaisyWifi | As GanglionWifi | As GanglionWifi | 16 at 1000 Hz, unnamed | none | Beta |
| BrainBit, NeuroMD | NeuroSDK 1 at runtime | Serial number, Timeout optional | 4 at 250 Hz | neurosdk; Windows x64 and x86; macOS x64 file exists but is not packaged; no arm64; not built for Linux | Legacy; see note below |
| Unicorn, g.tec | Unicorn library at runtime | Serial number optional | 8 at 250 Hz | Unicorn; Windows x64; Linux x64; not built for macOS | Beta |
| CallibriEEG, NeuroMD | NeuroSDK 1 at runtime | Serial number, Timeout optional | 1 at 250 Hz, unnamed; EEG port only | neurosdk; Windows x64 and x86; macOS x64 file exists but is not packaged; no arm64; not built for Linux | Beta |
| CallibriEMG | As CallibriEEG | As CallibriEEG | EMG only, 1000 Hz; cannot deliver data | as CallibriEEG | Beta |
| CallibriECG | As CallibriEEG | As CallibriEEG | ECG only, 125 Hz; cannot deliver data | as CallibriEEG | Beta |
| Fascia, MIT | Local UDP server | IP port | 8 at 500 Hz, unnamed | none | Beta |
| NotionOSC1, Neurosity | OSC over UDP | IP port; Serial number optional | 8 at 250 Hz | none | Beta; see note below |
| NotionOSC2 | As NotionOSC1 | As NotionOSC1 | 8 at 250 Hz | none | Beta; see note below |
| IronBCI | Serial | Serial port | 8 at 250 Hz, unnamed | none | Beta |
| GforcePro, OYMotion | gForce SDK at runtime | none | EMG only, 500 Hz; cannot deliver data | gForceSDKWrapper plus gforce; Windows x64 and x86 | Beta; Windows only |
| FreeEEG32 | Serial | Serial port | 32 at 512 Hz, unnamed | none | Beta |
BrainBit: Legacy via NeuroSDK 1 loaded at runtime. The intended path is the planned NeuroSDK 2 driver, not implemented yet. See BrainBit connection and setup.
Note: NotionOSC1 and NotionOSC2 listen for Neurosity’s OSC broadcast. The node always passes its IP port value, default 50000, not BrainFlow’s own default of 9000. Set IP port to the port your Neurosity sender uses, and check that port in the vendor’s settings.
Studio also has a native OSC-fed Notion and Crown device; see the Neurosity section of Biosensors. Use one path at a time, or give them different ports. The native path uses Studio’s NMStudio > Settings > Network > OSC Server > Input UDP port. If that is the same port as the node’s IP port, the node may fail to open it, and brainflow.log then shows “failed to init socket”.
Vendor libraries
Section titled “Vendor libraries”BrainFlow loads each vendor library from the folder of the Studio executable when the board connects, so a missing library affects only that board. This list comes from the source tree and the packaging makefile. No shipped package was inspected.
- GanglionLib, built with BrainFlow: shipped in the Windows x64 and x86 installers. Built for macOS, Linux and Windows arm64, but not copied into the .app, .deb or arm64 package.
- neurosdk, NeuroSDK 1, closed source: shipped in the Windows x64 and x86 installers. A macOS x64 file exists but is not packaged. Absent for macOS arm64 and Windows arm64. Not built on Linux.
- Unicorn, closed source: shipped in the Windows x64 installer. On Linux x64,
libunicorn.sois copied intousr/libof the .deb, but BrainFlow looks for it in the folder of the Studio executable,usr/bin. Absent for Windows x86 and arm64, Linux x86, arm and arm64. Not built on macOS. - gForceSDKWrapper plus gforce: gforce is closed source, and gForceSDKWrapper is built with BrainFlow from source on Windows. Both ship in the Windows x64 and x86 installers. Absent for Windows arm64. Not built on macOS or Linux. The only board that uses it, GforcePro, cannot deliver data in Studio.
Workaround on Windows and Linux, where a library is not copied: place it next to the Studio executable. brainflow.log names the file BrainFlow tried to load. The closed libraries are in the deps/prebuilt folder of the public source, per platform, and a source build copies what its platform has next to the executable. GanglionLib and gForceSDKWrapper come from a source build. Vendor SDK licensing is not yet confirmed.
On macOS, this workaround may not work. The packaged app is signed, so it may refuse a library added by hand. The only neurosdk file for macOS is x64.
Not covered in this version
Section titled “Not covered in this version”- Boards added to BrainFlow after 4.0.1 are absent, including the Neurosity Crown and Muse via BrainFlow. Studio’s native Crown device is a separate path; see the Neurosity section of Biosensors.
- Upgrading BrainFlow is a build task: a newer version needs its sources, board descriptions and vendor libraries brought into the source tree. See Engine library and source builds.
- Only EEG channels reach the classifier. EMG, ECG, accelerometer and battery groups are not read, so EMG-only and ECG-only boards cannot deliver data, and PlayBack and Streaming carry no channel list in 4.0.1.
- There is no impedance or battery reporting through this path.
- Board settings cannot be changed. Studio sends no configuration commands, so rate, gain and channel settings stay at BrainFlow’s defaults.