Skip to content

Integrations

BrainBit test workflow

R&D

R&D. Everything here is for research and development exploration. Named web platforms are examples only, not confirmed integrations.

Run the Browser test workflow first. It checks the browser path from Studio to the Chrome extension without any BrainBit hardware. This page then swaps in a BrainBit device through an OSC bridge process on a Windows x64 PC, so you can tell a device or bridge problem from a browser-path problem. Finish each phase and its “Validate” list before the next one. See also BrainBit browser neurofeedback (R&D), BrainBit connection and setup and BrainBit constraints.

Item Requirement Status
Browser path The Browser test workflow passes on this PC, at least Step A (synthetic signal) with its browser session: volume and brightness follow the classifier value. Supported (path), Beta (extension)
Operating system Windows 10 or later, x64. A bridge is a separate process that follows the vendor SDK, so macOS or Linux is possible in principle, but this page does not cover them. Supported
Bluetooth Bluetooth LE adapter. The vendor SDK needs it. Studio has no Bluetooth role on this path. R&D
Browser Google Chrome. Beta
neuromore Studio This page describes 1.8.2. The latest public release is 1.7.3 (Studio-1.7.3-win-10-x64.msi on GitHub releases), see What changed since 1.7.3. Supported
Account Studio requires a neuromore account, see Editions and licensing. Studio sends session details to the neuromore cloud when a session ends. Whether physiological data is uploaded depends on your account. See the Privacy Policy. Supported
Extension The neuromore Chrome extension loaded unpacked, see Chrome extension guide. Beta
BrainBit device Preferably the 4-channel headband (T3, T4, O1, O2; 250 Hz, Bluetooth LE). The Flex 8 (8 channels, 250 Hz, vendor data) has no supported path today; see BrainBit constraints. R&D
OSC bridge Python 3, the vendor package pyneurosdk2 (NeuroSDK 2), and an OSC library for sending messages. neuromore supplies no reference script yet, so phase 3 cannot be run until you have written a bridge. R&D

Validate:

  • The Browser test workflow passed and you noted its result.
  • After pip install pyneurosdk2, the command python -c "from neurosdk.scanner import Scanner" runs without an error. The package installs as pyneurosdk2, but it imports as neurosdk.
  • The extension is listed in chrome://extensions and its icon is pinned.

The vendor’s Developer Zone has the device documents and the SDK guides. Follow them where they differ from these steps.

  1. Charge the device and clean the electrodes, as the vendor describes.
  2. Put it on so that the electrodes and references touch the skin, then switch it on.
  3. Start without a Windows Bluetooth pairing. If phase 3 fails, try the other way and note the result in phase 5.
  4. Switch off other BrainBit devices nearby, so the bridge cannot pick the wrong one.
  1. Start neuromore Studio and sign in.
  2. Open NMStudio > Settings and select Network.
  3. In the group “Websocket Server”, check that “Listen TCP Port” is still 4547, as in the Browser test workflow. The extension always connects to ws://127.0.0.1:4547, and it has no setting for this.
  4. In the group “OSC Server”, check that “Input UDP port” is 4545 (the default). The bridge sends to this port.

Validate:

  • “Listen TCP Port” is 4547 and “Input UDP port” is 4545.
  • No other program uses UDP port 4545. For all ports, see Browser constraints.

Phase 3: classifier with BrainBit through an OSC bridge

Section titled “Phase 3: classifier with BrainBit through an OSC bridge”

Status: R&D, not implemented. neuromore supplies no reference bridge script yet, so this phase and phase 4 cannot be run until you have written a bridge. Record that in phase 5. neuromore Studio has no native BrainBit driver (Planned). Today, live BrainBit data reaches Studio through a legacy board on the BrainFlow node, which is not part of this workflow, see BrainFlow boards.

The bridge connects to the device with NeuroSDK 2 and sends the samples to Studio on the same PC. More design notes are in BrainBit connection and setup.

  • Addresses. Send each electrode to its own OSC address. NeuroSDK 2 names the headband’s values O1, O2, T3 and T4, so this page uses /O1, /O2, /T3 and /T4.
  • Format. Send one OSC message per channel per sample to 127.0.0.1:4545, each with one 32-bit float argument. Studio reads an argument of another type, such as a double, as a sample of 0, with no error, which gives a flat line.
  • Scale. NeuroSDK 2 delivers volts. Multiply each value by 1,000,000 and send microvolts. OSC Input does not scale values, the Signal View window labels its range with 2 decimals, and the Remap fields show 4 decimals, so a value of a few microvolts sent as volts would read as 0.00.
  • Rate. Send at a steady rate and spread the samples evenly, even if the SDK hands them over in packets. OSC Input has a small buffer and reports no overflow, so large batches may lose samples with no error.

Open the classifier you built in the Browser test workflow. Keep its Volume Control, Brightness Control and View nodes, and do not rename the first two: the extension matches those names exactly.

A View node’s In port takes one connection. If it is already connected and you connect something else, Studio drops the new connection and shows no message. So always remove the existing connection first: click the connection line to select it, then press Delete.

  1. Delete everything else from the classifier: the Signal Generator, and if you did Step B, its device node and chain. Do not just disconnect a device node. With no device it shows “Device not connected”, and that graph error keeps the Begin Session button disabled. Alternatively, start from a new classifier.
  2. Start the bridge.
  3. From the Input palette tab, add one OSC Input node per channel. Set each node’s OSC address to the address the bridge sends for that channel, and set Sample rate to 250 (default 128). This must match the rate the bridge really sends. An unconnected OSC Input node is inactive, so nodes you do not connect do no harm.
  4. Connect the /T3 node to the View node. Check that the Signal View window (Windows > Add > Signal View, if it is not open) shows a live signal that reacts to jaw clenching, which is usually easier to see on a temporal channel than a blink.
  5. Build the chain /O1 node, then FFT (DSP tab), then Frequency Band (DSP tab, set Band to Alpha, 8 to 12 Hz).
  6. Move the View node’s connection to the Frequency Band output. With the default FFT settings at 250 Hz, the first value appears after about 2 seconds. Watch for a minute and note the range of values you see.
  7. Add a Remap node (Math tab) after Frequency Band. Set Input Min and Input Max to the range you noted, keep Output Min 0 and Output Max 1, and enable the “Clamp Output” checkbox (off by default). Only then does Remap limit its output to 0 to 1. Studio does not clamp feedback values.
  8. Move the View node’s connection to the Remap output and check that the value moves within 0 to 1.
  9. Connect the Remap output to both feedback nodes.
  10. Save the classifier.

Note the Remap range again whenever you change the Studio version. A range noted on one version does not carry over to another.

In 1.7.3: The FFT node defaults to order 7 with no window, so the first band value at 250 Hz appears after about 0.5 seconds. Band values are also scaled differently.

Validate:

  • The Signal View window showed a live signal from the OSC Input node that reacted to jaw clenching.
  • Both feedback nodes receive a value between 0 and 1 and show no “Value not in range” error.
  • The classifier is saved and the graph shows no errors. Graph errors keep the Begin Session button disabled, though some accounts are exempt from this check.

The steps match the session in the Browser test workflow, repeated so the run reads end to end.

Safety: Feedback can change screen brightness and volume quickly. Avoid this setup if you are sensitive to flashing or flickering light. Keep volume moderate. Stop if you feel uncomfortable. To stop feedback, end the session with the stop button in the Session Control window (tooltip “End the Session”), or click Disconnect in the Chrome extension popup.

Lower your system volume before you start. This chain has no smoothing, and an artefact such as a jaw clench can swing the value. If you test with your eyes closed, have the volume low first, because you will not see the page change.

  1. In Chrome, open a page with a <video> or <audio> element and start playback. YouTube is an example, not a confirmed integration.
  2. Click the extension icon, then “Connect”. If the button already reads “Connected”, do not click it again.
  3. In Studio, click the Begin Session button in the Session Control window.
  4. Watch for about a minute. Loudness and page or video brightness should follow your Alpha amplitude. On YouTube the video dims, and on other pages the whole page dims. Closing your eyes usually raises occipital alpha, so try short eyes-closed and eyes-open blocks.
  5. Stop the session with the stop button (tooltip “End the Session”). The page returns to its own volume and brightness. If it does not, reload the page.
  6. Do not navigate or reload the tab during the test. That drops the connection until you click Connect again.

Validate:

  • The popup shows “Connected”.
  • Audible volume and page or video brightness change with the classifier value, and the change tracks the BrainBit signal rather than a fixed pattern.

Note these for every run, including failed ones. To share them, send them to neuromore with Help > Support, which opens an email to neuromore support.

  • Studio version (Help > About).
  • Windows build, Bluetooth adapter, Chrome version, extension download date, Python and pyneurosdk2 versions.
  • BrainBit model, serial number, and firmware version if the vendor app shows it (Studio does not).
  • Whether a manual Windows Bluetooth pairing was needed, harmful or irrelevant.
  • Whether the Browser test workflow passed, whether phase 3 worked, and how long the bridge needed to find the device.
  • The OSC addresses and sample rate the bridge used, and how it scaled the SDK’s values.
  • The Remap Input Min and Input Max you used.
  • Which page you tested and whether volume and brightness reacted.
  • For failures: the Studio log, the bridge console output, and error text from the tab’s Chrome developer console. For more log detail, set NMStudio > Settings > General > Log Level to Debug. Each start writes a new file, Logs/NMStudio_<date>_<time>.txt, in the Studio data folder, see the FAQ.

In 1.7.3: The log is a single file, NMStudio_Log.txt, directly in the Studio data folder. Studio overwrites it on every start, so copy it before you restart.

For browser-side symptoms, rerun the Browser test workflow and see the Troubleshooting table in the Chrome extension guide. The rows below cover the BrainBit and bridge side. The causes on the device side are possibilities.

Symptom Possible cause What to do
Bridge does not find the device Device off, out of range, already connected to another app, or a Windows pairing interfering Close the vendor app, try with and without the Windows pairing, switch the device off and on, retry
No signal on the OSC Input nodes Bridge not running, OSC address mismatch, or “Input UDP port” changed from 4545 Check the bridge console output, compare node addresses with what the bridge sends, reset the port to 4545
Signal flat, or not reacting to jaw clenching Poor electrode contact, or the bridge sends an argument that is not a 32-bit float Refit the device and check the electrodes. Check that the bridge sends 32-bit floats
Signal View labels read 0.00 to 0.00 The bridge sends volts without scaling Multiply the values by 1,000,000 in the bridge
Signal looks wrongly timed, or Alpha does not change with eyes closed The Sample rate of the OSC Input node does not match what the bridge sends, for example the default 128. Nothing corrects this and no error appears. At 128, the Alpha band setting really measures about 16 to 23 Hz Set Sample rate to 250, or to the rate the bridge really sends
Signal has gaps, or the rate looks wrong The bridge sends samples in large batches Spread the samples evenly
Begin Session button stays disabled A graph error, such as “Device not connected” from a leftover device node, “OSC address is not unique”, or “Value not in range” Fix the error shown in the Session Control window and the graph. Delete leftover device nodes, and give each OSC Input node its own address
Browser path worked with the Signal Generator, not with BrainBit Remap range wrong, or “Clamp Output” off, so values leave 0 to 1 Check the Frequency Band range in the Signal View window, adjust Input Min and Input Max, enable “Clamp Output”
Studio’s own audio changes too Volume Control Mode “Studio Volume” Expected, see Browser constraints

Vendor SDK licensing is not yet confirmed.

Licensing: see neuromore Licensing, the Terms & Conditions, the End User Agreement and the Privacy Policy.